Development
Requirements
- macOS with Xcode 26.5+ (iOS 26.5 / macOS 26 SDK), Swift 6.3
- Deployment targets: iOS/iPadOS 18.0, macOS 15.0
Clone & open
git clone git@git.cythin.eu:Kourser/skingomz-app.git && cd skingomz-app
open Skingomz.xcodeproj
The local Packages/Core package is referenced by the project
(XCLocalSwiftPackageReference); GRDB is resolved automatically (pinned to 7.11.1
in Package.resolved).
Tests
The business logic is covered by Swift Testing tests, runnable without an IDE:
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
swift test --package-path Packages/Core
The network is abstracted behind protocols (FeedDataLoading, SearchDataLoading,
SyncHTTPClient) — the tests inject stubs, so there are no real network calls.
Build (command line)
# iOS simulator
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -project Skingomz.xcodeproj -scheme Skingomz \
-destination 'generic/platform=iOS Simulator' build
# macOS
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -project Skingomz.xcodeproj -scheme Skingomz \
-destination 'platform=macOS' build
xcode-selectmay point at the Command Line Tools;DEVELOPER_DIRavoids asudo xcode-select.
Conventions
- Clean-room: never copy/translate copylefted code (AntennaPod and others). Implement from the public specs.
- No unpinned dependency: every third-party dependency has an explicit version and a verified licence.
- Business logic doesn't depend on the UI: keep
Packages/Corefree of SwiftUI/UIKit imports. - Concurrency: the package and the app use Swift 5 language mode; the app and
the controllers are
@MainActor. - iOS-only modifiers: go through the helpers in
PlatformModifiers.swiftto stay macOS-compatible.
Repository structure
Skingomz.xcodeproj Xcode project (cross-platform native target)
Skingomz/ SwiftUI app sources
Packages/Core/ business logic (6 modules) + tests
docs/ documentation / wiki
.github/ issue/PR templates + CI