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

使用Fastlane构建EAS iOS失败:“提取模块接口版本错误”

问题描述

环境信息

  • 托管工作流(Managed Workflow)
  • eas-cli 版本为 0.60.0

目标

将第三方原生库以npm包形式嵌入Expo托管项目。

现有资源

供应商提供的iOS端(Swift).xcframework文件和Android端.aab文件。

操作步骤

  1. 使用npx create-react-native-library命令生成自定义React Native库模板
  2. 将.aab和.xcframework文件放入对应目录
  3. 为双平台编写Java和Swift实现代码
  4. 本地构建该库
  5. 发布到私有GitHub仓库前,在create-react-native-library生成的example应用中测试,功能正常
  6. 将RN包发布到仓库并安装到Expo项目中
  7. 卡住步骤:执行eas build构建自定义开发客户端时失败

错误信息

❌  (/Users/expo/workingdir/build/app/node_modules/@bridgemoney/react-native-sardine/ios/ReactNativeSardine.swift:2:8)

  1 | import Foundation
> 2 | import MobileIntelligence
    |        ^ error extracting version from module interface
  3 | 
  4 | @objc(ReactNativeSardine)
  5 | class ReactNativeSardine: RCTEventEmitter {

❌  (/Users/expo/Library/Developer/Xcode/DerivedData/BridgeGo-cyholdfvmztnmecppglqrfgqcshq/Build/Intermediates.noindex/ArchiveIntermediates/BridgeGo/BuildProductsPath/Debug-iphoneos/XCFrameworkIntermediates/bridgemoney-react-native-sardine/MobileIntelligence.framework/Modules/MobileIntelligence.swiftmodule/arm64-apple-ios.swiftinterface:1:1)

> 1 | // swift-interface-format-version: 1.0
    | ^ error extracting version from module interface
  2 | // swift-compiler-version: Apple Swift version 5.5.2 (swiftlang-1300.0.47.5 clang-1300.0.29.30)
  3 | // swift-module-flags: -target arm64-apple-ios11.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name MobileIntelligence
  4 | import AdSupport
▸ ** ARCHIVE FAILED **
▸ The following build commands failed:
▸   CompileSwift normal arm64 /Users/expo/workingdir/build/app/node_modules/@bridgemoney/react-native-sardine/ios/ReactNativeSardine.swift (in target 'bridgemoney-react-native-sardine' from project 'Pods')
▸   EmitSwiftModule normal arm64 (in target 'bridgemoney-react-native-sardine' from project 'Pods')
▸   CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler (in target 'bridgemoney-react-native-sardine' from project 'Pods')
▸ (3 failures)

补充上下文

  • 在eas.json中使用iOS最新镜像,对应XCode 13.4和Swift 5.6.1
  • 本地Mac使用XCode 13.4.1和Swift 5.6.1,测试用example应用编译运行正常

解答

错误含义

这个错误由Swift编译器版本不兼容导致:

  • 你使用的.xcframework是用Swift 5.5.2编译生成的(错误日志中// swift-compiler-version: Apple Swift version 5.5.2可佐证)
  • EAS构建环境使用的是Swift 5.6.1,高版本编译器无法正确解析低版本生成的Swift模块接口文件,因此抛出"error extracting version from module interface"错误。

本地能正常运行是因为XCode 13.4.1(对应Swift 5.6.1)对低版本生成的模块有向下兼容性,而EAS构建环境的版本校验或兼容逻辑更严格。

解决方法

方法1:获取兼容Swift 5.6.1的XCFramework

直接联系第三方供应商,要求他们用XCode 13.4(对应Swift 5.6.1)重新编译并提供.xcframework文件,替换现有文件后重新打包RN库,再尝试EAS构建。

方法2:调整EAS构建环境的XCode版本

在eas.json中指定与XCFramework编译版本匹配的XCode镜像,比如对应Swift 5.5.2的XCode 13.2.1,修改iOS构建配置的image字段:

{
  "build": {
    "production": {
      "ios": {
        "image": "latest-13.2"
      }
    }
  }
}

方法3:添加Objective-C桥接层

若无法获取新的XCFramework,可在自定义RN库中添加Objective-C桥接层,通过Objective-C调用Swift的XCFramework,避免直接在Swift代码中导入低版本模块:

  1. 在RN库的iOS目录创建Objective-C文件(如SardineBridge.h和SardineBridge.m)
  2. 在桥接文件中导入XCFramework的头文件,封装需要调用的方法
  3. 在ReactNativeSardine.swift中导入Objective-C桥接文件,通过它间接调用第三方库功能

这种方法利用Objective-C更好的ABI稳定性,绕过Swift版本兼容问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:33:44