Umbrella OR Unique
根据上文描述,在Mac OS中有Umbrella Framework的概念,但是在iOS中这个概念不再被苹果提及
本文将整理如何实现同Umbrella Framework一样效果的Unique Framework来完成一些特殊的需求
Unique Framework的关键点
- 根据文章Framework的多版本和Umbrella介绍,目前StackOverflow上的所有答案均为错误
- 制作Unique Framework的所有代码必须本人可控,不能依赖第三方库
Unique Framework的拆解
根据上文介绍,Framework一共可以分为三个部分
模块 | 作用 | Unique化方案 |
---|---|---|
头文件系统 | 根据modulemap进行头文件管理 | 通过Disk Path 和 Search Path引入,并加入Umbrella |
Mach-O | 可执行文件 | 通过设置依赖的Framework为Static Mach-O,让其加入Unique Mach-O |
资源文件 | 资源压缩包 | 通过Disk Path引入,伪装成Bundle |
我们后续文章将会对如下架构进行Unique Framework教学
Unique Framework 无法避免的重复类(按照上述方法应该不会出现)
直接把需要暴露的类拷贝到 Unique Framework中,直接使用,很多人会疑问不会出现 Duplicated Symbols 的错误么? 答案是不会,仅仅会在运行时丢出一个错误
1 | Class PLBuildVersio is implemented in both |
这种处理方法,在苹果的 PhotoLibraryServices.framework 和 AssetsLibraryServices.framework 中 PLBuildVersio 就使用到了
虽然比较粗暴,但是也不会有任何问题,唯一需要保证的是,两处的实现一定要一致 具体讨论可以查看 Class PLBuildVersion is implemented in both frameworks