Swift 4.1自定义框架创建失败求助:类与变量未显现在头文件
Swift 4.1自定义框架公共成员未暴露的排查方案
看起来你遇到的是Swift框架导出公共成员的常见问题,你的代码语法本身没问题,问题大概率出在框架的配置或者目标设置上,我给你梳理几个排查和解决的关键点:
1. 确认框架的基础模块配置
首先检查框架目标的Build Settings:
- 找到
Defines Module选项,确保它被设置为YES——这是Swift框架能够导出模块接口的核心开关,没有开启的话,外部根本无法识别你的框架模块。 - 同时确认
Product Module Name是一个清晰、无冲突的名称(比如不要和系统模块或主项目重名)。
2. 检查文件的Target Membership
你的TestStupidity类所在的.swift文件,一定要确保它的Target Membership只勾选了你的自定义框架目标,而不是主项目的目标。如果不小心把文件归到了主项目里,它就不会被打包进框架,外部自然看不到这个类。
3. 确认Swift模块的正确导入
如果你是在另一个Swift项目里使用这个框架:
- 先把框架添加到目标的
Frameworks, Libraries, and Embedded Content列表中,并且确保嵌入方式是Embed & Sign(针对iOS平台)。 - 在使用的代码里,必须先导入你的框架模块,比如:
import YourFrameworkName // 替换成你的框架Product Module Name
之后应该就能访问TestStupidity.shared和hello()方法了。
4. 若需Objective-C兼容的额外配置
如果你是想让Objective-C代码能访问这个Swift类,那还需要做两步:
- 给类添加
@objcMembers修饰符(或者给每个需要暴露的成员单独加@objc),修改后的代码如下:
@objcMembers public class TestStupidity: NSObject { public static var shared = TestStupidity() public func hello() { print("hello") } }
- 回到框架的Build Settings,找到
Install Objective-C Compatibility Header,设置为YES,这样系统生成的Objective-C兼容头文件里就会包含这个类的声明,你就能在Objective-C代码里通过导入<YourFrameworkName/YourFrameworkName-Swift.h>来访问它了。
按照这些步骤逐一排查,应该就能解决你的公共类和变量未出现在头文件/模块接口里的问题。
内容的提问来源于stack exchange,提问作者Amogh Shettigar
相关产品推荐
相关产品推荐

