iOS-Apps auf Windows entwickeln mit GitHub Actions und XcodeGen
Zwei iOS-Apps – der verschlüsselte Messenger Dark Message und der HLK-Engineering-Rechner – sind im App Store veröffentlicht. Sie wurden vollständig auf Windows ohne MacBook entwickelt. Der Prozess: Code wird lokal geschrieben, während das Bauen und Signieren auf virtuellen macOS-Maschinen in GitHub Actions erfolgt. Die Zeit vom Pushen ins Repository bis zum Bauen auf einem iPhone beträgt 15 Minuten.
Dies umgeht die Xcode-Anforderung für macOS. GitHub stellt kostenlose Runner mit macOS bereit, auf denen Xcode installiert ist. Das Setup umfasst ein Apple Developer-Konto, XcodeGen zum Generieren des Projekts aus YAML, eine CI/CD-Pipeline und Signaturzertifikate.
Entwicklungswege für verschiedene Kenntnisstufen
Die Wahl des Ansatzes hängt von den Fähigkeiten ab:
- Vibe-Coding mit KI: Claude Code generiert SwiftUI-Code aus Beschreibungen. Funktioniert im Terminal auf Windows. Beispiel-Prompt: "iOS-App in SwiftUI, AES-256-GCM-Verschlüsselung mit PBKDF2, Eingabe-/Entschlüsselungsbildschirme."
- Programmierer ohne Mac: Eigener Swift-Code + KI richtet die Infrastruktur ein (XcodeGen, GitHub Actions, Zertifikate).
- Hardcore: Manuelle Projektstruktur, YAML-Konfiguration, Pipeline. Iterationen über TestFlight ohne lokale Vorschau.
Installation von Claude Code:
npm install -g @anthropic-ai/claude-code
claude
KI erstellt Dateien, bearbeitet basierend auf Feedback. Keine Vorschau, aber Cloud-Builds kompensieren.
Schritt 1: Apple Developer-Konto aus Russland
Erstellen Sie eine Apple-ID unter appleid.apple.com (Land ≠ Russland). Registrieren Sie sich unter developer.apple.com/programs/enroll als Einzelperson. Zahlung 99 $/Jahr – nutzen Sie eine ausländische Karte (Bybit oder ähnlich). Zugang zu App Store Connect innerhalb von 24–48 Stunden.
Schritt 2: Projektstruktur und XcodeGen
XcodeGen generiert .xcodeproj aus project.yml ohne Xcode. Beispielkonfiguration:
name: DarkMessage
options:
bundleIdPrefix: com.darkmessage
deploymentTarget:
iOS: "15.0"
xcodeVersion: "15.0"
targets:
DarkMessage:
type: application
platform: iOS
sources:
- path: Sources
resources:
- path: Resources
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.darkmessage.ios
MARKETING_VERSION: "1.0.0"
CURRENT_PROJECT_VERSION: "1"
SWIFT_VERSION: "5.9"
TARGETED_DEVICE_FAMILY: "1,2"
INFOPLIST_VALUES:
UILaunchScreen: {}
dependencies: []
Repository-Struktur:
Sources/: App.swift, Views/, Models/, Services/ (CryptoService.swift).Resources/Assets.xcassets/.project.yml..github/workflows/build.yml.
YAML-Vorteile: kompakt (30 Zeilen), keine Git-Konflikte, in VS Code bearbeitbar.
Schritt 3: Repository und GitHub Actions
Initialisierung:
git init
git add .
git commit -m "Initialer Commit"
git remote add origin https://github.com/user/repo.git
git push -u origin main
Actions-Runner mit macOS bauen das Projekt: xcodegen generate, xcodebuild, Signieren, Upload zu TestFlight/App Store.
Schritt 4: Code-Signing ohne Mac
Erforderlich:
- Distribution Certificate (.p12).
- Provisioning Profile (.mobileprovision).
- App Store Connect API Key.
CSR auf Windows mit OpenSSL generieren:
openssl genrsa -out ios_dist.key 2048
openssl req -new -key ios_dist.key -out ios_dist.csr -subj "/CN=Ihr Name/[email protected]"
CSR hochladen unter developer.apple.com/account/resources/certificates → Apple Distribution → .cer herunterladen. In .p12 konvertieren:
openssl x509 -inform der -in ios_dist.cer -inkey ios_dist.key -out ios_dist.p12
Provisioning Profile: developer.apple.com → Profiles → + → App Store → Bundle-ID → Zertifikat.
API Key: App Store Connect → Users and Access → Keys → + → App Manager.
Geheimnisse in GitHub Settings → Secrets speichern: CERTIFICATE_P12_BASE64, PROVISIONING_PROFILE_BASE64, APPSTORE_API_KEY.
Schritt 5: Workflow YAML für CI/CD
Beispiel .github/workflows/build.yml (vereinfacht):
name: Build iOS
on: [push]
jobs:
build:
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- name: Xcode-Projekt generieren
uses: maxim-lobanov/setup-xcodegen@v1
with:
xcodegen-version: '2.35.0'
- run: xcodegen generate
- name: Zertifikat importieren
env:
CERTIFICATE_P12: ${{ secrets.CERTIFICATE_P12_BASE64 }}
run: |
echo $CERTIFICATE_P12 | base64 --decode > cert.p12
security import cert.p12 -k ~/Library/Keychains/login.keychain
# ... Signieren, Archivieren, Hochladen
Vollständiger Workflow umfasst xcodebuild archive, xcrun altool oder xcrun notarytool für den App Store.
Wichtige Punkte
- GitHub Actions mit macOS sind für öffentliche Repos kostenlos (2000 Min./Monat).
- XcodeGen vereinfacht das Projektmanagement ohne Xcode.
- Code-Signing wird über base64-kodierte Geheimnisse automatisiert.
- Iterationen: 15 Minuten vom Push bis zu TestFlight.
- Geeignet für Einmalprojekte; für Produktion beschleunigt ein Mac die Entwicklung.
— Editorial Team
Noch keine Kommentare.