(1)解压qq.ipa 找到Payload文件

unzip qq.ipa //命令行解压

(2)将Payload目录中的_CodeSignature文件删除

rm -rf Payload/*.app/_CodeSignature/

(3)将自己app打包导出ipa文件 解压后找到 embedded.mobileprovision 文件 并替换qq.ipa中的embedded.mobileprovision 文件

cp embedded.mobileprovision Payload/*.app/embedded.mobileprovision

检查:

security cms -D -i example.mobileprovision

(4)重新签名,“iPhone Distribution: XXXXXX”这个指的是自己的embedded.mobileprovision文件用到的签名证书名称,在xcode或钥匙串中可以找到

/usr/bin/codesign -f -s “iPhone Distribution: XXXXXX” --resource-rules Payload/.app/ResourceRules.plist Payload/.app/
/usr/bin/codesign -f -s “iPhone Developer: xxxxxx(2F4935C2YD)” --entitlements entitlements.plist Payload/*.app/

没有文件entitlements.plist:

security cms -D -i 你要签名的mobileprovision路径 > t_entitlements_full.plist
/usr/libexec/PlistBuddy -x -c ‘Print:Entitlements’ t_entitlements_full.plist > t_entitlements.plist
最终得到 t_entitlements.plist 即是需要的plist

检查App:

codesign -d --entitlements - Example.app

(5)重新打包

zip -r qq.ipa Payload

显示签名

security find-identity -v -p codesigning

【需要cd到Payload文件下,才可以生成】
/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i production.app/embedded.mobileprovision) > Entitlements.plist
/usr/libexec/PlistBuddy -c ‘Set :get-task-allow true’ Entitlements.plist

/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i WeChat.app/embedded.mobileprovision) > Entitlements.plist

把ipa包内的PlugIns和Watch文件夹删了,重新签名就可以了。

extension可以全部删掉