应用程序在模拟器中运行,在iPad上失败“缺少必需的权利... icloud-services”

时间:2016-04-18 21:02:19

标签: ios xcode ipad cloudkit

将iCloud添加到正在运行的iOS应用程序中,数据存储在公共数据库中。我必须在模拟器中登录iCloud,但完成后,应用程序在模拟器中运行良好。在iPad上,程序在以下声明中崩溃:

CKContainer * dbContainer = [CKContainer defaultContainer];

由于未被捕获的异常'CKException',应用程序被终止,原因是:'应用程序缺少必需的权利com.apple.developer.icloud-services'

当我在XCode中打开iCloud功能时,XCode会在.entitlements文件中为com.apple.developer.icloud-services创建一个条目,其中包含数组中的一个项目:值为“CloudKit”的字符串。

在我的iPad上,我以与在模拟器上相同的方式登录iCloud。

我已经多次详细阅读了Apple的权利故障排除指南,我已经搜索了我所知道的各种方式,而且我无法弄清楚为什么会失败。我确实找到并阅读了建议重复的帖子,并没有提出任何解决方案对我有效。

发布此问题后,我再次浏览了权利问题排查指南,并在构建的应用中找到了以下权利部分:

<dict>
    <key>keychain-access-groups</key>
    <array>
        <string>PTXZTRRTHH.*</string>       
    </array>
    <key>get-task-allow</key>
    <true/>
    <key>application-identifier</key>
    <string>PTXZTRRTHH.com.quipzl.Quipzl</string>
    <key>com.apple.developer.ubiquity-kvstore-identifier</key>
    <string>PTXZTRRTHH.*</string>
    <key>com.apple.developer.icloud-services</key>
    <string>*</string>
    <key>com.apple.developer.icloud-container-environment</key>
    <array>
        <string>Development</string>
        <string>Production</string>
    </array>
    <key>com.apple.developer.icloud-container-identifiers</key>
    <array>
        <string>iCloud.com.quipzl.Quipzl</string>
    </array>
    <key>com.apple.developer.icloud-container-development-container-identifiers</key>
    <array>
        <string>iCloud.com.quipzl.Quipzl</string>
    </array>
    <key>com.apple.developer.ubiquity-container-identifiers</key>
    <array>
        <string>iCloud.com.quipzl.Quipzl</string>
    </array>
    <key>com.apple.developer.team-identifier</key>
    <string>PTXZTRRTHH</string>
    <key>aps-environment</key>
    <string>development</string>
</dict>

该应用程序确实在我的iPad上运行 - 直到执行到达上面的代码,当它抛出异常时。为什么呢?

1 个答案:

答案 0 :(得分:0)

此次崩溃不是由于任何遗失的权利,尽管例外说它是。我不知道究竟是什么解决了这个问题,但我确实知道这个过程有效,如下:

1)创建一个相同类型的新iOS项目,确保它运行。

2)在新应用中启用CloudKit,并在XCode创建的默认控制器中添加#import“CloudKit / CloundKit.h”。

3)添加语句“[CKContainer defaultContainer];”在viewDidLoad()方法中。

4)再次运行应用程序并确保它不会在添加的语句中崩溃。

5)浏览旧应用中的所有应用属性,并确保所有值都与新应用中的值相同。

最后一步包括十几个值更改,并解决了问题:旧应用程序不再崩溃尝试访问iCloud。