CocoaPods使用

  • 入门
    • 安装
    • 更新CocoaPods
  • pod安装与pod更新
    • pod install
    • pod outdated
    • pod update
    • 预期用途
    • 提交你的Podfile.lock
  • 使用CocoaPods
    • 将 Pod 添加到 Xcode 项目
      • 安装
      • 使用 CocoaPods 创建一个新的 Xcode 项目
      • 现有Project集成
    • 源代码管理Pods 目录
      • 签入 Pods 目录的好处
      • 忽略 Pods 目录的好处
    • Podfile.lock
    • 幕后发生了什么?
    • Pod 和子模块
      • 从子模块切换到 CocoaPods

CocoaPods 是 Swift 和 Objective-C Cocoa 项目的依赖管理器。它拥有超过 89,000 个库,用于超过 300 万个应用程序。CocoaPods 可以帮助您优雅地扩展您的项目。

CocoaPods 管理 Xcode 项目的库依赖项。

项目的依赖项在称为 Podfile 的单个文本文件中指定。CocoaPods 将解析库之间的依赖关系,获取生成的源代码,然后在 Xcode 工作区中将它们链接在一起以构建您的项目。

最终目标是通过创建一个更加集中的生态系统来提高第三方开源库的可发现性和参与度。

入门

安装

CocoaPods 是用 Ruby 构建的,并且可以使用 macOS 上可用的默认 Ruby 进行安装。我们建议您使用默认的 ruby​​。

  1. 使用默认的 Ruby 安装可能需要您sudo在安装 gems 时使用
$ sudo gem install cocoapods

更新CocoaPods

要更新 CocoaPods,您只需再次安装 gem

$ sudo gem install cocoapods

pod安装与pod更新

注意:installvs . 的词汇update实际上并不特定于 CocoaPods。它受到许多其他依赖管理器的启发,例如bundler、RubyGems或composer,它们具有类似的命令,具有与本文档中描述的完全相同的行为和意图。

pod install

这将在您第一次要检索项目的 pod 时使用,也可以在您每次编辑 Podfile 以添加、更新或删除 pod 时使用。

  • 每次pod install运行命令时——并下载和安装新的 Pod——它都会在文件中写入它为每个 Pod 安装的版本Podfile.lock。此文件跟踪每个 pod 的已安装版本并锁定这些版本

  • 当您运行时**,**pod install它只会解析. Podfile.lock

    • 对于 中列出的 pod Podfile.lock,它会下载 中列出的显式版本,Podfile.lock而不尝试检查是否有更新的版本可用

    • 对于尚未列出的 pod Podfile.lock,它会搜索与Podfile(如pod 'MyPod', '~>1.2')中描述的版本相匹配的版本

pod outdated

当您运行pod outdated时,CocoaPods 将列出所有具有比Podfile.lock(当前每个 pod 安装的版本)中列出的版本更新的版本的 pod。这意味着如果您在这些 pod 上运行pod update PODNAME,它们将被更新——只要新版本仍然符合Podfile中设置的pod 'MyPod', '~>x.y'等限制。

pod update

运行pod update PODNAME时,CocoaPods 会尝试查找pod PODNAME 的更新版本,而不考虑Podfile.lock中列出的版本。它会将 pod 更新到可能的最新版本(只要它符合您的版本限制Podfile)。

如果您在pod update没有 pod 名称的情况下运行,CocoaPods 会将您列出的每个 pod 更新Podfile到可能的最新版本。

预期用途

使用pod update PODNAME,您将只能更新特定的 pod(检查是否存在新版本并相应地更新 pod)。与之相反,pod install它不会尝试更新已安装的 pod 版本。

当你向你的 Podfile 添加一个 pod 时,你应该运行pod install,而不是pod update– 这样来安装这个新的 pod,而不会有在同一进程中更新现有 pod 的风险。

仅当您要更新特定 pod(或所有 pod)的版本时才会使用pod update

提交你的Podfile.lock

提醒一下,即使您的策略是不将该Pods文件夹提交到您的共享存储库中,您也应该始终提交并推送您的Podfile.lock文件。

否则,它将破坏上面解释的关于pod install能够锁定已安装的 pod 版本的整个逻辑。

使用CocoaPods

将 Pod 添加到 Xcode 项目

在你开始之前

  1. 检查Specs存储库或cocoapods.org以确保您想要使用的库可用。

  2. 在您的计算机上安装 CocoaPods 。

安装

  • 创建一个Podfile,并添加您的依赖项:
target 'MyApp' dopod 'AFNetworking', '~> 3.0'pod 'FBSDKCoreKit', '~> 4.9'
end
  • 在您的项目目录中运行$ pod install

  • 打开App.xcworkspace并构建。

