macOS アプリケーション開発

提供: RAD Studio
移動先: 案内検索

作成できるマルチデバイス アプリケーションの種類 への移動

RAD Studio を使用して macOS アプリケーションを作成でき、Mac を iOS アプリケーション用に必要な中間プラットフォームとして使用することができます。

ハードウェアの観点では、開発 PC の加え、Mac がその開発コンピュータ(RAD Studio がインストールされているもの)に接続されている必要があります。 たとえば、LAN(ローカル エリア ネットワーク)などを利用してです。「Mac と PC を連携させる」も参照してください。

macOS 用 Delphi コンパイラは DCCOSX で、macOS 64 ビット用は DCCOSX64 です。

macOS 用 C++ コンパイラは BCCOSX です。macOS 用 C++ リンカは XLINK です。

macOS 用の開発環境のセットアップ

  • 物理接続: RAD Studio がターゲットの Mac に接続できることを確認します。
    ただし、macOS アプリケーションに接続プロファイルが割り当てられていないときに、接続プロファイルが必要な操作を行うと、IDE から次のメッセージが表示されます。
    [この操作には接続プロファイルが必要ですが、まだ割り当てられていません。
    プロファイルを今すぐ割り当てまたは作成しますか?]
    続いて、接続プロファイルを作成するために必要な各手順が IDE により示されます。 [プラットフォーム プロパティ]ダイアログで、既存のプロファイルをターゲット プラットフォームに割り当てたり、あるいは、[新規追加...]を選択して接続プロファイルを新規作成し、ターゲット プラットフォームに割り当てることができます。
  • プラットフォーム アシスタント: Mac 上で、プラットフォーム アシスタントをインストールし、それを実行します。

ターゲット プラットフォーム IDE でターゲット プラットフォームを設定します。 Delphi または C++Builder のマルチデバイス アプリケーションを作成する際、RAD Studio は Win32 をデフォルト ターゲット プラットフォームとしています。

  • ターゲット プラットフォームを macOS に変更するには:
    1. ターゲット プラットフォーム ノード(プロジェクト マネージャ内)を右クリックします。
    2. [プラットフォームの追加]をクリックし、[macOS 32 ビット]または[macOS 64 ビット]を選択します。
    アプリケーションで VCL を使用している場合、[macOS]オプションは利用できません(VCL では macOS をサポートしていません)。
  • 接続プロファイル IDE で接続プロファイルを作成し、割り当てます(接続プロファイルは、ターゲット マシンへの接続の特性を記述した一連の設定です。「開発用 PC で接続プロファイルを作成およびテストする」を参照)。
  • C++ 開発の場合:
    • Xcode および Xcode コマンド ライン ツール:
      C++ macOS アプリケーションの場合、Mac 上に Xcode をインストールする必要があります。また、アプリケーションを Mac App Store にデプロイするには、Xcode コマンドライン ツールも同様にインストールする必要があります。
    • SDK:
      C++ の場合には、一連のファイル(ヘッダーおよびライブラリ)から構成される SDK を追加してください。これは、プラットフォーム アシスタント サーバーが稼働しているマシンから開発用システムに取り出され、コンパイルおよびリンクに使用されます。 「macOS または iOS SDK の追加」を参照してください。

アプリケーションの開発

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

このセクションでは、マルチデバイス アプリケーション開発のうち、macOS ターゲット プラットフォームに特有の部分について説明します。 一般的なマルチデバイス開発のドキュメントは、「マルチデバイス アプリケーションの開発」を参照してください。

RTL

基本機能を備えた一部の RTL ユニット(System.pas や System.SysUtils.pas など)は Mac と Windows で共通です。

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

macOS C RTL」も参照してください。

FireMonkey

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

VCL(Mac では使用不可)

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

Mac C RTL(C/C++ 開発用)

BCCOSX では、複数の場所にあるコンパイル ヘッダー ファイルを使用します。

C RTL は次の 2 つの場所に分散配置されます。

インクルード パスの種類

パス

説明

標準

$(BDS)\include\osx\crtl

このディレクトリには、RAD Studio 付属の C/C++ RTL ヘッダー ファイル(.h)が含まれます。 これらのファイルの一部には、$(SYSROOT)\usr\include の C/C++ ヘッダー ファイルがあります。 詳細は、「macOS C RTL」を参照

