嘿,刚成为一名新的 iOS 开发人员,到目前为止一切都很好,但我的 .xcodeproj 文件在 Xcode 中有一个警告,上面写着“验证项目设置 - 更新到推荐的设置”。当我点击它时,我会看到一个窗口,上面写着“目标'(我的应用程序名称)' - 升级 DataProtectionClass 权利。将您的应用程序的默认文件保护级别升级到推荐值:NSFileProtectionComplete。” 所以我继续并单击执行更改以便它可以执行此操作并且警告消失但是当我尝试在设备上调试时我收到错误“您的应用程序的代码签名权利文件中指定的权利与您的供应中指定的权利不匹配配置文件。(0xE8008016)。
如果我删除了将默认文件保护升级到 NSFileProtectionComplete 的 entitlemnets 文件,那么 Xcode 中的警告消失了,它能够在设备上编译和运行,但是我遇到了 xcode 中出现警告的问题不想让步。
这也发生在一个全新的项目中。我在 OS X 10.8 Mountain Lion DP3 (12A178q) 上运行 Xcode 版本 4.4 (4F134)。
在终端中,我继续查看我的 .mobileprovision 文件的权利。(不是通配符,而是具有特定应用程序ID的那个)
security cms -D -i /pathto.mobileprovision
我得到了 Entitlements 键的这个值。
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>GLAMURY37G.com.ionescuac.GPS-Status-</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>GLAMURY37G.*</string>
</array>
</dict>
当我在 xcode 中构建应用程序以进行调试配置时,我继续查看它的权利
codesign -d --entitlements - /pathtoapplication.app
并得到了这个
<dict>
<key>application-identifier</key>
<string>GLAMURY37G.com.ionescuac.GPS-Status-</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>GLAMURY37G.com.ionescuac.GPS-Status-</string>
</array>
</dict>
并且它匹配,因此 xcode 可以在设备上运行应用程序。但是,xcode 告诉我升级到 FileProtectionComplete,所以我这样做了,然后在构建我的应用程序并再次检查应用程序的权利之后,这就是我得到的。
<dict>
<key>DataProtectionClass</key>
<string>NSFileProtectionComplete</string>
<key>application-identifier</key>
<string>GLAMURY37G.com.ionescuac.GPS-Status-</string>
<key>get-task-allow</key>
<true/>
</dict>
这使它不再匹配,所以我在第一篇文章中得到了错误。如果我使用 FileProtectionComplete 权利对其进行签名,则 xcode 不会发出警告,但它不能再运行了。如果我在没有权利的情况下构建它,那么它会运行,但 xcode 会一直用这个警告来唠叨我,说 FileProtection 权利应该升级到它们的“推荐设置”。
有点陷入了第22条的情况。在我加入开发者计划之前,我在模拟器上搞砸了很多东西,并且从来没有遇到过任何关于 xcode 的权利问题,说需要将它们添加到构建中。