[iOS模块式开发]例讲如何制作一个CocoaPods私有库

10月23日更新


私有库A与私有库B之间的依赖处理:
例如私有库B依赖于私有库A,在私有库B本地验证时:

pod lib lint

会报错,提示找不到私有库A。
执行命令为:

pod lib lint --sources='http://[privateLibName]/cocoaspecs.git,https://github.com/CocoaPods/Specs.git'


关键词:库、模块式开发、CocoaPods、私有库、
工具:终端、git、CocoaPods
步骤总结:
1、打开终端,进入要建立私有库项目工程的路径,并执行pod库工程创建命令行
2、进入我们的Example项目工程,执行安装CocoaPods项目命令行
3、添加库源码文件
4、书写CocoaPods配置文件LATAlert.podspec(建议使用Atom + cocoa-pods-ruby-snippets插件来编辑该文件)
5、创建私有库git地址,并完善.podspec配置文件
6、再次进入我们的Example文件,执行pod更新指令,安装本地库源码
7、添加样例代码,运行样例测试
8、本地pod配置文件验证
9、项目工程发布tag 0.0.1
10、私有库发布
11、验证发布的私有库
涉及到的命令行:
Git:

Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git remote add origin https://git.oschina.net/KKLater/LATAlert.git
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git add .
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git commit -a -m "0.0.1"
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git pull origin master
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git push origin master
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git tag 0.0.1
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git push origin 0.0.1

Pod:

Later@localhost:~/Desktop/私有库创建教程$ pod lib create LATAlert
Later@localhost:~/Desktop/私有库创建教程/LATAlert/Example$ pod install --no-repo-update
Later@localhost:~/Desktop/私有库创建教程/LATAlert/Example$ pod update --no-repo-update
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod repo add LATSpecs https://git.oschina.net/KKLater/LATPodspecs.git
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod lib lint
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod lib lint --verbose
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod repo push LATSpecs LATAlert.podspec 
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod repo push LATSpecs LATAlert.podspec --verbose
Later@localhost:~$ pod repo remove LATSpecs

下面我们通过一个例子来具体讲解整个步骤流程。
例子里面,我们创建一个私有库LATAlert,导入LATAlert私有库的项目,可以调用私有库的方法来执行弹出一个Alert显示信息!

1、打开终端,进入要建立私有库项目工程的路径,并执行pod库工程创建命令行

Later@localhost:~$ cd /Users/Later/Desktop/私有库创建教程 
Later@localhost:~/Desktop/私有库创建教程$ pod lib create LATAlert

终端得到以下界面:
这里会询问几个问题(答案根据实际情况设置),分别是:
1、语言选择
—— 教程选择Objc,如果要做Swift私有库,请选择输入Swift
2、是不是需要一个demo项目工程
​ —— 教程选择Yes,需要创建一个demo工程,建议创建一个demo工程
3、测试框架使用哪一个
​ —— 教程选择None
4、是不是需要做基本的测试
​ —— 教程选择Yes
5、类前缀是什么
​ —— 教程输入LAT

PodTest安装pod

如果出现上面的界面,说明,私有库工程创建成功了。

2、进入我们的Example项目工程,执行安装CocoaPods项目命令行

Later@localhost:~$ cd /Users/Later/Desktop/私有库创建教程/LATAlert/Example 
Later@localhost:~/Desktop/私有库创建教程/LATAlert/Example$ pod install --no-repo-update

终端界面如下:

私有库Example安装pod项目.png

双击LATAlert.xcworkspace运行项目Example工程,验证工程的正确性。

3、添加库源码文件

将源码文件复制到文件夹路径:LATAlert/LATAlert/Classes下。

注:1.如果还没有源码,则可以在Example下直接创建源码文件,实际测试通过后,再按照下面的方式来添加源码文件。2.方便起见这里直接将之前使用的源码文件拷贝过来,其他根据实际情况,看官自行添加。3.文件路径并不是绝对的,但是建议按指定路径存放,便于整体的后期维护更新

