非Swift包的混合语言框架:DocC仅生成@objc public Swift类型文档求助
解决方案建议
1. 调整框架构建配置
确保框架的Build Settings中开启纯Swift类型的文档生成支持:
- 找到
Documentation Compiler Options下的Include Non-ObjC Swift Symbols选项,设置为YES,控制DocC是否纳入未标记@objc的Swift公开类型。 - 确认
Build Libraries for Distribution设为YES,该选项会保留Swift符号完整元数据,是DocC生成非ObjC兼容Swift类型文档的必要条件。
2. 正确使用文档可见性属性
_documentation(visibility:)属性的生效需要配合正确的访问控制逻辑:
- 对于无需出现在文档中的类型,先设置对应访问级别(如
internal或private),再添加_documentation(visibility: .private)属性。 - 该属性仅对DocC已扫描到的类型生效,若类型因未标记
@objc被默认排除,属性不会起作用。
3. 自定义DocC符号包含规则
如果默认配置无效,可通过DocC的Info.plist扩展强制指定要包含的纯Swift类型:
- 在框架的DocC目录中新建或编辑
Info.plist文件。 - 添加
Symbols数组来声明目标类型,示例格式如下:
<key>Symbols</key> <array> <dict> <key>Identifier</key> <string>YourFramework.YourSwiftType</string> <key>Visibility</key> <string>public</string> </dict> </array>
4. 使用命令行工具生成文档
若Xcode GUI构建存在限制,可直接调用docc命令行工具,通过参数精准控制文档生成:
xcodebuild docbuild -scheme YourFrameworkScheme -destination 'generic/platform=iOS' OTHER_DOCC_FLAGS="--include-non-objc-swift-symbols"
通过--include-non-objc-swift-symbols强制包含纯Swift符号,还可搭配--visibility参数过滤不同访问级别的类型。
临时兼容方案
Xcode 15.x版本对非Swift包的混合框架中纯Swift类型的DocC支持存在兼容性问题,若上述方法均无效,可尝试:
- 将部分纯Swift代码迁移至Swift包,DocC对Swift包的支持更完善,能更好处理纯Swift类型与文档可见性。
- 暂时保留Jazzy生成纯Swift类型文档,再与DocC生成的文档合并使用。
内容的提问来源于stack exchange,提问作者Juri Pakaste
相关产品推荐
相关产品推荐

