This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
iOS 向けゲームのバンドル(bundle)を作成できるのは、Mac 版の Defold エディターのみです。
iOS では、ビルドしてスマートフォンやタブレットで実行する すべての アプリに、Apple が発行した証明書とプロビジョニングプロファイルを使って署名する 必要があります 。このマニュアルでは、iOS 向けにゲームのバンドルを作成する手順を説明します。開発中は、コンテンツやコードをデバイスへ直接ホットリロード(hot reload)できるため、開発用アプリ(development app) を通じてゲームを実行する方法がよく使われます。
iOS アプリのセキュリティは、いくつかの要素で構成されています。Apple の iOS Developer Program に登録すると、必要なツールを利用できます。登録後、Apple の Developer Member Center にアクセスします。

Certificates, Identifiers & Profiles セクションには、必要なツールがすべて揃っています。ここでは、次の項目を作成、削除、編集できます。
some.prefix.*)を登録できます。App ID には、アプリが Passbook 連携や Game Center などを有効にするかどうかといった Application Service 情報を含めることができます。そのような App ID にワイルドカード識別子は使えません。Application Services を機能させるには、アプリケーションの バンドル識別子(bundle identifier) が App ID の識別子と一致する必要があります。Defold でゲームやアプリに署名するには、有効な証明書と有効なプロビジョニングプロファイルが必要です。
Member Center のホームページでできる操作の一部は、Xcode 開発環境がインストールされていれば、そこからも実行できます。

Xcode がインストールされていない場合は、iTunes で識別子を確認できます。デバイスのアイコンをクリックして、使用するデバイスを選択します。

Xcode 7 以降では、誰でも Xcode をインストールして、無料で実機を使った開発ができます。iOS Developer Program に登録する必要はありません。代わりに、Xcode が開発者用の証明書(有効期間は1年)と、特定のデバイス上のアプリ用のプロビジョニングプロファイル(有効期間は1週間)を自動的に発行します。
Single View App で十分です。Team を選択し、アプリにバンドル識別子を設定します。Defold プロジェクトで同じバンドル識別子を使用する必要があるため、バンドル識別子を控えておいてください。
Xcode がアプリの Provisioning Profile と Signing Certificate を作成したことを確認します。

アプリが動作することを確認したら、ディスク上でアプリを探します。ビルド先は、Report Navigator のビルドレポートで確認できます。

アプリを見つけて右クリックし、Show Package Contents を選択します。

embedded.mobileprovision ファイルを、ドライブ上の見つけやすい場所にコピーします。
このプロビジョニングファイルをコード署名 ID とともに使うと、Defold で1週間アプリに署名できます。
プロビジョニングの有効期限が切れたら、Xcode でアプリを再度ビルドし、上記の手順で新しい一時的なプロビジョニングファイルを取得する必要があります。
コード署名 ID とプロビジョニングプロファイルが揃ったら、エディターからゲームのスタンドアロンのアプリケーションバンドルを作成できます。メニューから Project ▸ Bundle... ▸ iOS Application... を選択します。

コード署名 ID を選択し、モバイルプロビジョニングファイルの場所を指定して、ビルドバリアント(build variant、Debug または Release)を選択します。必要に応じて Sign application チェックボックスをオフにすると、署名処理をスキップし、後で手動で署名できます。Simulator をオンにすると、デバイス用バンドルの代わりに iOS シミュレーター用の arm64_sim-ios バンドルを作成します。
シミュレーター用バンドルは、Apple Silicon Mac 上の iOS シミュレーターでのみ実行できます。署名 ID やプロビジョニングプロファイルを使わないため、Simulator がオンの場合は署名、インストール、起動のオプションが無効になります。以下で説明するように、xcrun simctl でバンドルをインストールしてください。
Create Bundle を押すと、コンピューター上のバンドルの作成先を指定するよう求められます。

