Swift 4中如何在Cocoa Touch Framework手动导入XMPPFramework?
手动在私有Cocoa Touch Framework中导入XMPPFramework(Swift 4)
嘿,我刚好处理过类似的场景,给你一步步梳理怎么搞定这个导入问题:
1. 创建module.modulemap文件
首先,在你的私有Framework项目里,找到存放XMPPFramework文件的目录(比如你手动添加的XMPP源码文件夹),在这个目录下新建一个module.modulemap文件。如果想更规整,可以专门建一个Modules子目录来放它。
把下面的内容写入文件(根据你的实际路径调整):
module XMPPFramework { # 如果你用单个主头文件,就用header;如果有多个头文件,推荐用umbrella header umbrella header "XMPPFramework.h" export * module * { export * } }
关于伞头文件(可选但推荐)
如果XMPPFramework有多个分散的头文件,建议创建一个XMPPFramework.h伞头文件,把所有需要用到的XMPP头文件都导入进去:
#import "XMPP.h" #import "XMPPStream.h" #import "XMPPRoster.h" #import "XMPPReconnect.h" // 按需添加其他你需要的头文件
把这个伞头文件和XMPP的源码放在同一目录下。
2. 配置Framework的Build Settings
打开你的私有Framework项目的Build Settings,找到以下选项进行配置:
- Swift Compiler - Search Paths > Import Paths:添加
module.modulemap所在目录的绝对路径或者相对路径,比如如果你的modulemap在YourFramework/Modules下,就填$(SRCROOT)/YourFramework/Modules(替换成你的框架名称)。 - Allow Non-modular Includes in Framework Modules:设置为
YES,避免导入非模块化头文件时的编译错误。
3. 在Swift代码中导入使用
现在回到你的Swift代码里,直接导入模块就可以用了:
import XMPPFramework // 比如初始化XMPPStream let xmppStream = XMPPStream()
额外注意事项
- 确保所有XMPPFramework的依赖文件(比如libxml2、GCDAsyncSocket等)已经正确添加到你的私有Framework中,并且编译路径配置正确。
- 如果遇到头文件找不到的错误,检查
module.modulemap里的路径是否和实际文件位置匹配,或者调整Import Paths的路径。
内容的提问来源于stack exchange,提问作者Pratik Mistry
相关产品推荐
相关产品推荐

