iOS
iOSでビルドしてAppleへ提出するための手順
このページはiOSでビルドしてAppleへ提出するための手順をまとめています。
iOS Developer登録を行う
まずは開発者申請を行います。これはHaxeFlixelを使わなくても同じなので省略します。
証明書を登録し、プロビジョニング・プロファイルを取得する
実機に転送するためには、プロビジョニング・プロファイルの設定が必要となります。 これもHaxeFlixelを使わなくても同じなので省略します。
- APP IDの作成
- Provisioning Profilesの作成
Project.xmlを設定する
Project.xmlを設定して、iOSの実機に転送するための適切な設定を行います。 特に重要なのは、metaタグのpackage属性です。ここにプロビジョニング・プロファイルに設定したApp IDを指定します。これが正しくないと転送できません
<!-- packageにはプロビジョニング・プロファイルに設定したApp IDを指定します。これが正しくないと転送できません --> <meta title="MyProject" package="jp.2dgames.test" version="1.0.0" company="2dgames.jp" /> <!-- deploymentには対応するiOSのバージョン --> <!-- binariesにはバイナリバージョン。"arm6" / "arm7" / "fat" iPad対応する場合は"arm7"のみ --> <!-- devicesには"iphone"または"ipad"または"universal"を指定します --> <ios deployment="6" binaries="armv7" devices="iphone" /> <!-- リンクフラグはなし。アイコン画像に光沢を入れない --> <ios linker-flags="" prerendered-icon="false" /> <!-- 過去のデバイスを高速化するためのおまじない --> <window hardware="true" allow-shaders="true" require-shaders="true" if="cpp"/> <window vsync="true" antialiasing="4" if="cpp" />
ios deployment (iOSのバージョン) は、64bitでのみ動作する "6" 以降を指定します
スプラッシュ画像とアイコン画像の設定
スプラッシュ画像とアイコン画像は以下のように設定します。 アイコンはSVGを登録すると自動でリサイズして生成してくれます。
<!--Place custom nodes like icons here (higher priority to override the HaxeFlixel icon)--> <launchImage path="icon/Default-568h@2x.png" width="640" height="1136" /> <launchImage path="icon/Default-Landscape.png" width="1024" height="768" /> <launchImage path="icon/Default-Landscape@2x.png" width="2048" height="1536" /> <launchImage path="icon/Default-Portrait.png" width="768" height="1024" /> <launchImage path="icon/Default-Portrait@2x.png" width="1536" height="2048" /> <launchImage path="icon/Default.png" width="320" height="480" /> <launchImage path="icon/Default@2x.png" width="640" height="960" /> <icon path="icon/Icon-29.png" size="29" /> <icon path="icon/Icon-29@2x.png" size="58" /> <icon path="icon/Icon-40.png" size="40" /> <icon path="icon/Icon-40@2x.png" size="80" /> <icon path="icon/Icon-50.png" size="50" /> <icon path="icon/Icon-50@2x.png" size="100" /> <icon path="icon/Icon-60.png" size="60" /> <icon path="icon/Icon-60@2x.png" size="120" /> <icon path="icon/Icon-72.png" size="72" /> <icon path="icon/Icon-72@2x.png" size="144" /> <icon path="icon/Icon-76.png" size="76" /> <icon path="icon/Icon-76@2x.png" size="152" /> <icon path="icon/Icon.png" size="57" /> <icon path="icon/Icon@2x.png" size="114" />
ただ、アイコン画像のいくつかが正しく生成されないようで、手動でコピーしてXcodeから手動で修正する必要があります。ひょっとしたらOpenFL / Limeの不具合かもしれません。
アイコン一括生成ツール
ツールを使うと、アイコンを一括生成できます
自作アイコン生成スクリプト
Pythonで書いたアイコン生成スクリプト。ImageMagick?をあらかじめインストールしておく必要があります
必要なスプラッシュ画像の一覧
ディスプレイ | サイズ(px) | 画像名(例) |
3.5 inch | 320 x 480 | Defaults |
3.5 inch Retina | 640 x 960 | Defaults@2x |
4.0 inch Retina | 640 x 1136 | Defaults-568h@2x |
4.7 inch Retina | 750 x 1334 | Defaults-667h@2x |
5.5 inch Retina Portrait | 1242 x 2208 | Defaults-736h@3x |
5.5 inch Retina Landscape | 2208 x 1242 | Defaults-Landscape-736h@3x |
ビルド
Xcodeがインストールされていれば、以下のコマンドでビルドから実機への転送までをしてくれます。
$ lime test ios
なおシミュレーターで動作確認したい場合は、「-simulator」オプションをつけた以下のコマンドとなります。
$ lime test ios -simulator
ビルドがうまくいかない場合
各環境に共通することは以下のページにまとめてあります。
「Signing for "XXX" requires a development team. Select a development team in the project editor.」 というエラーが表示される
ビルド時に以下のエラーメッセージが表示されることがあります。
=== BUILD TARGET Test OF PROJECT Test WITH CONFIGURATION Release === Check dependencies Signing for "Test" requires a development team. Select a development team in the project editor. Code signing is required for product type 'Application' in SDK 'iOS 10.0' ** BUILD FAILED **
証明書ファイルがうまく認識されていないようなので、Xcodeでプロジェクトファイルを開いて、「Build Settings > Signing > Development Team」から登録した開発者名を選んで、Xcodeからビルドします
実機確認時のよくある問題
BGM再生開始時に画面が停止する
推測ですが、HaxeFlixelはBGMをストリーム再生せず、ファイル全体をメモリに同期ロードするようです。 そのため画面が停止しているような気がします。 これを回避するには事前にキャッシュへ読み込み、再生時にキャッシュから読み込むようにします。
/// Reg.hx // BGMをキャッシュする public static function cacheMusic():Void { FlxG.sound.volume = 1; FlxG.sound.cache("001"); FlxG.sound.cache("002"); FlxG.sound.cache("003"); } // キャッシュを使ってBGMを再生する public static function playMusic(name:String, bLoop:Bool=true):Void { // キャッシュからBGM取り出し var sound = FlxG.sound.cache(name); if(sound != null) { // キャッシュがあればキャッシュから再生 FlxG.sound.playMusic(sound, 1, bLoop); } else { // なければディスクからロードして再生 FlxG.sound.playMusic(name, 1, bLoop); } }
アセットデータの読み込みに失敗する。または古いデータを参照してしまう
Xcodeはデータのキャッシュが強力で、ビルドし直してもデータの更新が行われないことがよくあります。ですので、画像データやレベルデータを更新した際には、exportフォルダ以下を一度全削除してからビルドすると、正しく更新されるようになります。 また、下記コマンドでも消去することができます。
lime clean ios
その他何か問題が起きたら
まずは「-simulator」オプションで起動し、iOSシミュレーター上で確認した方がいいです。実機確認と比べてプロジェクトの転送速度が速いですし、標準のログ出力が可能などデバッグする上で有利な点が多いからです。 実機でしか起きない問題は、FlixelDebuggerを使用して変数をウォッチしたりデバッカへのログ出力をします。 それでもわからない場合はXcodeからデバッグします。
申請に必要な情報
必要なスクリーンショット
- 3.5インチ(iPhone4s) : 640x960
- 4インチ(iPhone5) : 640x1136
- 4.7インチ(iPhone6) : 750x1334
- 5.5インチ(iPhone6 Plus) : 1242x2208
- iPad : 768x1024など
必要なアイコン
1024x1024 透過なしのPNG画像
電話番号
携帯電話なら、+81 90-XXXX-XXXX
Appleへの提出
Xcodeでのビルド・提出
Appleへの提出はXcodeを起動して行います。プロジェクトファイルは「export > ios > XXXX.xcodeproj」にあります。
ビルドの前にArchive名を修正します。「Product > Scheme > Edit Scheme」を選択します。
Archiveを選択して、Archive Nameを変更します。(プロジェクト名と一致しているのであれば修正は不要です)
そうしたら、「Product > Archive」でビルドを開始します。
ビルドが正常に完了すればOrganizerが起動します。
表示されている情報に問題がなければ「Validate」を選択します。
プロビジョニングファイルの名前の確認が出ますので、問題なければ「Choose」を選択します。
Summaryが表示されるので問題なければ「validate」を押します。
しばらくして問題がなければ「Validation Successful」と表示されるので、「Done」を選びます。 すると再びOrganizerが表示されるので、「Submit」を選択します。
Submitに成功すると以下の画面が表示されます。そうしたら「Done」を押して終了します。
再び iTunes Connect
提出はこれで完了ではなく、まだ iTunes Connect での作業が必要となります。 アプリケーションのページのレーティングの下あたりにある「ビルド」の隣にある+をクリックします。
「ビルドの追加」が表示されるので、Submitしたアプリを選択して、「終了」ボタンを押します。すると登録が完了します。
これでようやく「レビュー審査のために送信」を選ぶことができます。
「レビュー審査のために送信」では以下の項目が表示されるので、適切に選択をします。
項目 | 説明 |
輸出コンプライアンス | SSL通信を使うかどうか |
コンテンツ配信権 | 第三者が有する版権コンテンツを使用するかどうか |
Advertising Identifier | 広告の識別子を使うかどうか |
基本的にすべて「いいえ」となることが多いですが、念のため以下のページを読んでおくといいと思います。
アプリページに以下のように「レビュー待ち」と表示されれば提出完了です。レビューが通れば無事配信となります。
リジェクト対応
3.3: Apps with names, descriptions, screenshots, or previews not relevant to the content and functionality of the App will be rejected (アプリの内容や機能に関係ない説明を含むアプリはリジェクト)
ゲーム画面のスクリーンショットに説明を何も入れなかったらリジェクトされました。スクリーンショットがゲームの内容を全く説明していないものだと、この理由でリジェクトされるみたいです。
リジェクト理由まとめ
このページが良くまとまっています