2013-03-11 14 views
101

我有一个现有的iOS应用程序,并希望添加一大块代码,我一直在开发另一个项目,以方便测试。新的块基本上处理图像保存到各种共享服务等。因为共享代码需要大量的测试和未来的更新,我想知道什么是最好的方式将该代码块合并到我的现有应用程序。图书馆?静态的?动态?还是框架?另一个项目内的项目

我不知道它应该是一个静态库,动态库还是一个框架,老实说,我不确定它们有什么不同,或者我应该如何去设置它并让它在Xcode中。

我所知道的是,我需要/希望为共享代码保留一个单独的测试和更新应用程序,并让主应用程序使用它。

如果你不能告诉我,我不是git wiz。我只是一个简单的人开发者。

任何帮助或方向将不胜感激。谢谢!

+0

您可以创建类似'框架内框架'的伞框架http://stackoverflow.com/a/27638841/1582217 – 2014-12-24 16:40:05

+0

[如何在iOS sdk中创建Umbrella框架?](http:/ /stackoverflow.com/questions/27484997/how-to-create-an-umbrella-framework-in-ios-sdk) – 2014-12-25 07:59:31

回答

150

首先,一些一般定义(特定于iOS):

静态库 - 在编译时链接的代码单元,其不改变。

但是,iOS静态库是而不是允许包含图像/资产(仅限代码)。不过,您可以使用媒体套件来解决这个难题。

在Wikipedia here上可以找到更好更正式的定义。

动态库 - 在运行时链接的代码和/或资产单位可能更改。

但是,只有Apple被允许为iOS创建动态库。您不允许创建这些内容,因为这会让您的应用遭到拒绝。 (请参阅this其他SO帖子以进行确认和推理)。

软件框架 - 编译组代码完成某项任务......因此,你其实可以有一个静态框架动态的框架,这是典型的只以上的编译版本。

查看Wiki on Software Framework了解更多详情。

因此,在iOS上,您唯一的选择基本上是使用静态库或静态框架(主要区别在于静态框架最常分布为已编译的.a文件,而静态库可以简单地作为子项目 - 您可以看到所有代码 - 首先编译的代码及其生成的.a文件被项目用作依赖项)。

现在我们对这些术语很清楚(呃),为iOS设置一个静态库和支持媒体包并不是太困难,并且有很多关于如何做这些的教程。我个人会推荐这一个:

https://github.com/jverkoey/iOS-Framework

这是一个非常直接的指导,没有涉及“假静态库”的缺点......看看更多信息.. 。

一旦你创建了你的静态库,它就像在Git中包含一个子模块一样简单,以便在不同的项目中使用。

祝你好运。

编辑

关于子项目一个项目中,据我所知,要得到这个工作/编译正确,实际上需要建立在子项目首先编译一个编译链,它创建一个静态框架.a文件,该文件被项目用作依赖项。

下面是其中谈到这另一个有用的教程:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

由于iOS 8的,苹果现在允许开发人员创建动态的框架! (注意:您的应用必须具有iOS 8的最低目标才能包含动态框架...不允许使用背面移植。)

这已添加为新的项目模板。在Xcode 6.1,这可以发现在:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework 
+0

到目前为止,似乎该子项目是我想要的,该文章是完美的。我注意到了一个奇怪的副作用:我在我的主项目中拖动的子项目也有我的测试代码(viewcontroller和nib,appdelegate等),并且确保我只想在主项目被检查用于静态库中。但由于某种原因,当我去附加我的主项目的nib文件时,它还显示了我的子项目中的出口和动作。这肯定会导致一些混乱。任何提示摆脱这些?谢谢! – pizzafilms 2013-03-11 16:26:09

+0

动态项目是否可以拖放到静态项目中,从而使其成为静态项目?我很困惑,有些澄清会非常棒!在此先感谢:-) – 2013-08-26 01:54:37

+1

@ JRG-Developer如果遵循以下规则,则允许使用动态框架:https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html #// apple_ref/doc/uid/TP40014214-CH21-SW3 – klefevre 2015-04-17 13:41:03