模块化工程 | CocoaPods篇|远程私有库搭建流程 [通用工具箱]


目录

= 创建篇 =
== 一、创建远程私有git仓库
== 二、创建本地索引仓库 pod repo
== 三、快速创建pod模板工程
== 四、编辑模板工程
== 五、提交模板工程至远程git仓库
== 六、提交.podspec私有索引至repo
= 使用篇 =
== 一、依赖远程git私有库
= 索引文章 =
== 一、CocoaPods|安装流程与使用
== 二、姐妹篇 - [模块化工程 | 多项目混合篇 | 工作空间应用 | xcworkspace]

官方引导教程

  • 搭建流程来自官方指引~

一、创建远程私有git仓库

  • 创建一个git空代码仓库并git clone至本地
  • 创建一个git索引仓库关联本地repo仓库,生成README.md,###不要空仓###
    =备注:[HWBoneKit] 是我的栗子组件名=
    =备注2:git仓库,我选择使用码云,可根据需要自行选择=

二、创建本地索引仓库 pod repo

    1. 创建本地repo仓库并关联远程git索引仓库
pod repo add [`RepoName`] [`git仓库地址`]

# 举个栗子
pod repo add HWBoneKit https://gitee.com/Ka_Ivan/HWBoneKitSpecs.git
    1. 完成后查看是否添加成功
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/

四、编辑模板工程

    1. 首先将代码放入Classes中,如图所示👇
      按功能划分
    1. 回到工程,编辑 *.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
    1. 编辑完成后,pod install后可看到模块代码,注意配置中[WARN]部分
# t = [`git本地仓库`]/Example
cd t
# then
pod install
`功能代码`已可见
    1. 后续修改工具库,可直接在Pods/Development Pods中进行

五、提交模板工程至远程git仓库

  • 工具使用 = Sourcetree =
    1. 提交代码,或手动终端
# 若在`/Example`目录
cd ..
# 若否, t = [`git本地仓库`]
cd t
# 检查git文件状态
git status
# 添加代码 [此处可忽略依赖的第三方库]
git add .
# 提交代码
git commit -m'[提交描述]'
    1. 开始校验本地podspec
# 开始校验
pod lib lint --allow-warnings [--verbose]

# 本地校验通过
[`PodName`] passed validation.
# 若校验未通过,可[--verbose]查看详细信息,根据`Error`项排查错误
  • 本地校验通过后,排查是否有未提交文件
    1. 推送到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.
    1. 当远程校验成功后,对本次提交添加标签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
# 再次执行上传即可

使用篇

一、依赖远程私有库

    1. 编辑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'
    1. 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]👇,使podname.framework[三方库]统一为静态库
# 修改`.podspec `
s.static_framework = true

= 当熟悉所有流程,祝你玩出🌺~ =


索引文章

一、CocoaPods|安装流程与使用

  • CocoaPods相关问题,可查看此文章

二、[模块化工程] | 工作空间篇 | .xcworkspace | Development Pods | 混合应用 =❤姐妹篇=

  • 关于Xcode工作区间的应用,适用于单项目多端开发,以及整合本地 Development Pod 集成使用

三、iOS | 关于AppDelegate瘦身的想法与实践


推广

顺便推广一下女#胖#友的[香港🇭🇰]代购微信号~
逢过节送个好礼,找我鸭~
🌸iYours代购 🌸
# == 听说 == 
if (扫二维码 && !!可能) {
    `送女盆友`()
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350