在xcode/objective-c中共享项目之间的类

All*_*lyn 30 macos xcode objective-c sharing

我有一个客户端<=>服务器应用程序我正在为Mac OS X构建,使用Objective-c/Cocoa和xCode.我为这两个应用程序创建了一个不同的项目,我想知道在它们之间共享类的最佳方法.我已经制作了几个对两者都有用的课程.到目前为止,我一直在复制它们,但我觉得这不是最好的解决方案.

我如何有效地分享课程?我应该将其重做为1个项目并且只有两个构建目标吗?我该怎么做呢?

还有其他信息吗?

谢谢.

Joh*_*cko 14

如果您有两个或更多产品要共享大量公共代码,例如一套产品,您可能需要考虑只创建一个xcode项目,然后为每个要构建的产品添加不同的目标来自共享和特定于产品的代码.使用大量共享代码,客户端/服务器对产品可能是这种方式的绝佳选择.

简而言之,基本的协议是,对于您要构建的xcode项目中的每个目标,您可以指定应该使用哪些文件来构建它:源文件,art,xib等.这样,例如,您可以使用文件A,B,C,D,E,F和要使用文件A,F,X,Y,Z构建的服务器产品来设置要构建的客户端产品.

我真的很喜欢将每个相关产品都放在一个xcode项目的"屋顶"下,因为你不必跳过xcode项目,它真的简化了共享文件的SCM管理.

以下是Apple的文档链接:https://developer.apple.com/library/mac/#featuredarticles/XcodeConcepts/Concept-Targets.html

更新:在xcode中配置特定于目标的头文件时会涉及到一些额外的麻烦(它始终是......对吗?!); 例如,对此目标使用"myHeaderA.h",对该目标使用"myHeaderB.h".这是一篇很棒的文章,分享了如何做到这一点:控制Xcode将包含哪个项目头文件.警告:以这种方式设置后,xcode不再知道搜索任何目标头文件的任何路径,因此您必须手动设置它们.要执行此操作,请右键单击目标上的"获取信息",选择"构建"类别,然后通过"标题搜索路径"设置添加路径.将按您输入的顺序搜索路径.


Chu*_*uck 12

一个非常好的方法是将共享代码放入SCM系统并将其包含在您想要的每个项目中.这样每个项目都可以共享代码,您可以在任何地方编辑它,只需将更改检查回源代码控制当你感觉良好时 - 然后所有其他项目都会从你的工作中受益.

这比IMO的其他方式有很大的优势:

与框架:将代码打包到框架中非常烦人,而捆绑私有框架需要花费不合理的长时间来加载 - 特别是只需要将几个类放入您的应用程序中.Omni Group的Wil Shipley(当时)曾发现公司所有应用程序中包含的框架在每个应用程序的开始时间增加了几秒钟.在框架中打包私有类也可以鼓励更多的耦合,而不是严格必要的 - 只需要创建一个所有共享类所在的One True Framework真的很诱人,所以你开始假设这个代码将永远存在.它变得不可分割.基本上,框架是锤子,这个问题是一个问题.

与仅包含文件:希望您无论如何都会将您的应用程序放入SCM中,并且只是简单地将文件包括在内会产生问题,因为它们将从SCM中丢失.将文件复制到每个项目中会引入相反的问题 - 每个项目都将包含自己的文件版本,您必须手动传播任何有用的更改.

  • 嗨Chuck,我正在考虑这种方法,但我不确定"将它包含在你想要的每个项目中"实际需要什么.您是在谈论在XCode中做某事还是像SVN外部属性?你到底什么意思?谢谢. (2认同)