本篇文章不会逐一对里面的内容进行讲解 , 在接下来的篇章中会结合具体案例来讲解其中几个比较重要的部分 。其余部分读者可参照官方文档进行阅读
https://guides.cocoapods.org/syntax/podspec.html#specification
3. 手动创建如果你对podspec文件已经非常熟悉了 , 可以直接手动创建 , 或者复制一份现有的并在其基础上进行修改 。
总结:如果你准备从零开始开发一个新的组件 , 那么适合使用第一种方式来初始化组件化工程 , 它会帮你自动生成一些列的模版文件和代码 , 可以直接在Example工程上进行组件的开发和调试;如果你是想对现有的模块进行组件化改造 , 已经存在了源码和资源等文件 , 那么适合使用第二或第三种方式来初始化组件化工程 。
3.创建第一个组件库本文主要讲对现有项目进行组件化改造 , 这里仍然以QRCodeReader为例 , 继续为大家讲解 。
还记得上面提到的pod库三大组成部分吗?源码 + 资源 + podspec 文件 , 接下来要搞定源码文件 。QRCodeReader的源码文件目前还在项目的主工程里面 , 若想将其独立出来 , 我们需要将其进行适当的修改 , 分为两个方面:
其一:解耦合 。对于像QRCodeReader这种比较简单的组件 , 几乎没什么耦合 , 可直接将其从主工程中移出来 。文件被移出后自然会出现“某某类或某某方法找不到“之类的错误 , 先不要着急 , 等完成组件化配置后再来解决此类编译问题;若是比较庞大的组件 , 耦合性较高 , 最好是先理清依赖关系 , 完成解耦 。
对于复杂系统 , 解耦合的主要思路是使用中间件桥接 , 即各个组件间不直接相互访问 , 而是都通过一个中间者来实现 , 这就要求每个组件将自身所具有的能力注册到中间件中 , 是六大设计原则之一的依赖倒转原则的具体实现 。如下图所示 , 组价A和组件B彼此独立 , 组件A通过中间件来访问组件B 。这里仅提供一种思路 , 感兴趣的读者可以自行搜索相关资料阅读 , 本篇不做过多介绍 。
其二:修改访问级别(Access Levels) 。对于 Swift 来说 , 我们声明的类和方法等的访问级别默认都是internal的 , 即只能供同一 Module 内的文件访问 。进行组件化改造后 , 我们制作的组件会成为一个独立的 Module , 因此需要将组件内暴露给外部的类、方法、属性等设置为public或open , 才能被其他 Module 访问 。
?Access Levels完成这两步后就可以把源码文件移动到组件化目录下了 , 大家可根据需要把”组件化目录“放到磁盘上的任意位置 , 这里我将其放到和主工程同级的目录下:
open:最高访问级别 , 只能修饰类和类成员 , 允许任何地方的代码访问 , 允许被Module外的代码继承和重写
public:允许任何地方的代码访问 , 但不允许被Module外的代码继承和重写
internal:默认访问级别 , 允许Module内任何地方的代码访问 , Module外无法访问
fileprivate:仅允许同一个源文件内的代码访问
private:最低访问级别 , 仅允许同一个实体内的代码访问
?前面已经完成了podspec文件的创建 , 现在开始编辑其内容 , 资源文件留到最后处理 。需要注意的是 , podspec文件必须与组件库同名且放在其根目录下 。
这里的组件化目录指的是磁盘上创建的一个文件夹 , 不是 Xcode 项目目录 , 也不要把这个目录放到主工程的 git 仓库下 , 因为后续会把该目录提交到一个单独的远程仓库管理 。

文章插图
我这里使用第三种方法手动创建的QRCodeReader.podspec文件 , 文件内容我已经编辑好 , 一起来看下:
Pod::Spec.new do |spec|spec.name= "QRCodeReader"spec.version= "0.0.1"spec.summary= "扫码组件"spec.description= <<-DESC扫码组件DESCspec.license= { :type => "MIT" }spec.author= { "用户名" => "你的邮箱" }spec.homepage= "项目主页"spec.source= { :git => "项目git仓库", :tag => "#{spec.version}" }spec.platform= :ios, "11.0"spec.swift_versions = ['5.0', '5.1', '5.2', '5.3']spec.source_files= "*.{swift,m,mm,c,cpp,h}"# spec.resources= "Resources/**/*.{xcassets,json,plist}"spec.resource_bundle = { "QRCodeReader" => "Resources/**/*.{xcassets,json,plist}" }spec.xcconfig = {'DEFINES_MODULE' => 'YES'}spec.frameworks = "AudioToolbox", "AVFoundation"end
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 化妆品|我是敏感肌,选择化妆品有什么讲究?护理有什么注意事项?
- 化疗后白细胞低吃什么比价好呢? 化疗后白细胞低吃什么?
- 中国足协|凌晨0: 2打脸足协:归化都不行还靠本土?揪出陈戌源伪职业做法
- 时尚发型|我想学习化妆,是一个化妆新手,应该要了解哪些知识?
- 进阶|如何应对职场中的“变化莫测”?大多数人身在其中却不自知
- 三个方法帮你淡化痘坑! 怎样去痘坑
- 想要格式化电脑C盘? c盘能格式化吗
- 陈奕辰|《心动2》天意CP感情稳定,被夸越来越有夫妻相,陈奕辰变化真大
- 南风知我意|《南风知我意》要来了?成毅再次化身美强惨,与张予曦上演虐恋
- 为什么可以根据地层和化石了解古气候的变化?
