iOS项目打包,或者只是在项目里面调用第三方静态库抑或是自己新建一个静态库,就要无可避免的和Architectures打交道。Architectures在Targets面板的Build Settings下,如下图红框所示:

  首先请注意上图蓝色框部分,选项里面出现了好几个ARM,ARM指的就是ARM处理器,它被普遍使用在嵌入式设备中,例如手机、平板等。不同的设备对应的处理器架构版本不同,设备只会执行对应处理器版本的指令集。举个栗子,iPhone5的处理器版本是armv7s,如果你最终只编译了arm64版本,项目是不可能跑在iPhone5上面的,再或者你调用了一个只支持arm64的第三方静态库,而你的项目需要支持armv7和armv7s,这个时候你导入这个第三方库编译就会报错。但是有一点需要注意的就是向下兼容原则,即你的项目只编译了armv7s,支持arm64的设备是能够正常运行的,只是这个时候就无法完全发挥手机的性能。稍微统计了下目前iOS设备对应的ARM处理器:

Architectures 和 Valid Architectures

/*

Architectures: Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures.

Valid Architectures: Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary

*/

大部分人都会被Architectures和Valid Architectures搞混淆。Valid Architectures表示的是你的项目所支持的处理器架构列表,是一个大的集合,而Architectures表示的是你的项目编译的时候最终生成的二进制文件包含的处理器架构集合。当然如果你的Architectures超出了Valid Architectures的范围,只能取Architectures和Valid Architectures的交集。一般来说,不需要修改Valid Architectures,你只要设置Architectures成你需要的架构版本就可以了。如果你理解了这两个概念,再回过头来看看苹果对Architectures和Valid Architectures的默认设置,Valid Architectures设置成:arm64、armv7、armv7s,但是Architectures只设置成:armv7、arm64。这就是说,项目虽然支持市面上大部分手机的处理器架构版本,但是最终只比编译了两个版本。这也可以理解,根据向下兼容原则,目前市面上大部分32位iOS设备都支持armv7,而64位设备都支持arm64, 对样做即保证了高性能手机的运行性能不受影响,同时减小了生成包的大小,一举两得。

Build Active Architecture Only

/*
Boolean value. Specifies whether the product includes only object code for the native architecture.
*/

这个属性主要用在Debug的时候。根据字面意思,就是说只编译你当前连接设备(活跃状态)的处理器版本。这个属性不需要修改,Xcode的默认设置就是Debug为Yes,Release 为No。Debug模式设置为Yes,编译的时候只编译成当前连接设备的处理器版本,会大大缩短编译时间。Release的时候,需要设置成No,你要适配市面上大部分手机,如果Release你还设置成Yes,就要呵呵了,你生成的安装包只能安装在你当前连接设备的编译类型的手机上。当然,这也是你Release编译所花的时间要大大超过Debug的原因。

因为水平有限,说的比较乱,希望你们能够理解,如果还有不懂的地方,或者内容有误,欢迎在留言区指正。

转载请注明出处:http://www.cnblogs.com/tbfirstone/p/5869528.html

iOS Architectures 浅谈的更多相关文章

  1. IOS中 浅谈iOS中MVVM的架构设计与团队协作

    今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  2. iOS开发--浅谈CocoaAsyncSocket编程

    Socket就是一种特殊的文件.它是一个连接了两个用户的文件,任何一个用户向Socket里写数据,另一个用户都能看得到,不管这两个用户分布在世界上相距多么遥远的角落,感觉就像坐在一起传纸条一样. 这么 ...

  3. [转]iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

    参考:http://www.mamicode.com/info-detail-469709.html 一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能( ...

  4. iOS开发——浅谈构架与用户体验

    工作不是千篇一律的重复,从中寻找乐趣才是我们应该做的. 作为一名码农,做过几个项目,每次做项目的时候都会自己构思,如果完全是我自己设计,会怎么去设计?心里一直没有满意的答案,不管怎么布局,好像都感觉差 ...

  5. iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

    .最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有 ...

  6. iOS学习——浅谈RunLoop

    RunLoop的字面意思是运行循环.跑圈,一个App启动后能一直执行,就是因为启动后进入了一个循环,在这个循环中不断监听各种状态.手势动作,并做出相应的响应.这个循环就是我们今天要探究的RunLoop ...

  7. 【转】从Mac/OS和iOS开放源码浅谈UNIX家谱

    阅读数:1245 苹果公司在各类开源项目中长期贡献着自己的力量,但其UNIX系统技术一直都属于闭源阵营(这一点可以从NUX OS阵营和家谱图中得到答案).然而,以封闭闻名的苹果公司,2017年国庆期间 ...

  8. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  9. 浅谈iOS视频开发

     浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...

随机推荐

  1. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面

    前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...

  2. AC自动机 HDU 3065

    大概就是裸的AC自动机了 #include<stdio.h> #include<algorithm> #include<string.h> #include< ...

  3. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  4. Android 横竖屏+碎片的应用

    最终效果展示: 项目介绍: 通过碎片的方式显示标题列表和内容,其中也牵涉到横竖屏的知识 项目代码下载:http://files.cnblogs.com/files/Laopengblog/%E7%A2 ...

  5. css之IE透明度

    原文链接:http://caibaojian.com/rgba-filter.html .bg{ /*Filter for IE8 */ -ms-filter: "progid:DXImag ...

  6. CSS-用伪类制作小箭头(轮播图的左右切换btn)

    先上学习地址:http://www.htmleaf.com/Demo/201610234136.html 作者对轮播图左右按钮的处理方法一改往常,不是简单地用btn.prev+btn.next的图片代 ...

  7. Linux学习之CentOS(二十)--CentOS6.4下修改MySQL编码方法

    但是当我们在试图对数据库中的数据进行备份或者将sql文件导入到我们的数据库时可能就会碰到编码的问题,在windows下安装mysql时我们可以在安装的时候就选择好整个数据库的编码方式(通常设置成utf ...

  8. express源码剖析1

    在通读源码之前,先把一些比较难理解的代码吃透: 1.EventEmitter.prototype mixin(app, EventEmitter.prototype, false); app为一个函数 ...

  9. HBase+Phoenix整合入门--集群搭建

    环境:CentOS 6.6 64位    hbase 1.1.15  phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...

  10. Nginx中root与alias的用法及区别:

    Nginx中root与alias都是定义location {}块中虚拟目录访问的文件位置: 先看看两者在用法上的区别: location /img/ { alias /var/www/image/; ...