ガイドを検索

iOSビルドをゼロから

WindowsやLinuxでコードを書き、クラウドMacでiOSビルド。まず接続し、ツールを確認してから、依存関係と署名を設定します。

注文済みの方は、まずコンソールでインスタンスの状態と接続情報をご確認ください。決済情報は接続パスワードではありません。

まず環境を整える

この3ステップでは接続とツールだけを確認します。まだ本番用証明書は読み込まず、依存関係を一度にすべて更新するのも避けてください。

  1. 接続情報を確認

    コンソールにログインし、該当する注文とインスタンスの詳細を開きます。ノードと稼働状態に加え、画面に表示された接続アドレス、ポート、認証情報を確認してください。

    接続アドレスは注文番号ではありません。インスタンスの準備中は、まず状態を確認してください。エラーが表示された場合は、設定を何度もリセットせず、注文番号を添えてチケットを送信してください。

  2. macOSにログイン

    ローカルのVNCクライアントに、アドレス、ポート、パスワードをそれぞれ入力します。初回接続では解像度を低めに設定し、キーボード、マウス、ウィンドウを正常に操作できるか確認してください。

    コマンドラインを使う場合は、インスタンスに表示されたSSH接続情報を使用します。初回接続時はホストフィンガープリントを確認してください。予期せず変わっていた場合は認証情報を入力せず、原因を確認してください。

    デスクトップの動作が重くても、ビルドが停止したとは限りません。まずローカルのネットワークを確認し、画面の解像度を下げてください。ビルドのみ行う場合はSSHを利用できます。

  3. 開発ツールを確認

    Xcodeが完全にインストールされていることを確認し、一度起動してコンポーネントを初期化します。コマンドラインツールは、独立したツールディレクトリではなく、今回のビルドで使用するXcodeを参照している必要があります。

    xcode-select -p
    xcodebuild -version
    xcodebuild -showsdks

    iOS SDKが見つからない場合は、まずXcodeのコンポーネントを追加してください。ライセンス同意のメッセージが表示された場合のみ対応し、ディレクトリの切り替えでSDKの不足を隠さないでください。

Flutterを使う

まずdoctorを確認

プロジェクト、依存関係のロックファイル、必要なリソースをまとめてMacに転送します。既存プロジェクトで指定されたFlutterのバージョンを使い、まず環境の問題を解消してから、アプリのコードを変更してください。

必要なツールをそろえる

Flutter SDK、Xcode一式、CocoaPodsを用意します。プロジェクトでFlutterやRubyのツールチェーンのバージョンが指定されている場合は、リポジトリのルールに従ってインストールし、ローカルとビルドマシンで異なるバージョンを使わないようにしてください。

診断を実行し、iOSツールチェーンの警告を1つずつ確認します。デバイス接続に関する警告はアーカイブを妨げない場合がありますが、Xcode、SDK、署名設定が不足している場合は先に対応が必要です。

2種類の検証を使い分ける

コンパイルできるかだけを確認する場合は、まず署名なしのreleaseビルドを実行できます。これは署名済みインストールパッケージの代わりにはならず、そのまま配布することもできません。

.ipaを書き出す場合は、XcodeのSigning & CapabilitiesでTeam、Bundle Identifier、証明書、プロビジョニングプロファイルを確認してから、本番用のビルドを実行します。

順番に実行

flutter --version
flutter doctor -v
flutter pub get
flutter build ios --release --no-codesign
flutter build ipa --release

最後のコマンドを実行するには、署名設定がすべて整っている必要があります。出力先と書き出し方法は、使用中のFlutterのバージョンとコマンド出力に従ってください。完了後は成果物をローカルにダウンロードして検証します。

失敗した工程を確認してから、キャッシュを消すか判断
エラーの手がかり まず確認すること 最初にしないこと
CocoaPods not installed CocoaPodsがインストールされているか、現在のターミナルからpodコマンドを実行できるか確認してください。 iOSプロジェクト全体をいきなり削除しないでください。
No profiles / signing Bundle Identifier、Team、書き出し形式が一致しているか確認し、プロビジョニングプロファイルの有効期限も確認してください。 依存関係のエラーと署名エラーを混同して対処しないでください。
Deployment target プラグインの要件を確認し、プロジェクトとPodfileの最低iOSバージョンをそろえてから依存関係をインストールしてください。 1つのtargetだけ変更して、すぐにアーカイブを再試行しないでください。

React Nativeを使う

