Swift编程iOS DeveloperiOS程序猿

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

2017-06-15  本文已影响166人  贝尔特伦

前言:

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

声明:

1,Swift语言,禁止制作静态包,只能制作动态的frameWork
点a文件是静态的,肯定不能制作了。framework有静态和动态两种,所以只能制作动态的FrameWork,制作时,默认就是动态的,所以不需要更改配置。

2,关于Swif如何隐藏方法细节
1),制作时不能公开任何内部文件到header的public里
2),要公开的类和方法前加上public
3),库内部的文件,可以相互访问
不加public会有什么影响呢?
如果不加,你制作完成的FrameWork,无法访问你所需要的类和方法。

3,关于动态库上架问题
首先一点,Swift语言是不支持静态库的,只支持动态库,而苹果是支持Swift语言去用于开发的,所以纯Swif的动态库,上架是没问题的。
另外,苹果在早些时候,已经适当的放开了动态库的权限。所以这点不需要太担心。

具体制作流程

一:创建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

上一篇下一篇

猜你喜欢

热点阅读