Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2011年11月19日

Xcode4.2におけるiPhone/iPadユニバーサルアプリ化



Xcode4.2からは、ユニバーサルアプリ化手順が変更となった。
Xcode3.xでは、"Upgrade current target for iPad"操作を行っていたが、Xcode4.2ではこの操作はなくなった。
Apple公式のiPad Programming GuideはXcode3.xの手順のままで内容は変更されていない。

1. TARGETSのコピーを作成
(1) Xcode4.2で、TARGETSを開いて右クリックすると、"Duplicate”と表示が出るので選択。
(2) 上記(1)操作により表示されたダイアログ画面で、"Duplicate and Transition to iPad"を選択。
(3) TARGETSに新たに"(TARGETS名称)-iPad"が作成されるのを確認。これはiPad専用となる。
iPhone, iPadどちらでも動作するようにする場合、1つのバイナリで動作するユニバーサルアプリとするか、iPhone,iPad用で別々のバイナリを用意することができる。"(TARGETS名称)-iPad"は、iPad専用のバイナリとして作成することができる。
(4) "Resource-iPad"フォルダが作成され、その中にxibがコピーされていることを確認。これがiPadの画面サイズに変換されている。


2. TARGETS Summaryの修正
(1) コピー元のTARGETSのSummaryを開き、iOS Application TargetのDevicesをUniversalに変更。
(2) 上記(1)操作により表示されたダイアログ画面で、"Copy"を選択。
(3) "iPad"フォルダが作成され、その中に"MainWindow-iPad.xib"が作成されていることを確認。これは"MainWindow.xib"がiPadの画面サイズに変換されたもの。これがユニバーサルアプリとしてiPadで動作させたときに読み込まれるxibとなる。
(4) iOS Application TargetのDeployment Targetは3.2以降にする。(3.2はiPadの初期バージョンのiOSバージョン番号)これによりユニバーサルアプリ化できる。
(5) コピー元のTARGETSのSummaryの、iPhone/iPod Touch Deployment Info, iPad Deployment Info それぞれのSupported Device Orientations、App Icons、Launch Images、Main Interfaceを確認、内容を適宜修正する。
これと併行して、アイコンやDefault画面はiPadヒューマンインタフェースガイドライン等のドキュメントを参照して正しく作成してアプリケーションバンドルに含めておく。


3. TARGETS Build Settings 及び、PROJECT Build Settingsの修正
(1) コピー元のTARGETSのBuild Settingsを開き、Targeted Device Familyを、iPhone/iPadに変更。
(2) iOS Deployment Targetを、3.2以降に変更。


4. Info.plistの修正
(1) Icon filesに、iPad用アイコン" Icon-72.png"を追加する。
(2) Supported interface orientationsを、iPhone,iPad用にそれぞれ設定する。
(3) Main nib file base name(iPad)に、"MainWindow-iPad"が設定されていることを確認する。


5. xibの修正
(1) 上記1.(4)で新たにResources-iPadフォルダの中に、iPhoneアプリ用として使われたxibが全てコピーされて作成される。このxibの画面サイズはiPad用に自動的に変換されているが、TableViewやBackground用イメージは元のiPhone画面サイズのままなので、適宜修正する。
(2) Resources-iPadフォルダの中のxibは、新たに作られたTARGETS "(TARGETS名称)-iPad"用でのみ動作する。すなわち、元のTARGETSのアプリケーションバンドルには含まれていない。
従って、ユニバーサルアプリとした元のTARGETSで動作させるためには、元のTARGETSのアプリケーションバンドルに含めなければならない。
その手法は、
(a) xib編集Utilities画面のinspector(一番左側のタブ)の、Target Membershipで切り替える。
(b) 一旦新たに作成したダミープロジェクトにコピーして、また元のTARGETSのアプリケーションバンドルとしてコピーする。

上記(a)は、今後はユニバーサルアプリとしてのみ開発する場合の操作。
上記(b)は、もしかしたら今後iPad専用アプリを作るかも知れないので[ "(TARGETS名称)-iPad" のTARGETS ]を残しておきたいときにする操作のひとつ。
元のTARGETSのアプリケーションバンドルに同一xib名称があるとエラーとなるため、ファイル名の末尾に"~ipad"をつけてリネームしておく。
ファイル名の末尾に"~ipad"をつけてリネームしておくと、iPadでユニバーサルアプリを動作させた場合はファイル名の末尾に"~ipad"がつけられたxibが自動的に読み込まれる。iPhoneで動作させた場合は従来のxibが自動的に読み込まれる。
xibの切替えに関してはプログラムを修正する必要はない。
(3) 上記2.(3)で作成された"MainWindow-iPad.xib"の中で定義されているViewControllerのNIB名称を、ファイル名の末尾に"~ipad"をつけてリネームしたxibに修正する。


6. プログラムの修正
(1) ユニバーサルアプリとして動作させるための修正を行う。フォントサイズやTableViewCellの高さ、shouldAutorotateToInterfaceOrientationの回転の向きなど。
iPhone,iPadの判断は下記のように行う。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// iPadの場合の動作
} else {
// iPhone, iPod Touchの場合の動作
}



7. Archive
バイナリをiTunes Connectにアップロードするときは、元のTARGETSを対象とする。


■参考記事
http://stackoverflow.com/questions/5630561/cant-create-ipad-xib-with-xcode-4

タグ:IOS iPhone iPAD
posted by mobileDeveloper at 23:18 | Comment(2) | TrackBack(0) | iPad はてなブックマーク - Xcode4.2におけるiPhone/iPadユニバーサルアプリ化 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
HP拝見しました。
少しわからないことがあったので
コメントさせてもらいました。

その箇所はDeviceをUniversalに変更したあと
「(2) 上記(1)操作により表示されたダイアログ画面で、"Copy"を選択。」
となっています。
このCopyとはどこをさしているのでしょうか?。
Universalに変更してもダイアログ等は表示
されないので理解ができてきません。

ご教授いただけると助かります!。
Posted by ヒロ at 2013年04月07日 10:39
この記事はXcode4.2について記述したものです。最新のXcodeでは確認をしていませんので、あしからずご了承ください。
Posted by mobiledeveloper at 2013年04月11日 20:51
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。