iOS 如何制作、生成、合并.a 和.framework?

2017-02-19  本文已影响355人  上路喽

一、制作

1. .a工程创建(静态库)

(1)新建一个工程,选择cocoa touch static library(如图1)

(2)将iOS deployment target 改成你想支持的最低版本(如图2)

(3)编写代码

(4)需要暴露的头文件,都移到build phases->headers->public里(如图3)

图1 图2 图3

2. .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

有什么问题,欢迎提出!!!!!

上一篇下一篇

猜你喜欢

热点阅读