Skip to main content

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-select may point at the Command Line Tools; DEVELOPER_DIR avoids a sudo 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/Core free 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.swift to 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