Source code for the WriteFreely SwiftUI app for iOS, iPadOS, and macOS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

60 lines
2.2 KiB

  1. import Foundation
  2. enum WFDefaults {
  3. static let isLoggedIn = "isLoggedIn"
  4. static let showAllPostsFlag = "showAllPostsFlag"
  5. static let selectedCollectionURL = "selectedCollectionURL"
  6. static let lastDraftURL = "lastDraftURL"
  7. static let colorSchemeIntegerKey = "colorSchemeIntegerKey"
  8. static let defaultFontIntegerKey = "defaultFontIntegerKey"
  9. static let usernameStringKey = "usernameStringKey"
  10. static let serverStringKey = "serverStringKey"
  11. #if os(macOS)
  12. static let automaticallyChecksForUpdates = "automaticallyChecksForUpdates"
  13. static let subscribeToBetaUpdates = "subscribeToBetaUpdates"
  14. #endif
  15. static let didHaveFatalError = "didHaveFatalError"
  16. static let fatalErrorDescription = "fatalErrorDescription"
  17. }
  18. extension UserDefaults {
  19. private static let appGroupName: String = "group.com.abunchtell.writefreely"
  20. private static let didMigrateDefaultsToAppGroup: String = "didMigrateDefaultsToAppGroup"
  21. private static let didRemoveStandardDefaults: String = "didRemoveStandardDefaults"
  22. static var shared: UserDefaults {
  23. if let groupDefaults = UserDefaults(suiteName: UserDefaults.appGroupName),
  24. groupDefaults.bool(forKey: UserDefaults.didMigrateDefaultsToAppGroup) {
  25. return groupDefaults
  26. } else {
  27. do {
  28. let groupDefaults = try UserDefaults.standard.migrateDefaultsToAppGroup()
  29. return groupDefaults
  30. } catch {
  31. return UserDefaults.standard
  32. }
  33. }
  34. }
  35. private func migrateDefaultsToAppGroup() throws -> UserDefaults {
  36. let userDefaults = UserDefaults.standard
  37. let groupDefaults = UserDefaults(suiteName: UserDefaults.appGroupName)
  38. if let groupDefaults = groupDefaults {
  39. if groupDefaults.bool(forKey: UserDefaults.didMigrateDefaultsToAppGroup) {
  40. return groupDefaults
  41. }
  42. for (key, value) in userDefaults.dictionaryRepresentation() {
  43. groupDefaults.set(value, forKey: key)
  44. }
  45. groupDefaults.set(true, forKey: UserDefaults.didMigrateDefaultsToAppGroup)
  46. return groupDefaults
  47. } else {
  48. throw UserDefaultsError.couldNotMigrateStandardDefaults
  49. }
  50. }
  51. }