【问题标题】:Changing an imported library using cocoapods使用 cocoapods 更改导入的库
【发布时间】:2013-07-02 09:46:54
【问题描述】:

我正在使用 cocoapods 开展一个项目,突然间我发现自己在其中一个库中进行了一些更改。如何确保这些更改永远不会被pod update 覆盖?有什么方法可以在不更新 github 项目的情况下在 pod 中引入更改?

更新:分叉一个项目

我已尝试分叉项目并创建一个新的规范文件以指向新项目。我能够安装基本的东西,但是,由于某种原因,安装了一些依赖项,但无法在 pods 项目中引用。目前我的 podsfile 中有这个:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

库的fork在https://github.com/tiagoalmeida/WhirlyGlobe

UPDATE2:缺少标题

我发现没有生成 boost 和 Eigen 的标头(Pods/Headers)(来自 WhirilyGlobe)。

UPDATE3:尝试对标头做一些事情

我尝试查看are in this thread 中的一些配置,并尝试了FAQ 中的解决方案,但我相信我的问题有所不同。标题实际上丢失了。

UPDATE4:攻击 cocoapods 版本

我已经卸载了 cocoapods 并安装了 0.20.2 版本(在尝试使用我的 fork 之前可以正常工作)并且它保持不变:/。

【问题讨论】:

  • 以另一种方式创建要更改的库类的子类。
  • 您可以分叉存储库,并将 pod 更改为指向您的分叉
  • @wattson12 感谢您的建议。如何在不创建新 pod(并污染 cocoapods 存储库)的情况下将 pod 更改为指向我的 fork?
  • 您只需在 podfile 中提供一个 url,在答案中添加详细信息
  • 您使用的是哪个版本的 CocoaPods?

标签: ios cocoapods git-fork


【解决方案1】:

您可以分叉一个存储库,然后将您的分叉存储库添加为一个 pod,假设您已将该存储库分叉为 https://github.com/tiago/ThePodProject.git,然后将 pod 设置为:

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

请参阅here 了解更多详情(在“来自库 repo 根目录中的 podspec”下)

【讨论】:

  • 我要更改的存储库是 WhirlyGlobe 存储库。碰巧 WhirlyGlobe 没有规范文件。因此,经过一些研究,我将我的 podfile 更改为以下内容:pod 'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'。但是,现在我的项目找不到库(虽然它包含在 pod 中)并且我无法导入任何东西...
  • 你运行过 pod update 了吗? (可能先删除 Podfile.lock)
  • 我做到了。并且还更新了 cocoapods,因为我遇到了一些问题,直到我达到那个 podspec 的东西。这弄乱了我所有的配置。现在即使在 pod 项目中也找不到依赖项:/.
  • 似乎可能与此 pod 相关,我尝试从您的 podspec 安装,但似乎需要很长时间才能下载。编辑:但那是因为 repo 很大,我会让它运行看看会发生什么
  • 我的安装失败:找不到可执行文件 hg。这个 pod 是否需要任何依赖项?
【解决方案2】:

您即将让它与您的分叉存储库一起使用。

我刚刚用下面的Podfile试了一下:

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

它下载了WhirlyGlobe,然后因为hg 丢失而失败。我只是使用Homebrew 安装它:brew install mercurial 然后运行pod install 能够安装所有依赖项。

项目可以编译,但我不确定它是否有效,继续尝试。

请注意,下载和编译所有依赖项需要很长时间(尤其是shapelib)。

【讨论】:

  • 我已将我的 podfile 编辑为与您的一样。我仍然遇到同样的问题!来自 boost 库和 Eigen 的头文件不是在 Pods/Headers 文件夹中创建的。因此,WhrilyGlobe(使用这些库的那个)找不到它们。这是一个奇怪的问题:/
【解决方案3】:

@pgb 和 wattson 为我提供了很好的信息,但最终问题出在多个方面。

我不知道为什么,但 cocoapods 0.22 似乎以不同的方式处理标题。我卸载了 cocoapods 并安装了 0.20.2 版本。

为了检查 cocoapods 的版本,我使用了 gem query,并使用 gem uninstall cocoapods 删除了 cocoapods,并使用 gem install cocoapods --version 0.20.2 安装了 cocoapods。

我这样使用我的 podfile:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

podspec 指向我的新 podspec。我这样做是因为我需要从原始 podfile 中删除 :tag(否则它总是指向同一个位置),这样我可以更好地控制文件。

在 podspec 中我更改了来源:

s.source = { :git => "https://github.com/tiagoalmeida/WhirlyGlobe.git"} 

指向我的叉子并删除标签。

感谢@pgb 和@wattson 尝试帮助我。都赞成,因为它们都很有用。

【讨论】:

    【解决方案4】:

    只是想在答案中加上我的几分钱。 我遇到同样的问题。正如上面有人建议的那样,我也对 pod lib 进行了子类化。 我使用的是ACEDrawingView,它具有只读的属性图像。 我对它进行了子类化并使这个属性读/写。 我个人觉得通过子类更优雅,更轻松地解决这类问题。 除非您想在主要项目方面进行大规模开发。

    【讨论】:

      【解决方案5】:

      仅使用 Git 保存自定义更改(无分叉)

      对于那些寻求简单解决方案的人,我已经通过使用 git stashes 成功解决了这个问题。

      如前所述,pod update 将覆盖您所做的任何更改。但是,如果您使用 git,我喜欢提交我的所有更改,除了我的 pod 更改。

      一旦我对分支的唯一更改是 Pod 更改,我会通过运行 git stash save "Custom Cocoapod changes, apply after every pod update" 来存储这些更改。您可以通过更改“”之间的文本来给它任何您想要的消息。

      此命令具有将您的工作目录重置为之前的 HEAD 的副作用,因此如果您想重新应用这些存储,您可以运行 git stash apply 以重新获取这些更改,然后您可以提交它们以保存它们.

      不要使用git stash pop,因为这会在应用后删除存储。

      现在,在未来某个未确定的时间,当您更新 pod 并再次应用存储时,您要做的是运行 git stash list。这将返回您所做的所有存储的列表,其中最近的索引为零。您可能会看到如下内容:

      stash@{0}: On featureFooBar: foo bar
      stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update
      ...
      

      如果自定义 cocoa pod 更改 stash 位于 stash@{0} 那么完美,您只需再次运行 git stash apply 即可在工作目录中获得这些更改。否则,一旦您找到您的 pod 更改的存储编号,您可以通过运行 git stash apply stash@{1}

      应用该存储

      当您在同一分支上有一个干净的工作目录但不是必需的时,应用存储是最简单的。 This page 很好地描述了 git stash 以及如何使用它。

      这不是最完整的证明解决方案,因为我可以预见到当您在同一个项目中有多个人时会出现一些问题,但这是一种解决此问题的简单方法,无需求助于更多涉及的解决方案。

      【讨论】:

        【解决方案6】:

        还有另一种方式,您可以通过 cocoapods 分叉存储库、修改更改和维护库,以便将来修复错误和增强功能.....

        我最近在这里发布了相同的教程https://medium.com/@mihirpmehta/how-to-modify-cocoapods-library-within-pods-647d2bf7e1cb

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-26
          • 1970-01-01
          • 1970-01-01
          • 2018-10-09
          • 1970-01-01
          • 2020-09-06
          • 2017-12-02
          相关资源
          最近更新 更多