目录
= 创建篇 =
== 一、创建远程私有
git
仓库== 二、创建本地索引仓库
pod repo
== 三、快速创建
pod
模板工程== 四、编辑模板工程
== 五、提交模板工程至远程
git
仓库== 六、提交
.podspec
私有索引至repo
库= 使用篇 =
== 一、依赖远程
git
私有库= 索引文章 =
== 一、CocoaPods|安装流程与使用
== 二、姐妹篇 - [模块化工程 | 多项目混合篇 | 工作空间应用 |
xcworkspace
]
官方引导教程
- 搭建流程来自官方指引~
一、创建远程私有git
仓库
- 创建一个
git
空代码仓库并git clone
至本地 - 创建一个
git
索引仓库关联本地repo
仓库,生成README.md
,###不要空仓###
=备注:[HWBoneKit]
是我的栗子组件名=
=备注2:git
仓库,我选择使用码云,可根据需要自行选择=
二、创建本地索引仓库 pod repo
- 创建本地
repo仓库
并关联远程git索引仓库
- 创建本地
pod repo add [`RepoName`] [`git仓库地址`]
# 举个栗子
pod repo add HWBoneKit https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git
- 完成后查看是否添加成功
pod repo
# [举栗子]存在结果集👇
HWBoneKit
- Type: git (master)
- URL: https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git
- Path: /Users/mac/.cocoapods/repos/HWBoneKitSpecs
三、快速创建pod
模板工程
# t = [`存放模板工程的路径` /= `git本地仓库`]
cd t
# 快速创建工程
pod lib create [`组件名`/`PodName`]
# 举个栗子
pod lib create HWBoneKit
# == 创建过程需要的选项 ==
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ] #是否创建模板工程
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
What is your class prefix?
> HW
- 完成后会自动打开
Xcode
- 关闭
Xcode
,将模板工程挪到git本地仓库
- 模板工程中,可见👇
# 此处存放私有库代码,如下图
[`PodName`] / Classes / ReplaceMe.m
#举个栗子 [移除`ReplaceMe.m`] [放入工具代码]
`git本地仓库`/HWBoneKit/Classes/
四、编辑模板工程
- 首先将代码放入
Classes
中,如图所示👇
按功能划分
- 首先将代码放入
- 回到工程,编辑
*.podspec
工程中`podspec`的位置
- 回到工程,编辑
Pod::Spec.new do |s|
s.name = 'HWBoneKit'
s.version = '0.1.2'
s.summary = '=基础框架= of HWBoneKit.'
s.description = <<-DESC
'基础框架, 适用于多项目通用组件的存放.'
DESC
s.homepage = 'https://gitee.com/Ka_Ivan/HWBoneKit'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'HawinShark' => '835913166@qq.com' }
# 远程代码仓库地址
s.source = { :git => 'https://gitee.com/Ka_Ivan/HWBoneKit.git', :tag => s.version.to_s }
# [WARN]注意此处版本不要低于 `Podfile` - [platform :ios, '9.0']
s.ios.deployment_target = '9.0'
# 此处识别头文件
s.source_files = 'HWBoneKit/Classes/*'
# 核心库
s.subspec 'Core' do |core|
# 如上图,对`Core`文件夹生成子库
# `Core`文件夹有三层目录,`[/**]`表递归
core.source_files = 'HWBoneKit/Classes/Core/**/*'
# 此处依赖第三方库
core.dependency 'AspectsV1.4.2' #AOP面向切面
end
# 分类库 [拓展]
s.subspec 'Category' do |category|
category.source_files = 'HWBoneKit/Classes/Category/**/*'
category.dependency 'HWBoneKit/Core' #[WARN]此处若使用`Core`中类,需设置依赖,否则校验时会无法识别头文件
category.dependency 'ReactiveObjC' #RAC-OC
end
# etc..
# 更多用法可参考官方引导
end
- 编辑完成后,
pod install
后可看到模块代码,注意配置中[WARN]
部分
- 编辑完成后,
# t = [`git本地仓库`]/Example
cd t
# then
pod install
`功能代码`已可见
- 后续修改工具库,可直接在
Pods/Development Pods
中进行
- 后续修改工具库,可直接在
五、提交模板工程至远程git
仓库
- 工具使用 = Sourcetree =
- 提交代码,或手动
终端
- 提交代码,或手动
# 若在`/Example`目录
cd ..
# 若否, t = [`git本地仓库`]
cd t
# 检查git文件状态
git status
# 添加代码 [此处可忽略依赖的第三方库]
git add .
# 提交代码
git commit -m'[提交描述]'
- 开始校验本地
podspec
- 开始校验本地
# 开始校验
pod lib lint --allow-warnings [--verbose]
# 本地校验通过
[`PodName`] passed validation.
# 若校验未通过,可[--verbose]查看详细信息,根据`Error`项排查错误
- 本地校验通过后,排查是否有未提交文件
- 推送到
git
远程仓库,或手动👇
- 推送到
# 关联`git`远程仓库
git remote add origin https://gitee.com/Ka_Ivan/HWBoneKit.git
# 推送代码
git push origin master
- [可选]进行远程校验,[
push
会进行一次远程校验]
pod spec lint --allow-warnings --verbose
# 远程校验成功
HWBoneKit.podspec passed validation.
- 当远程校验成功后,对本次提交添加标签
tag
需要注意与`[podspec] - version`一致
- 当远程校验成功后,对本次提交添加标签
- 或手动添加
tag
👇
# `tag值`与`.podspec`文件 - `s.version` 保持一致,[必须]
git tag '0.1.3'
# 推送`tag`
$ git push --tags
- [原因]
tag
就是CocoaPods
版本的标识
六、提交.podspec
私有索引至repo
库
# t = [`git本地仓库`]
cd t
# 推送`.podspec`
pod repo push [RepoName] [PodName].podspec --allow-warnings [--verbose]
# 举个栗子
pod repo push HWBoneKit HWBoneKit.podspec --allow-warnings
- [问题1] 推送本地库失败,提示
[!] The repo is not clean
[!] The repo `[RepoName]` at `../../.cocoapods/repos/[RepoName]` is not clean
- [解决方法1][可选] 在
pod repo push
前确保git
已全部提交完成
# t = `../../.cocoapods/repos/[RepoName]`
cd t
# 清理操作
git clean -f
- [解决方法2][可选] 在
pod repo push
前更新本地仓库
pod repo update [PodName]
# 举个栗子
pod repo update HWBoneKit
- [问题2] 当本地与远程均校验通过,却Push失败
[!] The `[PodName].podspec` specification does not validate.
- 可能是因为
Pod
缓存的问题,应清理后操作
# 查看缓存列表
pod cache list
# 删除对应缓存[如我的为HWBoneKit]
# [全部清理则替换成--all]
pod cache clean HWBoneKit
# 再次执行上传即可
使用篇
一、依赖远程私有库
- 编辑
Podfile
文件
- 编辑
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
# [CocoaPods更新日志](http://blog.cocoapods.org/CocoaPods-1.7.2/)
# 因为使用了`trunk repo`,指定其源地址
#source 'https://github.com/artsy/Specs.git'
source 'https://cdn.cocoapods.org/'
# 此处指定源地址为`远程私有索引库地址`
source 'https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git'
pod install
- [问题1]当
pod install
时出现👇 [单独创建索引git
仓库后则无此问题]
[!] An unexpected version directory `Classes` was encountered for the `/Users/mac/.cocoapods/repos/[本地Repo仓库名]/[私有库名]` Pod in the `[私有库名]` repository.
# 比方说
[!] An unexpected version directory `Classes` was encountered for the `/Users/mac/.cocoapods/repos/HWBoneKit/HWBoneKit` Pod in the `HWBoneKit` repository.
- [解决方法1] 👇
-. 复制路径t
=/Users/mac/.cocoapods/repos/HWBoneKit/HWBoneKit
-.⌘[Command] + ⇧[Shift] + G
->into
>t
-. 因为repo仓库
仅需podspec
,故移除非必要的文件即可
移除Assets与Classes
- [问题2]
pod install
时👇,[!] The 'Pods-name' target has transitive dependencies that include statically linked binaries
[!] The 'Pods-jadelane' target has transitive dependencies that include statically linked binaries: (/Users/mac/Documents/Git/Jadelane-Git/Jadelane-mixture/Pods/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional/TXLiteAVSDK_Professional.framework)
-. [问题2][原因]因Podfile
中,使用了use_frameworks!
,pods
中的库都会以动态库dynamic library framework
方式引入到工程中
-. [问题2][原因]同时,pod
内不能同时存在动态库与静态库[如上TXLiteAVSDK_Professional.framework
]
- [解决方法1]👇,
Podfile
中#注释即可
#use_frameworks!
- [解决方法2]👇,使
pod
与name.framework
[三方库]统一为静态库
# 修改`.podspec `
s.static_framework = true
= 当熟悉所有流程,祝你玩出花
🌺~ =
索引文章
一、CocoaPods|安装流程与使用
- CocoaPods相关问题,可查看此文章
二、[模块化工程] | 工作空间篇 | .xcworkspace | Development Pods | 混合应用 =❤姐妹篇=
- 关于Xcode工作区间的应用,适用于单项目多端开发,以及整合本地
Development Pod
集成使用
三、iOS | 关于AppDelegate瘦身的想法与实践
推广
顺便推广一下女#胖#友的[香港🇭🇰]
代购微信号~
逢过节送个好礼,找我鸭~
🌸iYours代购 🌸# == 听说 ==
if (扫二维码 && !!可能) {
`送女盆友`()
}
网友评论