应用程序验证失败。签名无效,包含不允许的权利,或者未使用分发签名

时间:2012-09-17 07:49:20

标签: ios xcode itunesconnect code-signing

我正在尝试将iOS应用程序推送到iTunes Connect,但是当我尝试在Xcode中验证它时出现此错误:

Application failed codesign verification. The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate

我见过很多与同一问题有关的问题,但那些对我不起作用。我遵循Apple Technical Note TN2250的每一步。我检查在构建设置中是否选择了发布的分发配置文件(尝试使用通配符和应用程序的自定义配置文件),架构是正确的。为确保使用该配置文件对应用程序进行签名,我使用codesign -d -vvvv MyApp.app命令,并得到类似的内容:

Executable=/Users/myuser/Library/Developer/Xcode/Archives/2012-09-17/myapp 17-09-12 09.27.xcarchive/Products/Applications/MyApp.app/MyApp
Identifier=com.example.MyApp
...
Authority=iPhone Distribution: My Company
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
...

我使用security cms -D -i MyApp.app/embedded.mobileprovision检查我尚未修改的权利,获取此信息:

<?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>ApplicationIdentifierPrefix</key>
    <array>
        <string>PR3F1X</string>
    </array>
    <key>CreationDate</key>
    <date>2012-09-17T07:20:35Z</date>
    <key>DeveloperCertificates</key>
    <array>
        <data>
                ...
        </data>
    </array>
    <key>Entitlements</key>
    <dict>
        <key>application-identifier</key>
        <string>PR3F1X.com.example.MyApp</string>
        <key>get-task-allow</key>
        <false/>
        <key>keychain-access-groups</key>
        <array>
            <string>PR3F1X.*</string>
        </array>
    </dict>
    <key>ExpirationDate</key>
    <date>2013-09-16T07:20:35Z</date>
    <key>Name</key>
    <string>PROFILE NAME</string>
    <key>TeamIdentifier</key>
    <array>
        <string>PR3F1X</string>
    </array>
    <key>TimeToLive</key>
    <integer>364</integer>
    <key>UUID</key>
    <string>...</string>
    <key>Version</key>
    <integer>1</integer>
</dict>
</plist>

这个应用程序的软件包ID看起来像com.example.MyApp,我认为上面的案例可能是问题,但是改变了它们并且没有做到。之后,我撤销了我的证书,获得了新的mobileprovision配置文件并再次完成了整个过程,但没有成功。

我正在使用的软件是Mac OS X 10.7.4的Xcode 4.3.2

我看不出问题出在哪里,我错过了什么。

编辑1: 修改捆绑包ID是否需要手动更改其他设置?

编辑2: 我刚刚从头开始制作一个示例应用程序,使用相同的证书对其进行签名,一切顺利,所以似乎问题出在配置中。我试图看到这两个项目设置之间的差异,但唯一值得注意的是第一个只有iPad而且它使用了几个PhoneGap插件。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 您必须检查您的应用程序的签名,请参阅以下How do I check the entitlements on my Application's Signature

codesign -d --entitlements - /path/to/MyGreatApp.app

这是OK我不知道你有什么错误,如果你得到类似的东西:

Executable=/path/to/MyGreatApp.app/MyGreatApp
??qq?<?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>ABC123DE45.com.appleseedinc.mygreatapp</string>
        <key>get-task-allow</key>
        <false/>
        <key>keychain-access-groups</key>
        <array>
            <string>ABC123DE45.com.appleseedinc.mygreatapp</string>
        </array>
    </dict>
</plist>

但如果你只得到:

Executable=/path/to/MyGreatApp.app/MyGreatApp

然后,这是一个问题。可能是您在使用codesign工具辞职的代码中损坏了权利。

我已经做了下一步修复它:

  1. 在Xcode中存档任何应用。
  2. 选择'分发...' - &gt;'保存以进行企业临时部署'为AppName.ipa
  3. 解压缩AppName.ipa
  4. 创建应用程序的签名权利文件: codesign -d --entitlements:enterprise.plist Payload / PathToApp.app /
  5. 转到上传应用所在的文件夹。
  6. 创建供应配置文件权利文件:

    security cms -D -i /path/to/the.app/embedded.mobileprovision> provision_entitlements.plist

  7. 打开provision_entitlements.plist和enterprise.plist。修改enterprise.plist的设置,它应该等于provision_entitlements.plist-&gt; Entitlements属性。保存更改。

  8. 当重新设置应用时,添加参数--entitlements enterprise.plist到codesign工具。

    codesign -fs "iPhone Distribution: My Company" APP_DIRECTORY --entitlements enterprise.plist