文章写于2016/07/13 19:34,搬家到思否。
将一个ipa文件解压后,显示包内容,能够看到app文件目录下蕴含了这2个文件:_CodeSignature(ipa的签订文件)和embedded.mobileprovision(证书配置文件),另外还有一个本人配置的entitlements.plist受权文件,它们就是重签名的要害。
为了不便形容,先定义一些文件名(请依据本人的状况批改):
假如你的证书名为 myInhouse. mobileprovision
假如你的inhouse签订名为 iPhone Distribution: ABCD technology co., LTD.
假如你的ipa包名为 efg.ipa
一、查看证书信息、配置权限
首先,查看myInhouse. mobileprovision的信息,在终端输出命令:
security cms -D -i myInhouse.mobileprovision
执行后输入信息中的内容,失去一个 XML 格局信息,找到Entitlements字段;
而后,创立一个 entitlements.plist 文件,依照上图中Entitlements的信息配置,如下图:
二、编写resign.sh脚本
编写脚本,命名为 resign.sh
#!/bin/shif ! ([ -f "$1" ]); thenecho ----- \"${1}\"文件不存在exitfiipaName=${1%.ipa}if [ "$ipaName" = "$1" ]; thenecho ----- \"${1}\"error 不是ipa文件exitfi## step 1 解压ipaunzip ${ipaName}.ipa## step 2 删除旧签名文件 rm -rf Payload/*.app/_CodeSignature/## step 3 拷贝证书配置和权限文件cp myInhouse.mobileprovision Payload/*.app/embedded.mobileprovisioncp entitlements.plist Payload/*.app/## step 4 重签名(/usr/bin/codesign -f -s "iPhone Distribution: ABCD technology co., LTD." --entitlements Payload/*.app/entitlements.plist Payload/*.app/) || { rm -rf Payload/ rm -rf __MACOSX/exit }## step 5 打包zip -r ${ipaName}_resign.ipa Payload/rm -rf Payload/rm -rf __MACOSX/
三、签名
脚本写完后,将 entitlements.plist 、myInhouse.mobileprovision 、resign.sh 、efg.ipa 放到同一目录ipaResign下,
而后关上终端,cd至ipaResig目录,再执行如下命令运行脚本:
sh resign.sh efg.ipa
稍稍等待,efg_resign.ipa 就OK啦。
装置完efg_resign.ipa不要遗记信赖企业证书,不然进不了利用。
上述工作实现后,如果当前还有须要用同一个证书重签名的,间接将ipa丢到ipaResign,运行脚本就能够了,是不是很不便 ????。
--2016-8-10--补-充--------------我---是---分---割---线----------------
补充一下签名成development和distribution的不同之处。
四、重签成development
尽管很少有需要要这么做,然而最近碰到一个敌人就遇到了。(我能说什么呢..... -.-!)
首先,须要晓得利用的惟一标识(application-identifier)是:证书ID+Bundle Identifier;
证书ID能够在钥匙串中看到,如图,图里括号中的7N2275G95N就是证书ID。
签成development的时候,下面脚本中 step 4 的签订名要与钥匙串中的对应,包含括号和证书ID,所以脚本中第4步应该改成:
## step 4 (/usr/bin/codesign -f -s "iPhone Developer: developerName (7N2275G95N)" --entitlements Payload/*.app/entitlements.plist Payload/*.app/) || { rm -rf Payload/ rm -rf __MACOSX/exit }
这里要特地留神:第4步写developer的证书ID,然而在受权文件 entitlements.plist 中,前缀不能是developer的,而应该与mobileprovision文件中的证书ID统一(查看mobileprovision文件信息参考第一步)。
其余参考第二步。
五、签成distribution
参考第四步,惟一的不同是脚本 step 4 中的签订名要改成公布的签订,证书ID也须要对应。