Erstellen von iOS-Apps

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu FireMonkey-Anwendungshandbuch

Nach oben zu Mobile iOS-Anwendungsentwicklung


So erstellen Sie eine iOS-App:

Datei > Neu > Mobile FireMonkey-Anwendung - Object Pascal
Datei > Neu > Mobile FireMonkey-Anwendung - C++

iOS-Formulare

Sie können einem mobilen FireMonkey-Formular weitere Formulare auf dieselbe Weise wie in Desktop-Anwendungen hinzufügen.

iOS-Formulare haben spezielle hardwareabhängige Eigenschaften. Sie haben beispielsweise eine andere Form bzw. beanspruchen eine andere Fläche als FireMonkey-Standard-Desktop-Formulare:

  • FireMonkey-iOS-Anwendungen sind vertikal ausgerichtet:
    • ClientHeight = 480 Pixel
    • ClientWidth = 320 Pixel
  • Bei FireMonkey-Desktop-Anwendungen ist das Formular horizontal ausgerichtet:
    • ClientHeight = 480 Pixel
    • ClientWidth = 600 Pixel

Freigeben von Formularen in iOS-Apps

Im Allgemeinen sollten mobile Anwendungen nicht mehrere Formulare gleichzeitig im Arbeitsspeicher halten. Mobile Geräte verfügen nur über begrenzten Arbeitsspeicher, und Formulare sind speicherintensive Objekte.

Folgendermaßen sollte vorgegangen werden: Zeigen Sie das Formular an, und geben Sie das Formular, wenn es nicht mehr sichtbar ist, aus dem Speicher frei (entweder mit der Ereignisbehandlungsroutine OnClose oder durch Setzen von CloseEvent auf caFree oder durch einen Aufruf der Methode System.TObject.DisposeOf des Formulars).

Mit einem Register-Steuerelement mit mehreren Seiten können mehrere formularartige Steuerelemente speichereffizienter angezeigt werden.

FireMonkey-iOS-Workflow

Die Entwicklung von FireMonkey-iOS-Anwendungen erfolgt auf Ihrer Entwicklungsplattform und auf dem Mac. Nach dem Abschluss der erforderlichen Schritte zur Einrichtung der Umgebung und dem Compilieren des Projekts in der Appmethod-IDE werden beim Ausführen des Projekts die ausführbaren Dateien und die erforderlichen Bibliotheken auf den Mac übertragen.

Wichtig: Beginnen Sie hier

  • Bevor Sie mit Ihrem ersten iOS-Projekt beginnen, müssen Sie unter Windows und auf dem Mac einige wichtige Installations- und Konfigurationsschritte durchführen. Beispielsweise müssen Sie ein Bereitstellungsprofil für die Entwicklung für das jeweilige iOS-Entwicklungsgerät konfigurieren, das Sie für den Test Ihrer Anwendung auf dem Mac verwenden möchten.

Entwickeln Sie anschließend Ihr Projekt gemäß der folgenden allgemeinen Reihenfolge:

Schritte in Appmethod

  1. Starten Sie Ihr Projekt mit einem der folgenden FireMonkey-iOS-Experten:
    Datei > Neu > Weitere > Object Pascal-Projekte > Mobile FireMonkey-Anwendung
    Datei > Neu > Weitere > C++-Projekte > Mobile FireMonkey-Anwendung
  2. Wählen Sie eine Vorlage oder eine Anwendung aus, wie z. B. Registerkartenanwendung oder Leere Anwendung.
  3. Das iOS-Formular wird im Formular-Designer angezeigt.
    Fügen Sie im Formular-Designer und im Quelltext-Editor von Appmethod dem Formular Steuerelemente hinzu, legen Sie Werte für Eigenschaften und Ereignisse fest, und schreiben Sie den entsprechenden Code dafür.
Tipp: Beginnen Sie mit der Erstellung Ihrer iOS-App anhand von Mobile-Tutorials: Mobile Anwendungsentwicklung (iOS und Android).

Schritte auf dem Mac und auf dem iOS-Simulator oder einem angeschlossenen iOS-Gerät

  1. Führen Sie Ihr Projekt zum Erstellen eines Prototyps auf der iOS-Simulator-Zielplattform aus, und debuggen Sie es auch auf dieser Plattform.
    • Tipp: Führen Sie Ihre Anwendung im iOS-Simulator mindestens einmal nach Erstellung des Projekts (und nach jeder Projektänderung und jedem Hinzufügen von neuen Dateien) aus.
  2. Wählen Sie das Gerät aus, auf dem die App ausgeführt werden soll, z. B.:
    • Integrierter iOS-Simulator für das erste Debuggen.
    • Physisches iOS-Gerät, das an den Mac angeschlossen ist.

