Xcode中重建SwiftUI应用时如何清除窗口大小的用户默认值?
解决方案
方案1:应用启动时自动清除窗口尺寸记录
既然Cmd+R是重启应用,那我们可以在应用启动阶段就把旧的窗口尺寸记录删掉,这样新启动的应用就会用默认窗口尺寸打开。
在SwiftUI的App结构体中,你可以在初始化方法里执行清除逻辑:
@main struct YourApp: App { init() { // 筛选所有包含"NSWindow Frame"的UserDefaults键 let windowFrameKeys = UserDefaults.standard.dictionaryRepresentation().keys.filter { $0.contains("NSWindow Frame") } // 批量删除这些键 windowFrameKeys.forEach { UserDefaults.standard.removeObject(forKey: $0) } // 同步修改确保立即生效 UserDefaults.standard.synchronize() } var body: some Scene { WindowGroup { ContentView() } } }
如果担心初始化时机过早,也可以用.task修饰符绑定到窗口,确保在界面加载前执行:
@main struct YourApp: App { var body: some Scene { WindowGroup { ContentView() .task { let windowFrameKeys = UserDefaults.standard.dictionaryRepresentation().keys.filter { $0.contains("NSWindow Frame") } windowFrameKeys.forEach { UserDefaults.standard.removeObject(forKey: $0) } UserDefaults.standard.synchronize() } } } }
方案2:通过Xcode预执行脚本实现
如果你不想修改代码,还可以在Xcode的运行配置里添加预执行脚本,每次Cmd+R前自动清除旧记录:
- 打开Xcode,点击顶部菜单栏
Product > Scheme > Edit Scheme - 左侧选择
Run,切换到Pre-actions标签 - 点击
+号,选择New Run Script Action - 在脚本框中输入以下内容(替换
com.yourcompany.yourapp为你的应用Bundle ID):
# 删除所有包含"NSWindow Frame"的键 defaults delete com.yourcompany.yourapp $(defaults read com.yourcompany.yourapp | grep "NSWindow Frame" | awk '{print $1}' | tr -d '"')
如果需要清除所有UserDefaults数据(谨慎使用),可以用更简单的脚本:
rm ~/Library/Preferences/com.yourcompany.yourapp.plist
这样每次按Cmd+R时,Xcode会先执行脚本清除旧记录,再启动应用。
内容的提问来源于stack exchange,提问作者csstudent903
相关产品推荐
相关产品推荐

