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

将含C++/OC/Swift的FitSDK Swift Package转为XCFramework遇问题求助

解决Garmin FitSDK适配M1/2模拟器XCFramework的问题

问题1:非模块化头文件错误修复

用简单modulemap(module FitSDK { export * })出现Include of non-modular header inside framework module错误,是因为该配置没正确识别框架头文件结构,得用带umbrella header的modulemap,同时保证路径和头文件完整性:

  • 先确认XCFramework的Headers目录下有完整的FitSDK头文件,包括FitSDK.h和所有依赖子头文件
  • 把modulemap换成框架格式,并且必须放在XCFramework的Modules目录下:
framework module FitSDK {
  umbrella header "FitSDK.h"
  export *
  module * { export * }
}
  • 检查FitSDK.h是否导入了所有必要子头文件,比如:
#import "fit_crc.h"
#import "fit_mesg.h"
// 其他相关头文件

问题2:arm64架构符号未定义修复

出现Undefined symbols for architecture arm64,说明生成XCFramework时arm64模拟器架构的二进制没正确编译或合并,按以下步骤排查:

  1. 重新编译FitSDK的arm64模拟器版本:
    • 编译时明确指定架构为arm64,目标平台选iOS模拟器
    • 用命令验证编译产物的架构:
      lipo -info /path/to/FitSDK.framework/FitSDK
      
      输出必须包含arm64(模拟器)和x86_64
  2. 合并架构时别遗漏arm64模拟器二进制:
    • 用lipo合并真机arm64、模拟器arm64/x86_64,要写全所有二进制路径:
      lipo -create /path/to/sim-arm64/FitSDK /path/to/sim-x86_64/FitSDK /path/to/device-arm64/FitSDK -output /path/universal/FitSDK
      
  3. 检查XCFramework结构:
    • 内部应有ios-arm64、ios-arm64_x86_64-simulator两个目录,每个目录下的framework都要有对应架构的二进制和完整头文件
  4. 验证符号是否存在:
    • 用nm命令检查arm64架构下的缺失符号:
      nm -arch arm64 /path/to/FitSDK.framework/FitSDK | grep _FitCRC_Calc16
      
      要是输出为空,说明该架构二进制确实没包含这些符号,得重新编译arm64模拟器版本

额外注意

  • 修改Package.swift时,确保平台配置包含iOS 12,且XCFramework路径正确:
    platforms: [.iOS(.v12)],
    products: [
      .library(
        name: "FitSDK",
        targets: ["FitSDK"]
      ),
    ],
    targets: [
      .binaryTarget(
        name: "FitSDK",
        path: "./FitSDK.xcframework"
      ),
    ]
    
  • 清理项目缓存:执行File > Packages > Reset Package Caches后再重新构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:05:20