iOS 部署因权利无效而失败 - 但权利有效吗?
Posted
技术标签:
【中文标题】iOS 部署因权利无效而失败 - 但权利有效吗?【英文标题】:iOS deployment fails with invalid entitlements - but entitlements are valid? 【发布时间】:2017-12-20 13:54:47 【问题描述】:我的同事最近对我们的应用进行了一些更改,并启用了数据保护。
但是,从那以后,我们无法将应用部署到任何真实设备上。该错误发生在应用程序验证时出现此错误:
ApplicationVerificationFailed: Failed to verify code signature of /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.YDQn6e/extracted/[appname].app : 0xe8008016 (The executable was signed with invalid entitlements.)
(由于 NDA 的要求,我必须从任何日志中隐藏任何识别信息,因此,我将它们替换为 [] 括号中的静态标签)。
我已经使用 Apple 自己的指南,使用安全和协同设计工具检查了权利。
codesign
输出如下信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>get-task-allow</key>
<false/>
<key>application-identifier</key>
<string>[teamId].[appname]</string>
<key>com.apple.developer.team-identifier</key>
<string>[teamId]</string>
<key>aps-environment</key>
<string>production</string>
<key>keychain-access-groups</key>
<array>
<string>[teamId].[appname]</string>
</array>
</dict>
</plist>
这是security
命令的输出:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AppIDName</key>
<string>[appPublicName]</string>
<key>ApplicationIdentifierPrefix</key>
<array>
<string>[teamId]</string>
</array>
<key>CreationDate</key>
<date>2017-07-06T11:55:52Z</date>
<key>Platform</key>
<array>
<string>ios</string>
</array>
<key>DeveloperCertificates</key>
<array>
<data>[devCert]</data>
</array>
<key>Entitlements</key>
<dict>
<key>keychain-access-groups</key>
<array>
<string>[teamId].*</string>
</array>
<key>get-task-allow</key>
<false/>
<key>application-identifier</key>
<string>[teamId].[appname]</string>
<key>com.apple.developer.associated-domains</key>
<string>*</string>
<key>com.apple.developer.team-identifier</key>
<string>[teamId]</string>
<key>aps-environment</key>
<string>production</string>
</dict>
<key>ExpirationDate</key>
<date>2018-04-25T13:18:41Z</date>
<key>Name</key>
<string>[appPublicName]</string>
<key>ProvisionedDevices</key>
<array>
[provisioned devices]
[The device I'm trying to deploy to is listed here]
</array>
<key>TeamIdentifier</key>
<array>
<string>[teamId]</string>
</array>
<key>TeamName</key>
<string>[teamName]</string>
<key>TimeToLive</key>
<integer>293</integer>
<key>UUID</key>
<string>[id]</string>
<key>Version</key>
<integer>1</integer>
</dict>
</plist>
这里到底出了什么问题?
【问题讨论】:
如果您登录开发人员门户管理配置文件,当前的配置文件是否有效?启用数据保护可能需要您重新生成配置文件并使用新的配置文件。但我希望旧的仍然可以使用。 是的,我不得不重新生成配置文件,我什至尝试制作一个全新的配置文件,该配置文件立即出现在 XCode 和 Visual Studio 中(不确定它是否相关,但是这是一个 Xamarin 应用程序,而不是原生应用程序,用 C# 而不是 Swift/ObjC 编写)。 好的:-)。我问是因为CreationDate
在您的问题中设置为 7 月。
是的,它是在 7 月创建的,但同时更新了 :)
【参考方案1】:
如果您不使用自动代码签名,则在 iOS 应用中更新权利需要几个步骤。您需要更新两个应用程序的项目和用于构建应用程序的配置文件。如果两者不同步(或者更准确地说,如果您的应用尝试使用配置文件允许的权利不允许的权利,您将收到此错误。
更改权利时,您需要更新项目本身(如文档中的here)以及配置文件中的权利。 我怀疑这就是你到目前为止所做的一切。
要更新配置文件中的权利,请登录 Apple 开发者网站并转到“证书、标识符和配置文件”部分。选择左侧的应用程序 ID,然后找到您尝试构建的应用程序的应用程序 ID。单击编辑按钮并打开数据保护的权利。完成此操作后,单击“完成”。应用 ID 现在已配置,但您需要重新生成配置文件以获取对应用 ID 的更改。转到左侧的 Provisioning Profiles 链接,找到应用 ID 的配置文件,单击 Edit,然后单击底部的 Generate 按钮。完成后,单击下载按钮以获取具有 App ID 新权利的新配置文件。
另外,为了安全起见,我会在下载和安装新的之前从 Mac 中删除所有旧的配置文件。这样您就可以确定它选择了正确的配置文件。您可以找到配置文件的位置here。
【讨论】:
以上是关于iOS 部署因权利无效而失败 - 但权利有效吗?的主要内容,如果未能解决你的问题,请参考以下文章