一. IPA打包

随着苹果手持设备用户的不断增加,iOS应用也增长迅速。同时,随着iPhone被越狱,越来越多的app的渠道也不断增多。为各个渠道打包成了一件费时费力的工作。这里提供一种比较智能的打包方式来减少其带来的各种不便。

通常打包采用xcodebuild和xcrun两个命令。xcodebuild负责编译,xcrun负责将app打成ipa。xcodebuild通过工程文件生成app文件,而xcrun通过app文件生成ipa文件(包含了签名的过程)。

打包步骤如下:

1. 使用xcodebuild命令打包成.app文件

以Demo--CustomAuthView为例:

```bash

cd 拖拽工程文件夹到终端中生成一个路径,然后回车,进去到相应的工程目录

输入 xcodebuild 命令并执行

编译成功会得到的显示信息!

打开目录

可以看到在根目录中生成了一个build文件夹,我们进入之后可以找到扩展名为.app的文件

实际上我们直接使用Xcode编译app之后也会在模拟器对应的沙盒路径下生成.app文件。

```

2. 手机安装.app文件应用(.app实际上就是我们的应用包,可以通过工具直接安装)

如图使用xcode,菜单 window/Device即可管理手机上的应用,如下图:点击图中的加号,即可添加我们打包成的.app文件!这样就完成了最简单的应用安装过程!

3. 把 app文件打包为ipa文件

使用shell脚本,添加到 xcode build phases中去。添加如下的命令:

```bash

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):

```bash

/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 文件等。注意企业证书一定要是 iOS Distribution 的类型,不能是 iOS Development。

在重签名前,让我们先看看一个完整的 ipa 包有哪些与证书相关的东西!打开 ipa 包,会发现 _CodeSignature 和 embedded.mobileprovision 两个文件。

_CodeSignature 是 ipa 包签名文件;embedded.mobileprovision 是嵌入到 ipa 包中的移动设备配置文件。

以下是重签名ipa的步骤:

1. 替换embedded.mobileprovision和证书配置文件。这两个文件是ipa重签名的主要问题所在,因此替换它们可以解决大部分问题。

2. 企业证书重签名以及修改资源文件。以Demo--CustomAPICall为例,首先使用这个demo打包成app,然后生成ipa。接着在这个ipa基础上进行重签名生成新的ipa。最后修改包里的启动图片,并重新打包查看是否正常。

(1) 生成.app

使用xcodebuild命令生成app包。

(2) 将app打包成ipa

使用以下命令将app打包成ipa:

```

/usr/bin/xcrun -sdk iphoneos PackageApplication -v \n/Users/lisa/Downloads/v3.3.1/Demo/CustomAPICall/Build/Release-iphoneos/CustomAPICall.app -o \n/Users/lisa/Downloads/v3.3.1/Demo/CustomAPICall/Build/Release-iphoneos/CustomAPICall.ipa

```

(3) 使用企业证书重签名ipa

准备工作:需要将描述文件放在app同一个目录下以及重签名写的脚本文件。

重签名脚本实现:

附加脚本代码:

实现脚本:

这里需要自己输入的东西:之前生成的ipa文件;对应的描述文件;证书名称;开发者有可能需要修改Bundle id;另外配置文件必须要放在当前的目录里。

可以看到生成效果:最后安装。

(4) 修改app包里面的启动图:准备工作:将需要修改的图片放在app同个目录。可以打开看包里的内容,可以看到相应的启动图。使用脚本修改,可以看到包里的启动图改变。最后安装即可!