Unity一键导出iOS的IPA安装包

发表于2018-12-11
评论5 9.6k浏览

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

下面是每一项的说明:

  1. 证书目录的全路径。
  2. 版本号。
  3. 导出Apk的bundle id。
  4. 如果第三项导出Apk的bundle id对应的证书找不到,会有一个错误提示。然后下面会列出当前证书目录下证书所含的所有bundle id。你可以选择一个,然后第三项的内容会被修正。证书文件被更新或者工程被重新编译,缓存数据被清除,请点击刷新按钮重新解析证书导入缓存。
  5. 当前证书目录下证书所含的所有bundle id。可以选择1个,第三项的bundle id会随之改变。
  6. Xcode的bitcode选项。万恶之源,请保持他勾上,不如会导致时间变得很长,这里是演示怎么控制导出的Xcode工程的选项。
  7. 勾上此选项,会在出包时加上BuildOptions.Development | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging
  8. 工具里包含一个空场景,勾上时会只包含这个空场景,否则包含Player Settings下的场景。
  9. 如果一切顺利,点击此按钮回生成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

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引