内容简介:关于Pofile的详细语法可以参考:说明1:说明3: 将项目托管到Git,私有库一般上传到内部的仓库中。
-
CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。
-
iOS程序依赖管理 工具 还有 Carthage (Carthage 是由 Swift 语言写的,只支持动态框架,只支持 iOS8+),工程中可以Carthage和CocoaPods一起存在使用,但是建议使用一种,个人推荐CocoaPods。
-
CocoaPods 项目源码
2、下载和安装CocoaPods
-
CocoaPods需要 Ruby 环境,安装Ruby和修改ruby镜像命令如下:( Mac自带 Ruby )
#安装ruby gem install ruby #升级ruby sudo gem update --system #检查版本 ruby -v # 更新ruby镜像 gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/ #检查镜像是否更新成功 gem sources -l 复制代码
-
下载和卸载命令
#下载最新版本 sudo gem install cocoapods (sudo gem install -n /usr/local/bin cocoapods) #下载指定版本 sudo gem install cocoapods -v 1.6.1 #卸载 sudo gem uninstall cocoapods #卸载指定版本 sudo gem uninstall cocoapods -v 1.6.1 #检查pod版本 pod --version 复制代码
-
还可以在工程目录下,使用
Gemfile
来指定使用cocoapods的版本。gem "cocoapods", '~> 1.6.1' 复制代码
3、CocoaPods应用
- 为项目引入优秀的第三方库,如SDWebImage、AFNetworking、YYCache
- 创建私有pods,将项目中子模块拆分、沉库(内部使用)
- 创建公有pods,将好的功能模块分享出去
二、Podfile基础使用
1、基础
-
创建Podfile文件
#进入项目根路径中执行,生成Podfile文件(如果有Podfile文件不用执行pod init) pod init 复制代码
说明:Podfile文件详细描述了一个或多个工程中targets的依赖关系
-
Podfile添加第三方库依赖
target 'QSAppDemo' do pod 'AFNetworking' pod 'YYModel', '~> 1.0.4' pod 'OOMDetector', '1.3' # Debug模式下生效 pod 'FLEX', '~> 2.0', :configurations => ['Debug'] pod 'WebViewJavascriptBridge', :git => 'https://github.com/marcuswestin/WebViewJavascriptBridge.git' end 复制代码
-
下载和安装第三方库
pod install 复制代码
说明1:下载成功后,使用CocoaPods 生成的 .xcworkspace 文件来打开工程;每次更改了 Podfile 文件,要重新执行一次pod update命令;
说明2:发生执行
pod install
或pod update
都卡在Analyzing dependencies
的情况,是因为要升级CocoaPods的spec仓库,命令后添加--verbose --no-repo-update
参数可以省略此步。
2、pod指定依赖项版本范围
-
如果依赖项后不指定版本,默认取最新版本
pod 'OOMDetector' 复制代码
-
如果依赖项后跟上特定版本,就是使用指定版本
pod 'OOMDetector' 复制代码
-
> 0.1
高于0.1版本(不包含0.1版本)的任意一个版本 -
>= 0.1
高于0.1版本(包含0.1版本)的任意一个版本 -
< 0.1
低于0.1版本(不包含0.1版本)的任意一个 -
<= 0.1
低于0.1版本(包含0.1版本)的任意一个 -
~> 0.1.2
版本 0.1.2的版本到0.2 ,不包括0.2。这个基于你指定的版本号的最后一个部分。这个例子等效于>= 0.1.2并且 <0.2.0,并且始终是你指定范围内的最新版本。
3、pod制定依赖库的分支或节点
-
引入master分支(默认)
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git' 复制代码
-
引入指定的分支
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :branch => 'develop' 复制代码
-
引入某个节点的代码
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => '2.7.0' 复制代码
-
引入某个特殊的提交节点
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '685e31a31bb1ebce3fdb5a752e392dfd8263e169' 复制代码
4、关于Podfile中一些配置说明
-
Source:指定pod的来源。如果不指定source,默认是使用CocoaPods官方的source
# 使用官方默认地址(默认) source 'https://github.com/CocoaPods/Specs.git' 复制代码
-
use_frameworks!:使用此命令会在Pods工程下的Frameworks目录下生成依赖库的framework,如果不使用,会在Pods工程下的Products目录下生成.a的静态库。
target 'QSAppDemo' do use_frameworks! end 复制代码
关于Pofile的详细语法可以参考: Podfile Syntax Reference 或Podfile文件用法详解
三、Cocoapods建立私有Pod库
1、概述
-
由于业务需要,需要开发某业务SDK,方便公司内业务接入,选择使用创建私有Pod库;
-
本质上,创建公有Pod库或者私有Pod库原理是一样的,不一样的是:两者的版本索引查询方式不一样, 公有库的podspec由 CocoaPods/Specs 管理, 而内部私有使用的pod库需要公司内部建立一个仓库来管理podspec。
-
私有spec repo的构建形式有两种, 一种是私有git服务器上面创建,一种是本机创建;一般是在公司内部搭建的git服务器上面创建私有spec repo
#将远程的私有版本仓库添加到本地 pod repo add qs_private_pods_specs https://github.com/buaa0300/qs_private_pods_specs.git #添加成功后,打开~/.cocoapods/repos可以看到新增的qs_private_pods_specs 复制代码
2、创建私有Pod库
pod lib create QSBizSDK # QSBizSDK是SDK的名字 What platform do you want to use?? [ iOS / macOS ] > iOS What language do you want to use?? [ Swift / ObjC ] > ObjC Would you like to include a demo application with your library? [ Yes / No ] > YES Which testing frameworks will you use? [ Specta / Kiwi / None ] > None Would you like to do view based testing? [ Yes / No ] > No What is your class prefix? > QS ...... 复制代码
说明1: pod lib create QSBizSDK
其实是下载了一个pod模板,然后在内部通过更改.podspec文件的配置定制化自己的pod,podspec是描述pod的说明信息的。 说明2
: pod lib create ProjectName
其实使用了默认参数,补全的话 pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git
说明3: 将项目托管到Git,私有库一般上传到内部的仓库中。
3、podspec编辑
Pod::Spec.new do |s| s.name = 'QSBizSDK' s.version = '1.0.0' s.summary = 'A short description of QSBizSDK.' s.description = <<-DESC Add long description of the pod here. DESC s.homepage = 'https://github.com/buaa0300/QSBizSDK' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = {'南华coder' => 'buaa0300@qq.com'} s.source = { :git => 'https://github.com/buaa0300/QSBizSDK.git', :tag => s.version.to_s } s.ios.deployment_target = '8.0' s.default_subspec = 'QSCore' # 各个子模块的个自的源码路径 s.subspec 'QSCore' do |qscore| qscore.source_files = 'Classes/QSCore/**/*' end # A a 一定要不一样,是别名,添加好暴露的头文件 s.subspec 'A' do |a| a.source_files = 'Classes/QSCore/A/**/*' a.public_header_files='Classes/QSCore/A/*.h' end # 可以添加内部自己模块,或者外部的依赖 s.subspec 'B' do |b| a.source_files = 'Classes/QSCore/B/**/*' a.public_header_files='Classes/QSCore/B/*.h' b.dependency 'Classes/QSCore/A' b.dependency 'AFNetworking', '~> 3.0' b.frameworks = 'SystemConfiguration', 'CFNetwork', 'PassKit' b.libraries = 'c++', 'z' end s.subspec 'C' do |c| c.source_files = 'Classes/QSCore/C/**/*' c.dependency 'Classes/QSCore/B' end end 复制代码
说明:对于一个功能比较多的SDK,podspec中需要做的事情比较多,如利用 subspec 将代码模块化,方便使用时按需导入;不同的模块可能依赖framework、静态库、内部其他模块,也需要处理好;
说明2:可以使用 pod spec lint xxx.podspec
来检查podspec的配置有效性
4、podspec加入私有Sepc repo
- 公有库使用trunk方式将.podspec文件发布到 CocoaPods/Specs , 内部的pod组件库则是添加到私有的Spec repo中去, 在终端执行:
pod repo push qs_private_pods_specs QSBizSDK.podspec 复制代码
说明:添加成功之后 qs_private_pods_specs
中会包含QSBizSDK库的podspec信息, 可以前往 ~/.cocoapods/repos
下的 qs_private_pods_specs
文件夹中查看, 同时git服务器中的远端也更新了.
5、更多参考
四、其他
1、pod setup原理
- 本质就是将 github.com/CocoaPods/S… 上的项目克隆到/Users/用户名/.cocoapods/repos目录下,若此目录下已经有这个项目,使用pod setup命令则会将项目更新到最新的状态。
2、pod instal和pod update的区别
- 执行pod install时,如果Podfile.lock文件存在, 则下载Podfile.lock文件中指定的版本安装,对于不在Podfile.lock文件中的pod库,pod install命令会搜索这个pod库在Podfile文件中指定的版本来安装;
- 当你想要更新pod库的版本时才使用pod update;它不管Podfile.lock是否存在, 都会读取Podfile文件的的框架信息去下载安装,下载好之后, 再根据下载好的框架信息, 生成Podfile.lock文件
3、第三方库禁止BITCODE
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_setting["ENABLE_BITCODE"] = 'NO' end end end 复制代码
4、清除相关命令
#查看本地pod缓存 pod cache list #清除某个库缓存 pod cache clean xxxx # 清除所有pod缓存 pod cache clean -all #删除缓存方法 rm ~/Library/Caches/Cocoapods/Pods/Pods/Release 复制代码
5、其他
# 更新库命令 pod repo update # 删除 search_index.json 文件 rm ~/Library/Caches/CocoaPods/search_index.json 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Android Handler机制理解和AsyncTask使用小记
- 使用vue完成微信公众号网页小记
- Kettle 小记(2)-- Spoon的使用(3) -- 主对象树和核心对象
- Associated Objects 小记
- Flutter混合开发小记
- Associated Objects 小记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。