macCatalyst下Swift无法识别OC条件编译类的问题咨询
解决方案
针对你在iOS转macCatalyst混编时遇到的类型找不到问题,有两种可行的解决方式:
方式一:通过条件编译控制头文件引入
- 修改Objective-C头文件:保留
TARGET_OS_MACCATALYST条件编译包裹类声明,确保iOS编译时不会识别到依赖macOS的NSToolbar:
// K_ToolBar_Catalyst_Objc.h #if TARGET_OS_MACCATALYST #import <Cocoa/Cocoa.h> @interface K_ToolBar_Catalyst_Objc : NSToolbar <NSToolbarDelegate> // 类的属性、方法声明 @end #endif
- 调整桥接文件:在项目的桥接文件(如
YourApp-Bridging-Header.h)中,同样用条件编译仅在macCatalyst环境下引入该头文件:
// YourApp-Bridging-Header.h #if TARGET_OS_MACCATALYST #import "K_ToolBar_Catalyst_Objc.h" #endif
- Swift文件中正常使用:保持原有的
targetEnvironment(macCatalyst)条件编译代码即可,此时Swift能正确识别到Objective-C类:
#if targetEnvironment(macCatalyst) var toolBar: K_ToolBar_Catalyst_Objc! #endif
方式二:通过Xcode目标成员控制文件编译
这种方式无需编写条件编译宏,直接通过Xcode的文件编译目标设置实现隔离:
- 在Xcode的项目导航栏中,选中
K_ToolBar_Catalyst_Objc.h和.m两个文件。 - 打开右侧的File Inspector(文件检查器),找到
Target Membership区域。 - 取消勾选iOS目标的复选框,只保留macCatalyst目标的勾选(即仅让这两个文件参与macCatalyst的编译)。
- 在桥接文件中直接引入头文件(无需条件编译):
// YourApp-Bridging-Header.h #import "K_ToolBar_Catalyst_Objc.h"
- Swift文件中依旧用
targetEnvironment(macCatalyst)包裹相关代码,此时macCatalyst编译时能找到类,iOS编译时因未包含该文件不会报错。
内容的提问来源于stack exchange,提问作者Jeremy THIRIEZ
相关产品推荐
相关产品推荐

