1、首先准备好待签名的ipa (此ipa 为非299$的开发账号签名后的ipa),企业版发布证书,embedded.mobileprovision配置文件,entitlements.plist 文件。证书配置与创建配置文件这里不做赘述。 entitlements.plist 文件格式为:
AAAAAA.com.test.test 可在开发账号中获取,如果嫌麻烦可以直接使用 iResign 工具直接签名后,解压签名后得ipa也可以得到该文件。
生成entitlements.plist授权机制文件
1、通过security命令,从embedded.mobileprovision文件中生成一个完整的plist文件
终端命令:
security cms -D -i "mobileprovision文件" > "entitlements文件"
具体操作命令:
security cms -D -i /../embedded.mobileprovision > entitlements_full.plist
2、获取其中的Entitlements字段
终端命令:
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' entitlements_full.plist > entitlements.plist
2、将embedded.mobileprovision配置文件,entitlements.plist,ipa 放到同一个文件夹下。方便操作。将embedded.mobileprovision替换到Payload/Your.app/
a、解压ipa
$unzip Your.ipa
b、删除原先的签名信息文件
$rm -rf Payload/Your.app/_CodeSignature/
c、删除动态库的签名信息文件(这一步在很多重签名文字很少提及,但是又非常重要,动态库没有重签名会导致ipa可以安装,但是打开会闪退。由于我使用了七牛播放器所以删除签名信息,以下以PLPlayerKit.framework为例,大家使用别的动态库请自行删除)
$rm -rf Payload/Your.app/Frameworks/PLPlayerKit.framework/_CodeSignature/
d、动态库重新签名 (如果没有其他动态库可以跳过,多个就逐个签吧)
$codesign -f -s "iPhone Distribution: *******" --entitlements entitlements.plist Payload/Your.app/Frameworks/PLPlayerKit.framework/
查看有效证书("iPhone Distribution: *******" ),找到你要重签名的证书名称
终端命令:
$security find-identity -v
(另外如果里面有.nibs的文件也需要重新签名,不然会打开闪退-这个也是通过奔溃日志查询到的)
e、app重签名
$codesign -f -s "iPhone Distribution: *******." --entitlements entitlements.plist Payload/Your.app
f、打包ipa
$zip -r Yourapp.ipa Payload
3、如果包名改不改无所谓可以直接使用工具重签名,方便快捷。如果需要保持包名不变。可以按以上操作打包。
(如果需要更改包名就去app包里面修改info.plist文件中的bundleid)
entitlements.plist中的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>467LMS7GZX.com.wonerland.TYWebVersion</string>
<key>com.apple.developer.team-identifier</key>
<string>467LMS7GZX</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>467LMS7GZX.com.wonerland.TYWebVersion</string>
</array>
</dict>
</plist>