Skip to content

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)

  1. Installation (pubspec.yaml):
yaml
dev_dependencies:
  flutter_launcher_icons: ^0.13.0
  1. Konfiguration (pubspec.yaml):
yaml
flutter_icons:
  android: "launcher_icon"
  ios: true
  image_path: "assets/icon/icon.png"  # 1024x1024 px
  1. Ausführen:
bash
flutter pub get
flutter pub run flutter_launcher_icons

Methode 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-Name

Berechtigungen 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 key

Eingabeaufforderungen 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.jks

Schritt 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.apk

AAB (für Google Play Store - empfohlen):

bash
flutter build appbundle --release
# Ergebnis: build/app/outputs/bundle/release/app-release.aab

15.3 iOS-Packaging (nur auf Mac)

Schritt 1: Xcode konfigurieren

  1. Öffnen Sie ios/Runner.xcworkspace in Xcode
  2. 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 folgen

Methode 2: Über Kommandozeile (Codemagic/CI/CD)

bash
flutter build ipa --release
# Ergebnis: build/ios/ipa/meine_app.ipa

15.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.properties existiert
  • Pfad in build.gradle korrekt

Fehler 2: Icon wird nicht angezeigt

Fehler: App-Icon bleibt das Standard-Icon.

Lösung:

  • flutter_launcher_icons verwenden oder
  • Manuell in android/app/src/main/res/ und ios/Runner/Assets.xcassets/ prüfen

Fehler 3: Berechtigungsfehler (iOS)

Fehler: App stürzt ab, weil Berechtigung fehlt.

Lösung:

  • Info.plist korrekt konfigurieren
  • Beschreibungstext hinzufügen (z.B. NSCameraUsageDescription)

Fehler 4: App kann nicht installiert werden (Android)

Fehler: INSTALL_FAILED_VERSION_DOWNGRADE

Lösung:

  • version: in pubspec.yaml erhöhen (z.B. 1.0.1+2)

15.5 App-Veröffentlichung (kurze Erklärung)

Android (Google Play Store)

  1. Google Play Console (https://play.google.com/console) öffnen
  2. Neues Projekt erstellen
  3. AAB-Datei (app-release.aab) hochladen
  4. Store-Präsentation ausfüllen (Screenshots, Beschreibung)
  5. Review abwarten (wenige Stunden bis Tage)

iOS (App Store)

  1. App Store Connect (https://appstoreconnect.apple.com/) öffnen
  2. Neue App erstellen (Bundle ID eingeben)
  3. IPA-Datei über Xcode hochladen
  4. App-Informationen ausfüllen (Screenshots, Beschreibung)
  5. 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:

  1. Konfigurieren Sie App-Name, Icon und Berechtigungen für Ihr Projekt
  2. Führen Sie Android-Packaging durch und erstellen Sie eine APK-Datei
  3. Testen Sie die APK-Datei auf einem Android-Gerät oder Emulator
  4. (Nur Mac) Führen Sie iOS-Packaging durch und erstellen Sie eine IPA-Datei

Häufige Fehler:

  • key.properties mit falschem Pfad → Packaging schlägt fehl
  • ❌ Berechtigungen vergessen → App stürzt ab
  • ❌ Icon nicht korrekt konfiguriert → Standard-Icon wird angezeigt
  • version in pubspec.yaml nicht erhöht → Update schlägt fehl

Frei für alle Anfänger