如何在Podspec文件中引入适配不同架构的本地framework
Podspec 按架构引入本地Framework配置方案
本地Framework直接通过vendored_frameworks属性声明即可,不需要找特殊配置项。针对你手里分i386模拟器、arm64真机的两个framework,通过编译时的环境变量判断目标场景,动态指定引用路径就能实现,具体操作如下:
- 先确认路径关系:你当前存放framework的
frameworks/debug/、frameworks/release/目录只要和.podspec文件保持同级,就可以用相对路径直接引用,不需要额外配置source路径。 - 核心配置逻辑:在Podspec里通过判断CocoaPods编译时注入的
PLATFORM_NAME环境变量,区分当前是编译模拟器版本还是真机版本,只把对应架构的framework加入vendored_frameworks列表即可,可直接参考下面的配置模板:
Pod::Spec.new do |spec| # 基础配置(名称、版本号、部署目标这些按你项目实际情况填就行) spec.name = "YourPodLibName" spec.version = "1.0.0" spec.summary = "包含多架构本地framework依赖的组件" spec.license = { :type => "MIT", :file => "LICENSE" } spec.author = "YourName" spec.source = { :git => "", :tag => "#{spec.version}" } spec.ios.deployment_target = "10.0" # 排除模拟器编译时的arm64架构,避免和真机framework架构冲突 spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' } # 动态匹配对应场景的framework spec.vendored_frameworks = Dir.glob("frameworks/**/*.framework").select do |framework_path| if ENV['PLATFORM_NAME'] == 'iphonesimulator' # 模拟器编译场景,只引入debug目录下适配i386的版本 framework_path.include?('debug') else # 真机编译场景,只引入release目录下适配arm64的版本 framework_path.include?('release') end end end
- 配置完可以分别做校验:执行
pod lib lint --platform=ios验证模拟器场景的编译,执行pod lib lint --platform=ios --device验证真机场景的编译,只要framework本身的架构切片和路径匹配,就不会报找不到依赖或者架构不匹配的错误。
踩坑提示:如果后续要适配M系列芯片的arm64模拟器,只需要把debug目录下的framework合并入arm64模拟器的架构切片就行,不需要调整上面的路径判断逻辑。
内容的提问来源于stack exchange,提问作者Mahendra Liya
相关产品推荐
相关产品推荐

