美文网首页锻炼吃饭的家伙
iOS 开发常见配置-Architectures

iOS 开发常见配置-Architectures

作者: LoveY34 | 来源:发表于2017-04-25 16:28 被阅读69次

    前言

    文章开始需要先了解一下几个问题:
    1.arm是啥?
    2.armv7又是啥?那armv7sarm64(注意不是armv64)呢?
    3.64位处理器32位处理器跟上面又有什么关系呢?
    ==>

    • ARM是嵌入式中的一种架构,可认为是对一类微处理器的统称(也就是架构)。(再详细点的可以去百度哦!😂)
    • armv7|armv7s|arm64都是ARM处理器的指令集
    • 相应的Mac处理器上的指令集有i386|x86_64
    • 至于两者的关系就是
    真机32位处理器需要armv7架构或者armv7s架构
    真机64位处理器需要arm64架构
    模拟器32位处理器测试需要i386架构
    模拟器64位处理器测试需要x86_64架构
    

    那么常见的指令集又用在那些设备上呢:

    arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)
    armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
    armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
    

    至于iPhone7和iPhone 7Plus上面的指令集没找到资料,所以也不敢乱写。

    Architectures

    Architectures这个单词的意思就是架构,Xcode新建工程的时候Architectures默认的几个设置就是:


    三个默认的关于Architectures的配置图
    1. Architectures
      指的是编译出来的二进制文件需要支持的指令集。需要注意的是,支持的指令集越多,二进制文件中包含的支持指令集的代码包就越多,进而二进制文件就越大,也就会导致ipa包越大。
    2. Valid Architectures
      限制可能支持的指令集的范围,也就是编译的二进制文件支持的指令集的类型都在这里面。而编译出哪种指令集的包,将由Architectures与Valid Architectures(因此这个不能为空)的交集来确定
    3. Build Active Architecture Only
      是否只针对Xcode连接的设备支持的指令集进行编译,设置为YES是为了加快编译速度,设置为No的话就会编译支持的所有版本(具体版本由Architectures与Valid Architectures的交集来确定)。至于Debug和Release使用什么配置就看开发自己的需要了。

    Demo

    同一套代码我打了如下几个包
    a. 架构指令集:arm64(ipa包大小:31K)
    b. 架构指令集:armv7s(ipa包大小:32K)
    c. 架构指令集:armv7 arm64(ipa包大小:46K)
    d. 架构指令集:armv7 armv7s arm64(ipa 包大小:60K)
    多支持一个架构指令集合,二进制文件中会多一套代码,所以最后的ipa包大小也不一样(多出来的只是代码的大小,好像跟资源例如图片啥的没关系,估计资源对这几个代码来说是公用的),安装到设备里面的时候会根据CPU架构执行对应的代码,但是架构指令集只能向下兼容,iPhone5(armv7s)就无法安装a安装包,但是iPhone5s(arm64)就可以安装b安装包,只不过这样无法展现iPhone5s 64位处理器的性能。
    查看一个安装包支持的架构指令集的方式是先修改安装包后缀名为zip,然后解压,在终端cd到解压的文件夹中的.app文件里面(一般.app会被隐藏),使用lipo -info app项目名命令查看。

    查看spa包支持的架构指令集

    相关文章

      网友评论

        本文标题:iOS 开发常见配置-Architectures

        本文链接:https://www.haomeiwen.com/subject/bxupzttx.html