7

我想在我的大多数项目中包含一些代码。AFNetworking、CoreData 的类别和单元测试等。

将所有这些都包含在一个静态库中,然后在每个项目中使用它似乎是合乎逻辑的。不过我注意到,许多第三方库(如 AFNetworking,它的前身 ASIHTTP)通过复制所有源文件然后手动将必要的库链接到项目目标来包含在项目中。

在我看来,这似乎是最简单的方法。花了相当多的时间来弄清楚如何将现有的静态库包含到项目中。即使在我知道如何做之后,为每个新项目都这样做似乎仍然很痛苦。此外,您指定的标头搜索路径指向包含静态库文件的本地目录。将静态库的文件复制到项目中不是更容易吗?有没有办法?这与大多数库似乎已经直接包含类文件的想法相同,但它会更有条理,因为所有内容都将集中到一个库项目中,而不是到处都有类文件并且必须包含它们中的每一个。

静态库感觉它们应该是正确的方法。创建一个可用于所有项目的库,其中包含每个项目都需要的类。说得通。我只是很矛盾,因为似乎正确的方法是将所有内容都从“正式”库中删除,而只是复制所有类文件。

我想我只是在寻找有经验的开发人员认为最好的选择。

4

4 回答 4

7

我是第一个承认在 Xcode 中引用静态库的过程并不完全直观的人之一。但是,毫无疑问,使用静态库是最好的选择。

主要原因是可维护性:当您将库的源代码复制到许多地方时,您必须记住在升级到下一个版本的库时将它们全部更新为最新代码。这可能是一个相当容易出错的过程,尤其是当底层库源发生重大变化时(例如,添加新文件、重命名旧文件等)

于 2012-09-07T14:22:58.003 回答
3

有一个半途而废的解决方案 - 创建一个 XCode 项目,从源代码构建您的静态库并将其放入共享存储库(即 ..git 子模块等),该存储库包含在每个项目的主存储库中。

您的每个项目都将包含此子模块和项目。然后,他们每次拉取该子模块时都会获得最新的源代码。如果您将其设置为构建依赖项,它将在您第一次构建时构建一个静态库,然后 XCode 足够聪明,只需在每个后续构建中包含它,因此您可以获得快速构建时间的好处。

您还可以获得将源代码放在那里进行单步调试/调试的优势。

如果它在一个单独的 XCode 项目中,并且一个新版本的库添加或删除了一个源文件,您只需要更改该共享项目 - 您的所有单个项目都不会更改。

于 2012-09-07T15:06:58.267 回答
1

使用CocoaPods怎么样?该工具以声明的方式完全满足您的要求:您有一个文件(Podfile),您在其中声明您的依赖项,该工具会下载所有依赖项并构建一个添加到您的项目中的静态库。

于 2013-01-15T09:49:08.880 回答
0

我同意静态库感觉它们可能是正确的方法,原因有很多,但也可能引入一些问题。

积极的一面是创建一种将库添加到项目的简单方法。虽然不完全直观,但在一个项目中添加一个静态库后,在做几次之后就相当简单了。添加文件,添加搜索路径,完成。这在某些源代码控制情况下也很有用。此外,更新库可能更容易。

我认为这里真正的问题是开源社区。例如,通过将 AFNetworking 作为静态库包含在内,您将失去对实现文件的所有访问权限。这是包含源而不是库的一个很棒的功能。它使您可以将代码更改为您认为合适的方式,并希望回馈。

于 2012-09-07T14:29:30.813 回答