自定义Framework

2020-08-10  本文已影响0人  假装门口当前台

第一次要制作framework,把制作过程分享一下,遇到了很多坑

简单的版本可以通过XCode创建一个framework project,如下图


图一

这种可能很自动生成framework,但是如果过程中需要继承到pod,引用第三方库,就会显得束手无策。

在强大互联网的搜索下,找到了一个方法,通过创建target方式,但是这个有个弊端,下面会讲到,先看看操作过程

1.创建target,选择framework


图二

2.点击下一步,按照图中,选择对应选项


图三

3.生成target工程中会有如下目录,可以在该目录下去编辑存放代码


图四

4.紧接着按照pod方式接入,在podfile文件中引入需要的第三方库


图五

5.然后通过pod install 或者pod update,去更新第三方
6.在编译的时候选择xxxx这个工程,选择编译,就可以生产xxxx.framework


图六
7.在product中就可以看到生成的framework,通过show in finder就可以找到生成的工具
图七

8.如果要编译release库,请在EditScheme中编辑


图八
在这里选择想要的模式
图九
9.在这里选择静态库,我这边选择是static Library
图十

正常情况下是可以编译生成framework,然后接下来怎么提供给第三方用。

1.直接把xxx.framework拖入Frameworks文件夹,或者在Build Phases -> Link Binary With Libraries -> + -> Add Other ,选中对应的framework


图十一 图十二

2.然后直接build,发现各种报错,主要是引用第三方找不到,原因就是framework没有包含第三方的工程,这里我们需要在podfile中去把我们之前引用的pod文件加入需要的工程中,这样我们的framework就可以通过工程pod引入第三方关联到第三方(这个我觉得比较不科学,不那么实用,但是目前也算是一种解决方式)


图十三

3.这时候在编译,正常是可以通过了。

4.然后引入后可能发现找不到framework的类,即使把文件暴露到public中

接下来Archive发布版本


图十四

如果代码中要全Enable bitcode,这时候会发现,包not full bitcode的错误,这是因为我们的framework没有支持,在网上搜索发现是把这个设置为NO


图十五

但是我们就是需要设置为yes,这时候怎么处理呢?
这时候需要把我们的库设置为支持bitcode的

1.首先要把Mach-O Type设置为Static Library


图十六

2.其次,公开的framework,class都是必须public,其中很多用到的参数对象,枚举,结构体,都要是public,不然第三方引用是用不到的,但是可以通过封装去规避,记得在Build Phases中把暴露的类引导放到Headers public 中

3需要在 Build Settings -> Deployment 中打开 DEPLOYMENT_POSTPROCESSING = YES,
设置 STRIP_STYLE 为 Debugging Symbols,
Build Settings -> Compiler Flags添加 -fembed-bitcode 参数。

图十七
上一篇 下一篇

猜你喜欢

热点阅读