IPA签名-iOS App重签名全解析
随着苹果设备用户的不断增加,iOS应用市场日渐活跃。但是对于iOS设备用户来说,当需要下载一些非官方渠道的应用时,往往需要进行IPA签名。本文将为大家介绍什么是IPA签名,如何进行iOS App重签名以及常见问题解决方法。
iOS App IPA签名是什么
在iOS系统中,为了确保应用的安全,iOS设备只能运行由苹果官方认证过的应用程序,即App Store应用。但是有一些开发者开发的应用程序并没有在App Store上架,这些应用就需要通过其他方式进行安装,如:企业证书、开发证书、自签名等方式进行安装。而这些方式中,IPA签名是最为普遍的一种方式。
IPA文件就是iOS应用程序包,而IPA签名则是给这个IPA文件加上证书和授权,使得iOS设备可以在安全机制下安装、运行该应用,同时也不会被篡改、病毒等攻击。 那么如何进行IPA签名呢?
iOS App重签名步骤
iOS App重签名,是指将原本已授权的证书替换成其他的授权证书。这种方式多用于开发者进行测试时,或者企业内部使用等场景。以下为详细步骤:
下载并安装需要重签名的应用程序的IPA文件,并使用解压工具将IPA文件解压为文件夹。
找到Payload文件夹,将.app文件复制到桌面上(或者新建一个文件夹,将文件拷贝到该文件夹下)。这个文件夹中存放的就是要重签名的应用程序。
在新建的文件夹下,新建文件名为”entitlements.plist”的文件,将包含下面内容:
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>[你的签名证书的bundle id]</string>
<key>com.apple.developer.team-identifier</key>
<string>[你的开发者账号team-id]</string>
</dict>
</plist>
打开终端,进入到存放.app文件的文件夹,执行以下命令,创建新的数字签名:
codesign --force --sign "证书名称" --entitlements entitlements.plist Payload/XXX.app
在终端中进入存放.app文件的文件夹,编写并运行脚本(重命名应用程序的bundle id):
plutil -replace CFBundleIdentifier -string com.mycompany.mynewappname Payload/XXX.app/info.plist
覆盖掉原始的Payload文???夹并将其重新压缩成IPA文件。完成后我们即可得到一个成功重签名的安装文件。
常见问题解决方法
iOS App重签名过程中,可能会碰到一些问题。下面我们将简单介绍一些常见问题及其解决方法:
1. “Could not find a valid private key”
这个问题通常是由于证书的私钥不存在导致的。需要在Keychain上找到对应的私钥,并运行下面命令进行导出:

$ security find-identity
$ security export -pkey /path/to/private/key -o private.key -e der -f pkcs8
2. “ResourceRules.plist” is missing
这表示需要生成“ResourceRules”文件。可以通过下面命令创建这个文件并将其复制到.app目录下:
$ /usr/libexec/PlistBuddy -c "add :com.apple.application-identifier string [你的PACKAGENAME]" ResourceRules.plist
$ /usr/libexec/PlistBuddy -c "add :get-task-allow bool true" ResourceRules.plist
$ codesign -f -s "证书名称" --resource-rules ResourceRules.plist Payload/XXX.app/
3. “-f” 参数不能正常工作
有时候,使用 –f 参数时,可能会碰到错误。可以使用clean参数代替:
$ codesign --clean --sign "证书名称" --resource-rules Payload/XXX.app/ResourceRules.plist Payload/XXX.app
结束语
iOS App重签名虽然并不是一项容易完成的技术活儿,但是掌握这个技能对于开发者和企业管理员来说都是十分有益的。 重签名的好处在于我们可以自由地在原来的应用上进行一些修改,而不需要再重新编写和编译一次应用。同时,我们可以通过签名的方式,发布自己的应用进行一些开发以及对匿名下载的应用进行测试。