使用 CocoaPods 创建一个新的 Xcode 项目

要使用 CocoaPods 创建一个新项目,请按照以下简单步骤操作:

  • 像往常一样在 Xcode 中创建一个新项目。

  • 打开一个终端窗口,并$ cd进入您的项目目录。

  • 创建一个 Podfile。这可以通过运行来完成$ pod init

  • 打开你的 Podfile。第一行应指定支持的平台和版本。

platform :ios, '9.0'
  • 为了使用 CocoaPods,您需要定义 Xcode 目标以将它们链接到。因此,例如,如果您正在编写一个 iOS 应用程序,它将是您的应用程序的名称。通过写作target '$TARGET_NAME' doend几行之后创建一个目标部分。

  • pod '$PODNAME'通过在目标块内的单行上指定来添加 CocoaPod 。

target 'MyApp' dopod 'ObjectiveSugar'
end
  • 保存 Podfile。

  • 运行$ pod install

  • 打开创建的MyApp.xcworkspace

现有Project集成

将 CocoaPods 与现有工作空间集成需要在 Podfile 中增加一行。只需.xcworkspace在目标块之外指定文件名,如下所示:

workspace 'MyWorkspace'

源代码管理Pods 目录

签入 Pods 目录的好处

  • 克隆 repo 后,项目可以立即构建和运行,即使机器上没有安装 CocoaPods。无需运行pod install,也无需联网。

  • Pod 工件(代码/库)始终可用,即使 Pod 的源(例如 GitHub)出现故障。

  • 克隆 repo 后,Pod 工件保证与原始安装中的工件相同。

忽略 Pods 目录的好处

  • 源代码控制 repo 会更小,占用更少的空间。

  • 只要所有 Pod 的源(例如 GitHub)都可用,CocoaPods 通常能够重新创建相同的安装。(从技术上讲,不保证pod install在 Podfile 中不使用提交 SHA 时,运行将获取并重新创建相同的工件。在 Podfile 中使用 zip 文件时尤其如此。)

  • 执行源代码控制操作时不会有任何冲突需要处理,例如合并具有不同 Pod 版本的分支。

无论您是否签入Pods目录,PodfileandPodfile.lock都应始终处于版本控制之下。

Podfile.lock

该文件是在第一次运行pod install后生成的,并跟踪已安装的每个 Pod 的版本。例如,想象一下 Podfile 中指定的以下依赖项:

pod 'RestKit'

运行pod install将安装当前版本的 RestKit,从而生成一个Podfile.lock文件 ,指示安装的确切版本(例如RestKit 0.10.3)。多亏了Podfile.lock,即使有更新的版本可用,这个项目在另一台机器上运行pod install仍将安装 RestKit 0.10.3。pod installCocoaPods将在Podfile.lock中的Pod版本,除非依赖项在 Podfile 中更新或被pod update调用(这将导致Podfile.lock生成新的)。通过这种方式,CocoaPods 避免了因依赖项发生意外更改而引起的头痛。

Google 有一个很棒的视频介绍了它的工作原理:“CocoaPods and Lockfiles (Route 85)”。

幕后发生了什么?

在 Xcode 中,使用直接来自ruby​​ 源的引用,它:

  1. 创建或更新工作区。

  2. 如果需要,将您的项目添加到工作区。

  3. 如果需要,将CocoaPods 静态库项目添加到工作区。

  4. 将 libPods.a 添加到:targets => build phases => link with libraries.

  5. 将 CocoaPods Xcode 配置文件添加到项目中。

  6. 将应用的目标配置更改为基于 CocoaPods 的配置。

  7. 添加构建阶段以将资源从您安装的任何 pod 复制到应用程序包。即在所有其他构建阶段之后的“脚本构建阶段”,具有以下内容:

    1. Shell:/bin/sh

    2. Script:${SRCROOT}/Pods/PodsResources.sh

请注意,如果 CocoaPods 静态库已经在您的项目中,则跳过第 3 步。这主要基于 Jonah Williams 在静态库上的工作。

Pod 和子模块

CocoaPods 和 git 子模块试图解决非常相似的问题。两者都努力简化在您的项目中包含 3rd 方代码的过程。子模块链接到该项目的特定提交,而 CocoaPod 与版本化的开发人员版本相关联。

从子模块切换到 CocoaPods

在您决定完全切换到 CocoaPods 之前,请确保您当前使用的库都可用。记录您当前使用的库的版本也是一个好主意,以便您可以设置 CocoaPods 以使用相同的库。渐进式地执行此操作也是一个好主意,逐个依赖而不是一个大动作。

  1. 安装 CocoaPods

  2. 创建你的Podfile

  3. 删除子模块引用

  4. 在 Podfile 中添加对已删除库的引用

  5. 执行pod install

