Aller au contenu

Développement

Prérequis

  • macOS avec Xcode 26.5+ (SDK iOS 26.5 / macOS 26), Swift 6.3
  • Cibles de déploiement : iOS/iPadOS 18.0, macOS 15.0

Cloner & ouvrir

git clone git@git.cythin.eu:Kourser/skingomz-app.git && cd skingomz-app
open Skingomz.xcodeproj

Le package local Packages/Core est référencé par le projet (XCLocalSwiftPackageReference) ; GRDB est résolu automatiquement (épinglé à 7.11.1 dans Package.resolved).

Tests

La logique métier est couverte par des tests Swift Testing, exécutables sans IDE :

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
  swift test --package-path Packages/Core

Le réseau est abstrait derrière des protocoles (FeedDataLoading, SearchDataLoading, SyncHTTPClient) — les tests injectent des stubs, donc aucun appel réseau réel.

Build (ligne de commande)

# iOS simulateur
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 peut pointer sur les Command Line Tools ; DEVELOPER_DIR évite un sudo xcode-select.

Conventions

  • Clean-room : ne jamais copier/traduire du code copylefté (AntennaPod et autres). Implémentez depuis les specs publiques.
  • Pas de dépendance non épinglée : toute dépendance tierce a une version explicite et une licence vérifiée.
  • Le métier ne dépend pas de l'UI : gardez Packages/Core sans import SwiftUI/UIKit.
  • Concurrence : le package et l'app sont en mode langage Swift 5 ; l'app et les contrôleurs sont @MainActor.
  • Modificateurs iOS-only : passez par les helpers de PlatformModifiers.swift pour rester compatibles macOS.

Structure du dépôt

Skingomz.xcodeproj      projet Xcode (cible native multiplateforme)
Skingomz/               sources de l'app SwiftUI
Packages/Core/          logique métier (6 modules) + tests
docs/                   documentation / wiki
.github/                templates d'issues/PR + CI