iOS 组件化-本地私有库
2022-05-12 本文已影响0人
游龙飞雪
CocoaPods本地私有库
组件化-使用CocoaPods管理的本地私有库,可以分为3种
- 本地私有引用
- 本地工程嵌套
- 内部framework
第一种 本地私有引用
-
新建项目总文件夹TestProject
-
在 TestProject 内部
- 新建主工程文件夹TestProject
- 新建库文件夹TestProjectLib
-
TestProjectLib 库文件夹下
- 新建 Classes 文件夹,用于存放库文件
- 初始化 git 仓库
$ git init
- 初始化 spec 文件
$ pod spec create TestProjectLib
执行命令则会出现一个TestProjectLib.podspec
文件。
-
配置 spec 文件
s.name
s.version
s.summary = "TestProjectLib 对库的简单注释"
-
s.description = "xxxxx具体描述信息运用什么思想什么技术使用了xx实现了xx解决了xx取得了xx"
或者s.description = <<-DESC xxxxx具体描述信息运用什么思想什么技术使用了xx实现了xx解决了xx取得了xx DESC
注意:
description
描述内容要比summary
概要内容长,不然会出问题!-
s.homepage = "http://EXAMPLE/TestProjectLib"
- 本地库,homepage默认即可;
- 远程库,需要配置远程地址;
-
s.licence = "MIT"
去掉(example)即可原始
s.licence = "MIT (example)"
-
Source Location
s.source = { :git => "", :tag => "#{spec.version}" }
本地库将git指向地址设置为空即可。原始
spec.source = { :git => "http://EXAMPLE/TestProjectLib.git", :tag => "#{spec.version}" }
-
Source Code
spec.source_files = "Classes", "Classes/**/*.{h,m}"
spec.exclude_files = "Classes/Exclude"
-
创建对应测试工程
- 在.podspec同目录下,新建测试工程文件夹,名称为Example
- cd到Example中,新建测试工程,名称与库名称一致即可,也可加后缀Example
-
在主工程中配置pod
进入主工程TestProject
文件夹,与.xcodeproj
文件在同一目录下- 初始化
Podfile
文件
$ pod init
- 配置pod
- 编辑Podfile,指定库的路径
$ pod 'TestProjectLib', :path => '../TestProjectLib'
注意: 保证本地路径的准确性
- 编辑Podfile,指定库的路径
- 安装库
$ pod install
安装成功
- 初始化
-
主工程中使用库
通过.xcworkspace
打开主工程,在导航区域查看文件结构- 如果是本地库,可以看到在 Pods - Development Pods 下看到引入的本地库 TestProjectLib;
- 本地库会全部出现在 Development Pods 文件夹下;
- 在主工程中,编辑库文件,会自动同步修改本地库;
- 如果是本地库,可以看到在 Pods - Development Pods 下看到引入的本地库 TestProjectLib;
补充:使用模板自动创建一个库和对应的测试工程
- 创建
$ pod lib create xxx
- 测试工程使用pod本地依赖的方式引入私有库来使用
第二种 本地工程嵌套
-
新建主工程
-
在主工程文件夹下新建多个本地库工程
-
在主工程的导航文件系统中添加库工程文件
-
使用库
- 导入头文件,注意路径
import "../组件02/组件02/Person.h"
- 可能会报一个
Undefined symbol: _OBJC_CLASS_$_Person
的错误。
解决方法为 - 在Xcode中打开主工程,可以选择不同的scheme菜单来调试不同的库工程
- 导入头文件,注意路径
-
缺点
库工程也在主工程的目录下,没有在物理层很好地隔离,造成管理不便。
第三种 内部framework
- 新建主工程
- Xcode中,选中主工程target,在target导航窗口,点击左下角加号+,选择新建framework
- 缺点
库framework也是在主工程目录下,没有很好隔离。