uni-app x ios(离线打包 自定义基座 AppStore 发布 解决dSYM文件缺少问题)

uni-app x 离线打包

  1. 进入IOS 下载SDK
  2. 下载好的SDK 拷贝到Mac OS虚拟机里并双击解压

配置UTS插件(没有可跳过)

官网配置

  1. 打开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再试)

打包自定义基座

官网配置

导出自定义基座

  1. 确保原生工程中Target的名称为UniAppX
  2. 确保原生工程中Target -> Info下UIFileSharingEnabled节点值为true
  3. 确保原生工程中应用名称、versionName、versionCode与资源文件中的manifest.json一致
  4. 确保Target -> Info -> uniapp-x节点下的appid与工程中uni-app-x -> apps下的目录名称以及该目录下manifest.json文件中的id三者一致
  5. 确保Target -> Info -> uniapp-x节点下的uniRuntimeVersion与HBuilder X版本号一致
  6. 在Xcode菜单栏中,选择Product -> Archive 根据提示导出ipa文件

导入HBuilderX

  1. 将生成的ipa文件重命名为iOS_debug.ipa
  2. 将iOS_debug.ipa拷贝到uni-app x项目的unpackage/debug目录下
  3. 点击 运行 -> 运行到iOS App基座,勾选使用自定义基座运行,点击运行即可

发布到AppStore

创建Certificates (证书)

注意导出来的证书改名以下

需要创建2个证书

  1. 参考创建流程

创建Profiles (描述文件)

需要创建3个描述文件

  1. 参考创建流程

  1. 添加图标

错误1

修改创建UTS插件项目 Framework 改成 Do Not Embed

错误2

解决dSYM文件没有生成问题

  1. 打开终端 -> 定位到二进制文件
BINARY_PATH=~/Desktop/UniAppX-iOS@4.66/SDK/Libs/CocoaAsyncSocket.xcframework/ios-arm64/CocoaAsyncSocket.framework/CocoaAsyncSocket
  1. 创建临时目录
TMP_DIR=$(mktemp -d)
  1. 生成 dSYM 文件
dsymutil "$BINARY_PATH" -o "$TMP_DIR/CocoaAsyncSocket.framework.dSYM"
  1. 验证 UUID
dwarfdump --uuid "$TMP_DIR/CocoaAsyncSocket.framework.dSYM"
  1. 复制到归档包
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值