添加源码文件.png

4、书写CocoaPods配置文件LATAlert.podspec(建议使用Atom + cocoa-pods-ruby-snippets插件来编辑该文件)

双击打开LATAlert.podspec文件,此处我设置了默认Atom打开,看官自行配置,但是要注意编辑内容一定要教程一样。

podspec文件编辑1.png

我们可以把没有用的注释删掉。具体常用的配置如下:

#
# Be sure to run `pod lib lint LATAlert.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  #库名
  s.name             = 'LATAlert'
  #库版本
  s.version          = '0.0.1'
  #库简短描述
  s.summary          = 'A short description of LATAlert.'
  #库详细描述
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
  #库介绍主页地址
  s.homepage         = 'https://github.com/<GITHUB_USERNAME>/LATAlert'
  #库开源许可
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  #作者信息
  s.author           = { 'Later' => 'lshxin89@126.com' }
  #源码git地址
  s.source           = { :git => 'https://github.com/<GITHUB_USERNAME>/LATAlert.git', :tag => s.version.to_s }
  #库依赖系统版本
  s.ios.deployment_target = '8.0'
  #源码文件配置
  s.source_files = 'LATAlert/Classes/**/*'
  #资源文件配置
  s.resource_bundles = {
    'LATAlert' => ['LATAlert/Assets/*.png']
  }
  #源码头文件配置
  s.public_header_files = 'Pod/Classes/**/*.h'
  #系统框架依赖
  s.frameworks = 'UIKit', 'MapKit'
  #第三方框架依赖
  s.dependency 'AFNetworking', '~> 2.3'
end

清理掉不需要的配置项之后,整体如下:

Pod::Spec.new do |s|
  #库名
  s.name             = 'LATAlert'
  #库版本
  s.version          = '0.0.1'
  #库简短描述
  s.summary          = 'A short description of LATAlert.'
  #库详细描述
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC
  #库介绍主页地址
  s.homepage         = 'https://github.com/<GITHUB_USERNAME>/LATAlert'
  #库开源许可
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  #作者信息
  s.author           = { 'Later' => 'lshxin89@126.com' }
  #源码git地址
  s.source           = { :git => 'https://github.com/<GITHUB_USERNAME>/LATAlert.git', :tag => s.version.to_s }
  #库依赖系统版本
  s.ios.deployment_target = '8.0'
  #源码文件配置
  s.source_files = 'LATAlert/Classes/**/*'
  #源码头文件配置
  s.public_header_files = 'LATAlert/Classes/*.h'
  #系统框架依赖
  s.frameworks = 'UIKit'
end

细心的看官注意到,这里我们使用的homepage和source并不完整下面就需要我们创建一个git私有库,用于项目工程的存放,获取我们所需要的地址。

5、创建私有库git地址,并完善.podspec配置文件

为了节省点毛爷爷,我们使用更切近中国国情的oschina进行我们的项目代码托管。

创建私有库界面如下:

oschina创建私有库.png

点击创建,我们的私有库就创建完成了,复制我们的私有库地址,也就是我们的.podspec文件里面source所需要的地址了。

复制私有库地址.png

source有了,但是我们的homepage怎么办呢?如果有可以访问的高大上的介绍网页页面,建议使用其网址,如果实在没有,赶紧去开发一个吧。这里使用我们的mobile网址:http://mobile.fblife.com。(感兴趣的看官可以打开看看,很高大上的哦。哈哈,开个玩笑,公司App推广页而已。)

至此,我们的配置文件就结束了。此时细心的看客又说了,我们创建了git私有库,但是还没有添加文件啊?恩恩,别急别急,慢慢来,俗话说“心机吃不到热…”。别笑,看官你又开火车了!

6、再次进入我们的Example文件,执行pod更新指令,安装本地库源码

