和很多人一样,我希望让Xcode使用一个文件夹结构来镜像磁盘上的文件夹结构。但是,我无法将“文件夹引用”(青色文件夹)中的代码显示在“编译源”下的项目目标中。有没有办法做到这一点?
我甚至设法将青色文件夹添加到“编译源”构建阶段,但这不会导致添加该文件夹的内容。
如何为代码使用文件夹引用?
答案 0 :(得分:11)
简单(非常不幸)的答案是,Xcode下的文件夹参考文件仍然存在缺陷和错误,它们无法正常工作。在Xcode 8.2.1中测试2017年3月4日
下面是一个示例探索,因此您不必浪费时间来复制Xcode失败。
(顺便说一下,在我制作这个例子时,Xcode崩溃了两次)
根据这个问题,总的愿望是在Xcode中使用文件夹引用,以便Xcode获取文件夹中的所有文件并将它们包含在项目中,并且代理将根据任何Finder或Xcode的变化自动更新夹。通过这种方式,当这些文件夹发生变化时,不必单独更新所有利用相同的公共源代码文件集的50个项目。下面将探讨Xcode(在8.2.1中测试)中如何破坏它
示例:ViewController.m
包含NSError+Core.h
,因此我们需要文件夹中的所有内容" NSError + Core"要添加到项目中。
NSError+Core.h
位于这个位于中心的开发文件夹
将源文件夹从Finder拖到"支持"下的项目中。小组(没有我的袖子,简单的拖拽)
Xcode尽职尽责地将拖动添加到目标,请注意"创建文件夹引用"被选中,而不是"创建组引用"。另请注意,很明显Xcode正在提供并被告知将此文件夹和文件添加到目标。
虽然一切看起来都应该有效,但编译器不会获取头文件,重新编译会产生相同的结果......无法找到标题。抛弃DerivedData也无济于事。
所以做一次双重检查,我们检查"编译源"在项目下,果然,源文件也不存在。请记住,Xcode'添加了'它到目标......
那么如果我们将它从文件夹拖到"支持"小组......
它提供再次将它们添加到项目中?!请注意,由于父文件夹拖动而不是文件...,设置与第一次进入药物时的设置相同...
现在源文件显示在"编译源"名单。请注意项目中文件的奇怪双重列表。
(Xcode在拍摄此屏幕后不久就崩溃了)
当然,编译器现在可以找到头文件,并且导入时会出现错误,因为它应该在我们第一次使用它时...
它是否需要一点帮助才能找到"文件?如果是这样,"创建文件夹引用"完全是什么?
因此,我们尝试整理并将文件拖回父级"支持文件"分组到他们合法的文件夹。没有任何确认,指示,通知,文件只是从组中消失,NSError + Core文件夹中没有任何反应。
哦顺便说一句,它确实从项目中删除了它们...... Compile Sources不再具有NSError + Core.m引用。
总而言之,"文件夹参考"到目前为止实施似乎没有任何有用的目的......它似乎是USS Xcode上一个6岁以上的dunsel。
答案 1 :(得分:3)
Kevin链接的源文件夹,文件夹引用等对于在不同的IDE中共享公共代码库非常有用,就像我在Windows,Mac,iOS,Android,Linux上编译的游戏一样。我有3个不同的IDE都构建相同的共享代码库,所以当我自动选择一个新文件并在我运行svn update之后将其添加到项目中时,它非常有用,我从一个IDE中提交(比如说) XCode)和我在Windows项目中的Eclipse获取了更改。我有一个不同的项目,因为每个IDE都喜欢某个配置中的项目文件,所以我更容易拥有多个SVN目录(base-project,project-ios,project-android),这些目录在基础项目中共享代码比将一个带有不同IDE位的巨型项目目录全部推到子目录中(这是我第一次尝试的)。
此外 - 它曾经在XCode 3中运行良好。它们似乎不喜欢某项功能,因此我不再像以前那样在XCode 4中工作。
答案 2 :(得分:3)
我只是尝试这样做以跨多个Xcode项目共享代码,我们的团队得出的结论是,最好创建一个包含所有共享类的Xcode项目,将它们编译成静态/动态库,然后将其作为子项目添加到需要共享代码的子项目中。然后,您可以设置目标依赖项并链接您的共享库。每次向共享库项目添加新类时,这将使您“自动更新”。
这种方法也适用于子模块甚至是cocoapods / carthage。
答案 3 :(得分:-11)
你做不到。你为什么要尝试?文件夹引用的作业是体现文件夹,而不包含文件夹中所有单个文件的条目。它的主要用途是将整个资源文件夹逐字复制到项目中。如果你想编译源代码,那么必须在目标的Compile Sources构建阶段引用这些源代码,这需要为每个文件提供单独的条目。
根据文件夹中的内容,使用Makefile或其他外部构建过程将文件夹中的内容构建到静态库中可能更有意义。这样,您可以从Shell脚本阶段调用该构建过程,然后只在生成的静态库中进行链接。或者,如果您使用此文件夹作为共享代码的方式(例如svn:externals或git子模块),您可以为该文件夹提供自己的Xcode项目,然后将该项目嵌入到您的任何其他项目中分享这个文件夹。