【iOS 开发】将自己的框架打包成 Framework 的方法
栏目: Objective-C · 发布时间: 7年前
内容简介:【iOS 开发】将自己的框架打包成 Framework 的方法
最近需要将公司项目中的公共代码给提取出来,打包成 Framework
来使用,这样可以使得我们的公共代码易于分享,并且可以在多个工程中易于复用,而且将这些代码给别人使用时,可以隐藏实现细节,控制公开的头文件,下面分享一下打包成 Framework
的步骤。
创建 Framework 工程
1. 创建打包工程
- 打开
Xcode
新建一个工程,选择Framework & Libray
选项中的Cocoa Touch Framework
,这里说一下我的Xcode
版本是8.3.2
。
- 因为要打包所需的文件,所以这里我自己创建了一个测试类,在实际的打包过程中,直接把需要打包的所有文件拖到该工程中即可。
2. 添加公开头文件
- 选中
Target
,选择Build Phases
-Headers
,可以看出有三个选项,分别是Public 、Private 、Project
,把需要公开给别人的.h
文件拖到Public
中,把不想公开的,即为隐藏的.h
文件拖到Project
中。
- 完成上述步骤之后,在默认生成的
.h
文件中,我的是TestFramework.h
,把所有需要暴露的.h
文件都用#import <TestFramework/PublicHeader.h>
引入,记住一定要将所有需要暴露的.h
文件都引入,也就是上面Headers
-Public
中加的所有.h
文件,不然编译后生成的.framework
在引用的时候会有警告。
3. 更改设置参数
- 选中
Target
,选择Build Settings
,在Architectures
下增加armv7s
,将Build Active Architecture Only
设置为NO
。
- 选中
Target
,选择Build Settings
,修改以下Linking
中的几个设置。
工程打包成 Framework
1. 创建 Aggregate
- 新建一个
Target
,选择Cross-platform
-Aggregate
,名字随便起一个。
- 选中新建的
Target
,点击Build Pharas
中的+
,选择New Run Script Phase
。
- 点开
Run Script
,添加以下的脚本代码。
# 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}"
2. 编译所有文件
- 按照下图将编译的
Target
选择为刚才创建的Aggregate
,Device
选择为Generic iOS Device
,然后按下Command + B
开始编译。
- 编译完成后会自动弹出已经创建完成的
Framework
包内容,最终打包完的.framework
会在项目下的Products
文件夹下。
3. 测试打包完的 Framework
- 新建一个测试工程
TestDemo
,将打包完的TestFramework.framework
拖到工程中,测试一下刚才创建的TestClass
类,可以看到信息打印出来了,测试成功。
- 如果使用打包完的
Framework
有出现崩溃的情况,可以考虑在项目Other linker flags
中加入一些参数,下面介绍三个常用参数:
-ObjC:加了这个参数后,链接器就会把静态库中所有的 Objective-C 类和分类都加载到最后的可执行文件中。 -all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld:duplicate symbol 错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到 -ObjC 失效的情况下使用 -force_load 参数。 -force_load:所做的事情跟 -all_load 其实是一样的,但是 -force_load 需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。
主要步骤大概就是这样,如果有发现什么问题可以给我留言,希望能够帮助大家少走一些坑。
将来的你,一定会感激现在拼命的自己,愿自己与读者的开发之路无限美好。
以上所述就是小编给大家介绍的《【iOS 开发】将自己的框架打包成 Framework 的方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [打包优化]从0到1搭建element后台框架之优化
- [打包优化]从0到1搭建element后台框架优化篇
- 企业级微服务框架 NutzBoot v2.1.8 发布,支持 war 打包
- 小程序:基于Vue的多端开发框架uni-app 小程序打包App
- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- Maven多模块项目打包前的一些注意事项(打包失败)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)
孙丽敏等编 / 吉林教育出版社 / 2004-6 / 10.0
本书将与知识点、重点、难点和考点有关的典型题做全析全解,是具有解题题典性质的助学读物。但本书又优于解题题典,不仅展示解题过程,更详细地提供了解题思考过程和切入点的选择方法,教方法导引思路的功能更强。 学生要提高解题能力,必须具备两个条件:一是打好基础,二是能够运动所学知识分析问题和解决问题。本书用例题解析解说知识点、重点、难点和考点,同时提供解题思考过程,在打基础中激活能力,在解题实......一起来看看 《八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)》 这本书的介绍吧!