CocoaPods使用相关推荐

  1. cocoapods更新

    使用sudo gem install cocoapods更新提示: ERROR: While executing gem ... (Errno::EPERM) Operation not permit ...

  2. cocoaPods安装、更新第三方库

    pod install 换成 pod install --verbose --no-repo-update pod update 换成 pod update --verbose --no-repo-u ...

  3. CocoaPods私有库搭建的记录

    前言 随着项目的业务增加以及马甲包进度的跟进,一些重复的独立业务以私有库的方式引入到项目中对于项目进度的开发就显得越发的迫切了,本文主要记录自己搭建私有库时的整个流程,以防后面再次搭建时忘记,方便自己 ...

  4. CocoaPods远程私有库

    上一篇(让自己的开源项目支持CocoaPods集成)介绍了将自己开发的框架代码发布到Cocoapods,全球的开发者都可以通过pod search搜索到我们的框架代码以及通过pod install进行 ...

  5. 让自己的开源项目支持CocoaPods集成

    平时我们会经常用CocoaPods集成第三方库,那如何使自己的代码也可以通过CocoaPods集成呢?只需要简单几步: 创建git仓库,把代码提交到Github或码云等 在git仓库中创建.Podsp ...

  6. 你真的会用 CocoaPods 吗?

    CocoaPods 可以说是 iOS 开发应用最广泛的包管理工具,本篇文章主要介绍 CocoaPods 的第三方库是怎样从网络集成到我们本地的项目当中,也是制作私有库.开源库和 iOS 项目组件化的一 ...

  7. 使用 CocoaPods 给微信集成 SDK 打印收发消息

    推荐序 本文介绍的是一套逆向工具,可以在非越狱手机上给任意应用增加插件.在文末的示例中,作者拿微信举例,展示出在微信中打印收发消息的功能. 这套工具可以加快逆向开发的速度,其重签名思想也可以用于二次分 ...

  8. CocoaPods原理(一)

    CocoaPods介绍 CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具.利用 CocoaPods,可以定义自己的依赖关系 (称作 pods),并且随着时间的变化 ...

  9. 最新 macOS Sierra 10.12.3 安装CocoaPods及使用详解

    cocoapods官网:https://guides.cocoapods.org 一.什么是CocoaPods 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven, ...

  10. CocoaPods导入的库其头文件导入的方法

    尽管CocoaPods使用十分方便,但其导入的第三方框架还是要经过几步操作,才能供项目使用; 第一步:导入库 1>-在终端进入项目的根目录; 2>-输入:touch Podfile,则项目 ...

最新文章

  1. Java项目:网上花店商城系统(java+jsp+servlert+mysql+ajax)
  2. Sorenson Capital:值得投资的 5 种 AI 技术
  3. postgresql 动态添加过滤条件_通过窗口函数进行过滤导致Postgresql
  4. cookie 和 token 都存放在 header 中,为什么不会劫持 token?____token和cookie的区别
  5. 史上最短命iPhone,销量惨淡、即将停产!
  6. c++读取ini的Section节名
  7. html+css+dom补充
  8. 工业大数据的应用有哪些
  9. 转 OUI and OPatch Do Not Recognize JDK/JRE on Windows
  10. 爱希ISee人体感应器,雷达人体存在探测应用,毫米波雷达技术方案
  11. ​ClickHouse在手淘流量分析业务实践
  12. 整数有约 | 非夕科技:用自适应机器人,做通用智能时代的硬核引领者
  13. java ews_Java---使用EWS读取exchange邮件
  14. threshold 阈值,阀值,阙值
  15. 欢迎回家,希尔顿集团全力迎接凯旋归来最美逆行者
  16. 判定重大风险有哪几种_安全风险分为哪几个等级
  17. JS 四舍五入保留两位小数
  18. 长链剖分 总结 【知识点】
  19. pages文稿进去显示服务器,pages要提供服务器地址
  20. Ubuntu中动态库.so和静态库.a介绍

热门文章

  1. git pull时显示Please tell me who you are
  2. Layui 实现rate评分点击后只读,动态rate控制只读,动态控制只读
  3. Wingdings字体
  4. 本地DNS服务器-Dnsmasq安装与配置
  5. Anaconda点开 一直停留在 loading application
  6. 数据结构之链表详解(2)——双向链表
  7. Vulkan_顶点着色器特效1(流动的水面或飘扬的红旗)
  8. vue中打包报错Multiple chunks emit assets to the same filename static/js/chunk-6c337256.33476c81.js
  9. 微信小程序使用watch监听数据变化
  10. 本科计算机去当兵,我儿子2017年9月1日入学学计算机平面设计今年想去当兵在校生能去当兵吗...