基本介绍
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。