Swift进阶之动态FrameWork的制作与使用

前言:

Swift发展至今,各版本语法更新换代,是让开发者非常头疼的,如今4.0也即将正式上线。之前笔者一直没有去弄过Swift的framework,也是因为其语法变动。但不得不说,Swift的进步是相当大的,如今各开源和未开源的第三方,也已经多不胜数。其中也有一部分是无法维护的。也有许多2.0的项目因为一些第三方,而废弃。语法更新的时候,打包的framework,是无法跟着升级的,除非有源文件,而这些第三方,也米有及时的更新,对项目的更新维护,带来了很大的一个坑。
另外,笔者查阅资料,发现关于Swift制作framework的资料非常至少,有的也是比较模糊,和时间古老。本篇主要讲解FrameWork的制作过程,及一些注意事项。

声明:

1,Swift语言,禁止制作.a类型的库,只能制作动态的frameWork
,framework有静态和动态两种,默认就是动态的,动态的不能支持模拟器,1是因为上架不支持,2是我在制作过程中,将静态和动态合并时,一直报错。

2,关于Swif如何隐藏方法细节
1),制作时不能公开任何内部文件到header的public里,如果公开了,能看到里面所有源码
2),要公开的类和方法前加上public
3),库内部的文件,可以相互访问
不加public会有什么影响呢?
如果不加,你制作完成的FrameWork,无法访问你所需要的类和方法。另外你用open也可,open和public的区别自行百度吧。

3,关于动态库上架问题
删除模拟器,只保留真机。

具体制作流程

一:创建framework工程
语言选择Swift

屏幕快照 2017-06-15 09.44.03.png
屏幕快照 2017-06-15 09.44.18.png

看一看里面的内容

屏幕快照 2017-06-15 09.45.10.png

在OC里面,咱制作的时候,可能就把里面的东西全部删了,但是这里,
1处对应的ZYSDKTest.h文件,开发者不要删除,其作用是:如果你这个库里面用到OC的文件,那么需要把OC的头文件导入到里面。当然,笔者的建议是,制作的FrameWork,最好是只用一种语言写的,避免不必要的麻烦。
2处,是当前库最低支持的系统。Swift3.0是10.0的系统,所以笔者这里就是选10.0了

二:把要打包的文件,拖入项目中
笔者拖了两个测试的文件,讲讲区别和作用

屏幕快照 2017-06-15 09.58.26.png
屏幕快照 2017-06-15 09.58.32.png

ZYString 和ZYStringConfig两个类,大家可以看到,我在ZYString里,把class 和方法都用了public修饰,其作用在上面的声明中,已经说,后面在使用中,会看到具体的区别。

三:Commond+B编译生成动态库
这一步和OC的是一样的,选择模拟器编译就是生成只支持模拟器的库
选择iOS devices 就是生成支持真机的动态库

屏幕快照 2017-06-15 10.01.21.png

编译之后,咱们再下面的Products中可以看到这个库已经由红色变为黑色了,右键Show in find就可以找到它。接下来,咱们在项目中去用它试试吧。

动态库的使用

1,把刚刚制作的动态库拷贝到项目文件夹中


屏幕快照 2017-06-15 10.44.17.png

2,在Genera中的Embedded Binaries中点击+选择addOther,找到你本项目中之前拷贝的库添加进去


0B41E159-9E7F-4590-9975-C1F6DF46DB36.png

3,操作完成之后效果
屏幕快照 2017-06-15 10.46.37.png

由于是动态库,所以需要在用到库的地方引入头文件见下图

3090413B-D364-43B1-8089-E675E44E2404.png

大家可以看到ZYString这个类,可以正常使用,但是ZYStringConfig这个类,使用时是报错的。
在前面说了,ZYString类和方法前都加了public,其作用在这里已表现的很明确了。
按住commond+左键,点击ZYString,进去看看

7A3EE229-3CE1-4AC8-86CF-4A7C5C0144C9.png

在这里面首先只看到一个类,就是ZYString,方法也是,如果你不加public在这里是看不到的。

并且一点,在这里,你只能看到方法名,看不到方法的实现过程。

这样,咱们就把方法的实现细节给隐藏了。并且,这个文件,你是无法更改的。不信你试试。

Swift制作的FrameWork在OC项目中的使用

创建一个OC的项目,并导入库,和之前步骤一样。
先来看看这个库中的文件


屏幕快照 2017-06-15 10.20.45.png

里面包含了两个文件,ZYSDKTest-Swift.h和ZYSDKTest.h两个文件。
那么它们跟在OC中Swif这个库有没有关系呢。
来看一下。

屏幕快照 2017-06-15 10.21.39.png

导入库的头文件
<ZYSDKTest/ZYSDKTest-Swift.h>
<ZYSDKTest/ZYSDKTest.h>
二者只需要导入其中之一即可
在下面的使用时,同样只能使用ZYString而不能使用ZYStingConfig

使用动态库崩溃,崩溃原因如下

屏幕快照 2017-06-15 10.50.46.png

重点是开头,dyld: Library not loaded: @rpath/libswiftCore.dylib
说明你库的导入方式不对。按照我上面说的方式,或者去百度教程吧。

扩展知识点

1,点a文件,和FrameWork动静态库,制作详解
http://www.jianshu.com/p/90f5ec723175
2,OC中使用Swift文件详解
http://www.jianshu.com/p/c4272dfb6ab2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 4,370评论 0 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,303评论 4 61
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 12,177评论 3 42
  • 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(fro...
    薛皓哲阅读 454评论 0 0
  • 年轻时我曾经想过,追求的各种:叛逆、洒脱、自由、流浪、远方甚至爱情,都是为了自己,直到有一天,实在老得不好意思这样...
    腰间挂着诗篇的豪猪阅读 290评论 0 0