【iOS 开发】将自己的框架打包成 Framework 的方法
2018-02-10 00:05
477 查看
最近需要将公司项目中的公共代码给提取出来,打包成
创建工程因为要打包所需的文件,所以这里我自己创建了一个测试类,在实际的打包过程中,直接把需要打包的所有文件拖到该工程中即可。
测试类
Headers完成上述步骤之后,在默认生成的
引入头文件
更改设置参数选中
更改设置参数
创建 Aggregate选中新建的
New Run Script Phase点开
Run Script
编译文件编译完成后会自动弹出已经创建完成的
Products
测试工程如果使用打包完的
将来的你,一定会感激现在拼命的自己,愿自己与读者的开发之路无限美好。
作者:Jonzzs
链接:https://www.jianshu.com/p/9d7638d06dd5
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
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中。
Headers完成上述步骤之后,在默认生成的
.h文件中,我的是
TestFramework.h,把所有需要暴露的
.h文件都用
#import <TestFramework/PublicHeader.h>引入,记住一定要将所有需要暴露的
.h文件都引入,也就是上面
Headers-
Public中加的所有
.h文件,不然编译后生成的
.framework在引用的时候会有警告。
引入头文件
3. 更改设置参数
选中Target,选择
Build Settings,在
Architectures下增加
armv7s。
更改设置参数选中
Target,选择
Build Settings,在搜索栏搜索
Mach-O Type,将
Mach-O Type修改为
Static Library。
更改设置参数
工程打包成 Framework
1. 创建 Aggregate
新建一个Target,选择
Cross-platform-
Aggregate,名字随便起一个。
创建 Aggregate选中新建的
Target,点击
Build Pharas中的
+,选择
New Run Script Phase。
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}"
Run Script
2. 编译所有文件
按照下图将编译的Target选择为刚才创建的
Aggregate,
Device选择为
Generic iOS Device,然后按下
Command + B开始编译。
编译文件编译完成后会自动弹出已经创建完成的
Framework包内容,最终打包完的
.framework会在项目下的
Products文件夹下。
Products
测试打包完的 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 需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。主要步骤大概就是这样,如果有发现什么问题可以给我留言,希望能够帮助大家少走一些坑。
将来的你,一定会感激现在拼命的自己,愿自己与读者的开发之路无限美好。
作者:Jonzzs
链接:https://www.jianshu.com/p/9d7638d06dd5
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- RDIFramework.NET ━ .NET快速信息化系统开发框架-第3章 软件安装、配置、运行方法
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
- iOS开发之静态库(四)—— 静态框架framework制作
- iOS开发之Xcode打包framework
- 如何在IOS开发中在自己的framework中添加.bunble文件
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- iOS快速开发框架Bee-Framework应用和解析(一) --- 为什么使用Bee framework
- iOS开发-将自己的app在appstore下架的方法(转载)
- 如何自己定制iOS框架(framework)
- 构建自己的代码库及软件开发不能是加工作坊--及一个简单的Linux C程序开发框架—linux-dev-framework
- 【转】自己开发的iphone app打包为IPA包的方法
- iOS快速开发框架Bee-Framework应用和解析 (四,完结)UI容器,UICell, UILayout(XML + CSS)
- iOS开发—OC语言Foundation框架(一)—NSObject常用方法
- iOS开发-将自己的app在appstore下架的方法
- iOS开发遇到的坑之三--使用asi框架在xcode下正常运行,但是打包时却不能进行网络访问
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- iOS快速开发框架Bee-Framework应用和解析(二) --- Bee framework架构概览
- RDIFramework.NET ━ .NET快速信息化系统开发框架-第3章 软件安装、配置、运行方法
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework