iOS アプリケーションの作成

FireMonkey アプリケーション ガイド への移動

iOS モバイル アプリケーション開発 への移動


iOS アプリケーションを作成するには:

[ファイル|新規作成|FireMonkey モバイル アプリケーション - Delphi]
[ファイル|新規作成|FireMonkey モバイル アプリケーション - C++Builder]

iOS フォーム

FireMonkey モバイル フォームを使用して、デスクトップ アプリケーションの場合と同じようにして、追加のフォームを作成することができます。

iOS フォームには、ハードウェア依存の特有のプロパティがあります。たとえば次のように、iOS フォームは形やサイズが標準の FireMonkey デスクトップ フォームとは異なります。

  • FireMonkey iOS アプリケーションの場合、フォームは縦長の形です。
    • ClientHeight = 480 ピクセル
    • ClientWidth = 320 ピクセル
  • FireMonkey デスクトップ アプリケーションの場合、フォームは横長の形です。
    • ClientHeight = 480 ピクセル
    • ClientWidth = 600 ピクセル

iOS アプリケーションでのフォームの解放

一般に、モバイル アプリケーションでは一度に多数のフォームをメモリに格納しておくべきではありません。モバイル デバイスはメモリの制約が厳しく、フォームはメモリを集中的に使用するオブジェクトだからです。

方針としては、表示したフォームが非表示になったら解放することをお勧めします(それには、OnClose イベント ハンドラを使用し CloseEventcaFree に設定するか、あるいはフォームの System.TObject.DisposeOf メソッドを呼び出します)。

複数のページを持つタブ コントロールを使用すると、フォーム状のコントロールを複数表示するための、メモリ効率の良いメカニズムになる可能性があります。

FireMonkey iOS のワークフロー

FireMonkey iOS 開発プロセスの段階によって、開発用プラットフォームと Mac のどちらかで作業を行う必要があります。必要なセットアップ手順と RAD Studio IDE でのプロジェクトのコンパイルが完了したら、プロジェクトを実行するときに、実行可能ファイルと必要なライブラリが Mac に転送されます。

重要:開始前の作業

  • 初めての iOS プロジェクトに取りかかる前に、Windows と Mac の両方で、重要なインストールおよびセットアップの手順をいくつか実施しなければなりません。たとえば、Mac でのアプリケーションのテストに使用する具体的な開発用 iOS デバイスに対して、開発用プロビジョニング プロファイルが必要になります。

その後、一般的には以下の順序でプロジェクトを開発します。

