从原理上解决 uniapp (含第三方插件)打包 iOS APP 失败的问题

最近一段时间,我的团队基于uniapp开发的平台型APP因平台资金合规的要求,需要对接中金支付,uniapp的插件市场有一个别人做好的中金支付插件,但前端开发同事在引用这个 插件时,出现了 iOS APP 打包不成功的情况,开发花了几天时间也没有解决问题,就上升到我这边处理了。

由于我们的 APP大小已经超过 40MB,每次云打包都要收10元打包费用,让前端开发通过砍代码的方式,写了一个 小于 40MB 可以复现问题的 demo APP,这样我就可能通过多次打包一次一次调整并接近问题的核心。

这个demo APP是使用了 APP分享到微信的功能 和 一个中金支付的插件,也正是这 2 个功能触发了本次的问题。

第一次打包失败,看下面问题的现像,明显就是 Undefined symbols,一看就知道是 链接阶段,链接器找不到库,相关的 symbols自然就链接失败了。

cd [PackagePath]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Xlinker -reproducible -target arm64-apple-ios12.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.2.sdk -Os -L[PackagePath]/build/EagerLinkingTBDs/Release-iphoneos -L[PackagePath]/build/Release-iphoneos -L[SourcePath]/libs/UniSDK/Base -L[SourcePath]/libs/UniSDK -L[PackagePath]/utsFrameworks -L[SourcePath]/libs/Universal/DCUniAdWm.xcframework/ios-arm64/ -L[PackagePath]/wgtRoot/__UNI__0278D71/nativeplugins/cpcn-cpcnpay/ios/ -L[SourcePath]/libs/Universal -F[PackagePath]/build/EagerLinkingTBDs/Release-iphoneos -F[PackagePath]/build/Release-iphoneos -F[SourcePath]/libs/UniSDK/Base -F[SourcePath]/libs/UniSDK -F[PackagePath]/utsFrameworks -F[SourcePath]/libs/Universal/DCUniAdWm.xcframework/ios-arm64/ -F[PackagePath]/wgtRoot/__UNI__0278D71/nativeplugins/cpcn-cpcnpay/ios/ -F

### 如何在 UniApp打包 iOS 原生插件 #### 工程准备阶段 为了成功地将原生插件集成到 UniApp 应用程序中并完成打包,开发者需先确保本地环境已安装最新版本的 HBuilderX 和 Xcode。HBuilderX 是 DCloud 官方推出的 IDE,支持跨平台开发;而 Xcode 则是苹果官方提供的用于 macOS 上的应用开发工具集。 #### 创建与配置项目 创建一个新的 UniApp 项目之后,在 `nativeplugins` 文件夹下放置自定义编写的 Objective-C 或 Swift 描述文件以及实现类[^1]。接着按照如下路径进入设置界面:“云编译 -> 设置”,勾选“启用真机运行时自动下载依赖”。这一步骤可以简化后续操作流程中的依赖管理过程。 对于特定于 iOS 的配置项,则需要编辑项目的 manifest.json 文件内的 `"ios"` 字段来指定应用图标、启动页等资源位置,并且还可以在这里声明所使用的第三方 SDK 及其版本号信息[^2]。 #### 编写和测试插件逻辑 编写好所需的原生功能接口后,通过 HBuilderX 提供的功能可以直接调起 iPhone 设备或模拟器来进行即时预览与调试工作。利用这种方式能够快速验证新加入特性是否按预期正常运作。如果遇到问题也可以借助 Safari 浏览器内置 Web Inspector 来辅助排查 JavaScript 调用层面上可能存在的错误。 #### 执行离线打包命令 当确认所有组件都处于良好状态时就可以着手准备正式版发布了。此时应该切换至 Release 模式重新构建整个解决方案,同时注意调整 Info.plist 内部的一些参数选项以满足 App Store Review Guidelines 的要求。最后导出 ipa 文件之前记得再次仔细核对一遍所有的权限申请表单是否有遗漏之处。 ```bash hbuilderx dcloud://build?target=app-iOS&mode=release ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值