このブログでは、C++BuilderのコードからiOSAPIを使用してOSのバージョン、OS名、iOSデバイスの種類といったAppleのiOSデバイス情報を取得する方法について紹介いたします。
C++Builderでは、以下の3つのレベルでの開発が可能です。
- コンポーネント(VCL および FMX)
- 共通ライブラリ(RTL)
- プラットフォーム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-674072db268b9173086546/]それでは、オペレーティングシステム(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-674072db268c0527168501/]6. 続いて必要なFireMonkeyコントロールをフォーム上に配置し、以下のようなユーザーインターフェイス(UI) を作成していきます。
上記のUI画面を作成するには、以下の手順に従います。
(1) 空のフォーム上にTToolBarを配置し、オブジェクトインスペクタでToolBar1のAlignプロパティをTopに変更します。
(2) ToolBar1上にTButtonを1つ配置し、オブジェクトインスペクタでButton1の各プロパティを以下のように変更します。
- AlignプロパティをRightに変更
- NameプロパティをbtnGetDeviceInfoに変更
- StyleLookupプロパティをrefreshtoolbuttonborderedに変更
(3) ToolBar1上にTLabelを1つ配置し、オブジェクトインスペクタでLabel1の各プロパティを以下のように変更します。
- AlignプロパティをContentsに変更
- TextプロパティをDevice Informationに変更
(4) iOSデバイスの情報を表示するためにTListBoxを使用します。フォーム上にTListBoxを1つ配置し、オブジェクトインスペクタでListBox1のAlignプロパティをTopに変更します。
(5) ListBox1にOS のバージョン、OS 名、iOS デバイスの種類を表示する TListBoxItemを 3 つ追加します。TListBoxItemを追加するには、構造ペインでListBox1を選択、あるいはフォームデザイナでListBox1を選択し、マウスを右クリックして[TListBoxItemの追加]を3回選択します。そしてオブジェクトインスペクタで各TListBoxItemのプロバティを以下のように変更します。
ListBoxItem1のプロパティ
- TextプロパティをOS Name:に変更
- NameプロパティをlbOSNameに変更
ListBoxItem2のプロパティ
- TextプロパティをDevice Type:に変更
- NameプロパティをlbDeviceTypeに変更
ListBoxItem3のプロパティ
- TextプロパティをOS Version:に変更
- NameプロパティをlbOSVersionに変更
以上で、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-674072db268c2447235192/]11. interface_di_UIDeviceが、iOSapiヘッダーファイルのどこを参照しているかを確認するには、コード内の_di_UIDevice上にマウスを移動し、Ctrlキーを押すと、_di_UIDeviceの表示がハイパーリンクに変わるので、それをクリックしてください。 (310 行目の iOSApi.UIKit.hpp ヘッダーファイルからのインターフェイスであることがわかります)
[crayon-674072db268c5298529901/]12. iOS独自のUIDeviceクラス(TUIDevice)を使用できるようになり、TUIDeviceへのWrapを実行することでcurrentDeviceを取得できます。
[crayon-674072db268c6337416670/]13. OS名を取得するためには、device->systemName()を実行します。
[crayon-674072db268c7992243119/]14. OSバージョンを取得するには、device->systemVersion() を実行します。
[crayon-674072db268c8524754921/]15. デバイスのタイプを取得するには、device-> model()を実行します。
[crayon-674072db268c9570921180/]16. プロジェクトをビルドし、iOSデバイスへアプリをデプロイして実行すると、下図のようにiOSデバイス情報が表示されます。(今回テストで使用したiOS環境は、 iPad Air2+ iOS 14)
このブログで作成したサンプルプログラムは、こちらからダウンロードできます。
iPhone OS 14.0(Xcode 12)の利用時の注意:
SDKマネージャにiPhone OS 14.0(Xcode 12)を登録し、FireMonkeyのC++プロジェクトをビルドすると、以下のエラーが発生します。
[crayon-674072db268ca471900330/]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を変更する方法は、こちらを参照ください。