iOS静态Framework制作方法

开发做了一段时间后,总会有一些自己的总结,或者说自己的轮子。怎么才能把自己的这些东西合理的利用起来?库文件无疑是最好的方法。

iOS有哪些库文件?首先看看系统提供的:
1、静态库文件(.a)
2、动态库文件(.framework或.dylib或.tbd)

其中,静态库可以上传到App Store,静态库必须配合相应的头文件目录,才能被使用。动态库不允许上传到App Store,动态库含有头文件目录,可直接使用。

由于上述原因,就出现了静态Framework,既能保留.a文件可被上传到App Store,又能保留.framework的目录结构。以下就来介绍一下静态Framework的制作方法。

首先介绍一下开发环境,直接上图:

开发环境.png

制作静态Framework,目前有3种方法:

方法1: 通过.a转静态.framework

方法2: 通过.bundle转静态.framework

方法3: 通过动态.framework转静态.framework

以下我们分别介绍

方法1:通过.a转静态.framework

第一步,创建.a

打开Xcode

新建.png

点击Create a new Xcode Project

选择静态库.png

选择Cocoa Touch Static Library,点击 Next,输入Product Name

输入名称.png

按照提示完成余下操作,最终进入的工程界面

工程界面.png

此时,可以看到Product目录下libMyKit.a为红色,那是因为在磁盘文件中还没有生成该文件。

自定义头文件,系统默认情况下 Build Phases中,没有Hearders,需要手动点击“+”,自行添加。

自定义头文件.png

build该工程,会发现 libMyKit.a变为黑色,此时右击该文件Show In Finder,会看到该文件实际目录结构。如下图:

库文件目录结构.png

到这里静态库文件就已经创建好。

接下来,把创建好的静态库文件转换成静态framework。这里用到了脚本,如下图:

生成静态framework.png

附上代码

set -e

export FRAMEWORK_LOCN="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"

# Create the path to the real Headers dir
mkdir -p "${FRAMEWORK_LOCN}/Versions/A/Headers"

# Create the required symlinks
/bin/ln -sfh A "${FRAMEWORK_LOCN}/Versions/Current"
/bin/ln -sfh Versions/Current/Headers "${FRAMEWORK_LOCN}/Headers"
/bin/ln -sfh "Versions/Current/${PRODUCT_NAME}" \
"${FRAMEWORK_LOCN}/${PRODUCT_NAME}"

# Copy the public headers into the framework
/bin/cp -a "${TARGET_BUILD_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}/" \
"${FRAMEWORK_LOCN}/Versions/A/Headers"

好,到这里,再build一下工程,然后选中libMyKit.a,右击,Show In Finder,会看到该文件实际目录结构。如下图:

静态framework目录.png

看到了吧,这样静态framework就已经制作完成了。

方法2: 通过.bundle转静态.framework

打开Xcode,点击Create a new Xcode Project,同方法一

由于iOS 下没有Bundle选项,所以要选中macOS

创建Bundle.png

选中Bundle,点击Next

输入项目名称.png

按照提示完成余下操作,最终进入的工程界面:

工程目录.png

这样生成的是bundle,下面将进行bundle转换成framework

首先,修改Base SDK,将Base SDK改成最新的iOS SDK就行。

修改Base SDK.png

修改Linking
Dead Code Stripping设置为No
Link With Standard Libraries设置为No
Mach-O Type设置为Relocatable Object File

修改Linking.png

修改Packaging
Wrapper Extension设置为framework

修改Packaging.png

修改info.plist
Bundle OS Type code设置为FMWK

修改info.png

好了,以上已经完成bundle到framework的改造,下面在工程新建一个MyKit文件,并添加对外头文件,如下图:

新建文件.png

完成以上,选择工程Build,然后选中MyKit.framework,右击,Show In Finder

目录.png

好啦,以上就完成了bundle转静态framework。

方法3: 通过动态.framework转静态.framework

打开Xcode,点击Create a new Xcode Project,同方法一
选择Cocoa Touch Framework

创建framework.png

点击Next

创建工程.png

按照提示完成余下操作,最终进入的工程界面:

工程目录.png

这样创建好的是一个动态framework
下面进行由动态像静态改造

修改Linking
Mach-O Type设置为Static Library

修改Linking.png

完成以上,选择工程Build,然后选中MyKit.framework,右击,Show In Finder

framework目录.png

以上就完成了动态framework到静态framework的改造。

有没有发现方法三最简单!!!

补充说明:

细心的伙伴会发现三种方法创建的framwork目录是不一样的,这里就由伙伴们自行去思考了。

如果有用过支付宝的伙伴,有没有发现,再Archive时,会有一大堆警告。
那么我们的framework是否也有警告的,这有待伙伴们自行验证。

解决方法:
可以这样Build Setting--Code Generation
Generate Debug Symbol设置为No,即禁止生产调试符号。

关于通用库

即支持armv7 armv7s i386 x86_64 arm64,这里就不介绍了。有需要的,简信我,或者在下一篇文章给出。

参考资料

  1. https://www.raywenderlich.com/65964/create-a-framework-for-ios
  2. http://www.cocoachina.com/bbs/read.php?tid-282490.html
  3. http://years.im/Home/Article/detail/id/52.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容