gpt4 book ai didi

ios - Objective-C框架的条件编译

转载 作者:行者123 更新时间:2023-11-29 05:27:42 24 4
gpt4 key购买 nike

我正在开发一个 Objective-C 框架,我需要能够构建该框架的 2 个不同版本:

  • 基本框架,
  • 基本框架+一些额外功能(其中一些是用 Swift 编写的)。

在我的框架的 header 中,我公开了我的公共(public) header ,如下所示:

#import <MyFramework/FrameworkPublicHeader1.h>
#import <MyFramework/FrameworkPublicHeader2.h>

#import <MyFramework/FrameworkExtraFunctionalityPublicHeader1.h>
#import <MyFramework/FrameworkExtraFunctionalityPublicHeader2.h>

到目前为止,我为我的框架创建了第二个具有额外功能的目标。

所以我有我的“基本框架”目标,其中包含目标的“构建阶段”选项卡中需要引用的所有类。我有“具有额外功能的框架”目标,并在目标的“构建阶段”选项卡中引用了更多类。

当我想要构建“基本框架”时,我选择“基本框架”目标,然后编辑框架的 header 以仅导入需要的内容:

#import <MyFramework/FrameworkPublicHeader1.h>
#import <MyFramework/FrameworkPublicHeader2.h>

//#import <MyFramework/FrameworkExtraFunctionalityPublicHeader1.h>
//#import <MyFramework/FrameworkExtraFunctionalityPublicHeader2.h>

当我想要构建“具有额外功能的框架”时,我选择“具有额外功能的框架”目标,然后编辑框架 header 以导入我需要的 header :

#import <MyFramework/FrameworkPublicHeader1.h>
#import <MyFramework/FrameworkPublicHeader2.h>

#import <MyFramework/FrameworkExtraFunctionalityPublicHeader1.h>
#import <MyFramework/FrameworkExtraFunctionalityPublicHeader2.h>

它有效,我可以构建两个版本的框架并在我的 iOS 项目中使用它们。

但我希望它比每次切换目标时都必须编辑框架 header 更简单。

我尝试在目标的build设置、Apple Clang - 预处理和自定义编译器标志中定义一个预处理器宏“EXTRAFUNCTIONALITIES=1”,这样我就可以拥有如下所示的框架 header :

#import <MyFramework/FrameworkPublicHeader1.h>
#import <MyFramework/FrameworkPublicHeader2.h>

#if EXTRAFUNCTIONALITIES
#import <MyFramework/FrameworkExtraFunctionalityPublicHeader1.h>
#import <MyFramework/FrameworkExtraFunctionalityPublicHeader2.h>
#endif

但是,即使它可以编译,当我这样做时,该框架也不能再在我的 iOS 项目上使用(当我尝试编译使用我的框架的应用程序时,出现“无法解析的标识符”错误)。

我做错了什么?是否有替代解决方案可以让我的框架 header 根据所选目标公开不同的公共(public) header ?

最佳答案

按照 Cy-4AH 的建议,我通过为每个目标使用不同的伞形头文件解决了该问题。

我之前尝试过,但没有成功。但现在确实如此了!谢谢!

伞 header 的名称需要与产品名称匹配(如 this answer from another question 中所示),并且导入语句需要使用该产品名称进行更新,如下所示:

产品名称:MyFrameworkWithExtraFunctionalities

伞头:MyFrameworkWithExtraFunctionalities.h

#import <MyFrameworkWithExtraFunctionalities/FrameworkPublicHeader1.h>
#import <MyFrameworkWithExtraFunctionalities/FrameworkPublicHeader2.h>

#import <MyFrameworkWithExtraFunctionalities/FrameworkExtraFunctionalityPublicHeader1.h>
#import <MyFrameworkWithExtraFunctionalities/FrameworkExtraFunctionalityPublicHeader2.h>

当我之前尝试创建一个新的伞形 header 时,我没有给它提供与产品名称相同的名称,并且该框架仍然可以很好地编译,但它无法在我的 iOS 项目中使用。

关于ios - Objective-C框架的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com