问题

开发环境:xcode6,iPhone6模拟器

xcode工程编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

原因

导致这个错误的原因主要是CPU的编译架构引起的,Build Active Architecture Only属性设置为了YES(只编译当前模拟器指令集),当出现不兼容设备时就会出现错误。

解决

在工程Build Settings,设置Build Active Architecture Only属性设置为NO,并且Architectures与Valid Architectures属性分别添加ARMv7,ARMv7s,ARM64值,clear工程,重新build即可。

首先我们先了解一下各类型iOS设备的架构:

ARMv8/ARM64 = iPhone 5s, iPad Air, Retina iPad Mini 
ARMv7s = iPhone 5, iPhone 5c, iPad 4 
ARMv7  = iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini   
ARMv6  = iPhone, iPhone 3G, iPod 1G/2G (一般不需要去支持)

要解决这个错误,应该关注以下几个属性设置:

1.Build Active Architecture Only属性

设置为yes时,只编译当前的设备(architecture)版本,提高debug是的编译速度;

设置为no时,会编译所有的版本(发布release时使用,以兼容各类型设备)。

注:编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。

2.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.

简单来说就是工程被编译成可支持哪些指令集类型,而支持的指令集越多,对应生成二进制包就越大,也就是ipa包会变大。

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.

有效编译指令集,也就是Xcode编译出来的二进制包类型最终从这些类型产生,而编译出哪种指令集的包,将由Architectures与Valid Architectures(因此这个不能为空)的交集来确定,例如:
比如,你的Valid Architectures设置的支持arm指令集版本有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。

编译集选择
如果你对ipa安装包大小有要求,可以减少安装包的指令集的数量,这样就可以尽可能的减少包的大小。当然这样做会使部分设备出现性能损失,当然在普通应用中这点体现几乎感觉不到,至少不会威胁到用户体检(这就跟win7系统在32位和64位运行QQ一样,你看得出么?)。或者你也还在担心这个问题,你可以把百度地图等SDK下载下来,使用lipo、ar等命令查看一下它们的编译架构。
注:不过,新版的app审核规则中,似乎已经逐渐要求app必须支持64位的设备,因此在今后的工程维护中得多关注解决兼容性问题。

参考文章:Xcode设置项之Architectures和Valid Architectures

xcode工程编译错误:No architectures to compile for的更多相关文章

  1. Xcode工程编译错误之iOS开发之Xcode9报错 Compiling IB documents for earlier than iOS7 is no longer supported.

    概要: 在我们升级到Xcode9时,最低的编译版本为iOS8,但是在使用一些SDK的时候就会报出Compiling IB documents for earlier than iOS7 is no l ...

  2. xcode工程编译错误:一般错误总结

    1.Apple LLVM 8.0 Error Group /’all-product-headers.yaml’ not found 最近升级了xcode打包后出现了个BUG,记录解决的方法. 现象: ...

  3. xcode工程编译错误:missing required architecture i386 解决方法

    可能原因一:项目内保存了.framework文件,在复制分发到不同计算机的时候可能会引发该错误 解决方法一:来到Targets->Build Settings->Framework Sea ...

  4. Xcode工程编译错误:“Cannot assign to 'self' outside of a method in the init family”

    #import <Foundation/Foundation.h> @interface EOCRectangle : NSObject<NSCoding> @property ...

  5. Xcode工程编译错误之iOS开发之The Xcode build system has crashed. Please close and reopen your workspace

    解决方法: . 删除DerivedData . 参照上面的链接设置:File -> Workspace Settings -> Build System -> Legacy Buil ...

  6. xcode工程编译错误:error: Couldn’t materialize

    错误信息: error: Couldn't materialize: couldn't get the value of variable amount: variable not available ...

  7. xcode工程编译错误:The maximum number of apps for free development profiles has been reached.

    真机调试免费App ID出现的问题The maximum number of apps for free development profiles has been reached.免费应用程序调试最 ...

  8. Xcode工程编译错误之iOS开发之Sending '__strong typeof (xxx)' (aka 'xxxx *__strong') to parameter of incompatible type 'id<xxx>'

    iphone开发出现警告: Sending '__strong typeof (xxx)' (aka 'xxxx *__strong') to parameter of incompatible ty ...

  9. xcode工程编译错误之iOS解决CUICatalog: Invalid asset name supplied问题

    [问题分析]: 这个问题其实是老问题,产生原因就是因为在使用的时候 [UIImage imageNamed:]时,图片不存在或者传入的图片名为nil. [解决方法]: 添加一个系统断点,来判断如果图片 ...

随机推荐

  1. ios开发之--两次模态弹出后,怎么返回最上层的页面

    解决方法如下: self.presentingViewController.view.alpha = ;[self.presentingViewController.presentingViewCon ...

  2. MyBatis入门程序之表关联

    一.一对一查询(ResultType比较简单,只需要指向扩展的类:ResultMap逐个匹配比较麻烦,可以配置属性autoMapping="true",还可以可以实现延迟加载) 1 ...

  3. 绕过D盾的一句话

    一个很简单的一个技巧,作个笔记,可以绕过D盾检测. 新建test1.php <?php eval($_POST[g]); ?> 新建test2.php <?php $a=" ...

  4. PHP代码审计笔记--URL跳转漏洞

    0x01 url任意跳转 未做任何限制,传入任何网址即可进行跳转. 漏洞示例代码: <?php $redirect_url = $_GET['url']; header("Locati ...

  5. Nginx(七)-- 反向代理

    1.概念  反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果返回给Internet上请求连接的 ...

  6. linux下添加,删除,修改,查看用户和用户组

    标签:gpasswd, groupadd, groupdel, groupmod, linux, useradd, userdel, usermod, who 一,组操作 1,创建组 groupadd ...

  7. 简单mysql类

    ---恢复内容开始--- class mysql { private $host; private $user; private $pass; private $database; private $ ...

  8. HTML-锚点-JS跳转锚点

    window.location.hash使用说明,这篇写的挺详细的 http://www.cnblogs.com/nifengs/p/5104763.html a标签的话是 name,div呢是id, ...

  9. PowerDesigner 同步Name到Comment 及 同步 Comment 到Name

    PowerDesigner中使用方法为:     PowerDesigner->Tools->Execute Commands->Edit/Run Scripts 代码一:将Name ...

  10. 如何在浏览器中简单模拟微信浏览器(仅限于通过User Agent进行判断的页面)

    模拟微信浏览器: .打开360极速 .F12开发者工具 .开发者模式左上方有一个手机样子的图标 点击进入 设备模式‘ .将UA选项中的字符串替换成: Mozilla/ 备注: 替换的字符串是微信浏览器 ...