依存関係のバージョンを固定

まずリポジトリで指定されているNode、Ruby、パッケージマネージャーを確認します。チームで使っている環境をビルドマシンで再現できるよう、ロックファイルを保持してください。

先にJavaScriptの依存関係をインストール

プロジェクトのロックファイルに応じて、npm、Yarnなど既存のパッケージマネージャーを選びます。以下はpackage-lock.jsonがあるnpmプロジェクト向けのコマンドです。それ以外のプロジェクトでは、既存のインストールコマンドを使用してください。

リポジトリにGemfileがある場合は、BundlerでCocoaPodsのバージョンを固定します。Gemfileがない場合に限り、プロジェクトで指定されたバージョンのpodコマンドを直接使ってください。グローバルとプロジェクトのツールチェーンを混在させないでください。

次にworkspaceを開く

Podsのインストール後は、iOSディレクトリ内の.xcworkspaceを開きます。.xcodeprojだけを開かないでください。実際に使うschemeを選び、Release設定でアーカイブします。

Archiveの前にバージョン番号、ビルド番号、署名を確認します。アーカイブに成功したら、Organizerでテスト用または配布用に書き出してください。シミュレーター向けのビルド成果物は、実機用インストールパッケージの代わりにはなりません。

プロジェクト環境を再現

node --version
ruby --version
npm ci
bundle install
cd ios
bundle exec pod install

Bundlerの2つのコマンドは、プロジェクトにGemfileがある場合に使用します。インストールログで失敗したら、まず最初のエラーと関連するバージョンを記録してから修正を試してください。

Hermesを個別に確認

Hermesのコンパイルに失敗した場合は、React Nativeのバージョン、Podsのロックファイル、Xcodeのバージョン、ネイティブ依存関係の互換性を確認してください。ログにNodeを見つけられないとある場合は、ビルドスクリプトが使用するNodeのパスを確認します。最初からHermesを無効にしたり、ロックファイルをすべて削除したりしないでください。プロジェクトの動作や依存関係が変わるおそれがあります。

Unityを使う

プロジェクトを書き出して移行

Windowsでゲームの編集を続け、クラウドMacでXcodeのコンパイルと署名を行います。移行するのは完全な書き出しフォルダです。プロジェクトファイルだけではありません。

モジュールを確認

現在のUnityバージョンとインストール方法が、使用中の環境でiOSプロジェクトを書き出せることを確認し、対応するiOS Build Supportをインストールしてください。ローカルで書き出せない場合は、UnityプロジェクトをMacに移し、同じバージョンのエディターでビルドします。

書き出し前に、Bundle Identifier、スクリプトバックエンド、最低OSバージョン、プラグインのプラットフォーム設定を確認し、今回の設定を保存してください。

フォルダ全体を転送

書き出したXcodeプロジェクトに、リソース、ネイティブプラグイン、ビルドスクリプトを含めて圧縮・転送します。展開後にフォルダ構成を確認し、隠し設定ファイルや.xcodeprojだけを取りこぼしていないか確認してください。

プラグインがCocoaPodsに依存している場合は、指定された依存関係の手順を先に実行してから、生成されたworkspaceを開きます。一時的な圧縮フォルダから直接ビルドしないでください。

エラーを段階的に確認

IL2CPPやリンクに失敗した場合は、最初のコンパイルエラーを確認し、ネイティブライブラリのアーキテクチャ、frameworkの参照、プラグインのバージョンを調べます。ビルドに成功してから、証明書とプロビジョニングプロファイルの不一致に対応してください。

大容量のリソースを扱う場合はProプランを検討できます。仕様はM4 Pro / 64GB / 2TB SSDです。プロジェクト名ではなく、リソースの容量と空き領域を確認して選んでください。

Unityプロジェクトを再書き出しすると、Xcodeで加えた手動変更が上書きされる場合があります。必要な設定を記録し、スクリプト化できる変更はプロジェクトのビルド手順に組み込むと、次回のビルドで同じ作業を繰り返さずに済みます。

用語を確認

接続、ハードウェア、署名はそれぞれ別の要素です。用語の意味を把握しておけば、問い合わせ時にスムーズに状況を伝えられます。