アプリに使用するアイコンや起動画面のストーリーボードなどは、プロジェクト設定ファイル game.project の iOS セクション で指定します。
組み込みの iOS Info.plist には、リリース以外のビルドでエディターがターゲットを自動検出するために必要な Bonjour サービスとローカルネットワークの使用目的の説明が含まれています。カスタム Info.plist は、この組み込みのベースマニフェストを置き換えます。デバッグビルドでカスタムマニフェストを使い、ローカルネットワーク経由のターゲット検出、プロファイリング、ホットリロード、ログのストリーミングが必要な場合は、次のエントリーを含めてください。
{{^variant_release}}
<key>NSBonjourServices</key>
<array>
<string>_defold._tcp</string>
</array>
<key>NSLocalNetworkUsageDescription</key>
<string>Discover Defold targets on the local network.</string>
{{/variant_release}}
Mustache の条件により、リリースバンドルには検出用のエントリーが含まれなくなります。使用目的を説明する文字列は iOS がユーザーに表示するもので、変更やローカライズが可能です。リリース版アプリケーション自体が同じ Bonjour サービスとローカルネットワーク機能を使う場合にのみ、この条件を削除してください。
ゲームのバンドル(bundle)を作成するときは、使用するエンジンの種類を選ぶ必要があります。基本となる選択肢は次の3つです。
これらの異なるバージョンは、ビルドバリアント(Build variants)とも呼ばれます。
Project ▸ Build を選択すると、常にデバッグ版が使用されます。
この種類の実行ファイルには、便利なデバッグ機能がいくつか含まれているため、通常はゲームの開発中に使用します。
print() 関数や、ネイティブ拡張(native extension)で dmLogInfo()、dmLogError() などを使用して記録するログも出力します。これらのログの読み方は、ゲームとシステムのログのマニュアルを参照してください。このバリアントでは、デバッグ機能が無効になっています。ゲームをアプリストアでリリースする準備ができたときや、ほかの方法でプレイヤーに配布する準備ができたときは、この選択肢を選んでください。次の理由から、デバッグ機能を有効にしたままゲームをリリースすることは推奨しません。
ヘッドレス(headless)版の実行ファイルは、グラフィックスの表示もサウンドの再生も行わずに動作します。つまり、CI サーバー上でゲームの単体テストやスモークテストを実行したり、クラウド上のゲームサーバーとして動作させたりすることもできます。
エディターの Bundle ダイアログにある Install on connected device と Launch installed app のチェックボックスを使うと、ビルドしたバンドルをインストールして起動できます。

この機能を使うには、ios-deploy コマンドラインツールをインストールする必要があります。最も簡単なインストール方法は Homebrew を使うことです。
$ brew install ios-deploy
エディターが ios-deploy ツールのインストール先を検出できない場合は、環境設定 で指定する必要があります。
ストーリーボードファイルは Xcode で作成します。Xcode を起動して新しいプロジェクトを作成します。iOS と Single View App を選択します。

Next をクリックし、プロジェクトの設定に進みます。Product Name を入力します。

Create をクリックして手順を完了します。これでプロジェクトが作成されたので、ストーリーボードの作成に進みます。

画像をドラッグ&ドロップしてプロジェクトにインポートします。次に Assets.xcassets を選択し、画像を Assets.xcassets にドロップします。

LaunchScreen.storyboard を開き、プラスボタン(+)をクリックします。ダイアログに imageview と入力して、ImageView コンポーネントを探します。

Image View コンポーネントをストーリーボードにドラッグします。

Image ドロップダウンから、先ほど Assets.xcassets に追加した画像を選択します。

画像の位置を調整し、必要に応じて Label やその他の UI 要素を追加するなどの調整を行います。完了したら、アクティブなスキームを Any iOS Device (arm64)(または Generic iOS Device)に設定し、Product ▸ Build を選択します。Defold は64ビットデバイス上の iOS 15.0 以降をサポートしているため、デプロイメントターゲットは15.0以降にしてください。ビルド処理が完了するまで待ちます。
ストーリーボードで画像を使っても、それらは LaunchScreen.storyboardc に自動では含まれません。game.project の Bundle Resources フィールドを使ってリソースを同梱してください。
たとえば、Defold プロジェクト内に LaunchScreen フォルダーを作成し、その中に ios フォルダーを作成します(これらのファイルを iOS バンドルにのみ含めるために ios フォルダーが必要です)。次に、ファイルを LaunchScreen/ios/ に配置します。このパスを Bundle Resources に追加します。

最後に、コンパイルされた LaunchScreen.storyboardc ファイルを Defold プロジェクトにコピーします。Finder で次の場所を開き、LaunchScreen.storyboardc ファイルを Defold プロジェクトにコピーします。
/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Intermediates.noindex/YOUR-PRODUCT-NAME.build/Debug-iphonesimulator/YOUR-PRODUCT-NAME.build/Base.lproj/LaunchScreen.storyboardc
フォーラムユーザーの Sergey Lerg が、この手順を紹介する動画チュートリアル を作成しています。
ストーリーボードファイルが用意できたら、game.project から参照できます。
アセットカタログを使うことは、アプリケーションのアイコンを管理する方法として Apple が推奨しています。実際、App Store の掲載情報で使われるアイコンを指定する唯一の方法です。アセットカタログはストーリーボードと同じように、Xcode で作成します。Xcode を起動して新しいプロジェクトを作成します。iOS と Single View App を選択します。

