Valid Architectures与Architectures的区别
Valid Architectures 表示我们的工程支持的处理器类型,因为有的时候工程可能依赖于外界因素导致程序不是所有的处理器都支持,比如使用了非开源的库,而那个库只支持部分处理器类型。
Architectures 表示我们想让自己的程序支持的处理器类型,考虑到生成的包的大小,我们可能要选择几个支持的类型,而不是全部都支持。
当我们Archive准备发布应用的时候,Xcode会取Valid Architectures和Architectures的交集,生成最后的包。
Build Active Architecture only
Build Active Architecture only 这个选项主要目的是节省调试时Build的时间,因为我们Debug的时候一般来说只需要生成一种处理器架构的包就可以了,生成多个是浪费时间。
下面贴一下我测试的数据,Architectures为armv7 arm64,Valid Architectures为arm64 armv7 armv7s
使用模拟器编译:
Build Active Architecture only的debug设置为YES,lipo一下(lipo -info xxx.app/xxx),结果是
Non-fat file: viewControllerContainer is architecture: x86_64
Build Active Architecture only的debug设置为NO,结果是
Architectures in the fat file: viewControllerContainer are: i386 x86_64
看来即使是设置为NO,也不会编译出支持真机处理器体系结构的代码段。
在真机上在测试一下,机器是ipad2,处理器是armv7
Build Active Architecture only的debug设置为YESNon-fat file: viewControllerContainer is architecture: armv7
Build Active Architecture only的debug设置为NO
Architectures in the fat file: viewControllerContainer are: armv7 arm64
结论:Build Active Architecture only为YES的时候,Xcode只会根据active scheme来决定生成支持何种处理器的包,并且只支持一种处理器。
当为NO的时候,如果active scheme是模拟器,那么生成支持x86_64和i386的包,如果是真机,Xcode会取Valid Architectures与Architecture的交集,生成相应的包。