学习使用CocoaPods后涨的姿势

基本介绍
Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理。
解决了什么问题
没有CocoaPods时,我们的工程配置需要
手动增加framework,library;
手动增加编译参数;
手动维护代码更新;

现在,我们只需要设置一个Podfile文件,执行 pod install

CocoaPods会帮我们下载好代码,设置好编译参数,配置好framework, library。
安装和使用教程
CocoaPod安装和使用教程
CocoaPods支持私有Spec仓库
整体先说明一下创建一个私有的podspec包括如下那么几个步骤:
创建并设置一个私有的Spec Repo。
创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址。
创建Pod所对应的podspec文件。
本地测试配置好的podspec文件是否可用。
向私有的Spec Repo中提交podspec。
更新维护podspec。

创建私有Spec Repo
先来说第一步,什么是Spec Repo?他是所有的Pods的一个索引,就是一个容器,所有公开的Pods都在这个里面,他实际是一个Git仓库remote端在GitHub上,但是当你使用了Cocoapods后他会被clone到本地的~/.cocoapods/repos目录下,可以进入到这个目录看到master文件夹就是这个官方的Spec Repo了。这个master目录的结构是这个样子的
.├── Specs └── [SPEC_NAME] └── [VERSION] └── [SPEC_NAME].podspec
.├──Specs └──[SPEC_NAME] └──[VERSION] └──[SPEC_NAME].podspec

因此我们需要创建一个类似于master的私有Spec Repo。所以创建一个Git仓库,这个仓库你可以创建私有的也可以创建公开的,不过既然私有的Spec Repo,还是创建私有的仓库吧,需要注意的就是如果项目中有其他同事共同开发的话,你还要给他这个Git仓库的权限。
创建完成之后在Terminal中执行如下命令

pod repo add [Private Repo Name] [GitHub HTTPS clone URL] $ pod repo add WTSpecs https://coding.net/wtlucky/WTSpecs.git

pod repo add [Private Repo Name] [GitHub HTTPS clone URL]$podrepoaddWTSpecshttps://coding.net/wtlucky/WTSpecs.git

此时如果成功的话进入到~/.cocoapods/repos目录下就可以看到WTSpecs这个目录了。至此第一步创建私有Spec Repo完成。
创建Pod所对应的podspec文件
新建 podspec,填写需要上传的文件
该命令执行之后,CocoaPods 会生成一个名为your_pod_spec_name.podspec的文件,然后我们修改其中的相关内容即可。pod spec create your_pod_spec_name
该命令执行之后,CocoaPods会生成一个名为your_pod_spec_name.podspec的文件,然后我们修改其中的相关内容即可。 pod speccreateyour_pod_spec_name

修改podspec文件(字面意思很容易看懂,描述了打包的一些参数信息)
Pod::Spec.new do |s| s.name = "MyModule" s.version = "0.0.1" s.summary = "li jian fei App 5.0+ version MyModule." s.description = <<-DESC 噜啦啦德玛西亚,吧啦吧啦 这里配置了打包的一些参数信息 一般情况下无需更改 DESC s.homepage = "http://lijianfei.sinaapp.com" s.license = "Copyright 2015 lijianfei.sinaapp.com" s.author = { "ios_lijianfei" => "leejeffery@foxmail.com" } s.platform = :ios, "7.0" s.source = { :git => "https://github.com/lijianfei1023/Quickblox-IM.git", :tag => s.version.to_s } s.resource = "MyModule/MyModule-Info.plist" s.resources = "MyModule/Image/.png" s.ios.deployment_target = '7.0' s.dependency 'AFNetworking' s.source_files = "MyModule//.{h,m}", "$(PODS_ROOT)//.h" s.exclude_files = "MyModule/main.m" s.public_header_files = "MyModule//.h", "$(PODS_ROOT)//.h" s.prefix_header_file = "MyModule/MyModule-Prefix.pch" s.frameworks = "QuartzCore","CoreGraphics", "Foundation", "UIKit", "AdSupport","objc" s.library = "sqlite3","c++", "z" s.requires_arc = trueend
Pod::Spec.newdo|s|s.name ="MyModule"s.version ="0.0.1"s.summary ="li jian fei App 5.0+ version MyModule."s.description =<<-DESC 噜啦啦德玛西亚,吧啦吧啦 这里配置了打包的一些参数信息 一般情况下无需更改 DESCs.homepage = "http://lijianfei.sinaapp.com"s.license = "Copyright 2015 lijianfei.sinaapp.com"s.author = { "ios_lijianfei" => "leejeffery@foxmail.com" }s.platform = :ios, "7.0"s.source = { :git => "https://github.com/lijianfei1023/Quickblox-IM.git", :tag =>s.version.to_s}s.resource ="MyModule/MyModule-Info.plist"s.resources="MyModule/Image/
.png"s.ios.deployment_target ='7.0's.dependency'AFNetworking's.source_files ="MyModule//.{h,m}","$(PODS_ROOT)//.h"s.exclude_files="MyModule/main.m"s.public_header_files="MyModule//.h","$(PODS_ROOT)//.h"s.prefix_header_file="MyModule/MyModule-Prefix.pch"s.frameworks="QuartzCore","CoreGraphics","Foundation","UIKit","AdSupport","objc"s.library="sqlite3","c++","z"s.requires_arc=trueend

