Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性(原创)

时间:2022-12-21 14:17:03

最近xcode升级了5.1版本,升级之后程序报关于要适配arm64机器的错。之前对xcode的参数配置,一直不是很了解,但实现先面对问题了,就调查了一下并解决它。

一个一个来吧。

Architectures
这代表,在这个项目里你想要Xcode编译的目标设备列表。
Valid Architectures
还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architectures一样就可以。

在Xcode5.1里的Valid Architectures 设置里,默认为Standard architectures(armv7,armv7s,arm64),如果你想改的话,自己在other中更改。

原因解释如下:
使用standard architectures (including 64-bit)(armv7,armv7s,arm64)参数,则打的包里面有32位、64位两份代码,

在iPhone5s(iPhone5s的cpu是64位的)下,会首选运行64位代码包,

其余的iPhone(其余iPhone都是32位的,iPhone5c也是32位), 只能运行32位包,

但是包含两种架构的代码包,只有运行在ios6,ios7系统上。

这也就是说,这种打包方式,对手机几乎没啥要求,但是对系统有要求,即ios6以上。
而使用standard architectures (armv7,armv7s)参数, 则打的包里只有32位代码, iPhone5s的cpu是64位,但是可以兼容32位代码,即可以运行32位代码。但是这会降低iPhone5s的性能。 其余的iPhone对32位代码包更没问题, 而32位代码包,对系统也几乎也没什么限制。
所以总结如下:

要发挥iPhone5s的64位性能,就要包含64位包,那么系统最低要求为ios6。 如果要兼容ios5以及更低的系统,只能打32位的包,系统都能通用,但是会丧失iPhone5s的性能。

Build Active Architecture Only

这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。
而设置为no时,会编译所有的版本。
这个是设备对应的architecture:

armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
arm64:iPhone5s,ipad air,ipad mini2

编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。
所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。

通过对以上参数配置的了解,我解决了问题。

xcode5.1你的程序如果支持了arm64,那么你的所有静态库或者framework都要支持才可以,所以你要重新编译一遍。

一下是参考博客:

http://my.oschina.net/shede333/blog/172785

Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性(原创)的更多相关文章

  1. 关于Build Active Architecture Only属性

    关于Build Active Architecture Only属性 Architecture 属性在BuildSetting里. 这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当 ...

  2. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性

    Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architectures 还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architec ...

  3. iOS Build Active Architecture Only 属性的理解(及 not found for architecture i386 的解决方案)

    最近做项目过程遇到一个问题: 涉及到这个属性:Build Active Architecture Only Yes .No的区别: 设置为yes,是只编译当前的architecture版本,是为了编译 ...

  4. xcode编译时,有第三方库时,编译设置build active architecture only问题

    本文转载至 http://blog.csdn.net/ysysbaobei/article/details/16371263 编译静态库 1.http://blog.csdn.net/dengdeng ...

  5. Xcode 中armv6 armv7 armv7s arm64 i386 x86_64 归纳 (Architectures, Valid Architectures, Build Active Architecture Only)

    http://www.jianshu.com/p/09b445300d40 简介: armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_64 是Mac处理器的指令集 目前i ...

  6. iOS之关于Architectures设置及Build Active Architecture Only编译设置

    一,前言 最近在帮朋友解决极光报错的提示:“file was built for archive which is not the architecture being linked (i386)”时 ...

  7. xcode选项Build Active Architecture Only的作用

    Build Active Architecture Only 设置: 设置为NO的时候,会导致react-native项目启动失败npx react-native run-ios 根据错误信息 bui ...

  8. iOS 应用打包 设备兼容性问题(Build Active Architecture Only)

    在把应用打包安装到iPod Touch上面时,设备提示不兼容,所以就有几种猜想: 1.CPU架构问题,因为我手里这个iPod Touch的CPU是A5,是32位的: 2.TARGETS里面相关的设置对 ...

  9. iOS Architecture和Valid architectures

    目前ios的指令集有以下几种: 1,armv6,支持的机器iPhone,iPhone2,iPhone3G及对应的iTouch 2,armv7,支持的机器iPhone4,iPhone4S 3,armv7 ...

随机推荐

  1. jQuery进阶

    复习: jq无论如何都是一个集合 jq是一个包装集 var arr=$("div").get( )会将所有的DOM对象转换成真正的数组, get( )里边没传参数 兄弟元素: 只要 ...

  2. 关于linx中man命令内容中第一行数字的含义

    我们知道linux中man这玩意特别厉害,我们要查么个命令的使用方法.如man ls 出现如下内容 关于这写数字的含义如下表格

  3. PBOC协议中对于所有电子存折/电子钱包应用的预处理

    下图给出了PBOC协议中规定的对电子存折/电子钱包应用的所有交易类型共有的预处理流程 图1 1.1 插入卡片 终端应具有检测IC卡是否已经插入读卡器的功能.如果IC卡已经插入,终端将继续执行1.2的应 ...

  4. Django messages框架

    一.简介 在网页应用中,你经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户 对于这个功能,Django 提供基于Cookie 和会话的消息,无 ...

  5. ZIP打包解包

    linux zip命令的基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] linux zip命令参数列表: -a 将文件转成ASCII模式-F 尝试修复损坏的压缩文件-h 显示帮 ...

  6. 推荐一些*的Android开发书籍(转)

    本帖对Android开发菜鸟和中级老兵同样适用,因为本帖重点列出了那些最常用的Android开发资源. 推荐书籍 你或许觉得,都现在了,再去看个什么书来学习Android开发,这方法应该早就过时了.没 ...

  7. Content Providers

    Content providers manage access to a structured set of data. They encapsulate the data, and provide ...

  8. nodeName,nodeValue,nodeType,typeof 的区别

        nodeName 属性含有某个节点的名称.  元素节点的 nodeName 是标签名称  属性节点的 nodeName 是属性名称  文本节点的 nodeName 永远是 #text  文档节 ...

  9. MySQL里创建外键时错误的解决

    --MySQL里创建外键时错误的解决 --------------------------------2014/04/30 在MySQL里创建外键时(Alter table xxx add const ...

  10. MySQL错误码

    MySQL运行异常时,查看服务日志可看到error number,该错误码为系统调用出错码,具体如下. errno.00 is: Success    成功 errno.01 is: Operatio ...