So führen Sie die iOS-App auf einem iOS-Gerät aus:

  • Das iOS-Gerät muss mit einem USB-Kabel an den Mac angeschlossen sein.
  • Sie müssen auf der Seite SDK-Manager ein neues SDK hinzufügen. Nach dem Hinzufügen eines neuen SDK wird die ausgewählte Version des iOS-SDK vom Mac auf Ihr Entwicklungssystem übertragen.
  • Sie müssen ein Bereitstellungsprofil für die Entwicklung zum Testen der Anwendung auf dem iOS-Entwicklungsgerät erstellen.
    Das Bereitstellungsprofil verknüpft Ihre Apple-Entwickler-ID mit Folgendem:
    • Bestimmten iOS-Apps, die Sie ausführen möchten (gekennzeichnet durch die App-ID)
    • Den jeweiligen iOS-Geräten, auf denen die Apps ausgeführt werden sollen (gekennzeichnet durch die Geräte-ID oder UDID)
      Die 40 Zeichen lange UDID können Sie mit Xcode oder iTunes ermitteln. Weitere Informationen dazu finden Sie unter https://developer.apple.com/ios/manage/devices/howto.action.

Weitere Informationen zum Arbeitsablauf für iOS-Apps auf dem Mac finden Sie unter https://developer.apple.com/library/IOs/referencelibrary/GettingStarted/RoadMapiOS/index.html.

Bevorzugte Komponenten für iOS-Apps im Vergleich zu Desktop-Anwendungen

Auf der iOS-Plattform unterscheiden sich der native Stil und das Format vom Stil und Format von Desktop-Anwendungen. Daher müssen Sie für iOS-Apps iOS-spezifische Regeln hinsichtlich Formatierung und Anordnung von Komponenten beachten.

In der folgenden Liste werden z. B. FireMonkey-Komponenten, die typischerweise in Desktop-Apps verwendet werden, Komponenten gegenübergestellt, die bevorzugt für iOS-Apps geeignet sind:

Unterschiede bei wichtigen Komponenten:

Desktop-Komponenten iOS-Komponenten

TTreeView

TListView
TListBox

TRadioGroup
TRadioButton

TSegmentedControl
ListBox

TCheckBox

TSwitch

TMenuBar
TMainMenu

TToolBar mit Schaltflächen
TTabControl


Bevorzugte FireMonkey-Komponenten für iOS-Apps:

TButton TEdit TCalendarEdit TListView
TTrackBar TTabControl TSpeeButton TMemo
TSwitch TComboBox TToolBar TScrollBox
TLabel TNumberBox TListBox TProgressBar
TPanel

Weitere Informationen als PDF-Datei und Video (einschließlich von Empfehlungen für Format und Stil) finden Sie im EDN-Artikel iOS User Interface Design with Object Pascal XE4.

Beispielsweise enthält der EDN-Artikel Tipps zur Verwendung von allgemeinen Komponenten, wie TListBox, TListView, TToolBar und TSpeedButton, in iOS-Apps plus einer detaillierten Demo, in der gezeigt wird, wie Sie eine Einstellungs-App (Settings) für die iOS-Plattform erstellen:

Einzelne Beispiel-Frames aus iOS User Interface Design with Object Pascal XE4

ListBoxRules.png
  TListBox-Regeln

ListViewRules.png
  TListView-Regeln

SettingsDemo.png
  Settings-Demo

Komponentenbeschränkungen für FireMonkey-iOS-Apps

Während des Entwurfs von iOS-Apps in Appmethod können Sie nur Komponenten verwenden, die auf iOS-Geräten unterstützt werden. Beachten Sie jedoch, dass die Tool-Palette möglicherweise Komponenten enthält, die nur für Windows vorgesehen sind oder von iOS nicht unterstützt werden.

Nicht akzeptierte internationale Zeichen (Unicode) auf der iOS-Zielplattform

Internationale Zeichen (Unicode) werden an mehreren Stellen in iOS-Apps nicht akzeptiert. Beispielsweise können Namen wie hélène und éléments die Ausführung einer iOS-App verhindern.

