ikeh1024のブログ

ZennやQiitaに書くにはちょっと小粒なネタをこちらに書いています

UserDefaultsのplistの場所とリセット

Screenshots

image

image

Code

struct ContentView: View {
    
    // MARK: - Properties
        
    var library: URL? {
        FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first
    }
    
    var preferences: URL? {
        library?.appendingPathComponent("Preferences")
    }
    
    var userDefaultsPlist: URL? {
        guard let preferences,
              let bundleIdentifier = Bundle.main.bundleIdentifier else {
            return nil
        }
        return preferences.appendingPathComponent(bundleIdentifier).appendingPathExtension("plist")
    }
    
    @AppStorage("text") var text = "sample string"
        
    // MARK: - View
    
    var body: some View {
        VStack(alignment: .leading) {
            
            TextField("Enter your text", text: $text)
            
            GroupBox("UserDefaults value") {
                Text(text)
            }
            
            Button("Reset UserDefaults") {
                if let appDomain = Bundle.main.bundleIdentifier {
                    UserDefaults.standard.removePersistentDomain(forName: appDomain)
                }
            }
            .frame(maxWidth: .infinity, alignment: .trailing)
            
            Divider()
            GroupBox("UserDefaults path") {
                Text("\(userDefaultsPlist?.path ?? "")")
            }
            Button("Show in Finder") {
                if let userDefaultsPlist,
                   FileManager.default.fileExists(atPath: userDefaultsPlist.path) {
                    NSWorkspace.shared.selectFile(userDefaultsPlist.path,
                                                  inFileViewerRootedAtPath: "")
                }
            }
            .frame(maxWidth: .infinity, alignment: .trailing)
        }
        .textSelection(.enabled)
        .padding()
    }
}

References