You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift框架无法在Objective-C项目中访问已标记类的解决方法

Swift框架在Objective-C中无法访问标记@objc的类问题排查与解决

问题描述

  • 已将Swift框架集成到Objective-C应用,框架构建正常,导入语句无报错
  • 框架内的Swift类已添加@objc(TVNFoo)、@objcMembers、public修饰符并继承NSObject
  • Objective-C代码中调用[TVNFoo shared]时,提示「Use of undeclared identifier 'TVNFoo'」
  • 框架配置中Defines Module和Build Libraries for Distribution均已设为Yes

框架代码(Swift)

@objc(TVNFoo) @objcMembers public class Foo: NSObject {
    public static let shared = Foo()
    
    public func foo() {
        print("foo")
    }
}

应用代码(Objective-C)

@import TestFramework;

[TVNFoo shared]; // Use of undeclared identifier 'TVNFoo'

解决步骤

  • 检查框架伞头文件
    打开框架的主头文件(如TestFramework.h),确认是否包含自动生成的Swift桥接头文件导入:

    #import <TestFramework/TestFramework-Swift.h>
    

    若缺失则手动添加,该文件是Swift类暴露给Objective-C的关键入口。

  • 替换导入语句
    将@import TestFramework;替换为伞头文件的导入方式:

    #import <TestFramework/TestFramework.h>
    

    部分场景下显式导入伞头文件能解决识别问题。

  • 清理重建项目

    1. 按Cmd+Shift+K清理项目编译缓存
    2. 关闭Xcode,删除DerivedData文件夹(路径:~/Library/Developer/Xcode/DerivedData)
    3. 重新打开项目,先单独构建Swift框架,再构建主应用
  • 验证类名映射与配置

    • 确认@objc(TVNFoo)的类名未与项目中其他类重名,可临时修改映射名称测试(如@objc(TVNCustomFoo))
    • 检查框架Build Settings中Objective-C Generated Interface Header Name是否为默认的TestFramework-Swift.h,不要随意修改该值
    • 确保框架与主应用的Swift语言版本一致

内容的提问来源于stack exchange,提问作者Tj3n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:37:45