好的,我们来详细梳理一下 iOS IPA 重签名所需准备的所有相关文件。
重签名的核心原理是:用一个合法的签名身份(证书和描述文件),替换掉原有 IPA 包中的签名信息,使其能在你的设备上安装和运行。
以下是完成这个过程的必备文件清单:
一、核心必备文件
1. 重签名证书
这是你的开发者身份凭证,用于证明应用是由你签名的。
-
文件类型:
.p12文件 或 在钥匙串访问中看到的iPhone Developer/Distribution证书。 -
如何获取:
- Apple Developer Program: 每年付费账号,可以生成开发和生产证书。
- Apple ID 免费账户: 可以生成仅限于开发测试的证书。
-
准备要点:
- 通常从 Apple Developer 网站下载后,会是一个
.cer文件,你需要将其导入到 macOS 的“钥匙串访问”中,然后导出为包含私钥的.p12文件,以便在其他机器上使用。 - 确保证书在钥匙串访问中是有效且受信任的。
- 通常从 Apple Developer 网站下载后,会是一个
2. 描述文件
描述文件将你的设备、App ID 和证书关联在一起,它包含了应用的权限和运行环境。
-
文件类型:
.mobileprovision -
种类:
- 开发描述文件: 用于测试,包含允许安装的设备 UDID 列表。
- 分发描述文件: 用于企业内部分发或 Ad-Hoc 分发(也包含设备列表)。App Store 分发描述文件不适用于重签名。
-
如何获取:
- 在 Apple Developer 网站创建 App ID 后,为其生成相应的描述文件。
- 使用 Xcode 自动管理签名时,Xcode 会自动为你生成和下载。
-
准备要点:
- 描述文件必须与你的重签名证书匹配。
- 描述文件中的
App ID(例如com.yourcompany.demoapp)最好与原始 IPA 的 Bundle Identifier 一致。如果不一致,通常需要在重签名时强制修改 IPA 的 Bundle Identifier。
3. 待签名的 IPA 文件
这是你需要进行重签名的原始应用包。
-
文件类型:
.ipa -
来源:
- 自己打包的 Development 或 Ad-Hoc 版本。
- 从第三方渠道获取的越狱版或企业版应用。
- 注意: 无法对从 App Store 下载的加密 IPA(有 DRM 保护)进行重签名,除非先进行解密(砸壳)。
二、辅助工具
你需要一个工具来执行具体的重签名操作。
1. 重签名工具(三选一即可)
-
图形化工具(推荐新手):
- iOS App Signer: 非常流行的开源图形化工具,界面简洁,易于使用。
- iReSign: 另一个图形化工具,也很多人使用。
-
命令行工具(推荐进阶用户和自动化):
-
codesign: Apple 官方提供的命令行签名工具,功能最强大最底层。所有图形化工具最终都是调用它。 -
fastlane sigh resign:fastlane工具套件中的一条命令,可以一行命令完成重签名,非常方便。
-
三、可选但重要的文件
1. entitlements.plist(权限文件)
这个文件定义了应用可以向系统申请哪些特殊能力(Capabilities),例如推送通知、iCloud、App Groups、Keychain Sharing 等。
-
文件类型:
.plist -
如何获取:
-
从描述文件中提取: 这是最推荐和准确的方式。描述文件内嵌了一个
Entitlements字段。你可以使用命令security cms -D -i your_profile.mobileprovision来查看描述文件的完整内容,并复制其中的<dict>...</dict>部分,保存为.plist文件。 -
从原始 IPA 中提取: 使用
codesign -d --entitlements :- "Payload/YourApp.app"可以导出原始应用的权限文件。 -
在 Xcode 中查看: 在项目的
Signing & Capabilities面板中开启的功能,会同步到这里。
-
从描述文件中提取: 这是最推荐和准确的方式。描述文件内嵌了一个
- 重要性: 如果重签名时使用的权限文件与描述文件中的权限不匹配,重签名会失败。 最佳实践是始终使用从你准备的描述文件中提取出的权限文件。
四、文件准备清单与流程总结
假设你使用 iOS App Signer 进行重签名,流程如下:
-
准备证书和描述文件:
- 登录 Apple Developer 网站。
- 确保有有效的
iPhone Developer证书。如果没有,创建一个。 - 将你的测试设备 UDID 添加到开发者账户。
- 创建一个与你的应用 Bundle ID 匹配的 App ID(例如
com.yourcompany.*)。 - 为该 App ID 和设备生成一个 Development 类型的
.mobileprovision描述文件,并下载到本地。
-
准备权限文件(推荐):
- 打开终端,执行:
security cms -D -i path/to/your.mobileprovision > profile.plist- 用文本编辑器打开
profile.plist,找到Entitlements字段,将其下的整个<dict>...</dict>内容复制出来,新建一个文件entitlements.plist并粘贴进去。
获取待签名的 IPA 文件。
-
执行重签名:
- 打开 iOS App Signer。
-
Input File: 选择你的
.ipa文件。 - Signing Certificate: 选择你在钥匙串中的开发者证书。
-
Provisioning Profile: 选择你下载的
.mobileprovision文件。 - (如果使用命令行
codesign,则需要在这里通过--entitlements参数指定entitlements.plist文件) - 点击 Start,生成重签名后的 IPA。
-
安装测试:
- 使用 iTunes、Apple Configurator 2、或者第三方工具(如 爱思助手、Cydia Impactor 等)将新生成的 IPA 安装到设备上测试。
常见问题与注意事项
-
Bundle Identifier 冲突: 如果原始应用的 Bundle ID 与你的描述文件不匹配,重签名工具通常会强制将其修改为描述文件中的 App ID。如果遇到问题,可以尝试先修改原始应用的
Info.plist中的CFBundleIdentifier。 -
插件和扩展: 如果 IPA 内含 Watch App、通知插件等,你需要为每一个内嵌的插件/扩展都进行重签名,并且它们也需要对应的描述文件。一些自动化工具(如
fastlane)可以处理这个问题。 -
权限错误: 最常见的失败原因是权限文件配置错误。务必确保
entitlements.plist是从你用于签名的描述文件中提取的。
按照以上清单准备文件,你就能顺利完成绝大多数 IPA 的重签名工作。