博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发Framework工程
阅读量:6940 次
发布时间:2019-06-27

本文共 2180 字,大约阅读时间需要 7 分钟。

新建Framwork工程

早期xcode可以创建.a的静态库或.dylib的动态库,现在(2017.1)一般直接创建Framework工程。

打开xcode,file-new-project,选择Cocoa Touch Framework就可以创建一个framework工程了。

img_c8976672d67de788a5e3ebd2ad4eda12.png
新建工程

创建完成后默认的framework是动态库,点击Build Settings - Mach-O Type可以选择动态库还是静态库。

img_c51a3d9c74fa396331a8932c2a20f200.png
使用静态库

关于动态库和静态库的比较可以参考网上的资料,对于使用者而言,导入动态库唯一要注意的是在General - Embedded Binaries中需要添加对应动态库。

Bitcode支持

framework给用户使用需要支持bitcode,除了在Build Settings中需要把Enable Bitcode设为YES,还需要在Other C Flags添加编译选项-fembed-bitcode,如下图所示。

img_272e5852de91c74e329511ccb4c89588.png
-fembed-bitcode

SDK模块化

添加多个target

如果开发的SDK库需要根据不同模块组合打出不同的库,这个时候xcode中的Targets就派上用场了。

假如我们有一个MyFramework,现在需要打两个framework,他们有各自独立的功能,但同时有公用的模块。这个时候可以点击Targets左下角+号,新增一个名叫TestFramework的target。相应的工程目录会出现TestFramework的文件夹。

img_5c8b47f0002c9591ecb54e4c797f70cf.png
新增target

指定target编译文件

为源文件指定target可以选中某个文件,右侧Target Membership中指定。也可以在选中target,在Build Phases中一次性指定编译文件及暴露的头文件。

img_4c3938ed55d77729d0215b6dc08f36d5.png
Target Membership
img_3ba9d0b1a30a1347df69a541b256a5b4.png
Build Phases

需要打包时,只需要在xcode右上角选择不同的target编译即可。

打包Framework工程

iOS的framework需要支持四种架构,i386,x86,armv7,arm64。由于xcode不支持打包生成所有架构的framework包,需要手动真机build一次,模拟器build一次,两次生成的文件通过lipo -create 命令合成一个framework。

build时需要将scheme切换到Release模式,否则xcode只会编译目标设备对应到架构。当然,也可以在Build Settings中将Build Active Architecture Only设为NO。

img_6341393e3240499e6491adbc5affd4ef.png
Build Active Architecture Only设置

每次都手动打包很是麻烦,真实项目中一般都通过xcodebuild实现脚本打包,相关选项可以通过man xcodebuild查看,这里只举一个例子说明脚本打包的一般过程,具体实现可以使用shell,python等脚本语言:

// 切换到项目目录cd ~/workspace/MyFramework// 使用xcodebuild命令编译TestFramework这个target的arm版本xcodebuild -project MyFramework.xcodeproj -scheme TestFramework -configuration Release CONFIGURATION_BUILD_DIR='~/Desktop/build/arm'// 使用xcodebuild命令编译TestFramework这个target的x86版本xcodebuild -project MyFramework.xcodeproj -scheme TestFramework -configuration Release -sdk iphonesimulator10.2 CONFIGURATION_BUILD_DIR='~/Desktop/build/x86'// 合并两个版本,输出文件TestFrameworklipo -create ~/Desktop/build/arm/TestFramework.framework/TestFramework ~/Desktop/build/x86/TestFramework.framework/TestFramework -output ~/Desktop/build/TestFramework// 将合并的文件覆盖arm/TestFramework.framework中对应文件cp ~/Desktop/build/TestFramework ~/Desktop/build/arm/TestFramework.framework // 合并后的framework包移动到桌面mv ~/Desktop/build/arm/TestFramework.framework ~/Desktop/// 删除build文件夹rm -r ~/Desktop/build// 验证framework包含的框架集,如果结果是“armv7 i386 x86_64 arm64”说明没有问题lipo -info ~/Desktop/TestFramework.framework/TestFramework

转载地址:http://sdsnl.baihongyu.com/

你可能感兴趣的文章
MySQL操作语句
查看>>
洛谷——P1825 [USACO11OPEN]玉米田迷宫Corn Maze
查看>>
NOI 1.5 44:第n小的质数
查看>>
博客写作的Checklist
查看>>
SVN权限修复
查看>>
MySQL函数的使用
查看>>
Dockerfile编写语法
查看>>
NFS pv部署
查看>>
暑假练习赛 003 B Chris and Road
查看>>
贪心小结
查看>>
Problem L
查看>>
show diffrent appbar for windows phone pivot page
查看>>
IE block my cookie in iframe
查看>>
02课后作业
查看>>
初识单片机(51单片机学习之旅系列)
查看>>
linux配置java jdk
查看>>
python全栈开发从入门到放弃之socket并发编程之IO模型
查看>>
ECMAScript 5 —— 执行环境及作用域
查看>>
Python:程序发布方式简介一(打包为可执行文件EXE)
查看>>
Kdevelop简单应用以及调试
查看>>