美文网首页Swift编程iOS DeveloperiOS程序猿
Swift进阶之动态FrameWork的制作与使用

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

作者: 贝尔特伦 | 来源:发表于2017-06-15 10:53 被阅读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

    相关文章

      网友评论

        本文标题:Swift进阶之动态FrameWork的制作与使用

        本文链接:https://www.haomeiwen.com/subject/emdyqxtx.html