- Accueil
- Build With Me
- Apprendre
Build With Me · Apprendre
Apprendre à construire, niveau par niveau.
Neuf niveaux, du vocabulaire de base à l’exploitation d’un produit. Chaque niveau renvoie à ce qui existe vraiment pour l’apprendre : Build School pour le web, la documentation officielle et les guides de ce site pour Apple et l’IA.
Les niveaux
De zéro à un produit qui tourne.
iPhone, iPad, Mac — avec la documentation Apple.
- 0
Les bases de l’ordinateur et du développement
Fichiers et dossiers, terminal, ce qu’est un serveur, une base de données, une API — le vocabulaire qui évite de se perdre.
- DisponibleTutoriels « Develop in Swift »Apple
- 1
Les fondations de la programmation
Variables, fonctions, conditions, collections, types — dans le langage de votre plateforme.
- 2
Git, GitHub et environnement de développement
Versionner chaque étape, revenir en arrière, travailler avec un agent de code sans perdre le contrôle.
- DisponibleXcodeApple
- DisponiblePro Git (livre)Git
- 3
Le développement propre à la plateforme
Les écrans, l’état, la navigation et les conventions de votre plateforme.
- DisponibleTutoriels SwiftUIApple
- DisponibleLe parcours iOS en 20 étapes
- DisponibleLe parcours macOS
- 4
Bases de données et backend
Modéliser les données, l’authentification, l’autorisation et les intégrations.
- DisponibleSwiftDataApple
- DisponibleCloudKitApple
- DisponibleURLSession (appels réseau)Apple
- 5
Déploiement et distribution
Mettre en ligne, distribuer une bêta, soumettre à un store.
- DisponibleTestFlight — vue d’ensembleApple
- DisponibleAide App Store ConnectApple
- DisponibleNotariser un logiciel macOS avant distributionApple
- 6
Architecture produit
Où vivent les règles, les données et les responsabilités — et ce qui rend un changement sûr.
- DisponiblePartager du code entre appareils Apple
- 7
Ingénierie logicielle de production
Tests, sécurité, surveillance des erreurs, préparation au lancement prouvée.
- 8
Faire vivre et grandir un produit
Analytics, référencement, retours utilisateurs, rythme des versions.
- DisponibleRécupérer les rapports de plantageApple
- DisponibleExigences à venir (SDK, Xcode)Apple
Formats
Écrit d’abord, jamais seulement oral.
- Guides écrits pas à pas
- Checklists à cocher
- Exemples de code vérifiés
- Enregistrements d’écran sous-titrés (dans Build School)
- Projets d’entraînement
- Aucune leçon uniquement narrée
Starters
Des points de départ qui existent vraiment.
Un starter n’est marqué disponible que si ses fichiers et ses instructions existent. Les autres sont prévus, et indiqués comme tels.
App SwiftUI de base (iOS)Une liste de tâches : un modèle @Observable partagé par l’environnement, ajout, coche, suppression, état vide.Disponible · iOS 17+
- Prérequis
- Un Mac avec Xcode 26 ou plus récent.
- Versions prises en charge
- iOS 17+
- Variables d’environnement
- Aucune.
- Sécurité
- Aucune donnée ne quitte l’appareil et rien n’est enregistré : les tâches disparaissent à la fermeture. Ajoutez SwiftData pour les garder.
- Licence
- MIT
- Maintenance
- Revu à chaque version majeure de Xcode.
Installation
- Dans Xcode : File → New → Project → iOS → App. Interface : SwiftUI. Nom de votre choix.
- Réglez la cible de déploiement (Minimum Deployments) sur iOS 17 ou plus récent.
- Remplacez tout le contenu du fichier <Nom>App.swift par le code ci-dessous, et supprimez ContentView.swift (le starter le contient).
- Lancez avec ⌘R sur un simulateur, puis sur votre iPhone (un compte Apple gratuit suffit pour tester sur votre appareil).
import SwiftUI
import Observation
@main
struct StarterApp: App {
@State private var store = TaskStore()
var body: some Scene {
WindowGroup {
ContentView()
.environment(store)
}
}
}
struct TaskItem: Identifiable, Hashable {
let id = UUID()
var title: String
var isDone = false
}
@Observable
final class TaskStore {
var items: [TaskItem] = []
func add(_ title: String) {
let trimmed = title.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmed.isEmpty else { return }
items.append(TaskItem(title: trimmed))
}
func toggle(_ item: TaskItem) {
guard let index = items.firstIndex(where: { $0.id == item.id }) else { return }
items[index].isDone.toggle()
}
func delete(at offsets: IndexSet) {
items.remove(atOffsets: offsets)
}
}
struct ContentView: View {
@Environment(TaskStore.self) private var store
@State private var draft = ""
var body: some View {
NavigationStack {
List {
Section {
HStack {
TextField("New task", text: $draft)
.onSubmit(addDraft)
Button("Add", action: addDraft)
.disabled(draft.trimmingCharacters(in: .whitespaces).isEmpty)
}
}
Section {
if store.items.isEmpty {
ContentUnavailableView("No tasks yet", systemImage: "checklist", description: Text("Add your first task above."))
}
ForEach(store.items) { item in
Button {
store.toggle(item)
} label: {
Label(item.title, systemImage: item.isDone ? "checkmark.circle.fill" : "circle")
}
.accessibilityValue(item.isDone ? "Done" : "Not done")
}
.onDelete(perform: store.delete)
}
}
.navigationTitle("Tasks")
}
}
private func addDraft() {
store.add(draft)
draft = ""
}
}
#Preview {
ContentView()
.environment(TaskStore())
}
Typechecked: Xcode 27.1 (iOS SDK 27.1, macOS SDK 27.0), Swift 5 and Swift 6 modes — 2026-10-23