- 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.
Fonctions IA mesurées et automatisations.
- 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.
- DisponibleLes limites de l’IA en développement web
- 1
Les fondations de la programmation
Variables, fonctions, conditions, collections, types — dans le langage de votre plateforme.
- DisponibleLe manuel TypeScriptMicrosoft
- 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.
- DisponibleGitHub — premiers pasGitHub
- 3
Le développement propre à la plateforme
Les écrans, l’état, la navigation et les conventions de votre plateforme.
- 4
Bases de données et backend
Modéliser les données, l’authentification, l’autorisation et les intégrations.
- 5
Déploiement et distribution
Mettre en ligne, distribuer une bêta, soumettre à un store.
- DisponibleMise en production d’une fonction IA
- 6
Architecture produit
Où vivent les règles, les données et les responsabilités — et ce qui rend un changement sûr.
- DisponibleQuand un SaaS doit-il utiliser l’IA ?
- 7
Ingénierie logicielle de production
Tests, sécurité, surveillance des erreurs, préparation au lancement prouvée.
- DisponibleOWASP Top 10 des applications LLMOWASP
- DisponibleÉvaluer et observer un produit IA
- 8
Faire vivre et grandir un produit
Analytics, référencement, retours utilisateurs, rythme des versions.
- PrévuUn guide Bynilson dédié à l’exploitation d’un produit IA
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