Could not find module ‘XXXFramework‘ for target ‘armv7-apple-ios‘; found: arm64, arm64-apple-ios

问题描述:
       最近封装公司私有库FrameWork 提供给业务端同事使用,结果同事引入FrameWork 后打包出现找不到FrameWork 里面头问文件. 报错信息为:Could not find module 'XXXFramework' for target 'armv7-apple-ios'; found: arm64, arm64-apple-ios.

问题原因:
        生成FrameWork时缺少 armv7-apple-ios 指令结构.
   
问题解决:
        修改FrameWork Targers 的Build Setting 里 Build Active Architecture Only  YES 改为 NO . 重新编译生成FrameWork.
    
    
问题解决过程:
       1、开始考虑的是否是真机模拟器没有合并.合并后依然存在问题.
       2、因为有的同事的机器上能打包成功.唯独m1机器打包不成功.感觉是缺什么指令集 
       3、查看FrameWork 输出支持的框架,发现只支持arm64 和 armv7. 修改Build Active Architecture Only  YES 改为 NO . 成功
       
**iOS 设备的CPU架构**
       1.1、  在模拟器上支持:
       模拟器32位处理器 iPhone4s-5: i386 架构
       模拟器64位处理器 iPhone5s-8 Plus:x86_64 架构
       (ios模拟器没有arm指令集)
       
       1.2、在真机设备上支持:
       真机32位处理器:armv7、armv7s
       真机64位处理器:arm64
       armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) 
       armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
       armv7s:iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
       arm64: iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3
       
       1.3、ARM处理器指令集
       几乎所有手机处理器都基于ARM处理器的,ARM处理器特点是体积小、低功耗、低成本、高性能,所以在嵌入式系统中应用广泛.
       armv6|armv7|armv7s|arm64都是ARM处理器的指令集,这些指令集都是向下兼容的比如设备是armv7s指令集,那么它也可以兼容运行比armv7s版本              低的指令集:armv7/armv6,只是无法体现armv7s的新版本特性。Xcode 4.5起不再支持armv6。真机32位处理器需要armv7或者armv7s架构,真机64位处理器需要arm64架构.
       1.4、i386|x86_64 指令集:i386和x86_64 是Mac处理器的指令集
       i386是针对intel通用微处理器32位处理器的
       x86_64是针对x86架构的64位处理器
       所以当使用iOS模拟器的时候会遇到i386|x86_64(ios模拟器没有arm指令集)
       命令查看静态库支持的架构:
       通过 lipo -info - 》 拖入模拟器或者真机.framework的路径 查看静态库支持的架构(以下是终端命令)
       $ lipo -info - .framework的路径。
        

       Architectures配置

Build Setting 里配置Additional SDKs

     编译时附加的SDK,这些SDK必须是附加的,不应该是整个框架的SDK,并且多个SDK的时候,第一个SDK有最高优先级。

Architectures

   指定/想要工程支持的指令集,默认会由系统生成预定义的指令集,现在Xcode默认是Standard architectures(armv7和arm64的合集),如果想要支持其他指令集,可以手动添加。而支持的指令集越多,就会编译出包含多个指令集代码的数据包,对应生成二进制包就越大,也就是ipa包会越大。

Base SDK

   指的是当前编译所用的SDK版本。Base SDK设置会引导编译器使用该版本的SDK编译和构建应用,会直接控制应用使用哪些API。默认情况下,Xcode中创建的新工程总是使用最新版本的SDK,而苹果会处理API的废弃。

Build Active Architecture Only

   设置是否只编译当前使用的设备对应的arm指令集。

   设置成YES时,如果连上一个arm64指令集的设备,就算Valid Architectures和Architectures都设置成armv7/armv7s/arm64,依然只会生成一个arm64指令集的二进制包(前提是Xcode必须连接了调试设备,否则还是编译Valid Architectures和Architectures指定的二进制包)。通常情况下,该编译选项在Debug模式设置成Yes,Release模式设置成No,打包静态库除外,下面会解释。

Valid Architectures

   有效的指令集集合,通常为所有指令集,表示工程支持的处理器类型,不需要开发者更改,但有时候会因为一些因素,如工程使用了非开源的库,而此库只支持部分处理器类型,导致工程也不是所有的处理器都支持。

  该列表和Architectures列表的交集是Xcode最终生成二进制包所支持的指令集,因此不能为空。

Supported Platform

 指定支持的设备平台

两个FrameWork 支持的框架对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值