我的同事最近对我们的应用程序进行了一些更改,并启用了数据保护。
但是,从那时起,我们无法将应用程序部署到任何真实设备。在使用此错误的应用程序验证时发生错误:
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>
这究竟出了什么问题?
如果您不使用自动代码签名,则在iOS应用程序中更新权利需要几个步骤。您需要更新应用程序的项目和用于构建应用程序的配置文件。如果两者不同步(或者更确切地说,如果您的应用尝试使用配置文件允许的权利不允许的权利,则会出现此错误。
更改权利时,您需要更新项目本身(如文档here)以及配置文件中的权利。我怀疑这是你到目前为止所做的一切。
要更新配置文件中的权利,请登录Apple开发人员站点并转到“证书,标识符和配置文件”部分。选择左侧的应用程序ID,找到您要构建的应用程序的应用程序ID。单击编辑按钮并启用Data Protection的权利。完成此操作后,单击“完成”。现在已配置应用ID,但您需要重新生成配置文件以获取应用ID的更改。转到左侧的“配置配置文件”链接,找到应用程序ID的配置文件,单击“编辑”,然后单击底部的“生成”按钮。完成后,单击下载按钮以获取具有App ID新权利的新配置文件。
另外,为了安全起见,我会在下载并安装新的配置文件之前从Mac中删除所有旧的配置文件。这样您就可以确定它正在获取正确的配置文件。您可以找到供应配置文件here的位置。