编程技术记录

世界你好!

介绍

1、IPA是ZIP压缩文件,可以直接用zip命令压缩解压
2、IPA 重签名需要准备p12证书、mobileprovision描述文件
3、IPA里面可能包含动态库(.framework , .dylib),也需要重签名
4、IPA里面的扩展(.appex)也有自己的mobileprovision,不复用主App。
5、扩展(.appex)的mobileprovision的id要和App的mobileprovision里面的id保持一致。例如主App是 A.B.C,那么扩展的必须是A.B.C.xxxx 。
6、重签名时,应要重新设置Info.plist里EXTENSION_GROUP值,修改为 group.主App的bundle_id,例如group.A.B.C

命令

压缩解压缩

unzip 老包.ipa

zip -r  新包.ipa  Payload/ SwiftSupport/ # 如果没SwiftSupport可以不添加

查看本地的签名证书列表

security find-identity -v -p codesigning
# 会输出证书的HASH值和证书名

打印mobileprovision的基本信息

主要获取application-identifier,为后面修改InfoPlist里面的bundle做准备

/usr/libexec/PlistBuddy -c \"Print Entitlements:application-identifier\" /dev/stdin <<< $(/usr/bin/security cms -D -i mobileprovision文件路径 )

修改InfoPlist的bundle id

/usr/libexec/PlistBuddy -c "Set:CFBundleIdentifier 新id" "/需要修改的bundle路径如framework/Info.plist"

读取InfoPlist的bundle id

使用defaults,比较简单

defaults read  /需要读取的bundle路径如framework/Info  CFBundleIdentifier
# 注意,不添加.plist后缀

生成entitlements

# 先获取全部信息
security cms -D -i "embedded.mobileprovision路径" >  输出的plist文件路径"
# 提取entitlements信息
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements'  全部信息的plist文件路径 >  输出entitlements信息的plist文件路径

重新签名

/usr/bin/codesign --continue -f -s "证书HASH或者名字" --entitlements "entitlements信息的plist文件路径"  "需要签名的bundle如framework、appex、app"

流程

1、准备好证书和mobileprovision文件
2、解压缩ipa
3、复制对应mobileprovision到app目录、appex目录,并重命名为embedded.mobileprovision
4、修改app、appex的Info.plist文件里的bundle id和EXTENSION_GROUP值
5、生成entitlements信息文件
6、用codesign对app、appex重新签名
7、使用app的证书文件对动态库重新签名
8、把重新签名后的文件压缩为ipa

© Beli. All Rights Reserved.