GADGET FACTORY 雑記帳

iPhone アプリ / Flash コンテンツ /Adobe AIR などを開発していて気づいたことや備忘録、TIPS、HACKなど

既存の iPhone アプリを iPhone6 / 6Plus に対応する & 64bit 対応の手順メモ

以前開発して、すでに App Store にて公開中の iPhone用アプリを、iPhone6 / 6 Plus に対応する必要が発生しました。

その対応手順についての途中メモです。

Launch Image Source の設定

※iPhone6 / 6 Plus の画面解像度への対応の為

  • [プロジェクト]-[ターゲット]-[General]-[Launch Images Source] で設定ファイルを定義する。
  • ファイル名の横の→をクリックして、ファイルを開く
  • 設定したファイル名をクリックし、右端ペインの [Attribute and Inspecter]タブを選択
  • 必要な Launch Image の種類にチェックを入れる。
  • それぞれのファイルを設定する。

ファイル名は

  • Default.png (320x480 / iPhone3G)
  • Default@2x.png (640x960 / iPhone4)
  • Default-568@2x.png (640x1136 / iPhone5)
  • Default-667h@2x.png (750×1334 / iPhone6)
  • Default-736h@3x.png (1242×2208 / iPhone6 plus)

Launch Image の設定を行うと、作り方によってレイアウト崩れが発生するので、全画面でそれぞれの端末に合わせたレイアウトに変更する。
場合によっては、パーツの拡大処理を、コード内で指定する必要もある。


各ファイルに iPhone6 Plus用(@3x)を用意する

※iPhone6 / 6 Plus の画面解像度への対応の為
ファイル名の後ろに @3x  をつけると、iPhone6 Plus では自動的にその画像ファイルを利用してくれる。

例えば、iPhone3GS 用のファイル名が、「hoge.png」の場合、
iPhone4/4s、iPhone5/5s、iPhone6では「hoge@2x.png
iPhone6 Plus では「hoge@3x.png」という名前の画像ファイルを用意する。

@3xのパーツを作成する際には、iPhone3GS用の @1x 画像の3倍に拡大したものを用意すればよいようです。
調べたサイトには、全体の画面解像度としては、「1704x960」でレイアウトした際の画像ということになるという記載がありました。
(568x3=1704,320x3=960)
@2x 画像の幅と高さを 1.5倍化した画像ということになるはず。

でも、実際には
[[UIScreen mainScreen] applicationFrame]で取得されるサイズは
(Simulatorでのテスト)
iPhone6 Plus : 414x716
iPhone6 : 375x647
iPhone5s : 320x548
iPhone4s : 320x460

[UIScreen mainScreen].boundsで取得されるサイズは
(simulatorでのテスト)
iPhone6 Plus : 414x736
iPhone6 : 375x667
iPhone5s : 320x568
iPhone4s : 320x480

iPhone5sの実寸幅(320x2=640)に対して
iPhone6Plus(414*3=1242) : 1.940625倍
iPhone6 (375*2=750) : 1.171875倍

@3x 画像は、iPhne5s画像(@2x)の 1.94.625倍が正しいっぽい感じがします。

問題は、iPhone6 の場合。
画像は@2x を利用するのですが、そのままのサイズで配置したのでは、iPhone5s などと比べて端末の横幅が広がっている分、隙間が空いてしまいます。
やはり、画面の解像度に合わせて、表示するパーツのサイズを調整しないと、レイアウト崩れが発生してきそうな感じです。

ただし、iOS8.0のiPhone6(実機)の場合、ではなぜか @3x のファイルが利用されているようです。
というか、シミュレーターでは、どの端末でも iOS8.0 では、何故か @3x が利用されてしまうのは、以前のブログにも記載した通り。

もしかしたら、iOS8.0 搭載の実機でもそうなっているかもしれません。


64bit 対応するための処理

  • Architectures に arm64 を追加する
  • [プロジェクト]-[ターゲット]-[Build Settings]を開く
  • [Architectures]にある、 [Valid Architectures] に arm64を追加して含める。
  • [Architectures]にある、 [Architectures] に arm64が入っていることを確認する。

ビルドして警告が表示される場所を、1つずつつぶしていく。
主には、型変換やキャストを行って行く感じ。

簡単な方法としては、

NSInteger fuga = 100;
int hoge = fuga;

NNSInteger fuga = 100;
int hoge = (int)fuga;

という形で、
(型名) を変数の前に追加にすればOKな感じです。


iOSのシミュレーターを Xcode 6.1 にインストールする

現在最新の Xcode 6.1 に含まれている シミュレータの対応 iOS のバージョンは iOS8.1 のみ。
それ以外の iOS バージョンのシミュレーターは、現時点でダウンロードもできないので、テストするとなると、古い Xcode でプロジェクトを起動する必要があります。

それだと面倒なので、古い Xcode からシミュレータのみを取り出し、Xcode 6.1にインストールしてやれば良いと思われるので、その方法について調査。

古い Xcode は、Apple Developer のメンバーセンターからダウンロード可能。
https://developer.apple.com/jp/

Xcode に含まれる(ダウンロードできる)シミュレータは

Xcode 6.1 には iOS8.1のシミュレータ
Xcode 6.0 には iOS8.0 のシミュレータ
Xcode 5.1.1 には、 iOS6.1、iOS7.1 のシミュレータ

iOS6.1の シミュレータは Xcode 6.1では認識できませんでした。

ダウンロードした後、ファイルを展開し、アプリケーションフォルダ以外に中身をコピーします。
※アプリケーションフォルダには、すでに現在利用中のXcodeが入っていると思うので、混同するのを防ぐため。

コピーした Xcode にカーソルを合わせて、右クリックし、[パッケージの内容を表示]を選んで、中身を確認します。

Xcode シミュレーターのフォルダ位置は

/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

にあります。

ファイル名(フォルダ名)は

iPhoneSimulator7.1.sdk
iPhoneSimulator8.0.sdk

などとなっています。

必要なシミュレーターを現在利用中の Xcode の同フォルダ内にコピーします。

iOS7.1のシミュレータについては、コピーするだけでシミュレータの起動を確認できました。

しかし、iOS8.0については、まだ認識できておりません。


上記のサイトによると、iOS simruntime もコピー&設定が必要とのこと。

iOS simruntime の フォルダ位置は、

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS 8.0.simruntime

となっています。

もう少し、テストが必要な感じです。