已创建Mac沙箱,但没有NSUserDefaults plist

gre*_*reg 10 macos cocoa sandbox nsuserdefaults

我正在尝试追踪沙盒创建过程中出现的一些问题.在多种情况下,似乎未在Data/Library/Preferences中创建NSUserDefaults .plist文件.我在调试器中以及从Applications目录启动应用程序时已经看到了这一点.我没有尝试存档,签署应用程序然后启动.这需要吗?

创建以.LSSharedFileList.plist结尾的别名文件,但它指向自身,因此不存在.

我不知道它是否相关但是控制台报告:

appleeventsd[72]: <rdar://problem/11489077> A sandboxed application with pid ... checked in with appleeventsd, but its code signature could not be validated ( either because it was corrupt, or could not be read by appleeventsd ) and so it cannot receive AppleEvents targeted by name, bundle id, or signature. Error=ERROR: #100013  { "NSDescription"="SecCodeCopySigningInformation() returned 100013, -." }  (handleMessage()/appleEventsD.cp #2072) client-reqs-q
Run Code Online (Sandbox Code Playgroud)

谢谢.

cac*_*cau 17

这可能与缓存有关NSUserDefaults吗?

在最近的OS X版本中,默认值不会立即写入磁盘,因此您可能无法立即看到它们.您可能想尝试手动同步prefs - 来自NSUserDefaults类参考:

在运行时,您使用NSUserDefaults对象从用户的默认数据库中读取应用程序使用的默认值.NSUserDefaults缓存信息以避免每次需要默认值时都必须打开用户的默认数据库.synchronize方法(定期自动调用)使内存缓存与用户的默认数据库保持同步.

虽然我相信甚至可能不会立即将默认值写入10.9中的磁盘,因为现在还涉及一些缓存用户默认值的守护进程.

检查一下

从沙箱中的帮助应用程序读取NSUserDefaults

Objective-C NSUserDefaults缓存可防止其他应用程序准确读取更改

何时(不)滥用NSUserDefaults

  • 此外,如果您在测试/调试时将容器移动到废纸篓,cfprefsd(请参阅活动监视器)仍会保留指向.plist的链接.清空垃圾箱并强制退出cfprefsd(用户和root). (33认同)
  • 你救了我的命,谢谢@mahaltertin! (3认同)
  • 与XCode6和10.9.5有同样的问题,在杀死cfprefsd之后,一切都按预期工作了 - 谢谢你的greg - 让我大为头疼 (3认同)

UKD*_*eek 8

只需将其转换为完整答案,就不会错过.我只是在尝试其他解决方案后才阅读它,只需点击几下即可解决此问题.

@greg和@mehals在评论部分回答第一个解决方案为我解决了这个问题,而无需更改任何代码

杀死cfprefsd完成了活动经理的伎俩.