iphone:保持我的第三方图书馆最新的良好做法?

时间:2010-07-16 04:36:13

标签: iphone objective-c xcode

我想询问您的做法,以便让您的第三方图书馆易于更新。

在我的iPhone项目中,我使用了很多第三方库(如TouchXML,JSON,RegexKit,YAJL,MGTwitterEngine ......)。他们中的大多数存储在GitHub中,他们的版本,特别是MGTwitterEngine,变化非常快(因为添加新功能,修复bug,更改服务器(如Twitter)响应格式......)。

有时,我忘记更新(也不想更改稳定版本),然后我的项目因为过时的库而出现错误。

当我因为旧库而得到一个bug。我经常去Github,下载新版本,然后需要更改很多代码。因为下载新版本意味着我从一个非常老的版本快进到最新版本。我认为如果我更频繁地更新库,那就不那么痛苦了。

您完成此任务的方法是什么?

2 个答案:

答案 0 :(得分:5)

现在是2012年,自从提出这个问题以来,已经出现了两个项目,旨在使管理iOS代码中的项目依赖关系变得更加容易:CocoaPodsVendorKit。两者都受到Ruby依赖管理器Bundler的启发。 CocoaPods可能是最成熟和最活跃的项目,但两者都在增加牵引力。

Git子模块在组织项目和依赖项时帮助很多,但是让搜索路径和链接器标记正确仍然是一件麻烦事,更不用说如果依赖关系破坏了什么是错误的。处理A和B都依赖于C的情况也很难处理,其中A是您自己的项目,B和C是依赖项。所以,我现在的建议是使用其中一个项目并通过编写各种库的规范来支持它们。

还有一个鲜为人知的Kit,在Haskell中实现。值得一试。

答案 1 :(得分:4)

你有没有看过git submodules

我将它们用于此任务。我们有一个帮助程序类的存储库。但是,每当我们添加&改进,我们希望将这些改进级联到我们的所有项目中 - 因此,我们将帮助程序存储库设置为每个项目存储库中的子模块。

从存储库的根目录中尝试以下命令:

git submodule add ssh://url/to/external/library.git local/path

这应该执行以下步骤(从上面的URL逐字逐句):

  
      
  • 在当前目录下克隆子模块,默认情况下检出主分支。
  •   
  • 将子模块的克隆路径添加到.gitmodules文件并添加   这个文件到索引,准备提交。
  •   
  • 将子模块的当前提交ID添加到索引中,准备提交。
  •   

然后您可以使用

git submodule update

命令让事情保持最新。

另外,作为旁注,如果您正在做我自己的事情(例如直接更改子模块存储库),您需要转到子模块的根存储库目录并在提交超级项目之前首先提交这些更改。这是因为git跟踪子模块的版本(智能),因此如果首先提交超级项目,则将存储对尚未在子模块存储库上提交的更改的引用。任何试图克隆您的超级项目的人都会收到错误。