containerURLForSecurityApplicationGroupIdentifier在iOS模拟器上返回nil

Fra*_*scu 21 iphone xcode objective-c ios-simulator ios8

上下文

通过iOS8和扩展,Apple推出了App组容器(此处有更多信息).

问题

我们通过它NSFileManagercontainerURLForSecurityApplicationGroupIdentifier:方法使用它.它适用于AppStore上的生产(iOS8和iOS7).问题是我们的团队更新到Xcode 6.1 (6A1052d),该方法返回nil模拟器.

我们搜索了很多,但我们找不到任何线索.即使这个问题这一个是在这里不适用.

TLDR:问题

确实NSFileManagercontainerURLForSecurityApplicationGroupIdentifier:方法适用于您的模拟器?有没有办法解决这个问题?

Jua*_*nez 21

该方法containerURLForSecurityApplicationGroupIdentifier:适用于设备和模拟器.

如果您设置了两个目标(例如Target和WatchKit Extension),这些目标将共享数据以支持组,并且它一直返回nil,您可能需要检查目标设置.

  1. 应在此处选择目标设置>常规>团队> yourCompany签名团队.如果有警告和修复此问题按钮,那就好了并通过点击来解决问题:)

  2. 目标设置>功能>应用程序组>打开+显示您的 group.com.yourcompany.yourapp.sharedContainter组名称("sharedContainer"是我的选择名称)已选中并且为黑色(非红色).如果它是红色或有警告并且"修复此问题"按钮,请更新该组或创建另一个组.

  3. 目标设置>构建设置>代码签名>代码签名权利:指向Debug和Release的权利文件(类似于yourApp/yourApp.entitlements)

  4. 目标设置>构建设置>代码签名>代码签名身份:确保身份是上面选择的团队的一部分.我使用的是iOS Developer.

  5. 目标设置>构建设置>代码签名>供应配置文件:如上所述,确保您使用的PP是所需的团队.我把它设置为自动.

检查两个目标共享数据的那些.

我希望它有所帮助


Mat*_*uif 15

我能够解决这个问题.文件说

您的应用必须具有指定应用程序组的com.apple.security.application-groups权利.https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/index.html#//apple_ref/occ/instm/NSFileManager/containerURLForSecurityApplicationGroupIdentifier:

在我的应用程序中的某个时刻,我已从我的应用目标/构建设置/代码签名/代码签名权利中删除了权利文件.调试和发布都必须包含YOUR_APP.entitlements文件.我的调试不包括它所以它不在模拟器上工作


res*_*ode 5

它没有明确文档,但我发现组标识符区分大小写。