Objective C to Swift包含多个目标的头文件

Objective C to Swift header file with multiple targets

我通过import语句成功地从目标C调用了我的swift类(针对目标"myapp"):

1
#import"MyApp-Swift.h"

我现在创建了一个名为"myapplite"的新目标

当我编译新的目标时,我会得到错误,因为代码需要"myapp swift.h",但编译器正在创建"myapplite swift.h"。

因此,我需要为我编译的目标创建一个条件swift/objc头文件#import

这是怎么做到的,还是有更好的办法?


也可以将Build Settings中的Product Module Name设置为在模块之间相同(我将其设置为$(PROJECT_NAME)),以便生成的-Swift.h文件在所有模块之间具有相同的名称。这样就不需要添加/检查预处理器宏。


我发现解决这个问题的最佳方法是在Xcode共享项目设置中。可以搜索以下设置:

Objective-C生成的接口头名称*

如果将该值设置为通用头文件名,如"myproject swift.h",则该值将应用于每个目标,并且您可以在任何Objective-C文件中安全地使用导入声明。如果需要,这允许您继续为每个目标使用唯一的产品模块名称。

我在Xcode版本6.4(6e35b)中测试过这个。

*注意:这将显示在Swift编译器设置下,只有在项目中添加了Swift源文件时才可见。此外,如果目标没有任何关联的Swift源,那么对于该目标的构建设置,Swift编译器选项将不可见。

祝你好运!


如果您决定重新命名目标或项目,或者按预期使用SWIFT_MODULE_NAME,以前的答案会有一些问题。

最普遍的解决方案是在项目的而不是目标的构建设置下将SWIFT_OBJC_INTERFACE_HEADER_NAME(objective-c生成的接口头名称)更改为:

  • $(PROJECT_NAME)-Swift.h—每个项目一个;
  • $(SWIFT_MODULE_NAME)-Swift.h—每个模块一个(默认值)。

enter image description here


我将适当的import-swift.h语句放入为每个构建(目标/方案)定义/添加的前缀头文件(-prefix.pch)中。


我唯一能解决的办法就是…

1
2
3
4
5
#ifdef IS_LITE
#import"MyApp_Lite-Swift.h"
#else
#import"MyApp-Swift.h"
#endif

请注意,如果我的产品模块名称中有任何"非法"字符,则需要用下划线替换它们。

希望有帮助!


唯一的工作方式是:1-从第一个目标(具有工作桥接)构建设置选择目标C桥接头2-复制目标C桥接头3-打开其他目标生成设置4 - Paste5-将头文件更改为新的头文件(即目标B.H)(现在您可以选择两个目标)