自定义Framework
第一次要制作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 参数。