Verwenden Sie internationale Zeichen insbesondere nicht:

  • In Ihrem Windows-Benutzernamen
  • In Namen von Verbindungsprofilen
  • In Namen von iOS-Projekten
  • In dem Namen des Anwendungspakets (die ausführbare .app-Datei)

Folgende Meldung wird angezeigt, wenn Sie versuchen, eine iOS-App zu erzeugen, die Unicode-Zeichen enthält:

  Can't get full path to application bundle. No such file or directory

In diesem Fall wird die iOS-App zwar im scratch-dir von PAServer erzeugt, kann aber weder auf dem iOS-Gerät noch auf dem iOS-Simulator ausgeführt werden.

Verwenden Sie außerdem System::UnicodeString und std::wstring nicht gemeinsam, wenn Sie mit C++ eine iOS-Anwendung erstellen. Der Grund dafür ist, dass std::wstring 4-Byte-Zeichen (wchar_t) verwendet und System::UnicodeString 2-Byte-Zeichen (char16_t).

Verwenden von Frameworks in iOS-Apps

RTL

Einige RTL-Units, die die grundlegende Funktionalität bereitstellen, werden für alle Plattformen verwendet, z. B. System.pas oder System.SysUtils.pas.

Einige RTL-Units können nur für iOS verwendet werden (siehe Objective-C-Frameworks für iOS). Diesen Units ist der Unit-Gültigkeitsbereich iOSapi vorangestellt.

Siehe auch iOS-C-RTL.

FireMonkey

Das FireMonkey-Framework eignet sich ideal für die iOS-Zielplattform und unterstützt auch Mac OS X, Win32 und Win64. Siehe Plattformvoraussetzungen für FireMonkey.

Objective-C-Frameworks für iOS (iOSapi)

Die RTL enthält eine Reihe von Units, die Object Pascal- und C++-Interfaces für iOS-Frameworks in der Sprache Objective-C enthalten. Diesen Units ist der Gültigkeitsbereich iOSapi vorangestellt, und sie befinden sich normalerweise im Verzeichnis /source/rtl Ihrer Produktinstallation:

  • iOSapi.AssetsLibrary
  • iOSapi.AVFoundation
  • iOSapi.CocoaTypes
  • iOSapi.CoreAudio
  • iOSapi.CoreData
  • iOSapi.CoreGraphics
  • iOSapi.CoreImage
  • iOSapi.CoreLocation
  • iOSapi.CoreMedia
  • iOSapi.CoreMotion
  • iOSapi.CoreTelephony
  • iOSapi.CoreText
  • iOSapi.CoreVideo
  • iOSapi.Foundation
  • iOSapi.GLKit
  • iOSapi.MediaPlayer
  • iOSapi.OpenGLES
  • iOSapi.QuartzCore
  • iOSapi.UIKit

Das FireMonkey-Framework basiert auf einigen dieser Units.

Dokumentation für iOS-Bibliotheken

Hilfe zu diesen APIs finden Sie in der Apple-Dokumentation unter iOS Developer Library. Appmethod stellt keine Hilfe für die Bibliotheken bereit, die Sie evtl. für den Mac benötigen.

Sie können sich als iOS-Entwickler (kostenlos) beim iOS Dev Center registrieren. Als registriertes Mitglied des iOS Developer Program (iOS-Entwicklerprogramm) können Sie Ihre Apps im App Store vertreiben (dies ist eine Voraussetzung unter anderen, wie ein Entwicklerzertifikat und ein Bereitstellungsprofil). Weitere Informationen finden Sie unter http://developer.apple.com/programs/ios/gettingstarted/.

OpenSSL-Unterstützung

Appmethod verwendet OpenSSL zur Unterstützung von HTTPS in Indy, Amazon- und Azure-Cloud-Diensten und in DataSnap-Clients, wenn Verschlüsselungsfilter aktiviert sind oder das Kommunikationsprotokoll in DataSnap-Server-Experte auf HTTPS gesetzt ist.

