Cocoapods 创建私有库实现项目模块化管理

前言

项目私有化目的

项目书写的时候肯定是刚开始比较简单,功能也比较少,模块比较少肯定能满足项目的需求,随着项目模块的增多,项目的代码量也逐渐增加,很有可能会有多人进行开发,提交合并代码会很头痛,模块化给我们一个很好的解决方式,让我们开始吧。

创建私有库 spec repo

spec repo 是所有的Pods的一个索引,就是一个容器,所有公开的Pods都在这个里面,他实际是一个Git仓库remote端 在GitHub上,但是当你使用了Cocoapods后他会被clone到本地的~/.cocoapods/repos目录下,可以进入到这个目录看到master文件夹就是这个官方的Spec Repo了。这个master目录的结构是这个样子的

#~/.cocoapods/repos 大致目录是这样的
├── Specs 
         └── [SPEC_NAME] 
                  └── [VERSION] 
                           └── [SPEC_NAME].podspec

所以我们需要创建一个类似master结构的spec repo github 私有仓库是收费的, 我选择了Coding 还有其他的服务 像 gitLab、开源中国、Bitbucket、CSDN。

在terminal创建 repos

# pod repo add [Private Repo Name]  [HTTPS clone URL]
$ pod repo add WMCommon https://git.coding.net/fufu62/WSPCommon.git

此时如果成功的话进入到~/.cocoapods/repos目录下就可以看到WMCommon这个目录了。至此第一步创建私有Spec Repo完成。

创建 podspec 文件

已经有了现成的项目,需要给这个项目创建一个podspec文件,创建它需要执行Cocoapods的另外一个命令,官方文档在这里

在本地项目目录下创建
$ pod spec create WPCommon

执行完之后,就创建了一个podspec文件,他其中会包含很多内容,可以按照我之前介绍的进行编辑,没用的删掉。

Pod::Spec.new do |s|
s.name = "WPCommon"
s.version = "0.2"
s.summary = "the project for WPCommon"
s.homepage = "https://git.coding.net/fufu62/WSPCommon.git"
s.license = "MIT"
s.author             = { "ISPWang" => "sanpeng123@126.com" }
s.platform = :ios, "7.1"
s.ios.deployment_target = "7.1"
s.source = { :git => "https://git.coding.net/fufu62/WSPCommon.git", :tag => "0.1" }
s.source_files = "CommonTest/CommonTest/Mine/Controller/**/*.{h,m}"
s.frameworks = "UIKit"
s.requires_arc = true
end
# 编辑完成之后使用验证命令验证一下
$ pod lib lint
WPCommon passed validation. #验证无错误
# 可以进入下一步了。没有验证过去 根据错误提示进行修改 podspec文件

本地测试pod spec文件

我们可以创建一个新的项目,在这个项目的Podfile文件中直接指定刚才创建编辑好的podspec文件,看是否可用。 在Podfile中我们可以这样编辑,有两种方式

platform :ios, '7.1'
pod ‘WPCommon', :path => ‘~/Code/WSPCommon/CommonTest'      # 指定路径
pod 'WPCommon ', :podspec => '~/Code/WSPCommon/CommonTest/WPCommon.podspec'

然后执行pod install命令安装依赖,打开项目工程,可以看到库文件都被加载到Pods子项目中了,不过它们并没有在Pods目录下,而是跟测试项目一样存在于Development Pods/WPCommon中,这是因为我们是在本地测试,而没有把podspec文件添加到Spec Repo中的缘故。
在项目中编写代码,测试库文件无误后就可以开始下一步了,提交podspec到Spec Repo中。

提交步骤

# 提交代码
git add -A && git commit -m "Release 0.1"
# 打tag
git tag  -m “new version” ‘0.1'
# 把tag推到远程仓库
git push --tags
# 将本地的master分支推送到远程仓库
git push origin master

Spec Repo提交pod spec

向Spec Repo提交podspec需要完成两点一个是podspec必须通过验证无误,在一个就是删掉无用的注释(这个不是必须的,为了规范还是删掉吧)。 向我们的私有Spec Repo提交podspec只需要一个命令

$ pod repo push WMCommon WPCommon.podsepc #前面是本地Repo名字 后面是pod spec名字
完成之后这个组件库就添加到我们的私有Spec Repo中了,可以进入到~/.cocoapods/repos/WTSpecs目录下查看

.
├── LICENSE
├── WPCommon
│      └── 0.1
│               └── WPCommon.podspec
         └── 0.2
│               └── WPCommon.podspec
└── README.md

再去看我们的Spec Repo远端仓库,也有了一次提交,这个podspec也已经被Push上去了。

pod search WPCommon

-> WPCommon (0.2)
   A short test for  of WPCommon.
   pod 'WPCommon', '~> 0.2'
   - Homepage: https://git.coding.net/fufu62/WSPCommon.git
   - Source:   https://git.coding.net/fufu62/WSPCommon.git

   - Versions: 0.2, 0.1 [WMCommon repo]

使用制作好的Pod

在Pod file 文件里增加私有库文件即可
source 'https://github.com/CocoaPods/Specs.git'
source 'https://git.coding.net/fufu62/WSPCommon.git'

platform:ios,’8.0’
target "cocoapodsTest" do
pod 'MJRefresh'
pod 'SDWebImage', '~> 3.8.1'
pod 'WPCommon', '~> 0.2'
end
# 快速更新状态
pod update --no-repo-update

中间会出现警告—no-clean或者error ?

Assuming you are using git for that repo, can you run git status? If the repo is clean it would say something like nothing to commit, working directory clean.
Sorry, can you run git status --porcelain, that’s the exact command it runs

pod repo push  WMCommon WMCommon.podspec --allow-warnings --verbose 
// --allow-warnings : 允许 警告,有一些警告是代码自身带的。
// --use-libraries : 私有库、静态库引用的时候加上 
// —verbose : lint显示详情

框架中如果使用Xib加载crash的情况
出现通过mainBundle加载不了,无法获取Xib

  [NSBundle bundleForClass:[self class] 获取bundle 
// 这样之后,无论是通过copy文件夹方式还是CocoaPods下载安装的方式,都能正常使用xib进行初始化了

CocoaPods下载框架中图片无法正常显示通过ImageName

  • 通过CocoaPods下载安装,如果xib中直接填写好的图片,则图片资源能直接显示,如果通过代码"[UIImage imageNamed:@""]"去设置的话,则图片资源根本显示不了
//改变代码图片路径
// 图片路径
#define WMCommonSrcName(file) [@"WMCommon.bundle" stringByAppendingPathComponent:file]
#define WMCommonFrameworkSrcName(file) [@"Frameworks/WMCommon.framework/WMCommon.bundle" stringByAppendingPathComponent:file]
WMCommonSrcName(file) 为通过copy文件夹方式获取图片路径的宏
WMCommonFrameworkSrcName(file) 为通过cocoapods下载安装获取图片路径的宏
之后修改代码中设置图片的方式如下:
UIImage *img = [UIImage imageNamed:WMCommonSrcName(@"image.png")]?:[UIImage imageNamed:WMCommonFrameworkSrcName(@"image.png")];

参照

使用Cocoapods创建私有pod spec
iOS CocoaPods 私有库 steps and tips
CocoaPods 详解之——更新篇
iOS移动端架构的那些事

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

推荐阅读更多精彩内容