感谢你对 SmartCodable 的关注!我们欢迎各种形式的贡献:Bug 报告、功能建议、文档改进、代码贡献。
- 阅读 README 了解项目功能
- 阅读 TechnicalGuide 了解项目架构和设计意图
- 检查 Issues 确认你的问题/想法是否已被讨论
使用 Bug Report 模板 提交,请包含:
- SmartCodable 版本、Swift 版本、Xcode 版本
- 最小可复现代码(JSON 数据 + Model 定义 + 调用代码)
- 期望结果 vs 实际结果
- 如果可能,附上
SmartSentinel.debugMode = .verbose的日志输出
使用 Feature Request 模板 提交,请说明:
- 你想解决什么问题
- 你期望的 API 是什么样的
- 是否有替代方案
git clone https://github.com/iAmMccc/SmartCodable.git
cd SmartCodable
swift build- 最低要求:Swift 5.0、Xcode 14
- 宏相关功能需要:Swift 5.9、Xcode 15
- 从
main分支创建你的功能分支:git checkout -b feature/your-feature - 进行修改
- 确保
swift build通过 - 提交 PR,描述你的改动内容和原因
- 不破坏公共 API:
SmartDecodable、SmartEncodable、属性包装器的公开接口不能改签名 - 向后兼容:保持 Swift 5.0+ / iOS 13+ 的最低版本要求
- 不新增 SwiftSyntax 依赖:核心模块(
SmartCodabletarget)不能依赖 SwiftSyntax - DecodingCache 快照必须成对调用:
cacheSnapshot()和removeSnapshot()必须配对,注意异常路径 - 修改核心解码逻辑后,至少手动验证:简单模型、嵌套模型、数组模型、类型不匹配、缺失字段
<type>: <简短描述>
<详细说明(可选)>
type 取值:
fix: Bug 修复feat: 新功能docs: 文档refactor: 重构(不改变功能)test: 测试chore: 构建/CI/工具链
示例:
fix: 修复 UnkeyedContainer 解码 String 时 currentIndex 被递增两次
decodeIfPresent(String) 方法开头多了一次 currentIndex += 1,
导致数组解析时跳过元素。与 decodeIfPresent(Bool) 对比确认为遗漏。
- PR 标题简洁,正文说明改了什么、为什么改
- 一个 PR 只做一件事,避免混合不同类型的改动
- 如果是较大的功能,建议先开 Issue 讨论方案
如果你是第一次贡献,可以从标记为 good first issue 的任务开始。这些任务通常是:
- 补充单元测试
- 改善文档和示例
- 修复已确认的小 Bug
如果你想通过捐赠支持项目,请查看 捐赠页面。
- GitHub Discussions — 提问与讨论
- QQ 交流群:865036731