一、简介

  • App 离线 SDK 暂时不支持 Swift,依然使用的是 Object-C,未来不清楚。
  • uniapp 提供了 云打包 与 本地打包 两种方案,云打包 需要排队且还有次数限制,本地打包 则就没有这些限制,而且会 本地打包 对开发 原生插件 有很大的帮助。
  • 细节:需要 Xcode 打包的时候,记得先通过工具栏的 Product -> 先 Clean Buidl Folder... -> 再 Build -> 最后再打包或运行,生成基座或者测试离线包都适用这套流程。
    可以使用快捷键,先 Command + Shift + K,再 Command + B,再 打包或运行

二、准备工作

  • 按照官方文档中的 开发环境 下载好开发工具与 SDK 工程即可:iOS 离线官方文档地址
  • 注意当前开发工具 HBuilderX 版本跟下载的 SDK 工程要求是否对应
  • 双击工程文件夹内的 HBuilder-Hello.xcodeproj 打开项目,获取拖入 Xcode 运行起来项目。

三、创建 Uniapp 测试项目

  • 使用 HBuilderX 或 Cli 创建一个测试项目 demo,然后运行到测试机或者模拟器。附:Uniapp 运行到 iOS 真机或模拟器
    1、确认当前模拟器或者真机支持的 cpu 类型,然后进行勾选,这里就是配置要打包的 apk 需要支持哪些 cpu 类型的手机,全要支持可以全支持。
    对于 iOS 开发,通常使用 arm64 架构(当前所有最新的 iOS 设备都支持),而在 模拟器 上运行时可能会使用 x86_64 或 arm64eApple Silicon Mac)。在开发跨平台应用,可以根据目标平台调整适配策略:

2、测试项目正常运行后,则进行本地打包,获得编译后的源码。

Uniapp iOS 本地离线打包(详细流程)_开发者账号

3、看控制台,等待编译完成,去给出的目录找到编译后的源码。

Uniapp iOS 本地离线打包(详细流程)_开发者账号_02

4、替换离线打包工程中的源码

Uniapp iOS 本地离线打包(详细流程)_iOS_03

5、修改 control 文件里面的 appid,其实离线资源文件夹名称就是 appid,可以核对下免得出错。

Uniapp iOS 本地离线打包(详细流程)_开发者账号_04

  • Android:需要指定 armeabi-v7aarm64-v8ax86 等。
  • iOS:通常只需要支持 arm64 即可,如果需要运行到模拟器则需要勾上 x86

四、离线工程的调整

  • 代码导入后,需要进行一些离线打包工程上的细节调整,注意:没有开发者账号是不影响你本地运行模拟器跟真机调试的,运行真机是临时证书,有时效性的。
  • 包名替换(例如 com.dzm.test),及启动自动证书配置,未调整之前是这样的:

切到 Signing & Capabilities 进行配置,Team 账号不登录不影响本地模拟器测试,但影响真机调试与发包。

Uniapp iOS 本地离线打包(详细流程)_开发者账号_05

配置后再切回 General 看看

Uniapp iOS 本地离线打包(详细流程)_开发者账号_06

  • 配置 App 名称,同 Uniapp 中的应用名称,也就是打包或运行到设备上显示的,修改 CFBundleDisplayName 就是 App 名称,官方提供了中英文版本配置:

如果不想这样配置,也可以直接把这个 InfoPlist.strings 删除,或者去除内部所有字段,因为 InfoPlist.strings 中的 CFBundleDisplayName 优先级更高,移除后去 info 配置中添加一个 Bundle display name 效果一样:

Uniapp iOS 本地离线打包(详细流程)_开发者账号_07

如果遇到展示问题,可以干脆直接将所有的 DisplayName 都写成一样的,包括 GeneralInfoPlistInfo 里面都保持一致,可以自行决定,但是按上面的配置应该不会有问题,这条仅做为备选方案。

Uniapp iOS 本地离线打包(详细流程)_离线_08

2、点击应用名称进入,找到 各平台信息离线打包 Key 管理已经迁移到这里面),创建一个 iOS 平台的,每个平台都只能单独创建,不能共用。

Uniapp iOS 本地离线打包(详细流程)_开发者账号_09

3、点击 新增 后,提示填内容即可,点击 提交

