uni-app x 离线打包
- 进入IOS 下载SDK
- 下载好的SDK 拷贝到Mac OS虚拟机里并双击解压
![]()
![]()
配置UTS插件(没有可跳过)
- 打开Xcode 在左上角 File->New->Project
项目名称:unimoduleUniTest
Build Settings -> Mach-O Type 设置为Dynamic Library
Build Settings -> Other Linker Flags 中添加-ObjC (注意:字母o和c大写)
Build Settings -> Build Libraries for Distribution 设置为YES
Build Settings -> Enable Module Verifier 设置为NO
Build Settings -> Framework Search Paths 中添加SDK的Libs目录(操作方法:双击展开Framework Search Paths将SDK/Libs文件夹拖入即可)
将SDK中SDK/ExtApiSrc/UTSOC.h以及SDK/ExtApiSrc/UTSOC.mm添加到插件工程中
添加源文件(SDK/ExtApiSrc 目录下),添加framework依赖库(SDK/Libs 目录下)
ut-config.json输入以下代码
{
"hooksclasses":[
"UTSSDKModulesDCloudUniPaymentAlipayAlipayHookProxy",
"UTSSDKModulesDCloudUniPaymentWxpayWxpayHookProxy"
],
"providers": [
{
"name": "alipay",
"service": "payment",
"class":"UTSSDKModulesDCloudUniPaymentAlipayUniPaymentAlipayProvider"
},
{
"name":"wxpay",
"service":"payment",
"class":"UTSSDKModulesDCloudUniPaymentWxpayUniPaymentWxpayProvider"
}
],
"components": [
{
"name":"video",
"class":"UTSSDKModulesDCloudUniVideoVideoComponent",
"delegateClass":"VideoComponentRegister"
}
]
}
搜索 Swift Language Version 设置Swift 6(没有这个选项跳过build好像才会出现)
打开Xcode 在左上角 File->New->Project
在菜单栏中 Product -> Show Build Floder in Finder 获取编译产物所在路径(这一步可以忽略)
(同样注意 Release 或 Debug 模式)
打开终端 > 使用xcodebuild命令行创建xcframework
xcodebuild -create-xcframework -framework 真机路径/unimoduleUniGetbatteryinfo.framework -framework 模拟器路径/unimoduleUniGetbatteryinfo.framework -output 导出路径/unimoduleUniGetbatteryinfo.xcframework
例如:xcodebuild -create-xcframework -framework /Users/ac/Library/Developer/Xcode/DerivedData/UniAppXDemo-fgqppdhmzenuuidyckopirchyvwc/Build/Products/Debug-iphoneos/unimoduleUinTest.framework -framework /Users/ac/Library/Developer/Xcode/DerivedData/UniAppXDemo-fgqppdhmzenuuidyckopirchyvwc/Build/Products/Debug-iphoneos/unimoduleUinTest.framework -output /Users/ac/Desktop/unimoduleUinTest.xcframework
执行完后桌面有说明导出成功
配置主程序
![]()
![]()
先移除再添加
![]()
![]()
添加点击 +
![]()
Build Settings -> Other Linker Flags 中添加-ObjC、-ld_classic
引入UTS 插件
修改默认显示点击跳转 UniAppX 页面
在AppDelegate.m添加以下代码(Main 可以改成 LaunchScreen)
// 调用UniAppBridge方法
// dispatch_async(dispatch_get_main_queue(), ^{
// [UniAppBridge pushUniViewControllerWithRootViewController:initialViewController];
// });
[UniAppBridge pushUniViewControllerWithRootViewController:initialViewController];
在菜单栏中 Product -> run 运行项目没问题说明成功了(其他问题 Product -> Clean Build Folder 清除缓存删除APP再试)
打包自定义基座
导出自定义基座
- 确保原生工程中Target的名称为UniAppX
- 确保原生工程中Target -> Info下UIFileSharingEnabled节点值为true
- 确保原生工程中应用名称、versionName、versionCode与资源文件中的manifest.json一致
- 确保Target -> Info -> uniapp-x节点下的appid与工程中uni-app-x -> apps下的目录名称以及该目录下manifest.json文件中的id三者一致
- 确保Target -> Info -> uniapp-x节点下的uniRuntimeVersion与HBuilder X版本号一致
- 在Xcode菜单栏中,选择Product -> Archive 根据提示导出ipa文件
导入HBuilderX
- 将生成的ipa文件重命名为iOS_debug.ipa
- 将iOS_debug.ipa拷贝到uni-app x项目的unpackage/debug目录下
- 点击 运行 -> 运行到iOS App基座,勾选使用自定义基座运行,点击运行即可
发布到AppStore
创建Certificates (证书)
注意导出来的证书改名以下
需要创建2个证书
创建Profiles (描述文件)
需要创建3个描述文件
- 添加图标
错误1
修改创建UTS插件项目 Framework 改成 Do Not Embed
错误2
解决dSYM文件没有生成问题
![]()
![]()
![]()
![]()
- 打开终端 -> 定位到二进制文件
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/CocoaAsyncSocket.xcframework/ios-arm64/CocoaAsyncSocket.framework/CocoaAsyncSocket
- 创建临时目录
TMP_DIR=$(mktemp -d)
- 生成 dSYM 文件
dsymutil "$BINARY_PATH" -o "$TMP_DIR/CocoaAsyncSocket.framework.dSYM"
- 验证 UUID
dwarfdump --uuid "$TMP_DIR/CocoaAsyncSocket.framework.dSYM"
- 复制到归档包
cp -R "$TMP_DIR/CocoaAsyncSocket.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/
其他dSYM命令
# DCUniAdFoundation.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/DCUniAdFoundation.xcframework/ios-arm64/DCUniAdFoundation.framework/DCUniAdFoundation;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/DCUniAdFoundation.framework.dSYM";
cp -R "$TMP_DIR/DCUniAdFoundation.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
# DCloudUTSExtAPI.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/TemporarySampleFramework/DCloudUTSExtAPI.xcframework/ios-arm64/DCloudUTSExtAPI.framework/DCloudUTSExtAPI;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/DCloudUTSExtAPI.framework.dSYM";
cp -R "$TMP_DIR/DCloudUTSExtAPI.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
# DCloudUTSFoundation.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/DCloudUTSFoundation.xcframework/ios-arm64/DCloudUTSFoundation.framework/DCloudUTSFoundation;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/DCloudUTSFoundation.framework.dSYM";
cp -R "$TMP_DIR/DCloudUTSFoundation.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
# DCloudUniCanvas.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/DCloudUniCanvas.xcframework/ios-arm64/DCloudUniCanvas.framework/DCloudUniCanvas;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/DCloudUniCanvas.framework.dSYM";
cp -R "$TMP_DIR/DCloudUniCanvas.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
# DCloudUniappRuntime.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/DCloudUniappRuntime.xcframework/ios-arm64/DCloudUniappRuntime.framework/DCloudUniappRuntime;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/DCloudUniappRuntime.framework.dSYM";
cp -R "$TMP_DIR/DCloudUniappRuntime.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
# KTVHTTPCache.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/KTVHTTPCache.xcframework/ios-arm64/KTVHTTPCache.framework/KTVHTTPCache;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/KTVHTTPCache.framework.dSYM";
cp -R "$TMP_DIR/KTVHTTPCache.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
# SDWebImage.framework
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/SDWebImage;
TMP_DIR=$(mktemp -d);
dsymutil "$BINARY_PATH" -o "$TMP_DIR/SDWebImage.framework.dSYM";
cp -R "$TMP_DIR/SDWebImage.framework.dSYM" /Users/ac/Library/Developer/Xcode/Archives/2025-05-30/UniAppX\ 2025-5-30,\ 00.37.xcarchive/dSYMs/;
查看库uuid命令
dwarfdump --uuid ~/Desktop/UniAppX-iOS@4.66/SDK/Libs/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/SDWebImage
重新Validate App看看是否还有缺少dSYM
Product -> Archive 发布到AppStore