给客户提交一个TestFlight IPA包时,返回签名错误。
用开源工具App Signer重新签名。
工具下载地址
https://github.com/DanTheMan827/ios-app-signer/releases/tag/1.14

重新提交,发现还是报错:
Validation failed (409)
CFBundleIdentifier Collision. There is more than one bundle with the CFBundleIdentifier value 'com.xxxxxxxx.cn' under the iOS application 'Runner.app'. (ID: xxxxxxx-fb15-4684-a360-xxxxxxx)
核心问题:
IPA 里,除了主 App,还有几十个第三方框架和隐私 Bundle,全都用了同一个 com.XXXXXXXX.cn,苹果不允许,必须把它们的 ID 全部改掉。
第一步:先解压 iOS App Signer 生成的 IPA
1.找到你用 iOS App Signer 生成的 *-signed.ipa 文件
2.把它的后缀改成 .zip,双击解压,得到 Payload 文件夹
第二步:修改所有冲突的 ID
1.打开「终端」,输入下面的命令,一次性修改所有冲突的 ID(不用你手动一个个改):
# 进入解压后的目录(把路径换成你自己的)
标题文字
cd /Users/sean/Downloads/Payload/Runner.app
批量修改所有子Bundle的ID,加随机后缀,彻底解决冲突find . -name "Info.plist" -type f | while read plist; do
CURRENT_ID=$(/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" "$plist" 2>/dev/null || true)
if [ "$CURRENT_ID" = "com.xxxxxxxxxxx.cn" ] && [[ "$plist" != "./Info.plist" ]]; then
NEW_ID="com.xxxxxxxxxxx.cn.$(uuidgen | cut -d- -f1)"
echo "修改 $plist 的 BundleID 为 $NEW_ID"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $NEW_ID" "$plist"fi
done
执行完后,终端会打印所有被修改的文件,你会看到几十个框架和 Bundle 的 ID 都被改成了唯一的随机值。
第三步:重新打包并签名
1.回到 Payload 所在的上级目录,选择Payload目录和SwiftSupport, 右键「压缩 “Payload”」,得到 Payload.zip
2.把 Payload.zip 改名为 final.ipa
3.再次打开 iOS App Signer,按你之前的配置,重新对 final.ipa 签名一次(证书和描述文件和之前一样)
本文由 haolinks 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。