iOS静态Framework制作方法

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

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

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

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

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

iOS静态Framework制作方法_第1张图片
开发环境.png

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

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

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

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

以下我们分别介绍

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

第一步,创建.a

打开Xcode

iOS静态Framework制作方法_第2张图片
新建.png

点击Create a new Xcode Project

iOS静态Framework制作方法_第3张图片
选择静态库.png

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

iOS静态Framework制作方法_第4张图片
输入名称.png

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

iOS静态Framework制作方法_第5张图片
工程界面.png

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

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

iOS静态Framework制作方法_第6张图片
自定义头文件.png

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

iOS静态Framework制作方法_第7张图片
库文件目录结构.png

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

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

iOS静态Framework制作方法_第8张图片
生成静态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,会看到该文件实际目录结构。如下图:

iOS静态Framework制作方法_第9张图片
静态framework目录.png

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

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

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

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

iOS静态Framework制作方法_第10张图片
创建Bundle.png

选中Bundle,点击Next

iOS静态Framework制作方法_第11张图片
输入项目名称.png

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

iOS静态Framework制作方法_第12张图片
工程目录.png

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

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

iOS静态Framework制作方法_第13张图片
修改Base SDK.png

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

iOS静态Framework制作方法_第14张图片
修改Linking.png

修改Packaging
Wrapper Extension设置为framework

iOS静态Framework制作方法_第15张图片
修改Packaging.png

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

iOS静态Framework制作方法_第16张图片
修改info.png

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

iOS静态Framework制作方法_第17张图片
新建文件.png

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

iOS静态Framework制作方法_第18张图片
目录.png

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

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

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

iOS静态Framework制作方法_第19张图片
创建framework.png

点击Next

iOS静态Framework制作方法_第20张图片
创建工程.png

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

iOS静态Framework制作方法_第21张图片
工程目录.png

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

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

iOS静态Framework制作方法_第22张图片
修改Linking.png

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

iOS静态Framework制作方法_第23张图片
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

你可能感兴趣的:(iOS静态Framework制作方法)