Ipa打包、重签名及资源文件修改研究
一.ipa打包
随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱,越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,这里提供一种比较智能的打包方式来减少其带来的各种不便。
通常打包采用xcodebuild和xcrun两个命令,xcodebuild负责编译,xcrun负责将app打成ipa。
xcodebuild:通过工程文件,生成app文件。
xcrun:通过app文件,来生成ipa文件(包含了签名的过程)。
打包步骤:
1.使用xcodebuild命令打包成.app文件
这里以Demo--CustomAuthView为例
cd 拖拽工程文件夹到终端中生成一个路径,然后回车,进去到相应的工程目录,效果如下:
输入 xcodebuild 命令并执行
编译成功会得到的显示信息!
打开目录
可以看到在根目录中生成了一个build文件夹,我们进入之后可以找到扩展名为.app的文件:
实际上我们直接使用Xcode编译app之后也会在 模拟器对应的沙盒路径下生成.app文件.
2.手机安装.app文件应用(.app实际上就是我们的应用包,可以通过工具直接安装)
如图使用xcode ,菜单 window/Device即可管理手机上的应用,如下图:
点击图中的加号,即可添加我们打包成的.app文件!
这样就完成了,最简单的应用安装的过程!
3.把 app文件打包为ipa文件
使用shell脚本,添加到 xcode build phases中去
添加如下的命令:
xcrun -sdk iphoneos PackageApplication -v 源app路径 -o 输出的ipa路径 --sign "iPhone Distribution:XXXXXX" --embed “embed.mobileprovision”
参数解释:
打包:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v path/To/xxx.app -o xxx.ipa
其中:-v 对应的是app文件的绝对相对路径 –o 对应ipa文件的路径跟文件名 –sign 对应的是 发布证书中对应的公司名或是个人名 embed是配置文件
注意如果对应的Distribution 配置中已经配置好了相关证书信息的话 –sign 和 –embed可以忽略
这里直接使用你的.app文件的绝对路径, 生成.ipa的绝对路径(配置好了签名和证书,可以去掉 --sign 和 --embed):
/usr/bin/xcrun -sdk iphoneos PackageApplication -v
/Users/lisa/Downloads/v3.3.0/Demo/CustomAuthView/build/Release-iphoneos/CustomAuthView.app -o
/Users/lisa/Downloads/v3.3.0/Demo/CustomAuthView/build/Release-iphoneos/CustomAuthView.ipa
添加方法如下:
添加到此处:
运行结果:
可以看到成功生成了.ipa文件,我们可以把此ipa文件上传到其它应用发布平台上,就可以手机扫描下载安装!
当然最简单的方法还是配置好发布证书直接使用Xcode帮我们打包上传,不过这样做的效率不太高!
二.ipa重签名
将程序打包成ipa包后,ipa包中会包含Provisioning Profile和_CodeSignature等文件,里面包括了对整个ipa的签名信息。一旦改动ipa中的任何内容,签名就会失败,导致ipa无法安装,所以要修改ipa包中的内容,就需要解决ipa包的重签名问题,也可将一个ipa包重签名以便安装在一个非越狱的设备。
1.准备工作:
首先要下载并安装Xcode,里面有个codesign_allocate程序,在安装时/usr/bin中会多一个codesign的程序,该程序用于ipa包的签名。
目前,重签名主要用于企业证书重签名个人证书发布的ipa包,包括各种助手及企业内测包的发布等。需要企业证书的Certificate文件,私钥文件,Provisioning Profile文件等。(http://blog.csdn.net/phunxm/article/details/42685597/)注意企业证书一定要是iOS Distribution的类型,不能是iOS Development。
在重签名前,让我们先看看一个完整的ipa包有哪些与证书相关的东西!打开ipa包,会发现_CodeSignature和embedded.mobileprovision两个文件
_CodeSignature,ipa包签名文件
embedded.mobileprovision,证书配置文件
因此,替换上面两个文件就解决了ipa重签名的主要问题。
2.企业证书重签名以及修改资源文件:
这边以Demo--CustomAPICall为例,先使用这个demo,打包成app,然后生成ipa,然后在这个ipa基础上重签名生成新的ipa,最后在修改包里的启动图片,在打包看是否正常:
(1) 生成.app
使用xcodebuild命令生成app包:
(2)将app打包成ipa
使用
/usr/bin/xcrun -sdk iphoneos PackageApplication -v
/Users/lisa/Downloads/v3.3.1/Demo/CustomAPICall/Build/Release-iphoneos/CustomAPICall.app -o
/Users/lisa/Downloads/v3.3.1/Demo/CustomAPICall/Build/Release-iphoneos/CustomAPICall.ipa
结果如下图:
(3) 使用企业证书重签名ipa:
准备工作:需要将描述文件放在app同一个目录下以及重签名写的脚本文件。
重签名脚本实现:
附加脚本代码:
rezip_IPA
实现脚本:
这里需要自己输入的东西:
之前生成的ipa文件;
对应的描述文件
证书名称
开发者有可能需要修改Bundle id
另外配置文件必须要放在当前的目录里
可以看到生成效果:
最后安装:
(4)修改app包里面的启动图:
准备工作:将需要修改的图片放在app同个目录
可以打开看包里的内容,可以看到相应的启动图:
使用脚本修改
可以看到包里的启动图改变:
最后安装即可!
文/Mob开发者平台 资深技术支持工程师 刘芳丽