博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ipa重签名
阅读量:6977 次
发布时间:2019-06-27

本文共 2221 字,大约阅读时间需要 7 分钟。

  hot3.png

将一个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也需要对应。

 

 

转载于:https://my.oschina.net/Jerod/blog/711360

你可能感兴趣的文章
京东应用架构设计与治理
查看>>
ajax传JSON时设置的contenttype导致JAVA中request.getParameter("")怎么也接收不到数据
查看>>
ElementUI日期选择器时间选择范围限制
查看>>
淘宝分布式数据层TDDL
查看>>
python将列表元素按指定数目分组
查看>>
Laravel获取所有的数据库表及结构
查看>>
visual studio 中将选中代码相同的代码的颜色设置,修改高亮颜色
查看>>
Tomcat 配置详解/优化方案(转)
查看>>
website项目的reference问题
查看>>
微信小程序“反编译”实战(一):解包
查看>>
【设计模式】抽象工厂模式 Abstract Factory Pattern
查看>>
解决WPF的ScrollViewer在使用触摸屏时,滑到尽头窗口抖动的情况
查看>>
微信自动抢红包android实现
查看>>
2018年目标计划
查看>>
888. 公平的糖果交换
查看>>
Spring Boot File Upload / Download Rest API Example
查看>>
使用Python登录Github网站
查看>>
Android wifi powersave
查看>>
Jvm(24),回收策略-----标记整理算法
查看>>
Linux安装telnet
查看>>