RAD Studio での手順

  1. 次の FireMonkey iOS ウィザードを使ってプロジェクトを開始します。
    [ファイル|新規作成|その他...|Delphi プロジェクト|FireMonkey モバイル アプリケーション
    [ファイル|新規作成|その他...|C++Builder プロジェクト|FireMonkey モバイル アプリケーション
  2. [タブ][空のアプリケーション]など、表示されるテンプレートおよびアプリケーションの中から 1 つを選択します。
  3. iOS フォームがフォーム デザイナに表示されます。
    RAD Studio のフォーム デザイナコード エディタを使って、フォームにコントロールを追加し、プロパティやイベントの値を設定し、それに必要なコードを記述します。
ヒント: iOS アプリケーションを作成するには、まず「モバイル チュートリアル:モバイル アプリケーション開発(iOS および Android)」に目を通してください。

Mac 上および iOS シミュレータまたは接続された iOS デバイスでの手順

  1. プロトタイプを作成することが目的であれば、iOS シミュレータ ターゲット プラットフォームを使ってプロジェクトを実行し、デバッグします。
    • ヒント:プロジェクトを作成した後に少なくとも 1 度(およびプロジェクトを変更したり新しいファイルを追加するたびに)、アプリケーションを iOS シミュレータ上で実行します。
  2. アプリケーションを実行するデバイスを選択します。たとえば次のようなものです。
    • 初期のデバッグには組み込みの iOS シミュレータ
    • Mac に接続された物理 iOS デバイス

iOS デバイス上で iOS アプリケーションを実行するには:

  • iOS デバイスを USB ケーブルで Mac と接続しておく必要があります。
  • [SDK マネージャ]ページから新しい SDK を追加する必要があります。新しい SDK を追加した後で、選択したバージョンの iOS SDK が Mac から開発用システムに取り込まれます。
  • 開発用 iOS デバイスでアプリケーションをテストするための開発用プロビジョニング プロファイルを作成しなければなりません。
    プロビジョニング プロファイルは、開発者の Apple デベロッパ ID を以下と関連付けるためのものです。
    • 実行する具体的な iOS アプリケーション(App ID で特定)
    • アプリケーションをそこで実行する具体的な iOS デバイス(デバイス ID つまり UDID で特定)
      40 文字の UDID は Xcode または iTunes で確認できます。詳細は https://developer.apple.com/ios/manage/devices/howto.action を参照してください。

Mac での iOS アプリケーション開発ワークフローの詳細は、http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/00-About_the_iOS_Application_Development_Workflow/introduction.html を参照してください。

iOS アプリケーションとデスクトップ アプリケーションの推奨コンポーネントの比較

iOS プラットフォームでは、ネイティブのスタイルおよび体裁はデスクトップ アプリケーションのスタイルおよび体裁とは異なります。つまり、iOS アプリケーションは、コンポーネントの体裁と配置に関する iOS 固有のルールに従わなければなりません。

たとえば、デスクトップ アプリケーションで一般に使用される FireMonkey コンポーネントと iOS アプリケーションに推奨される FireMonkey コンポーネントを比較した一覧表を以下に示します。

主要コンポーネントの違い:

デスクトップ コンポーネント iOS コンポーネント

TTreeView

TListView
TListBox

TRadioGroup
TRadioButton

TSegmentedControl
ListBox

TCheckBox

TSwitch

TMenuBar
TMainMenu

ボタンの付いた TToolBar
TTabControl


iOS アプリケーションに推奨される FireMonkey コンポーネント:

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

(体裁とスタイルの具体的な推奨事項など)詳細については、EDN の記事『iOS User Interface Design with Delphi XE4(Delphi XE4 での iOS ユーザー インターフェイス設計)』を参照してください。

たとえば、この EDN 記事には、TListBox、TListView、TToolBar、TSpeedButton などの一般的なコンポーネントを iOS アプリケーションで使用するためのヒントに加え、iOS プラットフォームで設定アプリケーションを作成する方法を示す詳細なデモも含まれています。

個々のフレームのサンプル(Delphi XE4 での iOS ユーザー インターフェイス設計からの抜粋)

ListBoxRules.png
TListBox のルール

ListViewRules.png
TListView のルール

SettingsDemo.png
Settings デモ(設定アプリケーション)


FireMonkey iOS アプリケーションのコンポーネントに関する制限事項

RAD Studio で iOS アプリケーションを設計しているときには、iOS デバイスでサポートされているコンポーネントしか使用してはなりません。ただし、[ツール パレット]には Windows 専用のコンポーネントや iOS でサポートされていないコンポーネントが含まれている可能性があるので注意してください。

iOS ターゲット プラットフォームでは国際(Unicode)文字を使用できない

国際(Unicode)文字は、iOS アプリケーションのいくつかの箇所では使用できません。たとえば、hélèneéléments などの名前が含まれていると、iOS アプリケーションが動作しないおそれがあります。

具体的には、以下の箇所では国際文字を使用しないでください。

  • Windows ユーザー名
  • 接続プロファイル名
  • iOS プロジェクト名
  • アプリケーション バンドル(.app 実行可能ファイル)の名前

Unicode 文字が含まれている iOS アプリケーションをビルドしようとすると、以下のメッセージが表示されます。

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

この場合、iOS アプリケーションは PAServerスクラッチ ディレクトリに生成はされますが、iOS デバイスでも iOS シミュレータでも動作しません。

さらに、C++ を使用して iOS アプリケーションを作成する場合は、System::UnicodeStringstd::wstring と混在させて使用しないでください。その理由は、std::wstring では 4 バイト文字(wchar_t)が使用されるのに対して、System::UnicodeString では 2 バイト文字(char16_t)が使用されるからです。

iOS アプリケーションでのフレームワークの使用

RTL

基本機能を備えた一部の RTL ユニット(System.pas や System.SysUtils.pas など)は、すべてのプラットフォームで共通です。

多くの RTL ユニットは iOS 専用です(「iOS Objective-C フレームワーク」を参照)。これらのユニットは先頭に iOSapi が付いたユニット スコープです。

FireMonkey

FireMonkey フレームワークiOS ターゲット プラットフォームで使用するには理想的であり、Mac OS X、Win32、Win64 でもサポートされています。「FireMonkey プラットフォームに必要な準備」を参照してください。

VCL(iOS または Mac では使用不可)

VCL は Windows(32 ビット版および 64 ビット版)でしか使用できません。

iOS Objective-C フレームワーク(iOSapi)

RTL には、Objective-C で書かれた iOS フレームワークの Delphi および C++ インターフェイスを提供するいくつかのユニットが含まれています。これらのユニット スコープは iOSapi で、通常は製品インストール ディレクトリの /source/rtl ディレクトリに含まれています。

  • 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

FireMonkey フレームワークはこれらのユニットの一部により実現されます。

iOS ライブラリのドキュメント

これらの API のヘルプについては、Apple 社のドキュメント「iOS 開発者ライブラリ」を参照してください。RAD Studio には、Mac で使用するのに必要なライブラリに関するヘルプは用意されていません。

iOS 開発者として iOS Dev Center に登録することもできます(無料)。iOS デベロッパ プログラムの登録メンバになると、App Store でアプリケーションを配布できます(それには、開発者証明書やプロビジョニング プロファイルといったその他の要件も伴います)。詳細は、http://developer.apple.com/programs/ios/gettingstarted/ を参照してください。

OpenSSL のサポート

RAD Studio では、Indy、Amazon、Azure の各クラウド サービスや DataSnap クライアント(暗号化フィルタが有効な場合)での HTTP サポートに OpenSSL を使用しています。iOS アプリケーションで OpenSSL のサポートが必要な場合は、必要なライブラリ(libcrypto および libssl)を組み込むようにプロジェクトを構成する必要があります。

  • (動的ライブラリをサポートしていない)iOS デバイス ターゲット プラットフォームの場合は、これらのライブラリ ファイルの静的バージョン(libcrypto.a および libssl.a)が必要です。これらのライブラリ ファイルを取得するには、次のいずれかを行います。
    • GitHub からプリコンパイル済みライブラリをダウンロードします。
    • これらのライブラリをソースからビルドします。GitHub からソースをダウンロードし、『Tutorial: Script for Building OpenSSL for iOS (iPhone/iPad)(チュートリアル:OpenSSL を iOS(iPhone/iPad)向けにビルドするためのスクリプト)』 で説明されている手順に従って、これらのライブラリをコンパイルします。
    これらのライブラリ ファイルが得られたら、プロジェクトのライブラリが検索されるフォルダ(メイン プロジェクト フォルダなど)にそれらをコピーします。
  • (動的ライブラリをサポートしている)iOS シミュレータ ターゲット プラットフォームの場合は、次のいずれかを行います。
    • IdOpenSSLSetLibPath を使用し、Mac 上のライブラリ ファイル(libcrypto.dylib および libssl.dylib)のパスを設定します。
      メモ: Mac による OpenSSL ライブラリの自動検索は、iOS シミュレータ ターゲット プラットフォームの場合はうまくいかないおそれがあります。シミュレータで使用されるライブラリ フォルダに非対応版の OpenSSL ライブラリ ファイルが入っている可能性があるためです。
    • iOS シミュレータの OpenSSL ライブラリ ファイルを Mac からプロジェクトのソース フォルダにコピーし、それらをアプリケーションと一緒にシミュレータに配置します。

C++ で iOS アプリケーションを作成する場合は、必要なライブラリを取得したあと、それらとリンクするようにプロジェクトを構成する必要があります。[プロジェクト|オプション...|C++ リンカを選択し、[SSL および Crypto とリンクする]を[true]に設定します。

ファイルの読み込みと配置

iOS デバイス ターゲット プラットフォーム向けにアプリケーションを配置する際、ファイルをアプリケーションと一緒に提供してそれらのファイルを実行時に読み込ませるつもりであれば、配置マネージャを使用して、配置時にファイルを StartUp\Documents フォルダに格納します。

ChangeToStartUpDocuments.png

以下のコードを使用すると、これらのファイルを実行時に特定できます。

Delphi の場合:

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

C++ の場合:

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

ここで、filename は、上記スクリーンショットの 'dbdemos.gdb' のようなファイルの名前です。TPath レコードは System.IOUtils ユニットで宣言されているため、uses 句に System.IOUtils を追加する必要があります。

iOS 専用コードの作成

条件付きコンパイルを使用して、ターゲット プラットフォームが iOS の場合にのみビルドされるコードを書くことができます。

Delphi では、次のような定義済みの条件シンボルを使用できます。

 {$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}

C++ では、TARGET_OS_IPHONE という条件定義を使用することを Apple 社は推奨しています。これは、TargetConditionals.h ヘッダーをインクルードした場合に定義されます。"System.hpp" をインクルードする場合は、"TargetConditionals.h" もインクルードされます。この場合、次のように使用できます。

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

あるいは、BCCIOSARM コンパイラを検出するための条件定義を使用することもできます。

関連項目