美文网首页
Cocoapods使用心得

Cocoapods使用心得

作者: vicentwyh | 来源:发表于2018-12-25 14:26 被阅读0次

Cocoapods

CocoaPods管理Xcode项目的依赖库。项目的依赖库在名为 Podfile 的文本文件中指定。CocoaPods将解析库之间的依赖关系,获取生成的源代码,然后在Xcode工作区中将它们链接在一起以构建项目。
最终目标是通过创建更加集中的生态系统来提高第三方开源库的可发现性、参与度、易管理、易维护。

安装CocoaPods

CocoaPods由Ruby构建的,它可以使用macOS上的默认Ruby进行安装。(如果你熟悉的话,可以使用Ruby管理器。推荐使用默认的Ruby安装,使用默认的Ruby安装需要使用 sudo 管理员授权)

   $ gem install cocoapods    
或 $ sudo gem install -n /usr/local/bin cocoapods 

如果无法获取下载源,则安装之前需要先切换Ruby默认的软件源,因为rubygems.org被屏蔽了

//查看ruby下载源
 $ gem sources -l   

//切换源(添加新的源,并移除旧的源)
$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

cocoapods本地库下载

 $ pod setup 

使用CocoaPods

为项目工程添加依赖库pod

安装Cocoapods成功后,为需要的项目创建 Podfile文件,并在文件指定需要的依赖库

  1. 使用终端打开工程目录:
$ cd  项目目录
  1. 创建Podfile文件,执行
 $ pod init

该命令会创建一个podfile模版文件。
如果不想使用模版文件,也可自行创建:

//创建文件podfile
 $ touch Podfile
//编辑文件内容
$ vim Podfile
  1. 在podfile文件中指定链接的目标工程和依赖库,以及项目指定适配的最小的系统版本
    例如:
platform :ios, '9.0' //项目支持的最低iOS版本
target 'MyAppName输入项目名称' do

  pod 'ObjectiveSugar'

end

4)修改保存podfile后,执行以下命令,下载依赖库

$ pod install

运行成功后工程文件下会生成一个Podfile.lock文件,以及工程和依赖库的链接执行.xcworkspace文件

Podfile.lock 文件是项目第一次安装pod后生成的,此文件跟踪各个pod已安装版本并锁定这些版本
pod update同样可以根据Podfile下载依赖库,它与pod install区别如下:

Pod install VS pod update

Pod install:

  • project第一次下载三方pod时使用(即未生成 podfile.lock文件),它参照 podfile文件,下载指定版本的依赖库(未指定版本则下载最新版本),生成podfile.lock文件并记录锁定依赖库的名称和版本号
  • 项目中已存在 podfile.lock文件时,对于podfile.lock中记录的pods,pod install 下载记录的版本pod,未记录在podfile.lock中的pods则下载最新版本的,并记录在podfile.lock文件中。

Pod update:
不考虑 podfile.lock文件锁定的版本号,仅仅参照podfile文件,下载podfile文件指定版本的依赖库(未指定版本则下载最新版本),并记录在podfile.lock文件中

它是确保每个团队成员使用相同版本pods的唯一方法

下载三方依赖库Pod的逻辑:

pod下载逻辑
  • pod setup会将远程索引库copy到本地。
  • 使用 pod 下载源码时,根据远程索引库内相应的索引文件.podspec记录的源码地址和版本号下载相应的版本的源码。
  • pod search ‘name’ 是在本地而非远程的索引库里根据这个key(也就是name)来找到这个索引文件,本地没有下载过,则找不到。

添加pod的幕后

  1. 创建或更新工作区workspace
  2. 将项目project添加到工作区
  3. 将CocoaPods static library添加到工作空间。
  4. 将libPods.a添加到:targets => build phases =>Link Binary With Libraries
  5. 将CocoaPods Xcode配置文件添加到应用程序的项目project中。
  6. 将应用程序的目标配置更改为基于CocoaPods。
  7. 添加 build phase 以将资源从您安装的任何pods复制到应用程序包。

即在所有其他构建阶段之后的“Script build phase(脚本构建阶段)”,具有以下内容:

  • Shell:/ bin / sh
  • Script:$ {SRCROOT} /Pods/PodsResources.sh

注意:
如果CocoaPods static library已经在您的项目中,则跳过步骤 3 以后的步骤。这在很大程度上基于乔纳威廉姆斯关于Static Library

是否将pods目录检查添加到源代码管理?

是否添加pods到源代码管理中各有优略,最终取决你的需求
检查Pods目录的好处:

  • 克隆了储存库repo后,即使没有在机器上安装CocoaPods,项目也可以立即构建和运行。无需运行pod安装,也无需网络连接
  • Pod(代码/库)始终可用,即使Pod的源(例如GitHub)要关闭也是如此。
  • 在cloning repo后,Pod工件保证与原始安装中的Pod相同。