Wenn in Ihrer iOS-Anwendung die OpenSSL-Unterstützung benötigt wird, müssen Sie Ihr Projekt so konfigurieren, dass die erforderlichen Bibliotheken eingeschlossen sind: libcrypto und libssl.

  • Für die Plattform iOS-Gerät, die keine dynamischen Bibliotheken unterstützt, benötigen Sie eine statische Version dieser Bibliotheksdateien (libcrypto.a und libssl.a). Führen Sie zum Abrufen dieser Bibliotheksdateien einen der folgenden Schritte aus:
    Kopieren Sie anschließend diese Bibliotheksdateien in einen Ordner, in dem Ihr Projekt nach Bibliotheken sucht, z. B. in den Hauptprojektordner.
  • Führen Sie für die Zielplattform iOS-Simulator, die dynamische Bibliotheken unterstützt, einen der folgenden Schritte aus:
    • Setzen Sie mit IdOpenSSLSetLibPath() von Indy den Pfad auf den Speicherort auf dem Mac, an dem sich die Bibliotheksdateien (libcrypto.dylib und libssl.dylib) befinden.
      Hinweis: Dass der Mac die OpenSSL-Bibliotheken selbständig findet, funktioniert höchstwahrscheinlich auf der iOS-Simulator-Zielplattform nicht, da sich möglicherweise eine nicht unterstützte Version der OpenSSL-Bibliotheksdateien in den vom Simulator verwendeten Bibliotheksordnern befindet.
    • Kopieren Sie die OpenSSL-Bibliotheksdateien für den iOS-Simulator vom Mac in Ihren Projektquellordner, und stellen Sie sie für den Simulator zusammen mit Ihrer Anwendung bereit.

Fügen Sie die Unit IdSSLOpenSSLHeaders_static zu einer beliebigen uses-Klausel Ihres Projektes hinzu, um eine funktionierende Anwendung zu erstellen, die eine OpenSSL-Bibliothek verwendet (z.B. wenn sie eine Verbindung zu einem Netzdienstanbieter durch HTTPS, wie Amazon und Azure oder DataSnap herstellt).

Wenn Sie eine C++-iOS-Anwendung erstellen, müssen Sie Ihr Projekt so konfigurieren, dass die benötigten Bibliotheken in Ihr Projekt einbezogen werden. Wählen Sie Projekt > Optionen > C++-Linker, und setzen Sie "Mit SSL und Crypto linken" auf True.

Laden und Bereitstellen von Dateien

Wenn Sie bei der Bereitstellung Ihrer Anwendung für die Zielplattform iOS-Gerät Dateien zusammen mit der Anwendung weitergeben und diese zur Laufzeit geladen werden sollen, verwenden Sie den Bereitstellungs-Manager, um diese Dateien während der Bereitstellung in den Ordner StartUp\Documents zu platzieren.

ChangeToStartUpDocuments.png

Mit dem folgenden Code können Sie diese Dateien zur Laufzeit ermitteln:

In Object Pascal:

 
 TPath.Combine(TPath.GetDocumentsPath, 'filename')

In C++:

 
 System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), L"filename")

filename ist hier der Name Ihrer Datei, wie z. B. "dbdemos.gdb" im obigen Screenshot. Der Record TPath wird in der Unit System.IOUtils deklariert, daher müssen Sie System.IOUtils in die uses-Klausel aufnehmen.

Schreiben von Code nur für iOS

Sie können mit der bedingten Compilierung Code schreiben, der nur erzeugt wird, wenn es sich bei der Zielplattform um iOS handelt.

In Object Pascal können Sie die folgenden vordefinierten Bedingungen verwenden:

 
 {$IF Defined(IOS) }
 // Code for both iOS Device and iOS Simulator.
 {$ENDIF}
 
 {$IF Defined(IOS) and Defined(CPUARM) }
 // Code for iOS Device only.
 {$ENDIF}
 
 {$IF Defined(IOS) and Defined(CPUX86) }
 // Code for iOS Simulator only.
 {$ENDIF}

In C++ empfiehlt Apple die Verwendung der Definition TARGET_OS_IPHONE, die definiert ist, sofern Sie den Header TargetConditionals.h einbeziehen. Wenn Sie "System.hpp" einbeziehen, ist "TargetConditionals.h" auch einbezogen. In diesem Szenario können Sie Folgendes verwenden:

 
 #if defined(TARGET_OS_IPHONE)
 // Code for iOS Device.
 #endif

Alternativ können Sie den BCCIOSARM-Compiler anhand von Definitionen ermitteln.

Implementieren von iOS-spezifischen Features

In den folgenden Themen wird beschrieben, wie Sie bestimmte iOS-spezifische Features in Ihre Anwendungen implementieren:

Im FireMonkey-Anwendungshandbuch finden Sie die Dokumentation zu anderen, plattformunabhängigen Features.

Siehe auch