DEV Community

Cover image for Info.plist Basics für React-Native Entwickler
Pascal C
Pascal C

Posted on

Info.plist Basics für React-Native Entwickler

Einleitung

React Native ist ein auf JavaScript basierendes Hybrid-Framework zur Entwicklung von nativen Apps auf iOS und Android. Es macht es Web-Entwicklern einfach den Umstieg zur App-Entwicklung zu finden, da die meißten mit -JavaScript* oder sogar _React* vertraut sein dürften. Schwierig wird es allerdings, wenn es um die Benutzung von Build-tools, wie bsp. Gradle oder der Verwendung der nativen Konfigurationsdateien wie der AndroidManifest.xml oder der Info.plist geht. Letztere Datei, die in jedem iOS-Projekt zu finden ist, spielt eine entscheidende Rolle bei der Definition von App-Einstellungen und Berechtigungen. In diesem Artikel wird erläutert, was die Info.plist-Datei ist und wie man sie effektiv nutzen kann.

Was ist die Info.plist-Datei?

Die Info.plist (Information Property List) ist eine Konfigurationsdatei im XML-Format, die wichtige Informationen über eine iOS-App enthält. Sie definiert Eigenschaften wie den App-Namen, Versionsnummer, Berechtigungen und vieles mehr. Xcode liest diese Datei, um wichtige Informationen eine App zu erhalten.

Warum ist Info.plist für React Native-Entwickler wichtig?

Das Bearbeiten der Info.plist-Datei ist oft notwendig, um:

  • App-Berechtigungen festzulegen (z.B. Kamerazugriff, Standortdienste).
  • App-Metadaten wie Version, Anzeigename und unterstützte Geräteorientierungen zu definieren.
  • Externe Dienste zu integrieren, wie z.B. Push-Benachrichtigungen.

Anpassen der Info.plist

Zugriff auf die Datei

Die Info.plist-Datei befindet sich unter ios/[Projektname]/Info.plist.

Definition von App-Metadaten

Wichtige Keys für Metadaten sind bsp.:

  • CFBundleDisplayName (Anzeigename der App): Bestimmt den Namen der App, der auf dem Homescreen des Geräts angezeigt wird.
  • CFBundleShortVersionString (Versionsnummer): Die öffentliche Versionsnummer der App, die im App Store angezeigt wird, z.B. 1.6.9.
  • CFBundleVersion (Build-Versionsnummer): Interne Versionsnummer, die zur Unterscheidung von Builds innerhalb einer Version verwendet wird. Diese Zahl ist aufsteigend, z.B. 96.

Usage Descriptions

Usage Descriptions (Nutzungsbeschreibungen) in iOS sind erforderlich, um dem Benutzer den Zweck der Anforderung bestimmter Berechtigungen zu erklären:

  • NSCameraUsageDescription (Kamerazugriff):
<key>NSCameraUsageDescription</key>
<string>Diese App benötigt Zugriff auf Ihre Kamera, um Fotos aufzunehmen.</string>
Enter fullscreen mode Exit fullscreen mode
  • NSMicrophoneUsageDescription (Mikrofonzugriff):
<key>NSMicrophoneUsageDescription</key>
<string>Diese App benötigt Zugriff auf Ihr Mikrofon, um Sprachaufnahmen zu ermöglichen.</string>
Enter fullscreen mode Exit fullscreen mode
  • NSLocationWhenInUseUsageDescription und NSLocationAlwaysUsageDescription (Standortdienste):
<key>NSLocationWhenInUseUsageDescription</key>
<string>Diese App benötigt Ihren Standort, um standortbezogene Dienste anzubieten.</string>
Enter fullscreen mode Exit fullscreen mode
  • NSPhotoLibraryUsageDescription (Fotobibliothekszugriff):
<key>NSPhotoLibraryUsageDescription</key>
<string>Diese App benötigt Zugriff auf Ihre Fotos, um Bilder hochzuladen.</string>
Enter fullscreen mode Exit fullscreen mode
  • NSContactsUsageDescription (Kontaktezugriff):
<key>NSContactsUsageDescription</key>
<string>Diese App benötigt Zugriff auf Ihre Kontakte, um die Integration zu erleichtern.</string>
Enter fullscreen mode Exit fullscreen mode

App Transport Security (ATS)

ATS (NSAppTransportSecurity) ist eine Sicherheitsfunktion in iOS, die standardmäßig sicherstellt, dass alle HTTP-Verbindungen, die von der App verwendet werden, HTTPS sind. Standardmässig sieht der Eintrag wie folgt aus:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>
Enter fullscreen mode Exit fullscreen mode

Unter NSExceptionDomains können Ausnahmen für spezifische Domains definiert werden, für die die ATS-Regeln nicht gelten sollen. Für die App-Entwicklung gibt es standardmässig einen Eintrag für localhost, damit mit der App kommuniziert werden kann.
NSExceptionAllowsInsecureHTTPLoads mit dem Wert true bedeutet, dass für Verbindungen zu localhost unsichere HTTP-Verbindungen erlaubt sind, anstatt HTTPS zu erzwingen. Ansonsten könnten lokal genutzte Dienste (z.B. ein Dev-server) auch nur mit https genutzt werden, was die Einrichtung eines SSL-Zertifikates erfordern würde.

Läuft eine App hinter einem VPN, kann es oft notwendig sein, den Server an dieser Stelle einzutragen und die Ausnahmen korrekt zu konfigurieren.

App-Icons, Launch-Screens und Orientierungen

  • CFBundleIcons (App-Icons): Bestimmt die Icons, die für die App verwendet werden. In der Regel werden die Icons als Asset-Katalog in Xcode konfiguriert und nicht direkt in der Info.plist-Datei.
  • UILaunchStoryboardName oder UILaunchImages (Launch-Screen): Definiert die Launch-Screen-Datei oder die Bilder, die beim Starten der App angezeigt werden. Auch hier ist die übliche Methode die Verwendung eines Storyboards oder eines Asset-Katalogs.
  • UISupportedInterfaceOrientations (Orientierungen):

Legt fest, welche Bildschirmorientierungen die App unterstützt.
Beispiel für Portrait und Landscape:

  <key>UISupportedInterfaceOrientations</key>
  <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
  </array>
Enter fullscreen mode Exit fullscreen mode

Schluß

Die Info.plist-Datei ist ein wichtiges Element in der iOS-Entwicklung. Ein tiefes Verständnis dieser Datei ermöglicht es Entwicklern, ihre Apps effektiv für iOS zu konfigurieren und anzupassen. Dies ist für eine erfolgreiche Einreichung im Apple App Store unerlässlich, denn eine Ablehnung der App kann schwerwiegende Folgen wie eine unzufriedene Userbase nach sich ziehen.

Top comments (0)