静态库和动态库的存在的形式
- 静态库:.a 和 .framework 为文件后缀名。
- 动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。(系统直接提供给我们的framework都是动态库!)
静态库和动态库的区别
- 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
- 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
搭建私有仓库
目的
(1)复用性更好,快速构建移植核心功能 "模块化"
(2)加快编译速度 "提高启动效率" :
每当我们build一个工程项目时,系统总是会先将所有源代码编译为目标文件,再将目标文件链接为可执行程序。即使是我们改变其中某一个文件中的源代码,而其他文件没有改变也是如此。因此为了加快编译速度,有些文件将不再以源代码的形式提供,而是可以将一部分目标文件先集中起来形成一个静态库。这样就可以对这部分文件略过编译而直接进行链接从而加快编译的速度。
(3)代码安全
.a 形式的静态链接库文件 配合.h只提供方法声明 不公开代码实现 : .a文件是一个纯二进制文件
.framework 生成私有仓库
.a + .h + sourceFile = .framework
步骤
(1)先创建本地私有仓库,创建完再推远端 (⚠️ 先本地后远端 很重要:错误坑 就是 先创建了远程仓库,并且设置了OC 忽略文件 会屏蔽Pod 相关的文件,这里不应该写忽略文件,就是整体全提交到远端,改进:删除远端仓库 重新执行 (1))
pod lib create HFTestPirvate
命令行执行上面这句代码 本地创建 一个 模板工程 叫 HFTestPrivate 自主做出命令提示选择
(2)功能文件拖入Classes文件 (⚠️添加文件时候 默认是Example 为目录下 ,需要手动切换主目录 才能找到 Classes文件夹,也可以从Finder 中直接查找一下看看这个文件夹在哪个层级,无需关联target)
(3) 在Example 层文件夹 执行 pod install
这样在 Development Pods 中就生成了目标私有库文件 ,并且自动关联了样例工程,可以用来测试调试
Development Pods 中 冗余的ReplaceMe.m 文件可以手动删除
(4)HFTestPirvate.podspec 中的 配置是否需要主动调试
1.版本号注意是否需要修改 ,每次迭代升级 就靠它 ⚠️
2.s.homepage = 'https://github.com/xxx/HFTestPirvate' ⚠️未来远程仓库
3. s.source = { :git => 'https://github.com/xxx/HFTestPirvate.git',:tag => s.version.to_s }⚠️未来远程仓库下载源
(5)
(5.1)HFTestPirvate 仓库提交到远程 :
(1)创建添加远程仓库:git remote add origin
https://github.com/xxx/HFTestPirvate.git
(2)本地HFTestPirvate 提交到远程 : git push -u origin master
(5.2) 给HFTestPrivate 打tag
(1) HFTestPirvate.podspec 文件中 是 s.version = '0.1.1' 打tag 也必须是 0.1.1
git tag 0.1.1
git push --tags
(5.3) 创建远程索引仓库 Repo_cocoapods_specs
(1) git remote add origin
https://github.com/xxx/Repo_cocoapods_specs.git
(2) cocoapods本地仓库路径,添加一个自己的远程索引库
~/.cocoapods/repos
pod repo add Repo_cocoapods_specs https://github.com/xxx/Repo_cocoapods_specs.git
(3) 建立关联 把索引仓库 和 私有仓库建立关联
pod repo push Repo_cocoapods_specs HFTestPirvate.podspec --sources=https://github.com/xxx/HFTestPirvate.git,https://github.com/CocoaPods/Specs --verbose --allow-warnings
至此,可以在远程索引仓库里面看见 HFTestPirvate.podspec 版本索引
(6) 升级一个0.1.2
方法模块升级功能 修改好版本号
执行(5.1.2) 提交到私有远程仓库
执行(5.2)
执行(5.3.3)
至此,可以在项目里面 重新pod install 则会下载最新的0.1.2版本
⚠️备注 :根据(5.3)远程索引仓库 在项目里面需要添加私有仓库源
source 'https://github.com/xxx/Repo_cocoapods_specs.git'
然后
pod 'HFTestPirvate'
参考
(1)https://zhuanlan.zhihu.com/p/217631955
(2) http://www.cocoachina.com/articles/23359