图书馆? 静态的? dynamic? 还是框架? 项目在另一个项目

我有一个现有的iOS应用程序,并希望添加一大堆的代码,我一直在开发作为另一个项目,只是为了便于testing。 新的块基本上处理保存到各种共享服务等图像。因为共享代码需要大量的testing和未来的更新,我想知道什么是最好的方式将该代码块合并到我的现有应用程序。

我不知道它应该是一个静态库,dynamic库还是一个框架,老实说,我不确定它们有什么区别,或者我应该怎样去做,并在Xcode中设置。

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

如果你不能说,我不是一个混帐。 我只是一个简单的人开发者。

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

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

静态库 – 编译时链接的代码单元,不会更改。

但是,iOS静态库不允许包含图像/资产(仅限代码)。 尽pipe你可以通过使用媒体包来解决这个挑战。

这里可以find一个更好,更正式的定义。

dynamic库 – 运行时链接的代码和/或资产单元, 可能会更改。

不过,只有苹果可以为iOS创builddynamic库。 你不能创build这些,因为这会让你的应用程序被拒绝。 (请参阅此 SO其他SOpost以进行确认和推理)。

软件框架 – 一组完成任务的编译代码…因此,您实际上可以拥有一个静态框架或一个dynamic框架 ,它们通常只是上述的编译版本。

有关更多详细信息,请参阅软件框架上的Wiki 。

因此,在iOS上,唯一的select就是使用静态库或静态框架(主要区别在于静态框架最常被编译为.a文件,而静态库可能仅仅作为子项目被包含在内)可以看到所有的代码 – 首先编译的代码以及作为项目依赖项的.a文件)。

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

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

这是一个非常简单的指南,并没有处理“假静态库”的缺点…检查了解更多信息…

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

祝你好运。

编辑

关于项目中的一个子项目 ,据我所知,为了正确的工作/编译,你必须build立一个编译链,首先编译子项目,这将创build一个静态框架。该项目的依赖。

这里有另一个有用的教程,讲述这个:

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

编辑2

从iOS 8开始,Apple现在允许开发人员创builddynamic框架! (注意:您的应用程序必须具有iOS 8的最低目标才能包含dynamic框架…不允许使用后移植。)

这已被添加为一个新的项目模板。 在Xcode 6.1中,可以在以下位置find它:

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

您也可以为CocoaPods创build.podspec文件( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo ),并像使用其他任何pod一样使用它唯一的区别是它是你的私人pod,并且是外部世界不可见的(我不确定如果你的pod应该创buildCoreData模型会发生什么,但是我不明白)。