iOS开发之.a静态库制作
简单介绍图片、界面xib等资源文件封装到.a静态库,用Xcode 8.1 制作为例
一、首先将资源文件打包成bundle
借助于OS X,因为iOS框架中没有创建Bundle的模板

删除工程中多余的文件

由于删除了plist文件,所以必须在Build Settings中删除对它的引用

我们创建项目时选的是OS X中的框架,所以此处需要修改Base SDK为iOS

设置完后,可以把我们需要的资源拷贝过来

按快捷键"Command + B"编译,编译成功后,Products下面的PictureOCRImage.bundle由红色变成了黑色,表示编译成功

可以通过右击 Show in Finder -> 查看文件夹 ->右击显示包内容,查看里面的内容
► 至此,资源打包成bundle完成.如果只是普通的资源,完全可以创建一个文件夹,把需要封装的资源文件拷贝至该目录下,将其改成后缀名为bundle即可,然后就可以使用NSBundle提供的接口访问其内部的资源文件,当然,也可以通过访问普通文件目录的方法访问其内部的资源。这样写主要是考虑到xib文件打包
制作.a文件库
新建项目,点击iOS—Framework&—Cocoa Touch Static Library。

系统自动生成以工程名命名的.h和.m文件,可自定义的在目录下添加或删除文件,注意目录下Products文件夹有一个.a文件为红色,说明文件并不存在。这里我们将系统生成的.h和.m文件删除。

将需要打包的文件添加到工程中

点击Build Phases—Copy Files,左下角点击+号按钮,添加你需要暴露的接口头文件。

点击左上角,选择Edit Scheme,Build Configuration下选择Release,先注意检查下面Release是否为NO:Yes表示只编译选中模拟器设备对应的架构,No则为编译所有模拟器设备支持的cup架构(Debug版本同理),选择NO,然后分别在模拟器和真机下Command+B编译一下,会看到Products文件夹下的.a文件变为黑色,这个.a文件就是我们想要得到的静态库。

可以通过右击 Show in Finder -> 查看文件夹,打开Build—Products文件夹,会看到Release-iphoneos和Release-iphonesimulator文件夹,分别是真机和模拟器的.a文件,为了使用方便我们将两个版本的.a文件合并。
a.终端合成


b.使用脚本合成真机和模拟器的.a文件
- 选中TARGETS 点击左下角的加号

2)选中TARGETS中新创建的脚本工程,点击左上角的"+"号,选中"New Run Script Phase"

3)复制脚本代码,将下面代码复制到图中指示的地方
if [ "${ACTION}" = "build" ]
then
#要build的target名
target_Name=${PROJECT_NAME}
echo "target_Name=${target_Name}"
#build之后的文件夹路径
build_DIR=${SRCROOT}/build
echo "build_DIR=${build_DIR}"
#真机build生成的头文件的文件夹路径
DEVICE_DIR_INCLUDE=${build_DIR}/Release-iphoneos/include/${PROJECT_NAME}
echo "DEVICE_DIR_INCLUDE=${DEVICE_DIR_INCLUDE}"
#真机build生成的.a文件路径
DEVICE_DIR_A=${build_DIR}/Release-iphoneos/lib${PROJECT_NAME}.a
echo "DEVICE_DIR_A=${DEVICE_DIR_A}"
#模拟器build生成的.a文件路径
SIMULATOR_DIR_A=${build_DIR}/Release-iphonesimulator/lib${PROJECT_NAME}.a
echo "SIMULATOR_DIR_A=${SIMULATOR_DIR_A}"
#目标文件夹路径
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}
echo "INSTALL_DIR=${INSTALL_DIR}"
#目标头文件文件夹路径
INSTALL_DIR_Headers=${SRCROOT}/Products/${PROJECT_NAME}/Headers
echo "INSTALL_DIR_Headers=${INSTALL_DIR_Headers}"
#目标.a路径
INSTALL_DIR_A=${SRCROOT}/Products/${PROJECT_NAME}/lib${PROJECT_NAME}.a
echo "INSTALL_DIR_A=${INSTALL_DIR_A}"
#判断build文件夹是否存在,存在则删除
if [ -d "${build_DIR}" ]
then
rm -rf "${build_DIR}"
fi
#判断目标文件夹是否存在,存在则删除该文件夹
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
#创建目标文件夹
mkdir -p "${INSTALL_DIR}"
#build之前clean一下
xcodebuild -target ${target_Name} clean
#模拟器build
xcodebuild -target ${target_Name} -configuration Release -sdk iphonesimulator
#真机build
xcodebuild -target ${target_Name} -configuration Release -sdk iphoneos
#复制头文件到目标文件夹
cp -R "${DEVICE_DIR_INCLUDE}" "${INSTALL_DIR_Headers}"
#合成模拟器和真机.a包
lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}"
#打开目标文件夹
open "${INSTALL_DIR}"
fi

- 选中脚本工程运行

查看静态库.a对处理器架构的支持,
先cd到.a文件的路径下,命令行输入:lipo -info xxxxx.a

模拟器:iphone4s~5 : i386 iphone5s~6plus : x86_64
真机:iphone3gs~4s : armv7 iphone5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上) iphone5s~6plus : arm64
至此,.a库的制作完成了
参考文章:
http://www.fx114.net/qa-173-100870.aspx http://blog.csdn.net/lvxiangan/article/details/50256963
网上资源虽杂,但也丰富,学习了