A macOS slideshow app built as a Swift learning project, demonstrating strict layered architecture, SwiftUI, and SwiftData on macOS 26.
Name origin: 「テンプレートプロジェクトを作ろうと思ったら、スライドショーアプリが出来上がった件」
10slide lets you import photos and arrange them into timed slideshows. The primary goal of this project is to serve as a hands-on template for exploring Swift 6, SwiftUI, and layered architecture patterns — the slideshow app is the vehicle, not the destination.
Strict one-way layered architecture with per-layer DI containers. Each layer communicates only with its immediate neighbor via protocol boundaries.
Presentation → UseCases → Domain/Services → Repositories → Infrastructure
(Request/ ↑
Response) Domain/Entities
| Layer | Directory | Role |
|---|---|---|
| Presentation | Sources/Presentation/ |
SwiftUI views and ViewModels — uses Response types only |
| Use Cases | Sources/UseCases/ |
Request validation, Domain Service delegation, Entity→Response mapping |
| Domain Services | Sources/Domain/Services/ |
Business logic orchestration — sole owner of Repository calls |
| Domain Entities | Sources/Domain/Entities/ |
Pure value types — no framework imports |
| Repositories | Sources/Repositories/ |
DTO ↔ entity conversion |
| Infrastructure | Sources/Infrastructure/ |
SwiftData, Photos framework, file I/O |
| DI | Sources/DI/ |
Per-layer containers wired in Container.swift |
- macOS 26+
- Xcode 26+
- Swift 6.1
10slide.xcodeproj/project.pbxproj is not tracked in git because it contains developer-specific code signing settings. Before opening the project in Xcode, you need to configure it:
- Open
10slide.xcodeprojin Xcode. - Select the
10slidetarget → Signing & Capabilities. - Set your Team and update the Bundle Identifier to one registered under your Apple Developer account.
- Repeat for the
10slideTeststarget.
# Build from the command line (after configuring signing)
xcodebuild -scheme 10slide -destination 'platform=macOS' build
# Run tests
xcodebuild -scheme 10slide -destination 'platform=macOS' test