企业应用程序部署无法在iOS 8.1.3上安装

时间:2015-01-28 15:06:23

标签: ios download install

更新iOS 8.1.3后,我尝试下载,但收到错误“无法下载应用”并且“此时无法安装”消息出现

我必须考虑8.1.2和8.1.3之间的变化是什么?

  

下载模式:
<一个   HREF = “ITMS服务://动作=下载舱单&安培; URL = HTTPS:?//****.plist” >

谢谢!

8 个答案:

答案 0 :(得分:34)

经过几个小时的破坏braincells,这就是我的做法:

注意:我目前尚未针对iOS 8.1.2或更低版本进行测试(请谨慎使用!)

对于已经使用您的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和您的配置文件是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>

答案 1 :(得分:8)

调查后......

修改 经过进一步测试后,我发现只需将Info.plist中的捆绑ID与manifest.plist中的捆绑ID进行匹配就可以安装应用在iOS 8.1.3上播出。 如果此解决方案不起作用,请尝试以下解决方案。


原始解决方案

解决问题:

您的应用程序必须具有有效的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>

如果您使用的是通配符配置文件,请将com.yourbundleidhere.mycoolapp替换为yourwildcardappid.*。在这两种情况下,您都可以使用iResign正确地重新签名应用程序,并包含现在必需的,entitlements.plist。

问题说明

由于安全补丁(请参阅CVE-2014-4493下的here),如果没有entitlements.plist,将无法安装该应用程序。安全补丁使应用程序不会覆盖现有应用程序并安装在它们之上/替换它们。

答案 2 :(得分:6)

我已经做了很多实验。根据我的经验,manifest.plist文件中的bundle标识符实际上并不重要。最重要的是要使entitlements.plist正确。

我建议您不要手动创建此项,而是建议使用以下脚本(credit)从配置文件生成它:

# 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

然后,您可以将此权利文件与codesign实用程序中的--entitlements选项一起使用。

答案 3 :(得分:0)

我遇到了同样的问题,对于没有任何权利的应用程序会发生这种情况。

使用权利重新签名应用程序解决了我的问题,但这将是痛苦的,因为已经部署的所有应用程序都需要重新签名和部署。

这是一个奇怪的问题,因为这些失败的应用程序并没有使用钥匙串共享或推送通知之类的东西,因此根本不需要权利(根据我的理解) )。现在,当我只是添加一个带钥匙串共享的权利时,它就开始工作了。

答案 4 :(得分:0)

我已经回答了这个here,这对我有用,无需做任何其他事情

答案 5 :(得分:0)

除了@ Mark和@ RaStudio的答案之外,我还看到了“无法下载应用程序”消息的另外两个原因;其中一个是iOS 8.1.3的新功能。

iOS 8.1.3

上的新故障原因

尝试安装具有过期配置文件的应用程序时,会发生此错误。签署应用程序时,证书和配置文件都必须有效且不会过期。在某些情况下,似乎可以在iOS 8.1.2上安装具有过期配置文件和未过期证书的应用程序。转到Apple's developer center

,确保有效配置文件未过期

旧故障原因

如果设备尚未添加到Apple's developer center上的开发提供资料中,则尝试下载使用开发证书和配置文件签名的应用程序时会发生此错误。

Ensure device is added to provisioning profile

答案 6 :(得分:0)

我已经解决了这个问题。

  1. 由于Apple更改了配置文件,请更新配置文件(文件1)并将其复制到&#34; Payload /&#34;。
  2. 确保&#34; Payload /&#34;中有一个Entitlements.plist(文件2),这个plist文件必须是 PLAIN TEXT ,这是由一个文本编辑器。
  3. 确保&#34; Payload /&#34;中有一个Info.plist(文件3),这是由XCode创建的;
  4. 将Entitlements.plist(文件4)复制到除&#34; Payload /&#34;以外的任何其他位置。
  5. 确保&#34;捆绑标识符&#34;在文件1-4中应该是相同的。
  6. 使用此Entitlements.plist(文件4)重新签名IPA文件。
  7. 你可以像这样辞职

    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>
    

    如果你懂中文,这将有所帮助。

    http://hennry.com/2015/03/fail-to-resign-ipa-since-ios8/

答案 7 :(得分:-1)

ios 8.1.3:内部应用程序需要与MDM一起分发。

<强> MobileInstallation

影响:恶意的企业签名应用程序可能能够控制本地容器上已有设备的应用程序

说明:应用程序安装过程中存在漏洞。通过阻止企业应用程序在特定方案中覆盖现有应用程序来解决这个问题。

来自苹果发行说明