我已经通过import语句从Objective C(针对目标“ MyApp”)成功调用了我的Swift类:
#import "MyApp-Swift.h"
我现在创建了一个名为“ MyAppLite”的新目标
编译新目标时,出现错误,因为代码需要“ MyApp-Swift.h”,但是编译器正在创建“ MyAppLite-Swift.h”
因此,我需要为#import
要编译的目标创建条件Swift / ObjC标头。
怎么做,还是有更好的办法?
我已经通过import语句从Objective C(针对目标“ MyApp”)成功调用了我的Swift类:
#import "MyApp-Swift.h"
我现在创建了一个名为“ MyAppLite”的新目标
编译新目标时,出现错误,因为代码需要“ MyApp-Swift.h”,但是编译器正在创建“ MyAppLite-Swift.h”
因此,我需要为#import
要编译的目标创建条件Swift / ObjC标头。
怎么做,还是有更好的办法?
Answers:
也可以Product Module Name
在Build Settings
各个模块中将设置设置为相同(我将其设置为$(PROJECT_NAME)
),这样<project>-Swift.h
生成的文件在所有模块中都具有相同的名称。这样就无需添加/检查预处理程序宏。
Product Module Name
提交到App Store的时候,会影响以后的东西,可能;)......改变Objective-C Generated Interface Header Name
。在对方的回答说明已经没有意义
SWIFT_MODULE_NAME
可用之前做出的。
我发现解决此问题的最佳方法是在Xcode共享项目设置中。您可以搜索以下设置:
Objective-C生成的接口头名称*
如果将该值设置为通用标头名称,例如“ MyProject-Swift.h”,它将被应用于每个目标,并且可以安全地在任何Objective-C文件中使用导入声明。如果需要,这使您可以继续为每个目标使用唯一的产品模块名称。
我已经在Xcode版本6.4(6E35b)中对此进行了测试。
*注意:这将显示在您的Swift编译器设置下,仅当您将Swift源文件添加到项目时,该设置才可见。此外,如果目标没有任何关联的Swift源,则该目标的构建设置将看不到Swift编译器选项。
祝好运!
$(SWIFT_MODULE_NAME)-Swift.h
...所以虽然这个答案是真棒,我爱知道如何调整SWIFT_MODULE_NAME
的模块。
MidiDesignerAllTargets-Swift.h
感谢您的出色回答,这是一个很好的发现。
好吧,我唯一可以解决的方法是...
#ifdef IS_LITE
#import "MyApp_Lite-Swift.h"
#else
#import "MyApp-Swift.h"
#endif
请注意,如果我的产品模块名称中包含“非法”字符,则需要将它们替换为下划线。
希望有帮助!
我在每个构建(目标/方案)定义/添加的前缀头文件(<project> -Prefix.pch)中放入了适当的#import <project> -Swift.h语句。
唯一的工作方式如下:
1-从第一个目标(具有有效的桥接)进行构建设置选择目标C桥接标题
2-复制目标C桥接标题
3-打开另一个目标构建设置
4-粘贴它5-更改头文件到新的头文件(即目标Bh)
(现在您有两个目标的此选项)
Objective-C Bridging Header