iOSAppTemplates
面向 iOS 18 的 21 个 SwiftUI 应用模板,每个都是可用自己名字复制的、带测试的 Swift package
许可证: MIT
二十一个 SwiftUI 应用模板,涵盖电商、金融到消息和旅行等场景。每个模板都是一个独立的 Swift package,配有仅使用 SwiftUI 和 Foundation 的 XcodeGen host 应用。其中二十个是基于标签页、使用内存中示例数据的应用,拥有由 Swift Testing suite 覆盖的 @MainActor store;CleanArchitectureApp 则把 Domain、Data 和 Presentation 拆分到独立 target 中,并加入 HTTP 层、进程内示例服务器和离线缓存,每一层都有测试。create-ios-app 命令会复制一个模板,并重命名它的 package、模块、类型、host 项目和 bundle identifier,同时拒绝会与模板中已有名称冲突的名字。
功能特性
- 21 个模板:20 种应用类型(AI 助手、预订、CRM、电商、金融、健身、消息、旅行等等)加上分层的 CleanArchitectureApp
- 测试覆盖情况:在二十个模板中,状态和操作都放在一个带 Swift Testing suite 的 @MainActor store 里;CleanArchitectureApp 在四个 test target 中共有 108 个测试
- 模板中没有第三方依赖;它们不需要账号、API key 或网络访问即可运行
- create-ios-app 会重命名模板,并拒绝会与其已有名称冲突的名字(ScaffoldError.nameConflict)
- CleanArchitectureApp:Domain、Data 和 Presentation 作为独立 target,依赖规则由编译器强制约束;带有 HTTP 层、进程内示例服务器、离线缓存
- CI 把每个模板作为独立 job 在 iOS Simulator 中测试,对生成的项目做 scaffold 并测试,同时构建 QuickStart 示例
- 每个模板的浅色和深色截图,由仓库中的脚本在模拟器中拍摄
快速开始
1import EcommerceApp2 3@main4enum QuickStartApp {5 static func main() {6 EcommerceAppShell.main()7 }8}安装
Get the templates
1git clone https://github.com/muhittincamdali/iOSAppTemplates.gitcreate-ios-app
1cd iOSAppTemplates2swift run create-ios-app list3swift run create-ios-app new MyShop --template ecommerce --output ~/DeveloperTemplateScaffold library (Swift Package Manager)
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/iOSAppTemplates.git", from: "3.0.0")3],4targets: [5 .executableTarget(name: "YourTool", dependencies: [6 .product(name: "TemplateScaffold", package: "iOSAppTemplates")7 ])8]截图






时间线
仓库以三个模板 package 开放(EcommerceApp、FitnessApp、SocialMediaApp);第一个月的大部分 commit 是文档,v2.0.0 于 8 月 17 日发布
在 Templates/ 下新增十七个模板 package,模板总数达到二十个;v2.1.0 于 4 月 26 日打上标签
移除了证明脚本,旧版 create-ios-app 新增 App Store metadata 生成和交互模式;CI 中模板生成器的 smoke 检查是红的,模板测试只是占位
重建为 3.0.0:二十个带测试的模板、重写的 create-ios-app 和 TemplateScaffold 库;无法用 Swift 6.4 构建的根 package 被精简为该工具及其库,删除了约 82,000 行无用代码(PR #22)
3.1.0:CleanArchitectureApp 作为第 21 个模板加入,由已归档的 ios-clean-architecture-template 重写而来(PR #23)