サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

C++Builder 10.4.xによるプラットフォームAPIの使用

このブログでは、C++BuilderのコードからiOSAPIを使用してOSのバージョン、OS名、iOSデバイスの種類といったAppleのiOSデバイス情報を取得する方法について紹介いたします。  

C++Builderでは、以下の3つのレベルでの開発が可能です。

  1. コンポーネント(VCL および FMX)
  2. 共通ライブラリ(RTL)
  3. プラットフォームAPI (iOS, Android, macOS)

ここでは、上記のうちプラットフォームAPI(iOS、Android、macOS)の使用方法について説明いたします。

C++Builderのランタイムライブラリ(RTL)には、Objective-Cで記述されたiOSフレームワークへのC++インターフェイスを提供するヘッダーファイルが多数含まれています。さらにRTLには、Android Java ライブラリ用のインターフェイスもヘッダーファイルとして多数用意されており、ネイティブのC++コードからAndroid JavaライブラリのAPIにアクセスできます。これは、C++Builderからも、デバイスの低レベルAPIにアクセスできることを意味しています。

Apple iOSの場合、C++BuilderのRTLのインクルードファイルは、$(BDS)¥include¥iosフォルダに配置されています。$(BDS)のデフォルトパスは10.4の場合、C:Program Files (x86)EmbarcaderoStudio21.0です。

iOS用ユニットの完全なリストは、docwikiページのiOS Objective-C フレームワーク(iOSapi)に記載されています。

C++BuilderのFireMonkeyフレームワークでは、iOS上で実行する場合、上記のユニットの一部に依存しています。

iOS API に関するヘルプは、iOS Developer Libraryの Apple ドキュメントを参照してください。

必要なiOSデバイスの情報を得るためには、iOSObjective-CフレームワークのiOSapi.UIKit.hppを使用する必要があります。

注意:iOSapi.UIKit.hppには、iOSapi.Foundation.hppとMacapi.Helpers(Macapi.ObjectiveC.hpp)も含まれています。

[crayon-672accce394c3215329787/]

それでは、オペレーティングシステム(OS)のバージョン、OS名、iOSデバイスの種類などのApple iOSデバイス情報を表示するためのC++Builderのマルチデバイスアプリケーションを作成してみましょう。否の手順でアプリケーションを作成してください。

1. C++Builderマルチデバイスアプリケーション(空白のアプリケーション)を新規作成し、プロジェクトマネージャでターゲットプラットフォームを[iOS デバイス 64ビット]に変更します。

2. プロジェクトに名前をつけて保存してください。(例えば、CppiOSDeviceInfo)

3. IDEメニューの[プロジェクト|オプション|配置|プロビジョニング]を選択し、[プロビジョン プロファイル]と[デベロッパ証明書]を設定します。

4. IDEメニューの[プロジェクト|オプション|アプリケーション|バージョン情報]を選択し、CFBundleIdentifierに固有のアプリケーション識別子を入力します。例えば、Q4X27M46Z4.$(ModuleName)

5. C++BuilderマルチデバイスiOSアプリケーションでは、以下のように#include <iOSapi.UIKit.hpp>のヘッダファイルを1つインクルードします。

[crayon-672accce394c9315259051/]

6. 続いて必要なFireMonkeyコントロールをフォーム上に配置し、以下のようなユーザーインターフェイス(UI) を作成していきます。

上記のUI画面を作成するには、以下の手順に従います。

(1) 空のフォーム上にTToolBarを配置し、オブジェクトインスペクタでToolBar1のAlignプロパティをTopに変更します。

(2) ToolBar1上にTButtonを1つ配置し、オブジェクトインスペクタでButton1の各プロパティを以下のように変更します。

(3) ToolBar1上にTLabelを1つ配置し、オブジェクトインスペクタでLabel1の各プロパティを以下のように変更します。

(4) iOSデバイスの情報を表示するためにTListBoxを使用します。フォーム上にTListBoxを1つ配置し、オブジェクトインスペクタでListBox1のAlignプロパティをTopに変更します。

