关于iOS动态库、静态库同时支持真机(arm64、armv7s、armv7)和模拟器(i386、x86_64)

 先说下方案:


采用两个Target管理 真机和模拟器 环境

一、创建多个Target

自行百度,这些只记录几个主要点

1.创建target_new时 复制原先的target

2.更改target_new的配置等相干信息(主要是名称)(schemes,targer_new-info.plist, Build Settings -> Packaging -> info.plist File<路径>)

至此差不多已经完成了Target的创建

二、修改需要区分环境的文件 所属的Target

1.先删除原有不需要文件的路径

因为全复制,所有原有文件的路径也复制了,找到对应target->build setting->Path ,找到错误的路径修改(Debug Release)

2.如果 库 添加到了  Embedded Binaries

删除 ,我操作时先没有删除,结果 xcode 奔溃了( -_- )

3.添加需要区分的文件,选择 目标target_new

三、Build Setting -> Build Active Architecture Only   设置

 1.含义:   Architecture : 指你想支持的指令集。

                  Valid architectures : 指即将编译的指令集。   

                  Build Active Architecture Only : 只是否只编译当前适用的指令集。

2.指令集的支持              

如果在工程Build Setting的Architectures 中的“Build Active Architecture Only”选择为YES,   则即使你设置成armv7 , armv7s同时支持,也只会编译对应指令集的包;若选择NO,   则编译器会整合两个指令集到一起,此时的包比较大,但是能在iPhone5上使用armv7s的优化,同时也能适配老的设备。

一般都是Debug时“Build Active Architecture Only”选择YES,用当前的架构看代码逻辑是否有问题;而在Release时选择NO,来适配不同的设备。

此外,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。所以生成静态库时都是会先生成两个.a,一个是i386的用于在模拟器运行,另一个是在真实设备上运行的,然后再用命令将两个.a合并成一个。

四、因为用了两个Target,所以以后添加文件 要选择目标 Target 了

                                                    -_-

你可能感兴趣的:(关于iOS动态库、静态库同时支持真机(arm64、armv7s、armv7)和模拟器(i386、x86_64))