详细记录(iOS制作framework(包含第三方.a或framework的二次封装))
记录一次将声网的framework集成到自己的framework里的过程。
1.找到二进制文件
文章图片
image.png 2.将AgoraRtcEngineKit的二进制文件改成.a的后缀名,并且拖到Header里,给Header改名为agoLib
文章图片
屏幕快照 2018-04-20 上午9.52.51.png 3 .开始制作自己的framework项目,将agoLib文件夹拖进framework项目里,注意勾选Copy...和Add to target选项。
文章图片
屏幕快照 2018-04-20 上午9.55.45.png 4.将AFNetworking拖到项目里,注意:勾选Copy、不勾选“Add to target”选项(不勾选“Add to target”选项!不勾选“Add to target”选项!)。因为要添加我们的framework的工程基本都会添加AFNetworking,所以这里不勾选“Add to target”,具体工程单独添加AFNetworking即可。
5.将bitcode置为NO
6.(1)选择工程->targe->build setting,在搜索框中搜索linking,进行如下设置
(2)将Build Active Architecture Only 设为 NO
文章图片
2.png 7.(1)把要公开的头文件已到Public中去,在使用.framework时只能调用公开.h文件中的声明。
(2)
完成上述步骤之后,在ADRTCKit.h文件中,把所有需要暴露的.h文件都用#import < ADRTCKit/PublicHeader.h>引入,记住一定要将所有的需要暴露的.h文件都写在给定位置,不然编译后生成的.framework在引用的时候会有警告;
文章图片
屏幕快照 2018-04-20 上午10.08.28.png
文章图片
image.png 8.开始编译,选择Generic iOS Device 或者 真机,编译一下,再选择模拟器环境编译一下
9.上面的操作会出现两个版本的.framework,点击Products中的framework,选择右键在文件夹中查看。
文章图片
image.png 10.真机版本适用于真机调试开发,模拟器版本适用于模拟器调试开发,将两个版本中的 二进制 文件通过终端合并成通用的,终端指令:lipo -create +上面两个文件的路径 +-output+ 合成后文件的输出路径(路径后再拼一下要导出的文件就不会出现其他教程里 can't move temporary file的error了,这样直接生成所需目标文件不会生成.lipo的文件);
lipo -create /Users/shiguang/Library/Developer/Xcode/DerivedData/ADRTCKit-dyfcbfdpajuozpbaowtdlgrxtgpm/Build/Products/Debug-iphonesimulator/ADRTCKit.framework/ADRTCKit /Users/shiguang/Library/Developer/Xcode/DerivedData/ADRTCKit-dyfcbfdpajuozpbaowtdlgrxtgpm/Build/Products/Debug-iphoneos/ADRTCKit.framework/ADRTCKit -output /Users/shiguang/Desktop/00000Demo/000/0lib/ADRTCKit
文章图片
image.png
文章图片
image.png
文章图片
image.png 11.将合并生产的ADRTCKit文件替换真机生产的ADRTCKit.framework中的ADRTCKit文件
使用
12.创建一个新的项目,将替换后的ADRTCKit.framework添加到项目本地目录。
将制作的framework添加到工程里。
文章图片
image.png
文章图片
image.png
文章图片
image.png 最后,导入项目需要的其他依赖库并配置工程(如将bitcode置为NO)。
参考:https://www.jianshu.com/p/e588bb0411d8
http://www.gaoshilei.com/2016/11/17/Static%20Library/
【详细记录(iOS制作framework(包含第三方.a或framework的二次封装))】注意:
framework中使用了 CateGory 的时候,调用app出现"selector not recognized" ,解决方法是 在调用的app的 Build Settings --> Linking->Other Linker Flags 中加上 -ObjC 或者-all_load
参考:https://blog.csdn.net/tangaowen/article/details/39996213
推荐阅读
- 20170612时间和注意力开销记录
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 【剽悍读书营成长记录】2018年我收获了什么|【剽悍读书营成长记录】2018年我收获了什么 3357-小松
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 课后分享记录
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 感赏15+投射