Later@localhost:~/Desktop/私有库创建教程/LATAlert/Example$ pod update --no-repo-update

终端截图如下:

私有库Example更新pod项目.png

此时进入我们的Example文件夹,双击LATAlert.xcworkspace打开看看:

源码文件导入后工程项目路径.png

我们的源码已经在里面了。

这时,可以填写我们的样例代码来进行测试喽。

7、添加样例代码,运行样例测试

找到我们的样例文件LATViewController.m,引入头文件LATAlert.h,填写代码,点击屏幕时执行弹出Alert提示框,具体代码如下:

//
//  LATViewController.m
//  LATAlert
//
//  Created by Later on 10/14/2016.
//  Copyright (c) 2016 Later. All rights reserved.
//

#import "LATViewController.h"
#import "LATAlert.h"

@interface LATViewController ()

@end

@implementation LATViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [LATAlert showAlertWithTitle:@"测试" message:@"这时测试信息" OkBlock:^{
        NSLog(@"点击了确认");
    }];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

运行项目测试:

弹出Alert.png

alert信息弹出了,说明,我们的本地运行例程是正常的。下面就需要我们把项目发布到git,并添加到pod了。

8、本地pod配置文件验证

为了保证项目的正确性,尤其是pod配置文件的正确性,在正式提交前,我们需要执行以下本地验证。在本地验证正常的情况下,再上传发布还是比较稳妥的。

终端进入我们的项目文件路径:

Later@localhost:~/Desktop/私有库创建教程/LATAlert/Example$ cd /Users/Later/Desktop/私有库创建教程/LATAlert

如果现在终端正处于Example文件路径下,也可以执行

Later@localhost:~/Desktop/私有库创建教程/LATAlert/Example$ cd ..

退回到上层文件夹,也就是我们的项目文件路径了。

执行pod本地验证指令:

Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod lib lint

界面显示:

项目本地验证错误1.png

如果经验丰富,大概一看便知这里的警告是告诉我们这个summary简介不是很有内涵。此处我们改一下我们的podspec文件内部的简介和描述,消除下警告。修改完的podspec文件如下。

#
# Be sure to run `pod lib lint LATAlert.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  #库名
  s.name             = 'LATAlert'
  #库版本
  s.version          = '0.0.1'
  #库简短描述
  s.summary          = 'LATAlert pod Use.'
  #库详细描述
  s.description      = <<-DESC
TODO: LATAlert pod Use.
                       DESC
  #库介绍主页地址
  s.homepage         = 'http://mobile.fblife.com'
  #库开源许可
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  #作者信息
  s.author           = { 'Later' => 'lshxin89@126.com' }
  #源码git地址
  s.source           = { :git => 'https://git.oschina.net/KKLater/LATAlert.git', :tag => s.version.to_s }
  #库依赖系统版本
  s.ios.deployment_target = '8.0'
  #源码文件配置
  s.source_files = 'LATAlert/Classes/**/*'
  #源码头文件配置
  s.public_header_files = 'LATAlert/Classes/*.h'
  #系统框架依赖
  s.frameworks = 'UIKit'
end

鉴于是初学者,还是建议掌握下查看具体原因的指令比较靠谱。具体指令也很简单,在执行本地验证的指令后面添加上--verbose在执行下就可以了。

Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod lib lint --verbose

我们再次执行下验证,查看结果,BUILD SUCCEEDD,本地验证成功:

podspec本地验证成功.png

至此,我们的源码已经导入、样例工程已经验证执行、podspec配置文件本地已经验证,那么我们是不是就可以直接在pod里面使用了呢?答案是肯定的,还是不行!目前只是处于本地状态,并没有发布,所以还是不能使用的。

9、项目工程发布tag 0.0.1

