一、简介
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或arm64e(Apple Silicon Mac)。在开发跨平台应用,可以根据目标平台调整适配策略:
2、测试项目正常运行后,则进行本地打包,获得编译后的源码。

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

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

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

Android:需要指定armeabi-v7a、arm64-v8a、x86等。iOS:通常只需要支持arm64即可,如果需要运行到模拟器则需要勾上x86。
四、离线工程的调整
- 代码导入后,需要进行一些离线打包工程上的细节调整,
注意:没有开发者账号是不影响你本地运行模拟器跟真机调试的,运行真机是临时证书,有时效性的。 - 包名替换(例如
com.dzm.test),及启动自动证书配置,未调整之前是这样的:
切到 Signing & Capabilities 进行配置,Team 账号不登录不影响本地模拟器测试,但影响真机调试与发包。

配置后再切回 General 看看

- 配置
App名称,同Uniapp中的应用名称,也就是打包或运行到设备上显示的,修改CFBundleDisplayName就是App 名称,官方提供了中英文版本配置:
如果不想这样配置,也可以直接把这个 InfoPlist.strings 删除,或者去除内部所有字段,因为 InfoPlist.strings 中的 CFBundleDisplayName 优先级更高,移除后去 info 配置中添加一个 Bundle display name 效果一样:

如果遇到展示问题,可以干脆直接将所有的 DisplayName 都写成一样的,包括 General、InfoPlist、Info 里面都保持一致,可以自行决定,但是按上面的配置应该不会有问题,这条仅做为备选方案。
- 然后运行模拟器即可,可能会遇到报错 # iOS Building for ‘iOS-simulator‘, but linking in object file xxx 点这里进行解决,再重新运行即可。
- 模拟器运行成功后,会提示报错
appkey配置错误,配置一下appkey,需要申请一下,有则可以直接拷贝:
1、打开 Uniapp 开发者后台,登录一下。

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

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

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


5、拷贝好后,回到 Xcode 的 Info 配置中更换 appkey,找 dcloud_appkey 替换它的值,不要找错了,其他的什么 ID 先不要管,做到功能了再去替换。
如果没有找到 dcloud_appkey,可以通过鼠标放到任意一行上悬浮,出来 + 号,添加一行,填入 dcloud_appkey,并在后面的值上填入拷贝好的 key 也是一样的。


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

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. 解决方案。
解决后就是这样的:

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

六、打包
- 附:# iOS Xcode 打包和发版【详细流程】,正式线上包还需要按下面的要求进行调整再打包,测试包直接按下面的打包
ipa拿出来用就行。 - 普通本地打包
ipa1、Product -> Archive直接打包
2、如果有弹出授权窗口,直接输入密钥,点击始终允许。

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


- 打包
ipa发布到AppStore细节
1、需要移除一下control.xml中的debug=true配置,如果是开发测试中则无所谓,这个配置会输出调试日志:
2、确保 Run 与 Archive 编译状态为 Release,这是正式线上包必须要确认的,但当打包完成后,测试运行的时候 Run 还是需要恢复成 Debug。



3、Product -> Archive 直接打包

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

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


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
