本地验证 podspec 是否有效
pod spec lint MyModule.podspec --verbose --sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries
pod speclintMyModule.podspec--verbose--sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries

以下为忽略警告的命令
pod spec lint MyModule.podspec --verbose --sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries --allow-warnings
pod speclintMyModule.podspec--verbose--sources=https://github.com/lijianfei1023/Quickblox-IM.git --no-clean --use-libraries --allow-warnings

Cocoapods的高级用法
指定源
CocoaPods支持私有 Spec 仓库的,我们可以建立自己的源,也可以使用非官方的源,只要是符合规定的都可以指定。
source 'https://github.com/artsy/Specs.git' source 'https://github.com/CocoaPods/Specs.git'
source'https://github.com/artsy/Specs.git' source'https://github.com/CocoaPods/Specs.git'

抑制警告
inhibit_warnings参数能够有效的抑制CocoaPods引入的第三方代码库产生的warning。
全部指定
inhibit_all_warnings!
inhibit_all_warnings!

针对指定
pod 'ReactiveCocoa', '~> 2.4', :inhibit_warnings => true
pod'ReactiveCocoa','~> 2.4',:inhibit_warnings=>true

使用git的HEAD指向的分支
pod 'ISO8601DateFormatter', :head
pod'ISO8601DateFormatter',:head

使用 master 分支
pod 'ARAnalytics/Mixpanel', :git => 'https://github.com/orta/ARAnalytics.git'
pod'ARAnalytics/Mixpanel',:git=>'https://github.com/orta/ARAnalytics.git'

指定branch
pod 'Reachability', :git => 'https://github.com/ashfurrow/Reachability.git', :branch => 'frameworks'
pod'Reachability',:git=>'https://github.com/ashfurrow/Reachability.git',:branch=>'frameworks'

指定tag
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
pod'AFNetworking',:git=>'https://github.com/gowalla/AFNetworking.git',:tag=>'0.7.0'

指定commit
pod 'ARTiledImageView', :git => 'https://github.com/dblockARTiledImageView', :commit => '1a31b864d1d56b1aaed0816c10bb55cf2e078bb8'
pod'ARTiledImageView',:git=>'https://github.com/dblockARTiledImageView',:commit=>'1a31b864d1d56b1aaed0816c10bb55cf2e078bb8'

使用子库
单个子库
pod 'QueryKit/Attribute'
pod'QueryKit/Attribute'

多个子库
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
pod'QueryKit',:subspecs=>['Attribute','QuerySet']

使用本地代码
通过:path可以指定本地代码,不过需要确保目录包含podspec文件。
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
pod'AFNetworking',:path=>'~/Documents/AFNetworking'

指定target的依赖库
target :ZipApp do pod 'SSZipArchive'end
target:ZipAppdo pod'SSZipArchive'end

排除taget
target 'Artsy Tests', :exclusive => true do pod 'FBSnapshotTestCase', '1.4'end
target'Artsy Tests',:exclusive=>truedo pod'FBSnapshotTestCase','1.4'end

指定xcodeproj
默认会使用Podfile文件同级目录下第一个xcodeproj,但也可以指定
xcodeproj 'MyProject'target :test do # This Pods library links with a target in another project. xcodeproj 'TestProject'end
xcodeproj'MyProject' target:testdo # This Pods library links with a target in another project. xcodeproj'TestProject'end

指定连接的target
如果不显式指定连接的target,Pods会默认连接project的第一个target。如果需要,可以使用link_with指定连接一个或多个target
link_with 'MyApp', 'MyOtherApp'
link_with'MyApp','MyOtherApp'

指定环境
如下只会在Debug环境下面加入PonyDebugger库到工程。
pod 'PonyDebugger', :configuration => ['Debug']
pod'PonyDebugger',:configuration=>['Debug']

指定target的配置文件
xcodeproj 'TestProject', 'Mac App Store' => :release, 'Test' => :debug
xcodeproj'TestProject','Mac App Store'=>:release,'Test'=>:debug

使用Dynamic Frameworks代替Static Libraries
通过标志use_frameworks!就可知开启这个功能。如果需要使用Swift的库,就必须加上这个标志了。
加快pod install/update 速度
使用CocoaPods来添加第三方类库,无论是执行pod install还是pod updat很多时候都卡在了Analyzing dependencies不动,这是更新本地的pod spec所以文件导致的。通过–no-repo-update标志可以不更新本地pod spec索引。当然首次install不应该添加这个标志,后续修改Podfile的时候可以适当使用,加快pod速度。
pod install --no-repo-updatepod update --no-repo-update
pod install--no-repo-updatepod update--no-repo-update

输出详细日志
pod update --verbose
pod update--verbose

XCode的Cocoapods插件
cocoapods-xcode-plugin 是一个XCode的插件,让你方便操作Cocoapods。

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

推荐阅读更多精彩内容