Appearance
Kapitel 15: App-Packaging
15.1 Vorbereitung (wichtige Schritte)
Projektkonfiguration (pubspec.yaml)
Allgemeine Informationen:
yaml
name: meine_app # Paketname (kleinschreibung_mit_unterstrichen)
description: Eine Flutter-Anwendung
publish_to: 'none' # Falls nicht veröffentlicht
version: 1.0.0+1 # Version (1.0.0) + Build-Nummer (1)
environment:
sdk: '>=3.0.0 <4.0.0'App-Icon konfigurieren
Methode 1: flutter_launcher_icons Plugin (empfohlen)
- Installation (
pubspec.yaml):
yaml
dev_dependencies:
flutter_launcher_icons: ^0.13.0- Konfiguration (
pubspec.yaml):
yaml
flutter_icons:
android: "launcher_icon"
ios: true
image_path: "assets/icon/icon.png" # 1024x1024 px- Ausführen:
bash
flutter pub get
flutter pub run flutter_launcher_iconsMethode 2: Manuell (fortgeschritten)
- Android:
android/app/src/main/res/(mipmap-Ordner) - iOS:
ios/Runner/Assets.xcassets/AppIcon.appiconset/
App-Name ändern
Android (android/app/src/main/AndroidManifest.xml):
xml
<application
android:label="Meine App" # App-Name
...>iOS (ios/Runner/Info.plist):
xml
<key>CFBundleName</key>
<string>Meine App</string> # App-NameBerechtigungen konfigurieren
Android (android/app/src/main/AndroidManifest.xml):
xml
<!-- Internet -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- Kamera -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- Speicher -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>iOS (ios/Runner/Info.plist):
xml
<!-- Kamera -->
<key>NSCameraUsageDescription</key>
<string>App benötigt Kamerazugriff</string>
<!-- Fotos -->
<key>NSPhotoLibraryUsageDescription</key>
<string>App benötigt Zugriff auf Fotos</string>
<!-- Standort -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>App benötigt Standortzugriff</string>15.2 Android-Packaging (wichtigster Schritt)
Schritt 1: Signierungs-Key generieren
bash
# Terminal im Projektordner ausführen
keytool -genkey -v -keystore d:\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias keyEingabeaufforderungen folgen:
- Passwort für Keystore festlegen (merken!)
- Name, Organisation etc. eingeben
Schritt 2: key.properties konfigurieren
Erstellen Sie android/key.properties:
properties
storePassword=ihr_passwort
keyPassword=ihr_passwort
keyAlias=key
storeFile=d:/key.jks # Pfad zum key.jksSchritt 3: build.gradle konfigurieren
Bearbeiten Sie android/app/build.gradle:
gradle
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true # Code verschleiern (optional)
shrinkResources true # Ressourcen reduzieren (optional)
}
}
}Schritt 4: APK/AAB erstellen
APK (zum Testen):
bash
flutter build apk --release
# Ergebnis: build/app/outputs/flutter-apk/app-release.apkAAB (für Google Play Store - empfohlen):
bash
flutter build appbundle --release
# Ergebnis: build/app/outputs/bundle/release/app-release.aab15.3 iOS-Packaging (nur auf Mac)
Schritt 1: Xcode konfigurieren
- Öffnen Sie
ios/Runner.xcworkspacein Xcode - Runner → Signing & Capabilities:
- Team auswählen (Apple ID hinzufügen)
- Bundle Identifier festlegen (z.B.
com.beispiel.meineapp)
Schritt 2: Berechtigungen in Xcode prüfen
Info.plist in Xcode öffnen und Berechtigungen hinzufügen.
Schritt 3: IPA erstellen
Methode 1: Über Xcode
1. Gerät auswählen: "Any iOS Device (arm64)"
2. Product → Archive
3. Nach Abschluss: "Distribute App"
4. "App Store Connect" wählen
5. Anweisungen folgenMethode 2: Über Kommandozeile (Codemagic/CI/CD)
bash
flutter build ipa --release
# Ergebnis: build/ios/ipa/meine_app.ipa15.4 Häufige Packaging-Fehler beheben
Fehler 1: Packaging schlägt fehl (Android)
Fehler: key.properties nicht gefunden.
Lösung:
- Stellen Sie sicher, dass
android/key.propertiesexistiert - Pfad in
build.gradlekorrekt
Fehler 2: Icon wird nicht angezeigt
Fehler: App-Icon bleibt das Standard-Icon.
Lösung:
flutter_launcher_iconsverwenden oder- Manuell in
android/app/src/main/res/undios/Runner/Assets.xcassets/prüfen
Fehler 3: Berechtigungsfehler (iOS)
Fehler: App stürzt ab, weil Berechtigung fehlt.
Lösung:
Info.plistkorrekt konfigurieren- Beschreibungstext hinzufügen (z.B.
NSCameraUsageDescription)
Fehler 4: App kann nicht installiert werden (Android)
Fehler: INSTALL_FAILED_VERSION_DOWNGRADE
Lösung:
version:inpubspec.yamlerhöhen (z.B.1.0.1+2)
15.5 App-Veröffentlichung (kurze Erklärung)
Android (Google Play Store)
- Google Play Console (https://play.google.com/console) öffnen
- Neues Projekt erstellen
- AAB-Datei (
app-release.aab) hochladen - Store-Präsentation ausfüllen (Screenshots, Beschreibung)
- Review abwarten (wenige Stunden bis Tage)
iOS (App Store)
- App Store Connect (https://appstoreconnect.apple.com/) öffnen
- Neue App erstellen (Bundle ID eingeben)
- IPA-Datei über Xcode hochladen
- App-Informationen ausfüllen (Screenshots, Beschreibung)
- Review abwarten (1-2 Wochen)
Zusammenfassung
In diesem Kapitel haben Sie:
- ✅ Projekt vor Packaging konfiguriert (Name, Icon, Berechtigungen)
- ✅ Android-Packaging durchgeführt (Key generieren, APK/AAB erstellen)
- ✅ iOS-Packaging verstanden (nur Mac, Xcode erforderlich)
- ✅ Häufige Fehler behoben
- ✅ Grundlegendes zur App-Veröffentlichung gelernt
Nächstes Kapitel: Wir werden häufige Fehler und Lösungen lernen.
Übungsaufgaben:
- Konfigurieren Sie App-Name, Icon und Berechtigungen für Ihr Projekt
- Führen Sie Android-Packaging durch und erstellen Sie eine APK-Datei
- Testen Sie die APK-Datei auf einem Android-Gerät oder Emulator
- (Nur Mac) Führen Sie iOS-Packaging durch und erstellen Sie eine IPA-Datei
Häufige Fehler:
- ❌
key.propertiesmit falschem Pfad → Packaging schlägt fehl - ❌ Berechtigungen vergessen → App stürzt ab
- ❌ Icon nicht korrekt konfiguriert → Standard-Icon wird angezeigt
- ❌
versioninpubspec.yamlnicht erhöht → Update schlägt fehl
