
Cocos2d-x運用タイトルにおける新画面サイズ対応
こんにちは、クライアントエンジニアの小松原です。
iOS/Androidアプリ開発においては、新しいOSが発表されるたびに素早くそれらに対応する必要があります。
本記事では、2017/11/03のiPhoneX発売に向けてクライアントアプリで対応した時の話を例に、新しい画面サイズに対応する時の苦労話を紹介します。
開発環境
cocos2d-x v2系
XCode8.2.1
iPhoneXの発売日(2017/11/3)より前にアプリ側で対応するために、XCode9にバンドルされているiPhoneXシミュレータを利用して挙動の確認をしていくこととなります。
また、前提として運用タイトルであることの諸々の事情と前もってbeta版の時に対応した時の話のため、当時としてはXCode9への移行は見合わせてXCode8で対応した時の話になります。
シェーダ作成時の問題
iPhoneXのシミュレータで起動したところ、シェーダの描画タイミングでクラッシュしてしまいました。
原因はEAGLViewの生成ロジックで、画面サイズに応じて描画領域の生成処理を分けていたところ、下記の分岐に当てはまらず生成に失敗していました。
・固定サイズの描画領域を生成(iPhone4、iPhone4Sなど)
・端末画面サイズと同じ描画領域を生成(iPhone5以降,Plus含む)
・固定サイズの描画領域を生成し、左右にiPad用の固定画像を表示(iPad各種)
・固定サイズの描画領域を生成し、左右にiPad pro用の固定画像を表示(iPad Pro)
iPhoneXの画面サイズは375 x 812ptとなり縦長なので、今回は描画領域をiPhone5などの比率に合わせ、上下に固定画像を表示させることで対応しました。
画面サイズ定義の対応
検証のためにXCode9は利用するものの、申請時などはXCode8を使わなければならず両方への対応が必要です。
cocos2d-xではrootViewController.mmでOpenGLのViewを生成しますが、これはStoryboardから起動時にスクリーンの大きさをAutoLayoutで取得しているものになります。
ところが、 XCode8にはiPhoneXの画面サイズがStoryboardに定義されていないため、正しい画面サイズが取得できません。
そこで、Storyboardを使用せず、Info.plistに画面サイズを定義することにしました。
targetの設定にあるLaunch Screen Fileから、StoryBoardの設定を削除します。
Info.plist設定値は下記のようになります。
対応結果
下記のように表示されました。
XCode8でビルドしたappをiPhoneX(XCode9)シミュレータで動かす
下記手順にて実行可能です。
1 XCode8系でプロジェクトをビルド
2 インストールされているシミュレータのUDIDを確認
xcrun instruments -s
[ ]で囲まれた部分がデバイスのUDIDとなります。
3 手順2で確認したUDIDを指定し、iPhoneXシミュレータを起動
xcrun instruments -w BC97940D-CE3E-44CC-BBD5-EE391B124ABB
4 Xcode8系でビルドしたBundle Applicationに移動
cd /Users/my_user/Library/Developer/CoreSimulator/Devices/5B77A34C-0691-4F13-914E-6978AF871200/data/Containers/Bundle/Application/3A5FF97A-58A5-49C8-A1C8-52213E6D4A00
5 appをシミュレータにインストール
xcrun simctl install booted gang2.app
まとめ
両OS共に毎年のアップデートがありますが、特にiOS関連は情報公開から対応必須になるまでの期日が短いため、素早い情報拾集が求められていると感じます。
Androidの対応についてもまた記事にできたらと思うので、しばらくお待ち下さい。
この記事へのコメントはありません。