Uniapp iOS 本地离线打包(详细流程)_iOS_10

4、在列表中点击 创建离线 Key,然后点击 查看离线 Key,拷贝即可

Uniapp iOS 本地离线打包(详细流程)_离线_11

Uniapp iOS 本地离线打包(详细流程)_离线_12

5、拷贝好后,回到 Xcode 的 Info 配置中更换 appkey,找 dcloud_appkey 替换它的值,不要找错了,其他的什么 ID 先不要管,做到功能了再去替换。

如果没有找到 dcloud_appkey,可以通过鼠标放到任意一行上悬浮,出来 + 号,添加一行,填入 dcloud_appkey,并在后面的值上填入拷贝好的 key 也是一样的。

Uniapp iOS 本地离线打包(详细流程)_开发者账号_13

Uniapp iOS 本地离线打包(详细流程)_离线_14

6、重新运行项目即可,可以删除手机或模拟器中的 app 后再重新运行。

Uniapp iOS 本地离线打包(详细流程)_iOS_15

7、如果运行后,有警告先不管,例如 using an empty LLDB target which can cause slow memory reads from remote devices. 这个是使用模拟器的警告,真机上没有影响。

五、运行到真机

  • 可以先登录自己的 Apple账号 以私人账号的身份使用下临时的证书,登录是的非开发者账号进行本地测试,这样能运行到真机,但不能导出 ipa 包,不能发布,如果证书没生成成功,可以切换一下上面的 Automatically manage signing 开关,或者重启一下 Xcode。这边生成证书后但 Debug 环境报了警告:附 # iOS xxx has conflicting provisioning settings. 解决方案。

解决后就是这样的:

Uniapp iOS 本地离线打包(详细流程)_开发者账号_16

  • 在手机上打开 设置 -> 隐私与安全性 -> 开发者模式 打开,会自动重新启动手机。
  • 连接电脑与手机,然后在项目中选择自己的真机设备,运行即可,会开始给手机安装调试组件,等待运行成功即可。
    安装 app 成功后,这种情况下还会弹出是 不受信任的证书,需要去 设置 -> 通用 -> VPM与设备管理 里面找到不受信任的证书,点击信任,然后回到桌面打开应用即可,或者用 Xcode 重新运行自动打开也行。

Uniapp iOS 本地离线打包(详细流程)_离线_17

六、打包

  • 附:# iOS Xcode 打包和发版【详细流程】,正式线上包还需要按下面的要求进行调整再打包,测试包直接按下面的打包 ipa 拿出来用就行。
  • 普通本地打包 ipa1、Product -> Archive 直接打包

2、如果有弹出授权窗口,直接输入密钥,点击始终允许

Uniapp iOS 本地离线打包(详细流程)_iOS_18

3、导出 ipa,这一步必须需要付费了的 开发者账号,之前登录自己的账号但不是 开发者账号 的可不导出。

Uniapp iOS 本地离线打包(详细流程)_离线_19

Uniapp iOS 本地离线打包(详细流程)_开发者账号_20

  • 打包 ipa 发布到 AppStore 细节
    1、需要移除一下 control.xml 中的 debug=true 配置,如果是开发测试中则无所谓,这个配置会输出调试日志:

2、确保 Run 与 Archive 编译状态为 Release,这是正式线上包必须要确认的,但当打包完成后,测试运行的时候 Run 还是需要恢复成 Debug

Uniapp iOS 本地离线打包(详细流程)_离线_21

Uniapp iOS 本地离线打包(详细流程)_开发者账号_22

Uniapp iOS 本地离线打包(详细流程)_离线_23

3、Product -> Archive 直接打包

Uniapp iOS 本地离线打包(详细流程)_开发者账号_24

4、如果有弹出授权窗口,直接输入密钥,点击始终允许

Uniapp iOS 本地离线打包(详细流程)_离线_25

5、发包或导出 ipa,这一步必须需要付费了的 开发者账号,之前登录自己的账号但不是 开发者账号 的可不导出。

Uniapp iOS 本地离线打包(详细流程)_离线_26

Uniapp iOS 本地离线打包(详细流程)_离线_27

七、离线自定义基座打包


作者:卡尔特斯
链接:https://juejin.cn/post/7446248945129865266
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。