合并模拟器和真机的通用.a静态库

1. 利用lipo命令来合并模拟器和真机库:

用模拟器编译生成的静态库是i386架构的,而ios是arm6/arm7/arm7s架构的,架构不兼容,所以用模拟器编译的静态库在真机上不能用。

要使静态库编译出来,模拟器和真机都可以使用的,可以分别编译生成libxxx.a,然后用lipo来合并这两个libxxx.a

如下:

打开终端,cd到build目录,然后使用lipo命令如下:

lipo -create Release-iphoneos/libxxx.a Release-iphonesimulator/libxxx.a -output libxxx.a

将合并生成一个通用的libxxx.a

lipo -info命令用来查看静态库的类型

lipo -info Release-iphoneos/libxxx.a

lipo -info Release-iphonesimulator/libxxx.a

这种方法有时候终端会报各种未知错误,所以还有另外一种方法

2 利用脚本直接生成通用的静态库

创建Aggregate:

在静态库工程里新建一个target(File/New/Target), 在弹出的框中在左边选择iOS下面的Other, 然后在右边选择Aggregate:


合并模拟器和真机的通用.a静态库_第1张图片

在静态库工程里新建一个target(File/New/Target), 在弹出的框中在左边选择iOS下面的Other, 然后在右边选择Aggregate:

创建好Aggregate之后,在Target下面选择刚刚创建的Aggredate, 然后选择"Editor/Add Build Phase/Add Run Script Build Phase",这里注意要在工程里点击下Bulid Phasas ,将其内容展开  才能在 Add Bulid Phase中选到Add Run Script Build Phase

合并模拟器和真机的通用.a静态库_第2张图片

然后在Run Script下面添加以下脚本:以下内容全部复制粘贴即可


# define output folder environment variable

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# Step 1. Build Device and Simulator versions

xcodebuild -target TARGETNAME ONLY_ACTIVE_ARCH=NO -configuration Release -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

xcodebuild -target TARGETNAME -configuration Release -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

# make sure the output directory exists

mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 2. Create universal binary file using lipo

lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"

# Last touch. copy the header files. Just for convenience

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"

此时,选中项目的Aggregate进行编译,编译成功会在Build目录下面出现Debug-universal目录,该目录里面生成的libxxx.a就是合并的静态库。注意:这里我遇到两个坑就是  1 编译报错说什么NoT Directionary 没有相关文件,。解决办法就是打开文件目录将所缺少的文件新建文件加进去,我加了一个模拟的静态库文件和一个真机的静态库。再编译,就好了

合并模拟器和真机的通用.a静态库_第3张图片

你可能感兴趣的:(合并模拟器和真机的通用.a静态库)