使用Cocoapods制作自己的pod

前言

现在大部分的开发者都是用Cocopods来管理第三方库,Cocoapods为库的管理提供了便利。在项目的发展当中会出现很多公共组件,如果只是单纯拷贝代码,维护起来会变得非常麻烦,因此制作私有库将给组件管理带来极大遍历,而Cocoapods也提供了这样的功能。

文章分为两部分,第一部分是私有库的制作,第二部分介绍开源自己的库,将自己的库发布到Cocoapods公共仓库。

新建仓库

Cocoapods使用podspec来管理库的信息,因此需要一个仓库来管理这些podspec文件。如果要创建私有库就需要一个一个自己的仓库来存储podspec文件,如果开源就可以上传到Cocoapods公有的仓库。因此,创建私有库之前我们先创建私有的spec repo。

创建私有Spec Repo

  1. 创建spec的git仓库
    http://192.168.1.100:3000/AndrewShen/MySpecRepo.git

  2. 添加创建的Spec Repo

使用命令行添加仓库到本地repo,会自动建立git的链接

# pod repo add REPO_NAME SOURCE_URL
$ pod repo add MySpecRepo http://192.168.1.100:3000/AndrewShen/MySpecRepo.git

将会执行:

Cloning spec repo `MySpecRepo` from `http://192.168.1.100:3000/AndrewShen/MySpecRepo.git`

执行成功后可以执行pod repo查看已有的repo

新建pod

从零开始创建pod

  1. 如果需要从头开始写项目,开发组件,那可以通过pod lib create来创建工程
    我们执行
```Ruby
#pod lib create LIBNAME
pod lib create podDemo
```

之后会问你四个问题,问完后自动执行`pod install`并生成依赖:
  1. 使用什么语言
  2. 是否需要一个例子工程
  3. 选择一个测试框架
  4. 是否基于View测试
  5. 类的前缀
如果执行`pod install`失败,则删掉PodFile里的test target就行了。
  1. 创建成功后我们可以看到目录结构,我们的pod会存在于Example项目的Pods的Development Pods目录下。
```
podDemo
├── Example
│   ├── Podfile
│   ├── Podfile.lock
│   ├── Pods
│   ├── Tests
│   ├── podDemo
│   ├── podDemo.xcodeproj
│   └── podDemo.xcworkspace
├── LICENSE
├── README.md
├── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
├── podDemo
│   ├── Assets
│   └── Classes
└── podDemo.podspec
```

3.向pod文件夹(此处为podDemo)中加入资源文件(Assets中)和库文件(Classes中),

  1. 在example文件夹下执行pod update更新工程pod。成功后Development Pods目录下我们的pod文件便会更新。只要更新了pod文件夹下内容或者更改了podspec文件都需要执行pod update

  2. 通过Cocoapods创建的项目会在本地的git管理下,我们需要将其添加到远程仓库。

```ruby
git add .
git commit -m "Initial"
git remote add origin http://git.celebi.com/AndrewShen/podDemo.git           #添加远端仓库
git push origin master     #提交到远端仓库
```
  1. 由于podspec文件pod源需要tag号,因此我们需要为项目打上tag.
```ruby

git tag -a 0.0.1 -m "tag release 0.0.1" #打tag
git push --tags #提交tag
```

  1. 编辑podspec文件
```Ruby
Pod::Spec.new do |s|
  s.name             = 'podDemo' #pod名称
  s.version          = '0.1.0'   #pod版本
  s.summary          = '测试pod简介.' #简介,需要更改,不然会报警告

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC      #详细介绍,要比简介长
                        测试pod的详细介绍
                       DESC

  s.homepage         = 'http://192.168.1.100:3000/AndrewShen/podDemo' # 项目主页
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }  #协议
  s.author           = { 'AndrewShen' => 'andrewshen@minture.com' }  # 开发者信息
  s.source           = { :git => 'http://git.celebi.com/AndrewShen/podDemo.git', :tag => s.version.to_s } #仓库地址
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '7.0' # 最低版本

  s.source_files = 'podDemo/Classes/**/*' # 库文件
  
  # s.resource_bundles = {                     #资源目录
  #   'podDemo' => ['podDemo/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'UIKit', 'MapKit'   #依赖的framework
  # s.dependency 'AFNetworking', '~> 2.3'  # 依赖的第三方库  
```
  1. 编辑后使用pod lib lint验证podspec文件是否可用。如果有ErrorWarning是无法添加到spec repo中的。但是Warning可以存在,可以使用选项--allow-warnings忽略警告。
```
pod lib lint
```

如果显示为以下则说明创建成功

```Ruby
-> podDemo (0.1.0)
podDemo passed validation.
```

从组件项目中创建pod

如果已经有组件项目/Demo则只需要创建podspec文件。

  1. 执行命令创建podspec文件:
pod spec create ADSSegmentedButton https://github.com/Andrewmika/ADSSegmentedButton.git
  1. 创建完成后打开我们创建的podspec文件,进行编辑。

  2. 验证文件是否可用

执行命令`pod lib lint`

如果显示为以下则说明创建成功

```Ruby
-> ADSSegmentedButton (0.0.1)

ADSSegmentedButton passed validation.
```

pod本地测试

配置好podspec文件后可以在本地测试pod是否可用,然后发布到服务器上.
Podfile中指定pod,可以指定路径或者文件

platform :ios, '7.0'

pod 'PODNAME', :path => '项目路径'      # 指定路径
pod 'PODNAME', :podspec => 'podspec文件路径'  # 指定podspec文件

由于还未将pod提交到spec repo中,因此pod install后的库文件仍然在Development Pods目录下

pod私有库发布

pod发布只需要在podspec文件下执行一行命令,此命令会自动将文件push到git仓库中:

#pod repo push REPONAME [NAME.podspec]
pod repo push MySpecRepo podDemo.podspec

如果想要看详情可以加上选项--verbose。一般报错就是tag没打好,提取不到tag代码,无法验证podspec也就无法push。

发布到CocoaPods

注册帐号

#pod trunk register YOUREMAIL 'NAME' --description='DESCRIPTION'
pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

将用户名,邮箱换成自己的,给设备添加描述信息。由于CocoaPods没有用户名密码,使用的是验证令牌,所以换一台电脑的话还需要执行以上命令。
执行成功后会提示以下信息,点击连接完成注册。

[!] Please verify the session by clicking the link in the verification email that has been sent to 『your email』

完成后可以执行命令pod trunk me查看自己账户信息。

发布pod

发布到公有库也只需要一行命令:

pod trunk push [NAME.podspec]

之后也会验证podspec,通过后上传。提交到公有库速度比较慢,需要耐心等待。

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

推荐阅读更多精彩内容