一、制作
1. .a工程创建(静态库)
(1)新建一个工程,选择cocoa touch static library(如图1)
(2)将iOS deployment target 改成你想支持的最低版本(如图2)
(3)编写代码
(4)需要暴露的头文件,都移到build phases->headers->public里(如图3)
图1 图2 图32. .framework工程创建(静态库和动态库)
(1)新建一个工程,选择cocoa touch framework(如图4)
(2)将iOS deployment target 改成你想支持的最低版本(如图2)
(3)在target->build setting -> mach-O Type 可以选择动态或静态,如下图(如图5)
(4)编写代码
(5)需要暴露的头文件,都移到build phases->headers->public里(如图3)
图4 图5二、生成
1.首先了解什么是i386,x86_64,armv7,armv7s,arm64架构
iOS处理器分为32位处理器,和64位处理器,
模拟器32位处理器测试需要i386架构,(iphone5及其以下的模拟器)
模拟器64位处理器测试需要x86_64架构,(iphone5s及其以上的模拟器)
真机32位处理器需要armv7,或者armv7s架构,(iphone4真机/armv7, ipnone5,iphone5c真机/armv7s)
真机64位处理器需要arm64架构。(iphone5s及其以上的真机)
2.如何通过终端生成.a和.framework?
设备选择真机和模拟器各编译一次,即可生成。
当编译.a和.framework时,工程最好在release模式下。
当工程在release模式下,会编译支持所有架构的版本;当工程在debug模式下,只编译当前的architecture版本。比如,你现在选择的模拟器是iPhone6,在debug模式下编译的.a和.framewofk只支持x86_64,在release模式编译的.a和.framewofk支持i386和x86_64。
3.如何合并.a和.framework
在终端输入lipo -create ~(iphoneos) ~(iphonesimulator) -output ~
合成.framework 就是合并Zip.framework里的Zip
合并得到的 Zip 把Release-iphoneos/Zip.framework/Zip替换掉 然后这个Zip.framework就合并好了
合并.a 和.framewor类似,在终端把生成的两个.a文件合并即可。
2.如何通过脚本合并.framework?
1.在target ->build phases 里添加new run script phase
2.在run script 里添加以下代码:
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
3.工程在release模式下,设备选择真机和模拟器各编译一次,就自动生成合并好的.framework
有什么问题,欢迎提出!!!!!
网友评论