(5) ListBox1にOS のバージョン、OS 名、iOS デバイスの種類を表示する TListBoxItemを 3 つ追加します。TListBoxItemを追加するには、構造ペインでListBox1を選択、あるいはフォームデザイナでListBox1を選択し、マウスを右クリックして[TListBoxItemの追加]を3回選択します。そしてオブジェクトインスペクタで各TListBoxItemのプロバティを以下のように変更します。

ListBoxItem1のプロパティ

ListBoxItem2のプロパティ

ListBoxItem3のプロパティ

以上で、FireMonkeyコントロールのフォーム上への配置は完了です。

7. UI画面の完成したので、構造ペインでToolBar1上に配置されているbtnGetDeviceInfoをダブルクリックすると、OnClickイベントハンドラが作成されます。

続いて、OnClickイベントで実行するコードを記述するために、iOSapiUIKitヘッダーファイルの関数とメソッドを調べてみましょう。

8. iOSapi.UIKit.hppヘッダファイルを見るためには、C++BuilderのIDEエディタ内に記述されている#include <iOSapi.UIKit.hpp>の上にマウスを移動し、マウスを右クリックし、ポップアップのメニューから[カーソル位置のファイルを開く]を選択します。 これでiOSapi.UIKit.hppヘッダーファイルがエディタで開きます。

9. IDEエディタで iOSapi.UIKit.hppヘッダファイルを開き、エディタ上部にあるMethod Insightのドロップダウンリストに表示される一覧を見ると、使用可能なすべてのiOS.UIKit APIを確認できます。例えば、 このアプリケーションでは、iOSデバイス情報の取得が必要なので、Method Insightの検索ボックスに”Device”と入力すると、使用できるメソッドが表示されます。 たとえば、下図で表示される一覧にはUIDeviceClass.currentDeviceに加えて、使用する他のUIDeviceメソッドが表示されていることがわかります。

それでは、iOSapiUIKitヘッダーファイルの関数とメソッドが確認できたので、iOSデバイス情報の取得するためのコードを記述していきましょう。

10. btnGetDeviceInfoをダブルクリックし、OnClickのイベントハンドラ内に以下のコードを記述します。

[crayon-672accce394ca529865296/]

11. interface_di_UIDeviceが、iOSapiヘッダーファイルのどこを参照しているかを確認するには、コード内の_di_UIDevice上にマウスを移動し、Ctrlキーを押すと、_di_UIDeviceの表示がハイパーリンクに変わるので、それをクリックしてください。 (310 行目の iOSApi.UIKit.hpp ヘッダーファイルからのインターフェイスであることがわかります)

[crayon-672accce394cd756478103/]

12. iOS独自のUIDeviceクラス(TUIDevice)を使用できるようになり、TUIDeviceへのWrapを実行することでcurrentDeviceを取得できます。

[crayon-672accce394ce700463999/]

13. OS名を取得するためには、device->systemName()を実行します。

[crayon-672accce394cf446104833/]

14. OSバージョンを取得するには、device->systemVersion() を実行します。

[crayon-672accce394d0290731325/]

15. デバイスのタイプを取得するには、device-> model()を実行します。

[crayon-672accce394d1879467258/]

16. プロジェクトをビルドし、iOSデバイスへアプリをデプロイして実行すると、下図のようにiOSデバイス情報が表示されます。(今回テストで使用したiOS環境は、  iPad Air2+ iOS 14)

このブログで作成したサンプルプログラムは、こちらからダウンロードできます。

iPhone OS 14.0(Xcode 12)の利用時の注意:

SDKマネージャにiPhone OS 14.0(Xcode 12)を登録し、FireMonkeyのC++プロジェクトをビルドすると、以下のエラーが発生します。

[crayon-672accce394d2314344879/]

2020年9月の時点での最新版であるRAD Studio10.4.1を使用しても、Xcode 12には対応しておらず、プロジェクトをビルドすることができません。

DelphiでもXcode12でビルドした場合は同様にエラーが発生します。詳しくは、こちらの情報をご覧ください。

このエラーは、RAD Studio 10.4.2で修正を予定しています。

10.4.2がリリースされるまでの間、SDKマネージャにiPhone OS 14.0(Xcode 12)ではなく、iPhone OS 13.x(Xcode 11.x)を登録し、ビルドしてください。

iPhone OSを変更する方法は、こちらを参照ください。

モバイルバージョンを終了