我有一个现有的iOS应用程序,想要添加一个大块的代码,我一直在开发的另一个项目,只是为了方便测试.新的区块主要处理将图像保存到各种共享服务等.因为共享代码需要大量的测试和将来的更新,所以我想知道将该代码块合并到我现有的应用程序中的最佳方式是什么.
我不知道它应该是静态库、动态库还是框架,老实说,我不确定它们之间的区别是什么,或者我应该如何在Xcode中进行设置.
我所知道的是,我需要/想要为共享代码保留一个单独的测试和更新应用程序,并让主要应用程序使用它.
我有一个现有的iOS应用程序,想要添加一个大块的代码,我一直在开发的另一个项目,只是为了方便测试.新的区块主要处理将图像保存到各种共享服务等.因为共享代码需要大量的测试和将来的更新,所以我想知道将该代码块合并到我现有的应用程序中的最佳方式是什么.
我不知道它应该是静态库、动态库还是框架,老实说,我不确定它们之间的区别是什么,或者我应该如何在Xcode中进行设置.
我所知道的是,我需要/想要为共享代码保留一个单独的测试和更新应用程序,并让主要应用程序使用它.
首先,一些一般定义(针对iOS):
Static library-编译时链接的代码单位,它不会更改.
但是,iOS静电库允许包含图像/资源(仅限代码).不过,你可以通过使用media bundle来绕过这个挑战.
一个更好、更正式的定义可以在维基百科 here上找到.
Dynamic library-may更改的在运行时链接的代码和/或assets资源 的单元.
然而,只有苹果公司被允许为iOS创建动态库.你不允许创建这些,因为这会导致你的应用被拒绝.(参见其他this篇SO帖子,以确认和解释此类问题).
Software Framework-完成任务的编译代码集...因此,实际上可以有static framework或dynamic framework,它们通常只是上面的编译版本.
有关更多详细信息,请参阅Wiki on Software Framework.
因此,在iOS上,您唯一的 Select 基本上就是使用静电库或静电框架(主要区别在于静电框架最常以编译后的.a
个文件的形式分发,而静电库可能只是作为一个子项目包含在内--您可以看到所有代码--它是首先编译的,其结果是.a
个文件被项目用作依赖项).
现在我们已经明确了这些条款,为iOS建立一个静电库和支持媒体包并不是太难,而且有很多教程可以教你如何做到这一点.我个人推荐这个:
https://github.com/jverkoey/iOS-Framework个
这是一个相当直截了当的指南,没有处理"假静电图书馆"的缺点……请查看它以了解更多信息.
一旦创建了静态库,就可以轻松地将其包含在Git中,以便在不同的项目中使用.
祝好运.
EDIT个
关于项目中的subproject,据我所知,要使其正常工作/编译,基本上必须设置一个编译链,首先在其中编译子项目,这将创建一个静电框架.a
文件,该文件被项目用作依赖项.
下面是另一个讨论这一点的有用教程:
http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/
EDIT 2
从iOS8开始,苹果现在允许开发者创建动态框架!(注意:您的应用程序必须至少有iOS8目标才能包含动态框架……不允许反向移植.)
此项目已添加为新的项目模板.在Xcode 6.1中,可以在以下位置找到:
New Project -> iOS -> Framework & Library -> Cocoa Touch Framework