如何为Flutter iOS插件手动添加.xcframework并解决真机运行异常问题
解决方案
方案1:podspec直接配置私有SPM依赖(推荐)
CocoaPods 1.10及以上版本原生支持直接引入SPM依赖,无需手动导出framework,自动处理架构、签名适配问题,避免本地维护的各类兼容性问题。
在你的插件.podspec中添加如下配置即可:
# 替换为你的私有SPM仓库地址和对应版本号 s.dependency 'MyDependency', :git => 'https://你的私有SPM仓库地址.git', :tag => '1.0.0'
配置完成后进入项目ios目录执行pod install即可,私有仓库的权限认证直接在Xcode中配置对应的Git访问凭据即可。
方案2:本地引入xcframework修复方案
你当前的问题主要是手动拷贝的xcframework架构不全、podspec配置缺失导致的真机适配失败,按以下步骤修正:
- 导出完整的xcframework
不要直接拷贝示例项目编译缓存中的xcframework,该文件仅包含你当前编译目标的架构,需要单独从SPM仓库导出全架构xcframework,导出后执行以下命令验证架构完整性:
# 验证真机架构 lipo -info MyDependency.xcframework/ios-arm64/MyDependency.framework/MyDependency # 验证模拟器架构 lipo -info MyDependency.xcframework/ios-arm64_x86_64-simulator/MyDependency.framework/MyDependency
两个命令分别输出arm64和x86_64 arm64即为正常。
2. 修正podspec配置
替换你原有的配置为以下内容:
s.preserve_paths = 'MyDependency.xcframework/**/*' s.vendored_frameworks = 'MyDependency.xcframework' s.xcconfig = { 'OTHER_LDFLAGS' => '-framework MyDependency', 'ENABLE_BITCODE' => 'NO', # 若你的依赖支持bitcode可删除该行 'FRAMEWORK_SEARCH_PATHS' => '$(PODS_ROOT)/#{s.name}/' } s.platform = :ios, '12.0' # 替换为依赖支持的最低iOS版本 s.pod_target_xcconfig = { 'ONLY_ACTIVE_ARCH' => 'NO', 'CODE_SIGN_IDENTITY[sdk=iphoneos*]' => 'iPhone Developer' }
- 清理缓存重新编译
进入项目ios目录执行以下命令清理旧缓存:
pod deintegrate && rm Podfile.lock && pod install
打开Xcode按Shift+Command+K清空构建缓存后再运行真机测试即可。
内容的提问来源于stack exchange,提问作者siega
相关产品推荐
相关产品推荐

