You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xcodebuild生成xcframework遇Google WebRTC链接错误求解决

问题:xcodebuild构建XCFramework时Google WebRTC引发链接错误

使用xcodebuild创建XCFramework时遭遇链接错误,推测由Google WebRTC导致。以下是使用的终端脚本:

BUILD_DIR=$(dirname "$PWD")/sdk/xc
PROJECT=$PWD/Example/SDK.xcworkspace
TARGET_DIR=$(dirname "$PWD")/sdk/archives

rm -Rf $TARGET_DIR

mkdir -p $BUILD_DIR

mkdir -p $TARGET_DIR

################ Build  SDK

xcodebuild clean -workspace $PROJECT -scheme SDK

# -arch x86_64 arm64 \    MACH_O_TYPE=staticlib
xcodebuild archive \
    -workspace $PROJECT \
    -scheme SDK  \
    -configuration Release \
    -sdk iphonesimulator \
    -destination='generic/platform=iOS Simulator' \
    -archivePath $BUILD_DIR/SDK.iOS-simulator.xcarchive \
    ENABLE_BITCODE=NO \
    SKIP_INSTALL=NO \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES | xcbeautify

xcodebuild archive \
    -workspace $PROJECT \
    -scheme SDK  \
    -configuration Release \
    -sdk iphoneos \
    -destination='generic/platform=iOS' \
    -archivePath $BUILD_DIR/SDK.iOS.xcarchive \
    ENABLE_BITCODE=NO \
    SKIP_INSTALL=NO \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES | xcbeautify

 
xcodebuild -create-xcframework   -framework "$BUILD_DIR/SDK.iOS.xcarchive/Products/Library/Frameworks/SDK.framework" \
                                 -framework "$BUILD_DIR/SDK.iOS-simulator.xcarchive/Products/Library/Frameworks/SDK.framework" \
                                -output "$TARGET_DIR/SDK.xcframework" | xcbeautify

rm -Rf $BUILD_DIR

编译过程中出现如下错误:

❌ ld: building for iOS Simulator, but linking in dylib built for iOS, file '/Example/Pods/GoogleWebRTC/Frameworks/frameworks/WebRTC.framework/WebRTC' for architecture arm64
❌ clang: error: linker command failed with exit code 1 (use -v to see invocation)
** ARCHIVE FAILED **


The following build commands failed:
    Ld /Users/codeing/Library/Developer/Xcode/DerivedData/SDK-bhqgqpyahwxtbjcwvmtbmnnjbqeu/Build/Intermediates.noindex/ArchiveIntermediates/SDK/IntermediateBuildFilesPath/Pods.build/Release-iphonesimulator/SDK.build/Objects-normal/arm64/Binary/SDK normal arm64 (in target 'SDK' from project 'Pods')
(1 failure)

尝试添加-arch x86_64和MACH_O_TYPE=staticlib后,xcodebuild编译通过,但推送到CocoaPods时出错,需解决该问题。


解决方案

1. 修复模拟器架构冲突

错误核心是iOS Simulator的arm64架构尝试链接iOS设备版本的WebRTC库。M系列Mac的模拟器默认使用arm64架构,但GoogleWebRTC Pod中,模拟器与设备的库是分离的,编译时未正确区分。

修改模拟器归档命令,强制指定编译x86_64架构并排除arm64:

xcodebuild archive \
    -workspace $PROJECT \
    -scheme SDK  \
    -configuration Release \
    -sdk iphonesimulator \
    -destination='generic/platform=iOS Simulator' \
    -archivePath $BUILD_DIR/SDK.iOS-simulator.xcarchive \
    ENABLE_BITCODE=NO \
    SKIP_INSTALL=NO \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
    ARCHS=x86_64 \
    EXCLUDED_ARCHS=arm64 | xcbeautify

2. 解决静态库推送CocoaPods的问题

使用MACH_O_TYPE=staticlib转为静态库后CocoaPods报错,通常因以下原因:

  • 静态XCFramework未正确配置modulemap或umbrella header
  • Podspec未设置静态库相关属性

优先方案:保持动态库编译

WebRTC本身为动态库,静态链接易引发符号冲突,建议放弃MACH_O_TYPE=staticlib,先解决架构问题后用动态库构建XCFramework。

静态库适配(若必须使用)

在Podspec中添加静态库配置:

s.static_framework = true
s.pod_target_xcconfig = {
  'OTHER_LDFLAGS' => '-ObjC'
}

同时需确保WebRTC也被静态链接,可自行构建静态版WebRTC或调整Podfile配置。

3. 验证WebRTC库架构

检查GoogleWebRTC库的架构是否正确:

lipo -info /Example/Pods/GoogleWebRTC/Frameworks/frameworks/WebRTC.framework/WebRTC

若模拟器库缺失x86_64,或设备库包含模拟器架构,执行pod install重新拉取,或指定GoogleWebRTC稳定版本。

4. 优化XCFramework构建脚本

为确保归档架构正确,修改设备归档命令,指定仅编译arm64架构:

xcodebuild archive \
    -workspace $PROJECT \
    -scheme SDK  \
    -configuration Release \
    -sdk iphoneos \
    -destination='generic/platform=iOS' \
    -archivePath $BUILD_DIR/SDK.iOS.xcarchive \
    ENABLE_BITCODE=NO \
    SKIP_INSTALL=NO \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
    ARCHS=arm64 | xcbeautify

内容的提问来源于stack exchange,提问作者Musk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:18:11