忽略Pods目录的好处:

  • 源控件仓库repo将更小并占用更少的空间。
  • 只要所有Pod的源(例如GitHub)可用,CocoaPods通常能够重新创建相同的安装。(从技术上讲,无法保证在Podfile中不使用提交SHA时,运行pod安装将获取并重新创建相同的工件。在Podfile中使用zip文件时尤其如此。)
    -执行source control时不会有任何冲突,例如合并具有不同Pod版本的分支

注意:无论您是否检查Pods目录,Podfile和Podfile.lock应始终保持在版本控制之下,保证团队协调合作同一项目的保证。

Podfile内容的配置

  1. 使用逻辑运算符
  • '> 0.1'任何高于0.1的版本
  • '> = 0.1'版本0.1和更高版本
  • '<0.1'任何低于0.1的版本
  • '<= 0.1'版本0.1和任何较低版本
  1. 运算符~>
  • '〜> 0.1.2'版本0.1.2和版本高达0.2,不包括0.2和更高
  • '〜> 0.1'版本0.1和版本高达1.0,不包括1.0和更高版本
  • '〜> 0'版本0及更高版本,这基本上与没有版本相同
  1. 还可以使用Pod的最新版本、特定版本或分支版本。使用pod声明指定:
  • 使用主分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

  • 使用repo不同分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'

  • 使用repo的tag版本:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'

  • 指定一个提交:

搭建pod

一、外部前提条件:

一个用于存储 Pod Project文件 的远程仓库
一个用于存储 Spec Repo (索引文件)的远程仓库
可以在GitHub、Gitlab、SVN等上创建:
这里用github作为例子,如何在github上创建新仓库网上有很多资料,github上也有指导:Create a repo

二、创建本地私有仓库,并添加到CocoaPods安装(如果打算使用cocoapods公有的索引仓库则可跳过该步骤)**

打开cocoapods目录:~/.cocoapods/repos
[图片上传中...(B076DAF3-4A26-4F11-AED2-C08BDF6269A4.png-4d3a0-1545639728774-0)]

执行以下命令,创建本地私有库:

 $ pod repo add NAME URL   

可见远程仓库 WYSpecRepo 107FA6BE-D61A-430F-A797-0C7114102384.png
被拷贝到本地了
三、创建pod project

打开项目要存放的文件夹cd 文件夹,执行下面的命令

 $ pod lib create MylibraryName

 或pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git

不填写模版路径时,默认为git上的默认版本
pod lib create 通过提供标准目录结构以及高质量pod所需的一堆样板文件来帮助您快速入门。pod lib create不是创建pod的唯一方法,但它是最简单的方法。关于pod lib create 具体做了什么可以参考这里理解CocoaPods的Pod Lib Create

创建后项目目录如下:

其中,
Classes:文件夹:存放核心文件(如类文件),并删除ReplaceMe.m
Assets:存放资源文件(如图片)

注意:当您将新/现有文件添加到 Classes或 Assets或更新podspec时,您应该运行pod installpod update

四、对项目中的.podspec 文件,进行编辑:
Pod::Spec.new do |s|

 s.summary      = "XXX"  改成你的仓库名就行了

 s.description  = "pod的详细描述,要注意比s.summary的描述要长"

 // s.description = <<-DESC

//TMManager的详细描述,要注意比s.summary的描述要长//要么这样写(不能合到一//行),要么和上面的一样DESC 

 s.homepage    = "[https://github.com/xxx/xxx.git](https://github.com/xxx/xxx.git)"  改成你github的仓库地址就行了
 s.license      = { :type => "MIT", :file => "LICENSE" }  

 s.author     = { "name" => “邮箱” }改成你的名字和邮箱

 s.source    = { :git => 'https://github.com/xxx/远程仓库地址', :tag => s.version.to_s }

# s.exclude_files = "Classes/Exclude” 注释掉

 s.source_files = "Demo", "Demo/**/*.{h,m}"    //和.podspec  写同级文件夹名字

 s.platform = :ios s.platform = :ios, "8.0"//指定最小支持系统

 #s.requires_arc = true //是否使用ARC

 s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit' //使用框架
 
 s.dependency 'SDWebImage' // 依赖库
End

修改完成后终端打开到.podspec文件所在目录下,验证podspec文件

//进行本地验证文件有效性
$ pod lib lint yourPodName.podspec 
例如:
五、上传项目工程文件到远程库

// 关联本地项目与远程仓库,并上传项目文件:

//添加远程仓库地址
$ git remote add origin [repo_url] 

//将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库
$ git push -u origin master 

至此,项目工程文件就成功上传到远程项目代码仓库

六、实现 pod 命令下载

tag标签
打上tag值上传:注意tag必须与 .podspec 文件里的版号一致:

062EF650-3108-4A13-AE22-07CEFFAB3164.png
$ git tag -m "描述" -a [版本号] 或者 $ git tag [版本号] 
$ git push --tag

校验

//对本地和远程验证文件和相关tag,需要能够访问到远程仓库
$ pod sepc lint xxx.podspec

注意!如果私有库中以来了其他 pod,需要说明来源,提交命令用下面这个:
$ pod sepc lint xxx.podspec --source=url,url……

向远程 spec repo(索引文件仓库)提交 podspec(索引文件),使我们自己的 pod 可获取
主要有两种:私有远程索引仓库公开的远程索引仓库

  • 公开的索引仓库(实际为cocoapod的master仓库):
$ pod  trunk  push  [xx.podspec]    
  • 私有的索引仓库(自己创建的远程索引仓库):
$ pod repo push [sepcRepoName]  [xx.podspec] 

// 如果私有库中以来了其他 pod,需要说明来源,提交命令用下面这个:
 $ pod repo push [sepcRepoName]  [xx.podspec] --source=url,url……

提交成功后,远程索引仓库和本地仓库能够同时观察到相应版本的索引文件.

此时:就可以在其他项目的Podfile 文件中使用pod 'libName'向项目中导入我们自己创建的私有pod`

基于 svn 服务器搭建私有库

以组件化的形式,将需要的组件以pod私有库的形式安装到最后的主工程中,组件间各自独立、解耦,仅依赖中间件进行通信,这或许就是极好的架构形式。

插件支持

cocoapods-repo-svn:cocoapods提供了对SVN服务器的支持,为svn创建并管理pod提供的插件
执行以下命令安装插件:

 $ sudo gem install cocoapods-repo-svn 
创建私有pod

基于svn使用pod的过程与基于github的非常相似,只有些许的不同点:

  • 执行pod lib create libraryName后,由于是github上的默认版本,所以会在项目文件目录下生成git文件,需要删除

    AA4A43E7-9BF5-450A-94C2-6B4FB39C834D.png
  • 编辑.podspec文件时注意地址: 9C75972B-520A-48AF-B2E9-F2684333F96A.png
  • 命令格式不同:
    SVN:

//校验podspec和tag
$ pod repo-svn lint [xxx.podspec]

//提交索引文件到远程索引仓库
$ pod repo-svn push [sepcRepoName]  [xx.podspec] 

【注意】:基于svn的pod的依赖库如果如果包含了同样依赖了svn的私有库,则在使用pod命令下载依赖库时会报错,因为目前cocoapods对库的依赖库的查找地址默认情况下为git,所以对于这种情况的pod的索引文件目前只能放置在git上

参考:
Cocoapods
Creating Your First CocoaPod
基于 svn 服务器及 cocoapods-repo-svn 插件进行组件化私有库的创建

相关文章

  • 2018-03-01

    .CocoaPods的使用心得 (1)最近使用CocoaPods来添加第三方类库,无论是执行pod install...

  • 使用CocoaPods心得

    •1.查看cocoaPods常用方法:使用pod help查看命令 •2.查看工程中是否存在某个库时 :使用pod...

  • cocoapods使用心得

    有个项目要使用cocoapods管理框架了,原来是手动添加框架,用xcworkspace关联的。后来有个框架要使用...

  • cocoapods 使用心得

    本文是在已安装cocoapods以后的操作使用 1.新建一个xcode文件 2.cd到新建的xcode文件 3.终...

  • Cocoapods使用心得

    Cocoapods CocoaPods管理Xcode项目的依赖库。项目的依赖库在名为 Podfile 的文本文件中...

  • cocoapods的使用心得

    1 install和update的区别 install是首次导入库的时候调用(无论是新建的工程还是向工程添加新的库...

  • CocoaPods安装使用心得

    一、什么是CocoaPods CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理。开发i...

  • iOS-Cocoapods使用总结

    目录: CocoaPods简介 CocoaPods 的安装 CocoaPods 的使用 使用 pod instal...

  • cocoapods基础

    vim 使用: cocoapods 安装 cocoapods 使用 cocapods升级

  • iOS开发之进阶篇(15)—— CocoaPods

    目录 CocoaPods 安装 CocoaPods 使用 CocoaPods 原理简介 1. CocoaPods ...

网友评论

      本文标题:Cocoapods使用心得

      本文链接:https://www.haomeiwen.com/subject/rvspkqtx.html