有关framework介绍:

  • 静态库和动态库是相对编译期和运行期的:

        静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;

        动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。

  • 库的分类?

       开源库: 源码是公开的, 可以看到每个实现文件 .m 的实现, 例如 Github 上常用的开源库 AFNetworking, SDWebImage 等.

       闭源库: 不公开源码, 是经过编译后的二进制文件, 看不到具体的实现. 闭源库又分为: 静态库 和 动态库

  • 静态库的存在形式?

       .a
       .framework

  • 动态库的存在形式?

       .dylib
       .framework

  • 系统的.framework是动态库,我们自己建立的.framework是静态库,苹果不允许私自接入第三方动态库。
  • a与.framework有什么区别?

       .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

       .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

       .a + .h + sourceFile = .framework。

 

下面我将以Xcode10为例为大家演示一遍制作带有图片资源的framework过程,首先需要把图片资源打包成bundle,然后在创建静态库,如有不足之处,欢迎加我微信交流。(ww1030418469)

 把图片资源打包成bundle:

xcode10新建project->选择macOS->Bundle:

ios Framework 中NSBundle 资源找不到 ios framework是什么_framework

在新建的项目里addfile->macOS->Asset Catelog:

ios Framework 中NSBundle 资源找不到 ios framework是什么_静态库_02

->

ios Framework 中NSBundle 资源找不到 ios framework是什么_静态库_03

把你需要打包成bundle的图片资源拖到刚刚创建的这个Media.xcassets里面,效果如下:

ios Framework 中NSBundle 资源找不到 ios framework是什么_framework_04

然后运行一下,注意,运行要选择在My Mac上,然后找到product文件夹下面的bundle文件,show in finder就可以拿到资源。

 

打包成静态库:

creat a new project->ios->framework:

ios Framework 中NSBundle 资源找不到 ios framework是什么_framework_05

->

ios Framework 中NSBundle 资源找不到 ios framework是什么_bundle_06

如上图所示,删除daddemo.h,添加你需要打包的文件到项目中,如下图效果:

ios Framework 中NSBundle 资源找不到 ios framework是什么_动态库_07

进行编译之前应该设置为release模式:

ios Framework 中NSBundle 资源找不到 ios framework是什么_iOS_08

然后我们打开product文件夹,此时下面的.framework是红色的,表示还不存在,模拟器和真机分别运行一下,show in finder就可以得到product文件夹下面的.framework :

ios Framework 中NSBundle 资源找不到 ios framework是什么_iOS_09

命令行语句:sudo lipo -create (此处请填写真机AppVest文件路径) (此处填写模拟器AppVest文件路径) -output 自定义合成文件存储路径(合成文件的名字AppVest):

ios Framework 中NSBundle 资源找不到 ios framework是什么_动态库_10

到output的路径下找到你需要的daddemo文件,替换到真机或者模拟器对应的framework中,就可以使用啦!!!

大功告成。