上一篇说了一下如何准备好两大工具,github 和 trunk 账号!
这一篇主要说的是,当你的代码里有一些不可描述的内容不想让别人看到,总之不想暴露自己的源码,只想让别人调用你公共API。 这时候我们可以把代码块打包成 Static Liabrary 或者是 Framework
也就是 .a文件 和 .framework 文件 大致来说 .framework = .a + header文件
这两种文件的具体差别不多说了,有兴趣的可以看StaticLibrary和Framework的区别
话不多说,步骤开撸。
一.创建 StaticLibrary
1.打开Xcode 创建一个新的project 在界面选择上按下图选择
然后完成自己的功能,这里用一个简单的小功能代替.
功能完成后 使用Command + B 分别在模拟器和Generic iOS Device 环境下编译一遍.然后在product文件下会生成一个library文件,这时候show in finder 会发现有iphones 和 iphonesimulater两个文件包 里面分别有一个.a文件,这就是我们刚才编译生成的static library文件,分别是模拟器状态和真机状态.
编译生成的library文件 两种环境下的文件包然后需要使用 lipo create 命令行合并初一个适合两种环境的.a文件
适合两种环境的.alipo -create 模拟器环境下的.a文件路径 真机环境下的.a文件路径 -output 目标.a文件路径
这时候就可以把这个.a 文件 和所需的.h文件拖到你的工程中使用了. bingo~
二.创建Framework
1.打开Xcode 创建一个新的project 在界面选择上按下图选择
2.同样的完成自己的功能代码块 依旧用一个小demo来说明
方法声明 方法实现3.选中 Target ,选择 Build Phases - Headers ,可以看出有三个选项,分别是 Public 、Private 、Project ,把需要公开给别人的 .h 文件拖到 Public 中,把不想公开的,即为隐藏的 .h 文件拖到 Project 中
例4. 在系统生成header文件下 按你的需求导入你的public header文件(必须导入,不然在别人使用的时候找不到你的头文件)
例5. 在Architectures下增加armv7s,并选中。将Build Active Architecture Only 设置为NO
至于为什么添加 可以看这篇帖子链接
并把Architecture Only 改为 No
将Mach-O Type设为Static Library,framework,对于系统的framework是动态库,而用户制作的framework只能是静态库,要设置defines module为NO,不然集成的时候会出现Include of non-modular header inside framework module错误。设置bitcode为NO。
6.打包framework
方法一. 手动打包(不建议) 还是分别在两种环境下编译工程 并用 lipo create. -output 命令行合并framework 直接改后缀即可.(详细可看.a 打包流程)
方法二. 脚本自动打包(建议)
在TARGETS 下添加一个 Aggregate 并在此target下的build phases 增加一个新的脚本 如图
复制 粘贴下面的脚本代码
选中编译环境# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"
在这个编译环境下编译 你便可以得到一个适合 模拟器和真机环境的 .framework.
到此为止framework 制作完毕.自己建立个新工程测试一下,直接将刚才的.framework 导入测试
测试结果bingo~。~
网友评论