无法读取CFPrefsPlistSource iOS 10中的值

Kle*_*son 70 xcode ios ios-app-group ios10

我今天已将我的Xcode 8更新为beta 2,并且我正在尝试在App和Today Extension之间共享数据.我正面对这个日志警告:

2016-07-08 18:00:24.732472 ProjetctX [941:42801] [用户默认值]无法读取CFPrefsPlistSource <0x1700f1280>中的值(域:group.xpto,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)) :将kCFPreferencesAnyUser与容器一起使用仅允许System Containers与cfprefsd分离

有人可以帮帮我吗?

wal*_*gan 52

这实际上是iOS 10和macOS 10.12中引入的虚假警告.(来源:https://twitter.com/Catfish_Man/status/784460565972332544)

预先添加团队ID的建议会使警告静音,但也会创建一个新的空用户默认值.这将导致任何先前存储的数据不可读.

目前,解决方案只是忽略它.

此外,论坛上的 Apple员工CFM :

记录的消息是虚假的,除非你做了一些我认为不可能没有使用私有函数的特定事情(它被添加以捕获对这些函数的滥用,但不幸的是还发现了一个正常的用例).

  • 我尝试创建一个以团队 ID 开头的应用程序组,但它强制它以“group”开头。那么 - 两者不应该匹配吗??? (3认同)
  • 我在High Sierra看到这个日志消息.预先加入团队ID不会**给我留下警告.Apple打算解决这个问题吗? (3认同)
  • 抱歉,您能详细说明一下吗?“在前面加上你的团队 ID”是什么? (2认同)

Arf*_*rza 12

以下是如何将NSUserDefaults与App Groups一起使用以在主应用程序和扩展程序之间传递数据:

  1. 在主应用程序中,在Project Navigator中选择您的项目.

  2. 选择主应用目标,然后选择功能选项卡.

  3. 将App Groups开关切换为ON.这将与Developer Portal进行通信,以生成一组权利.

  4. 创建一个新容器.根据Apple的说法,您的容器ID必须以"group"开头,因此诸如"group.io.intrepid.myapp"之类的名称是完美的.

  5. 选择您的扩展目标并重复启用应用组的过程.不要创建新的应用程序组,只需选择刚在主应用程序目标中创建的组.

  6. 在应用程序或扩展程序中读取或写入NSUserDefaults时,请勿访问NSUserDefaults.standardUserDefaults().而是使用NSUserDefaults(suiteName:"group.io.intrepid.myapp").注意:套件名称是在步骤4中创建的App Group容器的名称.

确保为扩展和应用功能部分启用并使用相同的组ID!

积分转到http://blog.intrepid.io/ios-app-extensions


Vit*_*aum 7

对我来说,解决方案是不要对应用程序包标识符和“group.”之后的部分使用相同的标识符。

假设应用程序包 id 是“com.app.id”,那么组 id 为“group.com.app.id”会导致问题。当我将其更改为“group.com.app.id.something”后,它停止了。


小智 6

我的 macOS 应用程序也遇到了同样的问题。

解决方法:重启设备!

/sf/answers/2791339001/


Emm*_*ier 6

SuiteName(后缀)不能是主捆绑包 ID。


San*_*ago 6

从以下位置更改 Xcode 权利中的组名称:

group.com.mycompany.myapp
Run Code Online (Sandbox Code Playgroud)

group.MYTEAMID.com.mycompany.myapp
Run Code Online (Sandbox Code Playgroud)

ps:您可以在 developer.apple.com 会员中找到您的 MYTEAMID