物理ノード
macOSを実際に動かすMacハードウェアです。選択したノードの設置場所によってリモート操作やファイル転送の経路は変わりますが、プロジェクトに必要な署名要件は変わりません。
専有
利用期間中、お客様専用に割り当てられる物理Macです。仮想マシンではなく、CPUとメモリを他のお客様と共有しません。プロジェクトのアクセス権とビルド用認証情報は、お客様自身で管理してください。
VNC
リモートのGUIデスクトップを表示・操作する接続方法です。初回のXcode設定やアーカイブの確認に適しています。画面の応答はローカルネットワークと解像度に左右されます。
self-hosted runner
自分たちで管理するマシンに導入するCI実行環境です。ビルドはこのMac上で実行されます。登録トークン、ジョブ権限、クリーンアップ方法はチームで設定してください。
ユニファイドメモリ
Apple Siliconで、プロセッサとグラフィックス処理が共有するメモリです。プロジェクトの規模、並列コンパイル、同時に開いているツールが、このメモリを使用します。
署名証明書
アプリの署名に使う認証情報です。署名には通常、対応する秘密鍵も必要です。証明書だけを読み込んでも、対になる秘密鍵がなければ署名できない場合があります。
Provisioning Profile
アプリ識別子、署名資格、配布用途を関連付けるプロファイルです。証明書、Team、アプリの機能、書き出し形式が一致している必要があります。
.ipa
iOSデバイス向けのアプリパッケージです。ファイルを生成できても、すべてのデバイスにインストールできるとは限りません。実際にインストール・配布できる範囲は、署名と書き出し方法によって異なります。

ビルド後に確認すること

ビルド成果物の持ち出しとあわせて、利用期間とデータの扱いも確認しましょう。リモートデスクトップのウィンドウを閉じても、利用は停止しません。

作業が終わっていない場合、どう延長できますか?

期限前にコンソールを開き、利用中のサービスの更新方法、請求内容、期限を確認してください。期間と金額を確認して支払いを完了したら、利用期限が更新されていることを確認します。支払い後もステータスが更新されない場合は、注文番号と取引情報を添えてチケットを送信してください。支払い画面の画像だけで延長済みと判断しないでください。

ビルドが終わったら、どう停止しますか?

サービスは日・週・月・四半期単位の前払いで、期限までに更新されない場合は停止します。作業が早く終わった場合は、まずファイルを書き出し、コンソールで利用期限と可能な操作を確認してください。VNCからの切断、SSHの終了、システムの手動シャットダウンは、注文の課金状態の確認に代わるものではなく、自動返金を意味するものでもありません。

期限後もファイルは残りますか?

期限切れでサービスが停止した後のデータは、サービス利用規約に従って削除されます。停止後のマシンをバックアップ先として使わないでください。期限前にソースコード、.ipa、Archive、dSYM、必要な設定を書き出し、ローカルでファイルを開けることを確認してください。証明書と秘密鍵はチームの方針に沿って安全にバックアップし、使わなくなった機密認証情報はリモート環境から削除してください。期限後も再接続やファイル復元ができるとは限りません。

更新にはどの支払い方法が使えますか?

お支払いはUSDT-TRC20、またはVisa / Mastercard / Amex(Stripe経由)のみ対応しています。すべて米ドル(USD)で決済されます。実際に利用できる決済ゲートウェイは、バックエンドから返される情報をご確認ください。支払いに関するお問い合わせには、注文番号、支払い方法、取引状況を記載してください。メールやチケットにカード番号全桁、セキュリティコード、パスワード、秘密鍵を記載しないでください。

エラーの内容を具体的に伝える

注文済みの問題は、コンソールからチケットを送信してください。購入前の相談やログインできない場合は、お問い合わせページでメール窓口をご確認ください。お問い合わせはチケットの順番に対応します。確認前に返信時期をお約束することはできません。

再現条件を記載

注文番号、フレームワークのバージョン、Xcodeのバージョン、操作手順、エラー発生時刻を記載し、タイムゾーンも明記してください。ビルドの問題では、最後の「失敗」行だけでなく、最初のエラーとその前後のログを共有してください。

機密情報を削除

ログからパスワード、トークン、秘密鍵、顧客情報を隠してください。稼働率に関する申請には、影響があった時間帯も記載します。支払いの問題では取引IDを添え、関係のないプロジェクトのソースコードは送らないでください。

接続が切れた場合は、VNCとSSHの両方に影響したか、ローカルネットワークを切り替えた後にどうなったかを記載してください。接続とビルドのどちらに問題があるかを切り分けやすくなります。

どの手順でお困りですか?

注文番号と最初に表示されたエラーを添えてください。該当の手順から一緒に確認します。