ModelInfo.swift 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright 2020 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. import Foundation
  15. import FirebaseCore
  16. /// Model info object with details about pending or downloaded model.
  17. class ModelInfo: NSObject {
  18. /// Model name.
  19. var name: String
  20. // TODO: revisit UserDefaultsBacked
  21. /// Download URL for the model file, as returned by server.
  22. @UserDefaultsBacked var downloadURL: String
  23. /// Hash of the model, as returned by server.
  24. @UserDefaultsBacked var modelHash: String
  25. /// Size of the model, as returned by server.
  26. @UserDefaultsBacked var size: Int
  27. /// Local path of the model.
  28. @UserDefaultsBacked var path: String?
  29. /// Initialize model info and create user default keys.
  30. init(app: FirebaseApp, name: String, defaults: UserDefaults) {
  31. self.name = name
  32. let bundleID = Bundle.main.bundleIdentifier ?? ""
  33. let defaultsPrefix = "\(bundleID).\(app.name).\(name)"
  34. _downloadURL = UserDefaultsBacked(
  35. key: "\(defaultsPrefix).model-download-url",
  36. storage: defaults
  37. )
  38. _modelHash = UserDefaultsBacked(key: "\(defaultsPrefix).model-hash", storage: defaults)
  39. _size = UserDefaultsBacked(key: "\(defaultsPrefix).model-size", storage: defaults)
  40. _path = UserDefaultsBacked(key: "\(defaultsPrefix).model-path", storage: defaults)
  41. }
  42. }
  43. /// Named user defaults for FirebaseML.
  44. extension UserDefaults {
  45. static var firebaseMLDefaults: UserDefaults {
  46. let suiteName = "com.google.firebase.ml"
  47. // TODO: reconsider force unwrapping
  48. let defaults = UserDefaults(suiteName: suiteName)!
  49. return defaults
  50. }
  51. }