Xcode - 根据目标导入不同名称的相同头文件

5
我有一个项目,其中有多个目标,每个目标都构建了一个相似的应用程序版本,但具有不同的图像资产和属性列表。对于属性列表/图像来说这是可以接受的,但我使用ShareKit和Appirater框架,它们具有带有#defines的头文件用于配置。对于每个版本,我认为需要导入不同版本的此头文件,因为每个目标构建的每个应用程序的配置都不同。
所以目标A有SHConfig.h 而目标B有一个不同的SHConfig.h
我可以编辑这些框架的源代码,根据目标导入不同的头文件,但当我升级框架时,这样做会很混乱。
是否有更好的方法根据目标导入具有相同名称的不同头文件?
3个回答

5
假设它们在不同的目录中,可以在每个目标中设置头文件搜索路径,以确保正确的目录排在首位。
你可以将其设置为类似于$(SRCROOT)/foo:$(HEADER_SEARCH_PATHS)的内容,尽管我不确定是否必要。

1
为了让两个文件拥有相同的名称,它们必须位于不同的目录中。 - ughoavgfhw
1
谢谢Peter,很好用。另一个建议是创建自己的“主”SHKConfig.h文件,并在其中定义#ifdefs以传递给其他文件。这种方法开销最小,对构建工具的依赖性较少。两种解决方案似乎都可以工作。 - NeilInglis
我确实这样做了,但它不起作用。我有一个目标,在另一个目标的文件夹中查找头文件。你知道我做错了什么吗? - refaelos
1
@Rafa:确保你正在使用正确的构建设置(与搜索路径有关的设置有几个),并且你正在正确地指定所需目录的路径(如果它在构建产品中,特别棘手;例如,如果另一个目标构建了一个框架)。请注意,命名搜索路径中的特定文件不起作用:所有路径都必须引用目录。 - Peter Hosey

1
我发现有用的方法是将Common目录名称放在头文件搜索路径中,然后使用不同的#import。我的目录结构是Common/Views/v1和Common/Views/v2。我想要v1用于一个目标,v2用于另一个目标。
在我的情况下,我在Header Search Paths中使用的搜索路径是:
$(SRCROOT)/../Common/

然后,我使用了:


#import <Views/v2/ActivityIndicator.h>

在需要第二个版本的目标中(这将找到$(SRCROOT)/../Common/Views/v2/ActivityIndicator.h)。
奇怪的是,另一个目标(我创建的第一个)没有指定完整路径也可以正常工作。即,
#import "ActivityIndicator.h"

工作以找到 $(SRCROOT)/../Common/Views/v1/ActivityIndicator.h


0

以下步骤解决了我的问题

选择特定目标 在“Build Phases”下,添加“New Headers Phase”-->展开“Headers”-->点击添加(加号)-->浏览到要添加到特定目标的文件。(它将在“project”部分下添加文件)。

为其他目标重复此过程。 在Xcode 10.2上测试通过


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接