如何使用权利重新分配应用程序?

时间:2016-04-27 11:31:58

标签: ios xcode codesign code-signing-entitlements

我有一个.ipa文件,我需要辞职。我尝试按照objc.io blog

中的说明进行操作
$ codesign -f -s 'iPhone Developer: Thomas Kollbach (7TPNXN7G6K)' Example.app

但这还不够。当我做代码签名时,我得到这样的东西:

$ codesign -d --entitlements - Example.app/Example
Executable=/Users/myuser/Payload/Example.app/Example

我没有列出任何权利。

但是如果我从xCode对原始IPA文件进行codesign -d --entitlements,我会得到:

<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>UFAYDHAUP.com.company.example</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>beta-reports-active</key>
    <true/>
    <key>com.apple.developer.team-identifier</key>
    <string>UFAYDHAUP</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>UFAYDHAUP.com.company.example</string>
    </array>
</dict>
</plist>

我尝试了以下一行

 codesign --entitlements Example.app/archived-expanded-entitlements.xcent -f -s 'iPhone Developer: Thomas Kollbach (7TPNXN7G6K)' Example.app

但不包括以下键:

  • beta-reports-activ
  • 获取任务,允许

那我该怎么做呢?我没有权利文件,在xCode 7中,只检查功能。我所拥有的只是Apple推送通知。

最后澄清我的要求:

  1. 与xCode导出的内容相比,我不会更改App ID或使用不同的配置文件或代码签名标识。
  2. 仅使用工具更改主可执行文件,这就是需要重新签名的原因。

2 个答案:

答案 0 :(得分:7)

答案实际上在问题本身中非常明显。输出来自:

$ codesign -d --entitlements - Example.app/Example

实际上是一个完全有效的权利文件。因此,您可以通过写入来存储从xCode导出的原始.ipa的输出:

$ codesign -d --entitlements entitlements.xml Example.app/Example

这会将权利存储在entitlements.xml中,您可以在参数中使用这些权利来自行签署.ipa文件:

codesign --entitlements entitlements.xml   -f -s "iPhone Distribution: Company (UFAYDHAUP)" Payload/Example.app

当然,“iPhone发行版:公司(UFAYDHAUP)”必须替换为您使用的签名标识,Payload/Example.app将是您的应用程序的路径,该文件已从.ipa文件解压缩。

答案 1 :(得分:0)

它帮助了我

--preserve-metadata=entitlements

不再需要保存和恢复权利。