Développer des applications iOS sur Windows avec GitHub Actions et XcodeGen
Deux applications iOS — le messager chiffré Dark Message et la calculatrice d'ingénierie CVC — sont publiées sur l'App Store. Elles ont été entièrement développées sur Windows sans MacBook. Le processus : le code est écrit localement, avec la compilation et la signature sur des machines macOS virtuelles dans GitHub Actions. Le temps entre le push vers le dépôt et la compilation sur un iPhone est de 15 minutes.
Cela contourne l'exigence de Xcode sur macOS. GitHub fournit des runners gratuits avec macOS, où Xcode est installé. La configuration comprend un compte Apple Developer, XcodeGen pour générer le projet à partir de YAML, un pipeline CI/CD et des certificats de signature.
Parcours de développement selon les niveaux de compétence
Le choix de l'approche dépend des compétences :
- Codage intuitif avec IA : Claude Code génère du code SwiftUI à partir de descriptions. Fonctionne dans le terminal sur Windows. Exemple de prompt : "Application iOS en SwiftUI, chiffrement AES-256-GCM avec PBKDF2, écrans de saisie/déchiffrement."
- Programmeur sans Mac : Votre propre code Swift + IA configure l'infrastructure (XcodeGen, GitHub Actions, certificats).
- Expert : Structure de projet manuelle, configuration YAML, pipeline. Itérations via TestFlight sans prévisualisation locale.
Installation de Claude Code :
npm install -g @anthropic-ai/claude-code
claude
L'IA crée des fichiers, modifie en fonction des retours. Pas de prévisualisation, mais les compilations cloud compensent.
Étape 1 : Compte Apple Developer depuis la France
Créez un Apple ID sur appleid.apple.com (pays ≠ Russie). Inscrivez-vous sur developer.apple.com/programs/enroll en tant qu'Individu. Paiement 99 $/an — utilisez une carte étrangère (Bybit ou similaire). Accès à App Store Connect sous 24–48 heures.
Étape 2 : Structure du projet et XcodeGen
XcodeGen génère .xcodeproj à partir de project.yml sans Xcode. Exemple de configuration :
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: []
Structure du dépôt :
Sources/: App.swift, Views/, Models/, Services/ (CryptoService.swift).Resources/Assets.xcassets/.project.yml..github/workflows/build.yml.
Avantages du YAML : compact (30 lignes), pas de conflits Git, modifiable dans VS Code.
Étape 3 : Dépôt et GitHub Actions
Initialisation :
git init
git add .
git commit -m "Commit initial"
git remote add origin https://github.com/user/repo.git
git push -u origin main
Les runners Actions avec macOS compilent le projet : xcodegen generate, xcodebuild, signature, téléversement vers TestFlight/App Store.
Étape 4 : Signature de code sans Mac
Nécessaire :
- Certificat de distribution (.p12).
- Profil d'approvisionnement (.mobileprovision).
- Clé API App Store Connect.
Générez CSR sur Windows avec OpenSSL :
openssl genrsa -out ios_dist.key 2048
openssl req -new -key ios_dist.key -out ios_dist.csr -subj "/CN=Votre Nom/[email protected]"
Téléversez CSR sur developer.apple.com/account/resources/certificates → Apple Distribution → téléchargez .cer. Convertissez en .p12 :
openssl x509 -inform der -in ios_dist.cer -inkey ios_dist.key -out ios_dist.p12
Profil d'approvisionnement : developer.apple.com → Profiles → + → App Store → bundle ID → certificat.
Clé API : App Store Connect → Users and Access → Keys → + → App Manager.
Stockez les secrets dans GitHub Settings → Secrets : CERTIFICATE_P12_BASE64, PROVISIONING_PROFILE_BASE64, APPSTORE_API_KEY.
Étape 5 : Workflow YAML pour CI/CD
Exemple .github/workflows/build.yml (simplifié) :
name: Compilation iOS
on: [push]
jobs:
build:
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- name: Générer le projet Xcode
uses: maxim-lobanov/setup-xcodegen@v1
with:
xcodegen-version: '2.35.0'
- run: xcodegen generate
- name: Importer le certificat
env:
CERTIFICATE_P12: ${{ secrets.CERTIFICATE_P12_BASE64 }}
run: |
echo $CERTIFICATE_P12 | base64 --decode > cert.p12
security import cert.p12 -k ~/Library/Keychains/login.keychain
# ... signature, archive, téléversement
Le workflow complet inclut xcodebuild archive, xcrun altool ou xcrun notarytool pour l'App Store.
Points clés
- GitHub Actions avec macOS sont gratuits pour les dépôts publics (2000 min/mois).
- XcodeGen simplifie la gestion de projet sans Xcode.
- La signature de code est automatisée via des secrets encodés en base64.
- Itérations : 15 minutes du push à TestFlight.
- Adapté aux projets ponctuels ; pour la production, un Mac accélère le développement.
— Editorial Team
Aucun commentaire pour le moment.