这个问题的答案有点过时,而且缺少一些关键步骤,因此这是一个更新的指南,用于安装来自外部开发人员的应用程序。
----- 如何重新签名iOS应用程序 -----
假设你收到了来自另一个开发者的应用程序(例如MyApp.ipa),你想能够在你的设备上安装和运行它(例如使用ideviceinstaller)。
准备新的签名资产
第一步是获取包含您希望安装并运行在其中的所有设备的配置文件。确保配置文件包含您已经在您的钥匙串访问中安装的证书(例如iPhone开发人员:某人(XXXXXXXXXX))。下载配置文件(MyProfile.mobileprovision),以便您可以替换嵌入在应用程序中的配置文件。
接下来,我们将准备一个授权文件以包含在签名中。打开您的终端并运行以下命令。
$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist
这将创建一个描述您的 Provisioning Profile 的 xml 文件。接下来,我们想将授权转移到一个文件中。
$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist
替换配置文件并重新签名应用
如果你正在使用一个 .ipa 文件,首先需要解压该应用(如果你有一个 .app 文件,则可以跳过此步骤)。
$ unzip MyApp.ipa
现在您的工作目录中将会包含Payload/
和Payload/MyApp.app/
。接下来,请删除旧的代码签名文件。
$ rm -rf Payload/MyApp.app/_CodeSignature
使用您自己的配置文件(即embedded.mobileprovision)替换现有的配置文件。
$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision
重要提示:您还必须重新签署应用程序中包含的所有框架。 它们位于 Payload/MyApp.app/Frameworks
中。如果应用程序使用 Swift 编写或包含任何其他框架,则必须重新签署这些框架,否则应用程序将安装但无法运行。
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*
现在使用您的预配文件中包含的证书和之前创建的entitlements.plist对应用程序进行签名。
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app
你现在可以重新压缩该应用程序。
$ zip -qr MyApp-resigned.ipa Payload
完成
现在您可以删除Payload
目录,因为您已经拥有原始应用程序(MyApp.ipa)和重新签名版本(MyApp-resigned.ipa)。您现在可以在任何包含在您的预配文件中的设备上安装MyApp-resigned.ipa。
/usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.app
重新签名期间添加--entitlements entitlements.plist
。 - Peter