企业应用程序部署不安装在iOS 8.1.3上
更新iOS 8.1.3后,我尝试下载,但出现错误“ 无法下载应用程序 ”和“此时无法安装 ”消息。
8.1.2和8.1.3之间有什么变化,我必须考虑?
下载模式:
<a href =“itms-services://?action = download-manifest&url = https://****.plist”>
谢谢!
经过几个小时的摧毁braincells,这是我是如何做到的:
注意:我目前还没有在iOS 8.1.2或更低版本上testing过(请谨慎操作!)
对于已经使用您的OWN企业证书签名的应用程序,您只需编辑manifest.plist就可以完成所有操作(正如RAStudios在编辑中提到的那样):
之前:
<key>bundle-identifier</key> <string>uk.co.acme.AcmeApp</string>
后:
<key>bundle-identifier</key> <string>S836XXACME.uk.co.acme.AcmeApp</string>
对于已由第三方签名的应用程序,您将退出企业证书(本演练假定ipa文件为AcmeApp.ipa,您的授权文件为entitlements.plist,您的供应configuration文件为provProvile.mobileprovision;所有文件位于桌面文件夹(Mac OSX)中,S836XXACME是您的团队标识符):
创build一个新的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
协同devise:
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>
经过调查..
编辑: 经过进一步的testing,我发现只需将Info.plist
的包ID与manifest.plist
的包ID进行匹配就可以在iOS 8.1.3上通过无线方式安装应用程序。 如果此解决scheme不起作用,请尝试下面的解决scheme。
原始解决scheme
解决问题:
您的应用程序必须具有有效的entitlements.plist
,其中包括更正应用程序的有效包标识符。
如果您正在发布使用iOS开发证书签名的应用程序,请参阅应用程序中包含的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>com.yourbundleidhere.mycoolapp</string> <key>com.apple.developer.team-identifier</key> <string>com.yourbundleidhere.mycoolapp</string> <key>get-task-allow</key> <true/> <key>keychain-access-groups</key> <array> <string>com.yourbundleidhere.mycoolapp</string> </array> </dict> </plist>
如果您使用的是通配符configuration文件,请使用yourwildcardappid.*
replacecom.yourbundleidhere.mycoolapp
。 在这两种情况下,您都可以使用iResign来正确提交申请并包含现在所需的entitlements.plist。
问题的解释
由于安全补丁(请参阅此处下CVE-2014-4493),没有entitlements.plist,应用程序将不会安装。 安全补丁程序可以防止应用程序覆盖现有的应用程序并在其之上进行安装/replace。
我已经做了不less的实验。 根据我的经验,manifest.plist文件中的包标识符实际上并不重要。 最重要的是要获得权利.plist正确。
我build议使用以下脚本( 信用 )从configuration文件生成它,而不是手动创build它:
# Create an entitlements file # parse provision profile security cms -D -i "provProfile.mobileprovision" > ProvisionProfile.plist 2>&1 # generate entitilements.plist /usr/libexec/PlistBuddy -x -c "Print Entitlements" ProvisionProfile.plist > Entitlements.plist 2>&1
然后,您可以使用此授权文件和codeign实用程序上的–entitlements选项。
我有同样的问题,这发生在没有任何权利的应用程序。
用权利重新签名应用程序解决了我的问题,但这将是一个痛苦,因为所有已部署的应用程序都需要重新签名和部署。
这是一个奇怪的问题,因为这些失败的应用程序没有使用像钥匙串共享或推送通知,因此根本不需要权利(根据我的理解)。 现在,当我只是添加一个授权与钥匙串共享它开始工作。
我已经在这里回答了这个问题 ,这个工作对我来说无需做任何事情
除了@ Mark和@ RaStudio的回答之外,我还看到“无法下载应用程序”消息的另外两个原因; 其中之一是iOS 8.1.3的新function。
iOS 8.1.3上的新故障原因
尝试安装具有过期供应configuration文件的应用程序时,会发生此错误。 在签署应用程序时,证书和供应configuration文件都必须有效且没有过期。 在某些情况下,似乎在iOS 8.1.2上可以安装具有过期configuration文件和未过期证书的应用程序。 确保提交的configuration文件不会过期到苹果的开发人员中心 。
老失败的原因
尝试下载使用开发证书和configuration文件签名的应用程序时,如果该设备尚未添加到Apple开发人员中心的开发configuration文件中,则会发生此错误。
我解决了这个问题。
- 由于Apple已更改了configuration文件,请更新configuration文件(文件1)并将其复制到“Payload /”中。
- 确保在“Payload /”中有一个Entitlements.plist(文件2),并且这个plist文件必须是由文本编辑器创build的PLAIN TEXT 。
- 确保“Payload /”中有一个Info.plist(文件3),这是由XCode创build的;
- 复制Entitlements.plist(文件4)除“Payload /”以外的任何地方。
- 确保文件1-4中的“包标识符”应该相同。
- 使用此Entitlements.plist(文件4)重新签署IPA文件。
你可以像这样辞职
codesign -fs "iPhone Distribution: Your Company Name" --entitlements=/Users/SenTR/Downloads/codesign/Entitlements.plist /Users/SenTR/Downloads/codesign/Payload/Your_Project_name.app
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>PREFIX.yourappBundleID</string> <key>aps-environment</key> <string>production</string> <key>get-task-allow</key> <false/> <key>keychain-access-groups</key> <array> <string>PREFIX.yourappBundleID</string> </array> </dict> </plist>
如果你认识中国人,这会有帮助。
ios 8.1.3:内部应用程序需要使用MDM进行分发。
MobileInstallation
影响 :恶意企业签名的应用程序可能能够控制设备上已有应用程序的本地容器
说明 :应用程序安装过程中存在一个漏洞。 这是通过阻止企业应用程序在特定情况下重写现有应用程序来解决的。
从苹果发行说明