Next をクリックし、プロジェクトの設定に進みます。Product Name を入力します。
![]()
Create をクリックして手順を完了します。これでプロジェクトが作成されたので、アセットカタログの作成に進みます。
![]()
サポートされている各アイコンサイズを表す空の枠に、画像をドラッグ&ドロップします。
![]()
Notifications、Settings、Spotlight 用のアイコンは追加しないでください。
完了したら、アクティブなスキームを Build -> Any iOS Device (arm64)(または Generic iOS Device)に設定し、Product -> Build を選択します。ビルド処理が完了するまで待ちます。
必ず Any iOS Device (arm64) または Generic iOS Device 向けにビルドしてください。そうしないと、ビルドをアップロードするときに ERROR ITMS-90704 エラーが発生します。
![]()
最後に、コンパイルされた Assets.car ファイルを Defold プロジェクトにコピーします。Finder で次の場所を開き、Assets.car ファイルを Defold プロジェクトにコピーします。
/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Products/Debug-iphoneos/Icons.app/Assets.car
アセットカタログファイルが用意できたら、そのファイルとアイコンを game.project から参照できます。
![]()
App Store のアイコンを game.project から参照する必要はありません。iTunes Connect へのアップロード時に、Assets.car ファイルから自動的に抽出されます。
エディターは、iOS アプリケーションバンドルである .ipa ファイルを書き出します。このファイルをデバイスにインストールするには、次のいずれかのツールを使えます。
Devices and Simulators ウィンドウios-deploy コマンドラインツールApple Configurator 2xcrun simctl コマンドラインツールを使って、Xcode から利用できる iOS シミュレーターを操作することもできます。
# show a list of available devices
xcrun simctl list
# boot an iPhone X simulator
xcrun simctl boot "iPhone X"
# install your.app to a booted simulator
xcrun simctl install booted your.app
# launch the simulator
open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
プライバシーマニフェスト(privacy manifest)は、アプリまたはサードパーティ SDK が収集するデータの種類と、使用する API のうち理由の宣言が求められるものを記録するプロパティリストです。アプリまたはサードパーティ SDK は、収集するデータの種類ごとに、また、理由の宣言が求められる API を使用する場合はそのカテゴリごとに、理由を同梱のプライバシーマニフェストファイルに記録する必要があります。
Defold では、game.project ファイルの Privacy Manifest フィールドを通じて、デフォルトのプライバシーマニフェストが提供されます。アプリケーションバンドル(application bundle)の作成時に、このプライバシーマニフェストはプロジェクトの依存関係に含まれるすべてのプライバシーマニフェストとマージされ、アプリケーションバンドルに含められます。
プライバシーマニフェストについて詳しくは、Apple の公式ドキュメントを参照してください。
App Store にゲームを提出すると、ゲームでの暗号化の使用に関する輸出コンプライアンス情報の提供を求められます。Apple はこれが必要な理由を次のように説明しています。
「TestFlight または App Store にアプリを提出すると、アプリは米国内のサーバーにアップロードされます。米国またはカナダ以外でアプリを配布する場合、法人の所在地にかかわらず、アプリには米国の輸出法が適用されます。アプリで暗号化を使用したり、暗号化にアクセスしたり、暗号化を含めたり、実装したり、組み込んだりしている場合、これは暗号化ソフトウェアの輸出とみなされます。そのため、アプリには米国の輸出コンプライアンス要件に加え、アプリを配布する国の輸入コンプライアンス要件が適用されます。」
Defold ゲームエンジンは、次の目的で暗号化を使います。
Defold エンジンにおけるこれらの暗号化の用途は、米国および欧州連合の法律で、輸出コンプライアンス書類の要件から免除されています。ほとんどの Defold プロジェクトは引き続き免除対象となりますが、ほかの暗号方式を追加すると、この扱いが変わる場合があります。プロジェクトがこれらの法律の要件と App Store の規則を満たしていることを確認する責任は、開発者にあります。詳しくは、Apple の輸出コンプライアンスの概要を参照してください。
プロジェクトが免除対象だと判断した場合は、ITSAppUsesNonExemptEncryption キーの値が False になるように、プロジェクトの Info.plist を設定します。詳しくは、アプリケーションマニフェストを参照してください。
A: Defold プロジェクトで使用しているバンドル識別子(bundle identifier)が、モバイルプロビジョニングプロファイルを生成したときに Xcode プロジェクトで使用したものと同じであることを確認してください。
A: ビルドしたアプリのエンタイトルメントの確認より:
codesign -d --ent :- /path/to/the.app
A: プロファイルのエンタイトルメントの確認より:
security cms -D -i /path/to/iOSTeamProfile.mobileprovision