iOS 8.1.3 - 企业分发 - 应用程序缺少应用程序标识符授权

iOS 8.1.3 - Enterprise Distribution - Application is missing the application-identifier entitlement

我在 iOS 8.1.3 上使用 Enterpsie Distribution 时遇到很多问题。 我设法修复了大多数出现此错误的安装:

Ignore manifest download, already have bundleID

这个答案:

这基本上告诉你在服务器上伪造 bundleID manifest.plist。

但是在我的一些测试设备上,我在更改后收到了一个新错误:

Error Domain=MIInstallerErrorDomain Code=63 "Application is missing the application-identifier entitlement."

我似乎找不到解决这个问题的方法。

编辑 1

我尝试将其添加到 .entitlements 文件中:

<key>application-identifier</key>
<string>com.domain.appname</string>

但现在我在尝试存档应用程序以进行分发时遇到此错误:

None of the valid provisioning profiles allowed the specified entitlements: application-identifier, aps-environment.

应用程序标识符授权格式不正确;

它应该包含您的 10 个字符的 App ID 种子,后跟一个点,然后是您的包标识符:

XXXXXXXXXX.com.domain.appname

此问题是由Apple 8.1.3 的安全补丁引起的。你可以看到来自 Apple Developer forums 的讨论。

bllakjakk 的回答是正确的。但需要说明的是,10 个字符的 App ID Seed 称为团队 ID,您可以在会员中心的组织简介中找到它。

根据 Apple 的技术说明

(your_app) failed to install Unable to download application, (your_app) could not be downloaded at this time. Application is missing the application-identifier entitlement Upgrade's application-identifier entitlement string ({Your New App ID Prefix}.com,YourApp.Bundle.ID) does not match installed application's application-identifier string (({Your Old App ID Prefix}.YourApp.Bundle.ID); rejecting upgrade.

Installation Failure Errors

所以你需要遵守这个。

我已经按照 post 中的步骤解决了这个问题:

对于已由第三方签名的应用程序,您将使用企业证书辞职(本演练假设 ipa 文件是 AcmeApp.ipa,您的entitlements 文件是 entitlements.plist,您的配置文件是 provProvile.mobileprovision;所有文件都在 Desktop 文件夹中(Mac OSX),S836XXACME 是您的团队标识符):

创建一个新的 entitlements.plist 文件:

<?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>application-identifier</key>
<string>S836XXACME.uk.co.acme.AcmeApp</string>
<key>get-task-allow</key>
<false/>
</dict>
</plist>

解压 ipa:

cd ~/Desktop

unzip AcmeApp.ipa

删除代码签名:

rm -r Payload/AcmeApp.app/_CodeSignature/ 

复制到 mobileprovision 文件中:

cp provProfile.mobileprovision Payload/AcmeApp.app/embedded.mobileprovision

代码设计:

codesign -f -s "iPhone Distribution: ACME Corporation Limited" --entitlements entitlements.plist Payload/AcmeApp.app

将其压缩为辞职的 ipa:

zip -qr AcmeApp_resigned.ipa Payload/

您还需要根据之前的 'ALREADY' 签名部分修改 manifest.plist 文件:

<key>bundle-identifier</key>
<string>S836XXACME.uk.co.acme.AcmeApp</string>

我在 iOS 8.4.1、8.4、8.0.2 和 7.1.1 设备上尝试了这个解决方案,它适用于我。

谢谢"Mark Chamberlain":)