Unity一键导出iOS的IPA安装包
1. 概述
本文出自Unity一键导出iOS安装包工具的说明文档容。最最重要的是证书的权限设置,其他根据本文指引和Google,可以毫无障碍地实现此功能。当然,捷径也是有的:
IpaExporter in Unity Asset Store.
如题所述,本文的目的是一键导出iOS安装包。只要提供了证书文件,不需要Apple账号和密码,就可以同时导出ad-hoc和ios store的安装包。工具里提供了一个简单的证书解析器,所以打包的信息均从证书中提取,不需要额外配置,易于维护,省时省心。工具内包含所有脚本,可按需修改。
2. 怎么做
2.1. 准备工作
- 有效的Apple证书
- 证书的App ID不包含通配符. (如前述,导出Apple工程的APP ID用的是证书里的App ID,如果要包含通配符,你得把App ID hard code一下)
2.2. 导入证书并开放访问权限
每次更新证书(私钥),都得重做步骤2.2.2至2.2.3。如果App签名失败,你得重新检查/重做这些步骤。
开放证书权限会导致任何应用都可以使用其进行签名,目前来看也不能拿他去干什么坏事情。
2.2.1 导入私钥和证书
鼠标双击文件即可。
私钥如果是p12文件会需要密码,需要私钥提供者提供。如果私钥有更新,可能需要删除原导入的证书后,再导入新的证书(我们试过一次旧证书不删除无法更新的情况)。
如果仅更新证书,直接替换原证书文件双击即可。
2.2.2 开放证书权限(非常重要)
因为在工具里,我们是用bash脚本进行签名的,所以不会弹出窗口请求证书权限,所以我们需要设置证书的权限为”allow all…”。所有步骤见下图(中文版请自行人工智能匹配)。
对每一个证书,你需要检查/重做步骤6-10。
2.2.3 Copy证书进工程
如前所诉,工具里包含了一个简单的证书解析工具,我们可以将证书Copy进工程,当配置文件用。
Copy文件 .mobileprovision 到工程相对目录 **Assets/IpaExporter/IosProvisioningProfile/* .
如果你的工程像我的一样,有几个App Id,那么我建议把同一个App Id的证书文件放到一个这个APP Id命名的目录下。看起来路径像是这样子: Assets/IpaExporter/IosProvisioningProfile/[bundleid]/*.mobileprovision.
目录下仅需要保留最新的证书文件,删掉旧的文件。一旦新的证书在苹果页面上生成,旧的就没用了,所以也没必要保留他。如果新旧文件放在一起,工具没区分,会用错证书。
2.3. 简要的一键打包页面
在工具里可以通过菜单路径打开一键打包页面: IpaExproter -> Build Ipa Window。
下面是每一项的说明:
- 证书目录的全路径。
- 版本号。
- 导出Apk的bundle id。
- 如果第三项导出Apk的bundle id对应的证书找不到,会有一个错误提示。然后下面会列出当前证书目录下证书所含的所有bundle id。你可以选择一个,然后第三项的内容会被修正。证书文件被更新或者工程被重新编译,缓存数据被清除,请点击刷新按钮重新解析证书导入缓存。
- 当前证书目录下证书所含的所有bundle id。可以选择1个,第三项的bundle id会随之改变。
- Xcode的bitcode选项。万恶之源,请保持他勾上,不如会导致时间变得很长,这里是演示怎么控制导出的Xcode工程的选项。
- 勾上此选项,会在出包时加上BuildOptions.Development | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging。
- 工具里包含一个空场景,勾上时会只包含这个空场景,否则包含Player Settings下的场景。
- 如果一切顺利,点击此按钮回生成Apk包。Apk包生成后, 会弹出其所在目录。如果失败,参考3.3获取失败日志。
3. 工具详述
3.1. 目录结构
以下文件路径均相对于IpaExporter,各文件说明如下:
文件名 | 说明 |
---|---|
Config/IosBuildingOptions.json | 工具选项配置,如果没有会自动生成一份默认的。 |
Demo/Scene/0.unity | 演示用的空场景。 |
IosProvisioningProfile/ | 证书( *.mobileprovision)目录 。 |
Editor/BuilderMenu.cs | Unity菜单 |
Editor/BuildIpaWindow.cs | 一键打包页面 |
Editor/IosProvisioningProfileMgr.cs | 证书的解析和管理脚本。 |
Editor/IpaExporter.cs | 此脚本实现了下文3.2里的打包步骤。 |
3.2. 打包步骤
点击Build按钮,会触发开始打包。打包的逻辑在文件 IpaExporter.cs里。步骤如下:
- 步骤 1: 准备打包环境。打包UI上的配置会从文件反序列化,并不依赖UI。这样方便从Unity命令行启动打包,方便日常的Daily Build。
- 步骤 2: 导出XCode工程。导出工程时优先选择开发证书,方便打开XCode工程时调试。如果没有开发证书,会选择逻辑上的第一个证书(天知道是哪个,不重要,最后导出的IPA包由脚本指定)。
- 步骤 3: 根据需要修改XCode工程。Unity5以后提供了接口,工具中把Bitcode选项禁用了。你可以加其他的capability,如推送之类的。
- 步骤 4: XCode工程里,苹果把导出IPA文件分成了两步,分别是archive和export。这一步里工具会生成两类bash脚本,一类脚本名字为archive.sh,就一个,用来编译并生成release版的无签名archive文件;另一类脚本叫export_xxx.sh,用来生成各个Provisioning Profile对应的IPA。需要注意的是,Development Provisioning Profile没有生成对应的脚本,因为测试发现Development Provisioning Profile里的team名字可能和私钥对不上。如果你一定要生成Development版的IPA,你可能需要hard code组名(可能还有其他信息),不过大多数时候我们只生成app-store版和adhoc版的证书。
- 步骤 5: 执行步骤4里生成的脚本。
3.3. Logs
失败的时候,你可以到下面的地方查找日志:
- 首先检查Unity Editor里的控制台窗口,打包步骤里1-4步如果有错误,会输出到这里。
- 打包步骤里第五步执行脚本的日志会被输出到下面的日志文件: [TheProjectPath]/OsxCmd/cmd.log