在项目工程文件下执行git相关指令,并添加tag0.0.1,发布到git。

Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git remote add origin https://git.oschina.net/KKLater/LATAlert.git
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git add .
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git commit -a -m "0.0.1"
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git pull origin master
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git push origin master
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git tag 0.0.1
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ git push origin 0.0.1

相关指令执行结束后,此时我们再去看我们的git项目:

git上传之后界面.png

10、私有库发布

对于开源框架,podspec文件实在cocoapod的开源管理spec项目上面的,见下图:

cocoapod开源库管理spec.png

在这里的Specs文件加内,我们能看到我们熟悉的 AFNetworking

AFNetworking.png

但是我们创建的是私有库,所以我们需要创建自己的Specs管理库。

例如我们要创建的是LATSpecs,首先需要再创建一个git私有库,用于管理我们的LATSpecs。

创建之后获取到git地址:https://git.oschina.net/KKLater/LATPodspecs.git

在终端执行Specs创建指令:

Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod repo add LATSpecs https://git.oschina.net/KKLater/LATPodspecs.git

执行之后的结果是:

添加私有的Specs.png

看到这个,我们可以愉快的发布了。执行发布命令,直接发布好了。

podspec发布.png
Later@localhost:~/Desktop/私有库创建教程/LATAlert$ pod repo push LATSpecs LATAlert.podspec

发布成功之后,我们来看一下我们的LATSpecs的git项目:

podspec发布之后的git.png

查看我们本地的Specs库:

直接Findle ->右键 -> 前往文件夹 -> 输入:~/.cocoapods/repos ->点击前往

查找本地的Specs库.png
本地Specs库.png

至此,我们的私有库创建发布结束。但是我们注意到,LATSpecs的README.md文件是空的,为了后期的维护更新,以及团队小伙伴的使用方便,建议完备一下信息。

完备之后的信息如下:

Readme完善.png

终端执行一下进入我们的私有库管理Specs,git更新提交下:

Later@localhost:~$ cd /Users/Later/.cocoapods/repos/LATSpecs 
Later@localhost:~/.cocoapods/repos/LATSpecs$ git add .
Later@localhost:~/.cocoapods/repos/LATSpecs$ git commit -a -m "Add LATAlert"
Later@localhost:~/.cocoapods/repos/LATSpecs$ git pull origin master
Later@localhost:~/.cocoapods/repos/LATSpecs$ git push origin master

命令行执行结束之后,我们再看一下我们的git:

addReadme之后的git.png

有没有高大上呢?

既然已经提交发布,那下面我们新建一个CocoaPods管理的项目,来验证一下我们的库吧。

11、验证发布的私有库

新建PodTest项目,并创建Podfile文件,安装CocoaPods工程。

Podfile文件内的代码如下:

platform :ios,'8.0'
target 'PodTest' do
pod 'LATAlert',:git => 'https://git.oschina.net/KKLater/LATAlert.git'
end

终端进入我们的测试工程根目录,并执行pod安装指令:

Later@localhost:~$ cd /Users/Later/Desktop/私有库创建教程/PodTest 
Later@localhost:~/Desktop/私有库创建教程/PodTest$ pod install --no-repo-update

终端界面如下:

PodTest安装pod.png

我们重新打开测试项目:

测试项目成功导入了项目.png

在ViewController.m文件导入文件,并按照Example的样例书写代码验证。代码如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [LATAlert showAlertWithTitle:@"测试" message:@"这时测试信息" OkBlock:^{
        NSLog(@"点击了确认");
    }];
}

不同的是,这里引入头文件时,我们使用的是:#import <LATAlert/LATAlert.h>而不是Example样例工程里面的引入方式:#import "LATAlert.h"。

运行PodTest项目,点击屏幕,是不是也弹出Alert提示了呢?

至此,我们的私有库发布结束。具体更详细的信息,建议各位看客多多参考CocoaPods官网,会有更不一样的体验。英语不好的,体验会更加深刻哟!

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

推荐阅读更多精彩内容