Lernziel
Nach dieser Lektion verstehst du, wie Apple sicherstellt, dass nur geprüfte Apps auf iPhones laufen: Entwickler-Account, Zertifikate, App-IDs, Fähigkeiten und Provisioning-Profile. Du lässt Xcode das Signieren automatisch erledigen, legst deine App in App Store Connect an, lädst einen Build hoch und verteilst ihn über TestFlight an interne und externe Tester.
Das Problem: Von deinem Mac auf fremde iPhones
Bisher lief deine App im Simulator und vielleicht auf deinem eigenen iPhone, das per Kabel am Mac hängt. Jetzt soll eine Freundin sie ausprobieren. Du kannst ihr nicht einfach eine Datei schicken: iPhones führen nur Apps aus, die Apple kennt und die signiert sind.
Das ist kein Zufall, sondern ein Kernstück der iOS-Sicherheit. Jede App trägt eine digitale Unterschrift, die beweist:
- Wer sie gebaut hat: ein bei Apple registrierter Entwickler.
- Dass sie nicht verändert wurde, seit sie unterschrieben wurde.
- Was sie darf: etwa Push-Benachrichtigungen empfangen oder eine App Group nutzen.
Dieses System heißt Code Signing. Es hat den Ruf, kompliziert zu sein, und früher war es das auch. Heute erledigt Xcode fast alles automatisch. Trotzdem lohnt es sich, die Begriffe zu kennen, denn wenn etwas schiefgeht, erscheinen genau diese Wörter in den Fehlermeldungen.
Der Entwickler-Account
Es gibt zwei Stufen:
| Kostenlose Apple-ID | Apple Developer Program | |
|---|---|---|
| Kosten | kostenlos | 99 US-Dollar pro Jahr (bzw. Landespreis) |
| Auf eigenes iPhone laden | ja, Profile laufen nach 7 Tagen ab | ja, 1 Jahr gültig |
| TestFlight | nein | ja |
| App Store | nein | ja |
| Fähigkeiten wie Push, App Groups, iCloud | nur eingeschränkt | ja |
Für TestFlight und den App Store brauchst du das Apple Developer Program. Anmelden kannst du dich unter developer.apple.com oder in der Apple Developer-App auf dem iPhone. Als Einzelperson brauchst du dafür deine Apple-ID mit Zwei-Faktor-Authentifizierung. Als Firma zusätzlich eine D-U-N-S-Nummer, eine weltweite Unternehmenskennung, die kostenlos beantragt werden kann, aber einige Tage dauert.
Tipp
Melde dich rechtzeitig an. Die Prüfung des Accounts dauert meist nur Stunden, kann aber, vor allem bei Firmen, auch ein bis zwei Wochen brauchen.
Die Begriffe
Vier Bausteine wirken beim Signieren zusammen. Ein Bild hilft:
Ein Bild dafür
Stell dir vor, du willst eine Veranstaltung in einem Gebäude machen.
- Das Zertifikat ist dein Personalausweis: Es beweist, wer du bist.
- Die App-ID ist der Name der Veranstaltung.
- Die Fähigkeiten (Capabilities) sind die Genehmigungen: Musik erlaubt, Getränke erlaubt.
- Das Provisioning-Profil ist die Eintrittsgenehmigung, die alles zusammenbringt: diese Person darf diese Veranstaltung mit diesen Genehmigungen in diesen Räumen (Geräten) durchführen.
Zertifikat
Ein Zertifikat besteht aus einem privaten Schlüssel, der nur auf deinem Mac liegt (im Schlüsselbund), und einem öffentlichen Teil, den Apple bestätigt hat. Mit dem privaten Schlüssel unterschreibst du Apps.
Es gibt zwei Arten:
- Apple Development: zum Testen auf eigenen Geräten.
- Apple Distribution: zum Verteilen über TestFlight und den App Store.
Den privaten Schlüssel schützen
Wer deinen privaten Schlüssel hat, kann Apps in deinem Namen signieren. Gib ihn nie weiter und lade ihn nirgends hoch. Wechselst du den Mac, übernimmt Xcode die Zertifikate über deinen Account oder du exportierst sie aus dem Schlüsselbund mit einem Passwort.
Bundle Identifier und App-ID
Jede App hat einen weltweit eindeutigen Bundle Identifier, etwa com.deinname.ausgaben. Du legst ihn beim Erstellen des Projekts fest, er steht im Target unter General → Identity.
Die übliche Form ist eine umgekehrte Domain: Wenn dir deinname.de gehört, beginnst du mit de.deinname. Danach der Name der App. Extensions bekommen den Identifier der App plus einen Zusatz: com.deinname.ausgaben.widget.
Bei Apple registriert heißt er App-ID. Einmal im App Store, lässt er sich nicht mehr ändern. Wähle ihn deshalb mit Bedacht.
Fähigkeiten (Capabilities)
Manche Funktionen müssen ausdrücklich freigeschaltet werden: Push-Benachrichtigungen, App Groups, iCloud, Sign in with Apple, HealthKit, Associated Domains für Universal Links (Lektion 3.22). Du fügst sie im Target unter Signing & Capabilities mit + Capability hinzu. Xcode trägt sie in eine Datei mit der Endung .entitlements ein und meldet sie für die App-ID an.
Provisioning-Profil
Das Provisioning-Profil verknüpft alles: Zertifikat, App-ID, Fähigkeiten und, bei Entwicklungsprofilen, die erlaubten Geräte. Es wird in die App eingebettet. Beim Start prüft das iPhone: Passt die Unterschrift zum Profil? Ist dieses Gerät erlaubt? Sind die Fähigkeiten genehmigt?
Automatisches Signieren
Die gute Nachricht: All das erledigt Xcode für dich.
- Xcode → Settings → Accounts: Füge deine Apple-ID hinzu, falls noch nicht geschehen.
- Wähle dein App-Target, Reiter Signing & Capabilities.
- Hake Automatically manage signing an.
- Wähle bei Team dein Entwicklerteam.
Xcode legt jetzt bei Bedarf Zertifikate an, registriert die App-ID, aktiviert Fähigkeiten und erzeugt Profile. Wiederhole Schritt 2 bis 4 für jede Extension, etwa das Widget, mit demselben Team.
Tipp
Bleib beim automatischen Signieren, solange du allein oder in einem kleinen Team arbeitest. Manuelles Signieren lohnt sich erst in großen Teams oder auf Build-Servern, und selbst dort gibt es heute bessere Werkzeuge wie Xcode Cloud.
Vorbereitung für die Verteilung
Bevor du hochlädst, prüfe ein paar Dinge im App-Target:
- General → Identity:
- Display Name: der Name unter dem App-Symbol.
- Version: die sichtbare Version, etwa
1.0. - Build: eine laufende Nummer, etwa
1. Sie muss bei jedem Upload derselben Version größer sein als beim letzten Mal.
- Minimum Deployments: die älteste iOS-Version, die du unterstützt.
- App-Symbol: In
Assets.xcassetsunter AppIcon ein Bild mit 1024 × 1024 Pixeln. Seit iOS 18 kannst du Varianten für hell, dunkel und getönt hinterlegen, und mit der Icon Composer-App erstellst du Symbole im aktuellen Liquid-Glass-Stil. - Datenschutzbegründungen für alle verwendeten geschützten Funktionen wie Kamera, Fotos und Standort in der Info (Lektion 4.15 und 4.22).
App Store Connect
App Store Connect (appstoreconnect.apple.com) ist die Webseite, auf der du deine Apps verwaltest: Builds, TestFlight, App-Store-Eintrag, Preise, Verkaufszahlen.
Eine neue App legst du dort so an:
- Apps → + → Neue App.
- Plattform: iOS.
- Name: Der Name im App Store. Er muss weltweit eindeutig sein, du kannst ihn später ändern.
- Primäre Sprache: etwa Deutsch.
- Bundle-ID: Wähle die App-ID, die Xcode registriert hat.
- SKU: eine interne Kennung, die nur du siehst, etwa
ausgaben-001.
Einen Build hochladen
- Wähle oben in Xcode als Ziel Any iOS Device (arm64), kein Simulator.
- Product → Archive. Xcode baut die App im Release-Modus und erstellt ein Archiv.
- Danach öffnet sich der Organizer mit deinem Archiv.
- Klick auf Distribute App.
- Wähle App Store Connect und folge dem Assistenten. Die Voreinstellungen passen fast immer.
- Klick auf Upload.
Nach dem Hochladen verarbeitet Apple den Build. Das dauert meist einige Minuten bis zu einer Stunde. Danach erscheint er in App Store Connect unter TestFlight.
Exportvorschriften
Beim ersten Build fragt App Store Connect nach Verschlüsselung. Verwendet deine App nur die Standard-Verschlüsselung von iOS, etwa über HTTPS, trag in der Info des Targets App Uses Non-Exempt Encryption (ITSAppUsesNonExemptEncryption) mit NO ein. Dann entfällt die Frage bei jedem Upload.
TestFlight
TestFlight ist Apples Weg, Testversionen an echte Menschen zu verteilen. Tester installieren die kostenlose TestFlight-App und bekommen deine App darüber, inklusive Updates und einer Möglichkeit, Feedback mit Screenshots zu schicken.
Interne Tester
- Mitglieder deines Teams in App Store Connect, bis zu 100 Personen.
- Builds stehen sofort nach der Verarbeitung zur Verfügung, ohne Prüfung durch Apple.
- Ideal für dich selbst und ein kleines Kernteam.
Unter TestFlight → Interne Tests eine Gruppe anlegen, Tester hinzufügen, Build zuweisen. Die Tester bekommen eine E-Mail.
Externe Tester
- Beliebige Personen, bis zu 10.000, per E-Mail oder über einen öffentlichen Link.
- Der erste Build einer Version durchläuft eine kurze Beta-Prüfung durch Apple, meist innerhalb eines Tages.
- Du musst eine Beschreibung, was getestet werden soll, und eine Kontaktadresse angeben.
Unter TestFlight → Externe Tests eine Gruppe anlegen, den Build hinzufügen, die Testinformationen ausfüllen und zur Prüfung einreichen. Danach kannst du einen öffentlichen Link aktivieren, den du etwa auf deiner Website teilen kannst.
Erwartetes Ergebnis
Deine Freundin installiert TestFlight, öffnet den Link und tippt auf „Installieren“. Deine App erscheint auf ihrem Home-Bildschirm mit einem kleinen orangen Punkt vor dem Namen, dem Zeichen für eine Testversion. Lädst du einen neuen Build hoch, bekommt sie ein Update.
TestFlight-Builds laufen 90 Tage, danach musst du einen neuen hochladen.
Feedback und Absturzberichte
TestFlight-Tester können durch Bildschirmfoto direkt Feedback schicken: Screenshot machen, auf „Teilen“ tippen, „Beta-Feedback senden“. Du findest es in App Store Connect unter TestFlight → Feedback. Absturzberichte erscheinen ebenfalls dort und im Organizer von Xcode unter Crashes, mit dem Code, an dem der Absturz passierte.
Typische Fehler
„No account for team“ oder „No signing certificate“
Die Apple-ID ist nicht in Xcode → Settings → Accounts eingetragen, oder das Team ist im Target nicht gewählt.
„Provisioning profile doesn't include the … entitlement“
Eine Fähigkeit wurde im Code oder in der .entitlements-Datei verwendet, aber nicht über + Capability hinzugefügt. Füge sie im Target hinzu, dann aktualisiert Xcode das Profil.
„The bundle version must be higher than the previously uploaded version“
Die Build-Nummer wurde nicht erhöht. Erhöhe sie bei jedem Upload.
„Product → Archive“ ist ausgegraut
Als Ziel ist ein Simulator gewählt. Wähle Any iOS Device.
Extension wird nicht signiert
Das Widget-Target hat kein Team oder einen Bundle Identifier, der nicht mit dem der App beginnt.
FAQ
Anfänger
Was bedeutet das überhaupt?Kann ich TestFlight ohne bezahlten Account nutzen? Nein. Für TestFlight und den App Store brauchst du das Apple Developer Program. Mit einer kostenlosen Apple-ID kannst du Apps nur auf deine eigenen Geräte laden, und sie laufen nach sieben Tagen ab.
Muss ich für jede App 99 Dollar zahlen? Nein. Die Mitgliedschaft gilt für ein Jahr und für beliebig viele Apps.
Fortgeschritten
Warum verhält es sich so?Was ist Xcode Cloud? Apples Dienst für Continuous Integration: Bei jedem Push in dein Git-Repository baut Xcode Cloud die App, führt Tests aus und kann Builds automatisch an TestFlight verteilen. Er ist in Xcode eingebaut und enthält ein kostenloses Kontingent an Rechenstunden pro Monat.
Wie teste ich verschiedene Versionen gleichzeitig?
Mit mehreren Testergruppen und Builds. Für ganz getrennte Testversionen kannst du auch eine zweite App mit eigenem Bundle Identifier anlegen, etwa com.deinname.ausgaben.beta, die neben der normalen App installiert werden kann.
Profi
Was passiert unter der Haube?Wie funktioniert das Signieren auf einem Build-Server?
Ohne Xcode-Oberfläche brauchst du entweder einen App Store Connect API Key, mit dem xcodebuild -allowProvisioningUpdates Profile selbst verwalten kann, oder du hinterlegst Zertifikat und Profil manuell auf dem Server. Werkzeuge wie Xcode Cloud oder fastlane automatisieren beides.
Was passiert beim Hochladen mit meiner App? Apple verarbeitet den Build: Prüfung der Signatur und der Metadaten, Optimierung für verschiedene Geräte (App Thinning) und Erzeugung der Symboldateien für Absturzberichte. Deshalb dauert es eine Weile, bis ein Build in TestFlight erscheint.
Übungen
Übung 1: Signing prüfen
Öffne eines deiner Projekte und sieh dir Signing & Capabilities für jedes Target an. Notiere Team, Bundle Identifier und alle Fähigkeiten. Stell sicher, dass Automatically manage signing überall aktiv ist und alle Extensions mit dem Bundle Identifier der App beginnen.
Übung 2: Bereit zum Hochladen
Bereite den Ausgaben-Tracker für die Verteilung vor: App-Symbol in 1024 × 1024 mit hellen und dunklen Varianten, Version 1.0, Build 1, ITSAppUsesNonExemptEncryption auf NO, alle Datenschutzbegründungen vorhanden. Erstelle mit Product → Archive ein Archiv und prüfe es im Organizer mit Validate App.
Übung 3: Erste Tester
Wenn du einen Entwickler-Account hast: Leg die App in App Store Connect an, lade den Build hoch, richte eine interne Testgruppe für dich ein und installiere die App über TestFlight auf deinem iPhone. Erstelle dann eine externe Gruppe mit öffentlichem Link und reiche den Build zur Beta-Prüfung ein. Schreib dafür eine kurze, verständliche Beschreibung, was Tester ausprobieren sollen.
Zusammenfassung
- iPhones führen nur signierte Apps aus. Die Signatur beweist, wer die App gebaut hat, dass sie unverändert ist und was sie darf.
- Für TestFlight und App Store brauchst du das Apple Developer Program.
- Zertifikat (wer), App-ID (welche App), Fähigkeiten (was) und Provisioning-Profil (alles zusammen) bilden das Signiersystem.
- Automatically manage signing mit deinem Team erledigt fast alles, für App und jede Extension.
- Version und Build pflegen: Die Build-Nummer steigt bei jedem Upload.
- Product → Archive und Distribute App laden in App Store Connect hoch.
- TestFlight verteilt an interne (sofort) und externe Tester (nach kurzer Beta-Prüfung, bis 10.000, auch per öffentlichem Link).
Spickzettel
Xcode → Settings → Accounts Apple-ID hinzufügen
Target → Signing & Capabilities Automatically manage signing + Team
+ Capability (App Groups, Push, …)
Target → General → Identity Version 1.0 · Build 1, 2, 3 …
Info: ITSAppUsesNonExemptEncryption = NO
Ziel: Any iOS Device (arm64)
Product → Archive → Organizer → Distribute App → App Store Connect → Upload
App Store Connect → Apps → + Neue App (Name, Sprache, Bundle-ID, SKU)
TestFlight → Interne Tests (sofort) · Externe Tests (Beta-Prüfung, öffentlicher Link)