リモート

$(SYSROOT)\usr\include

このディレクトリには、Windows にキャッシュされた C/C++ RTL の macOS ヘッダー ファイルが含まれます。 これが、SDK ルート ディレクトリになります。

コンパイル用に、RAD Studio では、Mac 上の /usr/include ディレクトリにあるヘッダー ファイルが必要です。 Mac 上にこのようなディレクトリがない場合、Xcode をインストールする必要があります。SDK マネージャ ページから SDK を追加する際、PAServer.exe (プラットフォーム アシスタント サーバー)を利用して、RAD Studio は自動的に、ヘッダー ファイルを Mac から Windows へ(/usr/include から $(SYSROOT)\usr\include へ)コピーします。

多くの macOS C RTL は標準であり、非標準文字はサポートされていません。

Mac C フレームワーク(C/C++ 開発用)

macOS フレームワークには多様で便利な関数が用意されており、プラットフォーム固有のソフトウェアを記述できます。 一部のフレームワークは C ベースで、RAD Studio C++Builder プロジェクトに含めることができます。 Objective-C ベースのフレームワークもあり(Foundation など)、これは Delphi インターフェイスを通じてのみ使用できます(以下のセクションを参照)。

Mac C フレームワークを RAD Studio プロジェクトに含めるには、使用する SDK を編集する必要があります。 SDK マネージャ ページを開き、右側にあるNew.png[新しいパス項目を追加])ボタンをクリックします。[リモート パス項目の追加]または[リモート パス項目の編集]ダイアログ ボックスで、次の項目を指定します。

  • フレームワーク リモート パス(例: /System/Library/Frameworks
  • フレームワーク名(例: CoreFoundation

[SDK マネージャ]ページに戻り、[ローカル ファイル キャッシュの更新]をクリックして SDK ローカル ファイルを更新します。

BCCOSX でのフレームワーク利用の詳細については、「--framework」および「OpenGL Multicolor Tetrahedron(多色四面体)(C++)」を参照してください。

Mac Objective-C フレームワーク(Macapi)

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

  • Macapi.AppKit
  • Macapi.AVFoundation
  • Macapi.CocoaTypes
  • Macapi.Consts
  • Macapi.CoreFoundation
  • Macapi.CoreGraphics
  • Macapi.CoreServices
  • Macapi.CoreText
  • Macapi.Foundation
  • Macapi.ImageIO
  • Macapi.Mach
  • Macapi.ObjCRuntime
  • Macapi.ObjectiveC
  • Macapi.OCMarshal
  • Macapi.OpenGL
  • Macapi.QuartzCore
  • Macapi.Security
  • Macapi.SystemConfiguration

FireMonkey フレームワークは、これらのユニットに依存しています。

これらの API のヘルプについては、Apple 社のドキュメント「Mac 開発者ライブラリ」を参照してください。

あいまいさの解消: macOS での 'Byte' と 'System::Byte'

Delphi ヘッダーにも OSX SDK ヘッダーにも Byte 型が定義されています。 そのため、普通の Byte 型を使用する際に、あいまいさのエラーが発生するおそれがあります。

たとえば、次のようなコードがあるとします。

#include <System.hpp>
DynamicArray<Byte> AByteArray;

macOS の場合にこれをコンパイルすると、次のように、「E2015 'function1' と 'function2' の区別があいまいです 」というエラーが発生します。

Error E2015 t.cpp 2: Ambiguity between 'Byte' and 'System::Byte'
*** 1 errors in Compile ***

この問題を解決するには、使用する Byte 型を明示的に指定しなければなりません。つまり、次のうちのどちらかを指定します。

Delphi macOS SDK
System::Byte
::Byte

たとえば、次のコードをコンパイルすると、エラーは発生しません。

#include <System.hpp>
DynamicArray<System::Byte> AByteArray;

例外処理

System.SysUtils には複数の例外クラス(言語固有ではない例外/ハードウェア例外を表わす)が含まれます。 これらの例外クラスは EExternal から派生したクラスです。 次の例外カテゴリをカバーしています。

  • 浮動小数点例外
  • 整数除算例外
  • Ctrl+C、Ctrl+Break
  • 特権命令違反
  • メモリ アクセス違反

Mac では、EExternal 例外の多くは、Mach 例外を基にしています。 Mach 例外を基にしていないものは、Ctrl+C(EControlC)および Ctrl+Break(EQuit)のみです。

アセンブリ ルーチンを使用している場合、「PC マップ例外」の「アセンブリ ルーチンのアンワインド」セクションを参照してください。

Mach 例外の処理

Mach 例外では、System.SysUtils からの RTL は、オペレーティング システムからの例外通知をリスンするスレッドを作成します。 ユーザーのコードに System.SysUtils ユニットをインクルードするだけです。 リスン スレッドが Mach 例外の通知を受信すると、EExternal から派生した、対応する Pascal 言語例外に、適切に Mach 例外を変換し、基の Mach 例外で生成されたユーザー スレッドにその Pascal 例外を発生/送出します。

直接 Mach 例外を処理する場合は、System.SysUtils をインクルードすることによって、専用スレッドが Mach 例外をリスンするために起動されることに注意してください。 System.Internal.MachExceptions.pas ソースを調べ、RTL と干渉していないことを確認できます。

Ctrl+C と Ctrl+Break

Ctrl+C および Ctrl+Break では、アプリケーションにシグナル ハンドラを設定します。 macOS では Ctrl+C および Ctrl+Break 用の Mach 例外を生成しません。

SIGINT および SIGQUIT ハンドラは、シェル アプリケーションが Ctrl+C および Ctrl+Break を処理する必要がある場合の標準的な定義に適合しています。

SIGINT および SIGQUIT ハンドラをオーバーライドしないことをお勧めします。 オーバーライドすると、EControlC および EQuit 例外を受信できません。

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

macOS のドキュメントは、macOS 開発者ライブラリで入手できます。 RAD Studio には、Mac で使用するのに必要なライブラリに関するヘルプは用意されていません。

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

完成した macOS アプリケーションの配置

macOS アプリケーションをリリースする前に、毎回、すべての設定が適切に構成されているかどうかを確認しなければなりません。 「macOS アプリケーションの配置準備」を参照してください。

macOS アプリケーションを自分で配布する場合は、アプリケーションをビルドして、生成されたバイナリをクライアントに配布するだけです。 詳細については、Apple ドキュメントの「Distributing Applications Outside the Mac App Store」を参照してください。

そうではなく、アプリケーションを Mac App Store で公開したい場合には、追加の手順が必要です。 詳しい手順については、「Mac App Store へのアプリケーションの提出」を参照してください。

プロジェクト配置の処理(macOS 64 ビット)

macOS 64 ビット ターゲット プラットフォームが自動的にデモ アプリケーション プロジェクトに追加される際、macOS 64 ビット ターゲット プラットフォームの配置リストには、macOS 32 ビット ターゲット プラットフォームからデフォルトの項目以外、継承されません。macOS 64 ビット ターゲット プラットフォームの場合、デフォルトの項目以外については、手動でプロジェクト配置リストに追加する必要があります。これには、次の手順に従います:

  1. IDE で、[プロジェクト|配置]に移動し、[配置]タグを開きます。
  2. [すべての構成 - macOS 32 ビット プラットフォーム]の項目を [すべての構成 - macOS 64 ビット プラットフォーム]と比べます。
Comparison.png
例: FMX.Mobile.VideoPlayback sample project

macOS 64 ビット ターゲット プラットフォームの配置リストで、項目が抜けていた場合には、次の手順で macOS 64 ビットに追加します:

  1. [すべての構成 - macOS 32 ビット プラットフォーム]をコンボ ボックスから選択します。
  2. OSX32 にはあるが OSX64 にはないデフォルトではない項目を、[プラットフォーム]列でクリックします。
  3. プラットフォーム 列の値をクリックすると、省略記号のボタン(Ellipsis.png)が表示されます。
  4. 省略ボタンをクリックします。
  5. OSX64[プラットフォームの選択]ウィンドウで選択します。
  6. [OK]をクリックします。

コンボ ボックスから[すべての設定 - macOS 64 ビット プラットフォーム]を選択し、 [リモート名]列の値が macOS 32 ビット ターゲット プラットフォームの配置リストの値と一致しているかを確認します。

macOS のトピック

関連項目

コード サンプル