NSUserDefaults 不保存在 Jenkins 模拟器的内存中

NSUserDefaults not saving in memory in simulator on Jenkins

我遇到了这种奇怪的情况,NSUserDefaults 在真实设备上工作正常,但在我们拥有的一个特定 mac 的模拟器上却不行。

registerDefaults 工作正常:

NSUserDefaults.standardUserDefaults().registerDefaults(["Default1": 3, "Default2: false])

如果我运行NSUserDefaults.standardUserDefaults().dictionaryRepresentation(),这些默认值被包含在字典中。

然而,setObject 不起作用

NSUserDefaults.standardUserDefaults().setObject("abc", for Key: "ABC")
NSUserDefaults.standardUserDefaults().synchronize()

NSUserDefaults.standardUserDefaults().objectForKey("ABC") 在模拟器上总是 return nil。

mac 有这个问题是 运行将 El Capitan 作为 Jenkins CI 服务器(作为启动代理),我已经尝试 运行到目前为止,不同版本的模拟器(9.2、8.4 等)上的应用程序没有任何运气。有什么想法吗?

我们自己 运行 遇到了类似的情况,在我们完全重新安装 OS (El Capitan) 之前,我们决定尝试创建一个新用户 Jenkins2 作为一个适当的真实用户,生活在 /Users/Jenkins2,而不是生活在 /Users/Shared/Jenkins 的 *nux 风格的安装。在解决了权限更改和移动文件带来的许多问题之后,这为我们解决了问题。

版本:OSX El Capitan,詹金斯诉 1.652 和 XCode 7.2.1.

如果你无计可施,我建议尝试获得一个简单的重现项目,它在 Jenkins 下绝对不起作用,然后验证它在 Jenkins 之外也不起作用,在 XCode,但以 Jenkins 用户身份登录时。如果是这样,您很可能遇到了与我们相同的问题。以默认的 Mac 方式创建一个新用户,并在那里尝试相同的项目。如果这对您来说是一个令人满意的解决方案,请将所有 Jenkins 设置移至该新用户,并删除旧的。这就是我们最终所做的,从那以后我们就再也没有遇到过问题。