2012年9月25日火曜日

ipa ファイルを作ろうと思ったが XCode の Build For Archiving メニューが非活性で選択できない

Scheme (アプリを実行する対象) を 「iOS Device」 にする。

これで解決!

2012年9月22日土曜日

4インチのiPhone5(1,136 x 640ピクセル)画面対応


解像度が1,136 x 640ピクセルになった、iPhone5の画面への対応手順。

これまたコピペで自分のMEMOとして記録…。。。

1. 画像
1136 x 640pixelsで画像を作成する。

(1) Splash Screen
Default-568h@2x.png

(2) その他
xxxx-568h@2x.png

ポイント:
"@2x"の前に文字列"-568h"を付ける。

"@2x"は、640x960pixelsのhigh-resolusion(Retina Display)を示すが、4インチのiPhone5用の画像ファイル名には、"-568h"を付ける。568は、mainScreenのフレームサイズの高さ、"h"はhightを示す。

Splash Screenは、XcodeのTARGETS→Summary→Launch Image→"Retina (4-inch)"に設定する。


2. xib
(1) MainWindow.xibを開き、Xcode右ペインのDocument Outlineから"Window"を選択。
(2) UtilitiesからAttributes inspectorを開き、Simulated Metricsのsizeを"Retina 4 Full Screen"に設定。windowが縦長になるのを確認する。
(3) Document Outlineから"Tab Bar Controller"を選択。
(4) UtilitiesからAttributes inspectorを開き、Simulated Metricsのsizeを"Retina 4 Full Screen"に設定。Tab Bar Controllerが縦長になるのを確認する。

上記設定を行わないと、画面下部がタッチ領域と認識されないため、タッチしても何の反応もしない。

Navigation Controllerを使用している場合、MainWindow.xibの下層にあるxibのViewを、MainWindow.xibと同様にSimulated Metricsのsizeを"Retina 4 Full Screen"に設定することができるが、この設定は不要。
MainWindow.xibの"Retina 4 Full Screen" Size設定が下層のxibにも引き継がれる。

上記のようにsizeを"Retina 4 Full Screen"に設定した場合においても、3.5インチの従来の解像度のiPhoneの画面表示には影響を与えることはない。iOS側で自動的に画面サイズが調整される。(実際にはタッチ領域が4inchとした分、下方向に拡張される。)


3. class
(1) オブジェクト配置
プログラム中でボタンなどを配置している場合、frameの高さから4インチ画面であることを判定してオブジェクトを配置する位置を決定する。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // iPad

// iPadのときの処理

} else { // iPhone

CGRect frame = [[UIScreen mainScreen] applicationFrame];

if (frame.size.height==548.0) { // iPhone 4inch (568 - 20 px)

// iPhone5 のときの処理

} else { // iPhone 3.5inch

// iPhone5より前のモデル のときの処理

}
}


上記の例は4inchであるiPhone5の判定を、フレーム高が548.0であるかとしているが、Viewのサイズ設定により適宜変更する。上記の例では、Viewを(x:0, y:20, Width:320, Height:460)にしているため20pixcels引いた値にしている。

iPhone5は1,136 x 640Pixcelsなので、1,136という数値で判定することもできる。
CGSize result = [[UIScreen mainScreen] bounds].size; // iPhone5の場合、result.heightは568px
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale); // iPhone5の場合、result.heightは1136px

if (result.height==1136.0) { // iPhone 4inch

// iPhone5 のときの処理

} else {

// iPhone5より前のモデル のときの処理

}



(2) アクションシート
UIActionSheetにより選択分岐画面(アクションシート)を表示する場合、MainWindow.xibのWindowにSize設定に"Retina 4 Full Screen" としたことによる影響が発生する。
4inchのiPhone5では、下記のような
[actionSheet showInView: self.view.window];
従来のコードでも問題なく画面下部からアクションシートがせり出してくるが、3.5inchの従来画面サイズのiPhoneではMainWindow.xibのWindowを4inchに設定した影響により、アクションシートが見た目の画面よりも下部からせり上がって表示される。

このため、上記(1)と同様に、画面の高さを判定して処理を振り分ける。
UIActionSheet *actionSheet = [[[UIActionSheet alloc]
initWithTitle: @"Select Action"
delegate: self
cancelButtonTitle: NSLocalizedString(@"Cancel", nil)
destructiveButtonTitle: nil
otherButtonTitles:
@"Hoge",
@"Fuga", nil]
autorelease];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // iPad

[actionSheet showFromRect:CGRectMake(334.0, 865.0, 100.0, 42.0) inView:self.view animated:YES];

} else {

CGRect frame = [[UIScreen mainScreen] applicationFrame];

if (frame.size.height==548.0) { // iPhone 4inch (568 - 20 px)

[actionSheet showInView: self.view.window];

} else { // iPhone 3.5inch

UIView *actionSheetsubView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
[actionSheet showInView: actionSheetsubView];

}

}
3.5inch版のiPhoneの場合は、320 x 480のViewを作り、このViewからアクションシートを表示するようにする。


【番外編】
iPhone5からアーキテクチャに、armv7s が指定できる。

参考記事:
http://hmdt.jp/blog/?p=594

2012年9月19日水曜日

Distribution Certificate

 また壁に…Memoする。
(出所:http://temping-amagramer.blogspot.jp/2010/12/iosdistribution-certificate.html)

[iOS sdk]Distribution Certificateクリアーまでの道のり

この前、iPadのアプリをiTunes Connectに提出したのですが、その際に、いくつか設定することがあったので、その方法をについてまとめてみたいと思います。

Distributionする際のまず最初の関門として、Distribution Certificateをクリアーする必要があるので、まずは、その方法についてまとめてみることに。

1:「アプリケーション」→「ユーティリティー」→「キーチェーンアクセス」アプリを開き、「環境設定」を選択
Photobucket


2:一番右側の「証明書」を選択し、下記のように設定
Photobucket

3:同じく「キーチェーンアクセス」アプリの「証明アシスタント」→「認証局に証明書を要求」を選択
Photobucket

4:下の画面に切り替わったら、iOS Dev Centerで登録したメアドと名前を入力
Photobucket

5:「続ける」ボタンをクリックした後、下記のように設定を行う
Photobucket

6:「続ける」ボタンをクリックした後、ファイルをデスクトップ上に保存します。画像は、保存完了画面
(ファイル名は、「CertificateSigningRequest.certSigningRequest」となります。)
Photobucket

7:作成後、Certificatesセクションの「Distribution」を選択
Photobucket

8:上の画像で「Request Certificate」ボタンを押して、先ほど作成したファイルをアップロードする。
下の画像の「submit」ボタンで提出
Photobucket

9:管理者にメール送信が行われ、承認作業が始まる。

10:承認後、「Distribution Certificates」から「DownLoad」ボタンを押して、ファイルのダウンロードを行う。
デフォルトは「distribution_identity.cer」ファイルという名前です。

11:ファイルのダウンロードが完了したら、ダブルクリックをして終了。

以上までで、Distribution Certificateのセクションはオッケーです。

今度は、Provisioningセクションを書きたいと思います。

2012年9月16日日曜日

svnXのメモ


svnXリポジトリウインドウの使い方


svnXはMac OS X用のSubversionのクライアントソフトの一つです。Subversionを使った各種操作をGUIで行うことが出来る便利なソフトです。本ドキュメントでは、svnXのリポジトリーウインドウについてご紹介します。

リポジトリウインドウとは

リポジトリウインドウはSubversionのリポジトリのURL、ユーザー名、パスワードを管理するウインドウで、ウェブブラウザのブックマークのようなものです。
WindowメニューのRepositoriesを選択すると表示されます。
リポジトリを追加したいときは、リストの右下の[+]ボタンをクリックして、リストの下の各フィールドに入力します。修正するときは、修正したい項目をリストで選択して、リストの下の各フィールドを編集します。削除するときは、リストで選択して[-]ボタンをクリックすれば完了です。

リポジトリブラウザについて

リポジトリウインドウで項目をダブルクリックすると、リポジトリブラウザウインドウが表示されます。リポジトリブラウザウインドウではリポジトリに対してリモートで操作を行うことが出来ます。
リポジトリブラウザウインドウでは、ウインドウの上半分のリストにリビジョンが一覧表示されます。各リビジョンの先頭にはラジオボタンがあり、クリックして選択できるようになっています。このラジオボタンをクリックして選択すると、そのリビジョンのサーバー側の構成がウインドウ下半分の領域にカラム表示されます。
リポジトリブラウザウインドウに表示されるツールバーのボタンの各機能は次の通りです。

svn copy

svnx-wnd-01
カラム表示部で選択されている項目をサーバー上でコピーします。クリックするとコピーシートが表示されます。Source欄には選択した項目が表示されますので、Target欄に表示されるカラムでコピー先を選択し、Commit Message欄にコメントを入力して、Commitボタンをクリックして完了です。

svn move

svnx-wnd-02
カラム表示部で選択されている項目をサーバー上で移動します。クリックするとコピーと同様の移動シートが表示されます。Source欄には選択した項目が表示されますので、Target欄に表示されるカラムで移動先を選択し、Commit Message欄にコメントを入力して、Commitボタンをクリックして完了です。

svn mkdir

svnx-wnd-03
カラム表示部で選択されている場所にサーバー上でディレクトリを作成します。クリックすると新規ディレクトリ作成シートが表示されます。シートの上の方に表示されるカラムでディレクトリの作成先を選択し、Target Nameにディレクトリ名を入力して、[add]ボタンをクリックします。すると、下のリストに追加されます。複数のディレクトリを作成するときはこの操作を繰り返してください。最後にCommit Message欄にコメントを入力して、Commitボタンをクリックするとディレクトリが作成されます。

svn delete

svnx-wnd-04
カラム表示部で選択されている項目をサーバー上で削除します。クリックすると、削除シートが表示されます。シートの上の方に表示されるカラムで削除したい項目を選択し、[add]ボタンをクリックします。複数の項目を削除するときはこの操作を繰り返してください。最後にCommit Message欄にコメントを入力して、Commitボタンをクリックすると削除されます。

Diff

svnx-wnd-05
カラム表示部で選択されている項目の差分を調べます。

svn checkout

svnx-wnd-06
カラム表示部で選択されている項目をチェックアウトします。

svn export

svnx-wnd-07
カラム表示部で選択されている項目のワーキングコピーを作成します。チェックアウトとは異なり、Subversionの管理ファイルが作成されないため、作成されたワーキングコピーは管理対象外になります。

Show output

svnx-wnd-08
svnXが内部で実行しているコマンドやその応答のログを表示します。

ワンポイント

svn copyボタンやsvn moveなど、サーバー上で実行した操作は下のカラム表示に直ぐに表示されません。これはリビジョンが操作前のリビジョンになっているためです。操作が完了すると、新しいリビジョンがリストの先頭に追加されるので、追加されたリビジョンのラジオボタンをクリックして選択すると、行った操作後の構成が表示されます。

SimpleモードとAdvanceモード

リポジトリブラウザウインドウはデフォルト状態では「Simple」モードで表示されます。リビジョンリストの左側に表示されるボタンでモードを切り替えることが出来ます。Advanceモードにすると、選択したリビジョンで変更された項目がコメント欄の下に表示されるリストに表示されるようになります。特定のリビジョンでどのファイルやフォルダに対して操作を行ったかが一目瞭然となり、後から確認するときに非常に便利な機能です。
svnx-wnd-09

2012年9月7日金曜日

実機転送エラー「Code Sign error:Provisioning profile 'xx' can't be found

実機転送時のエラー
これも見逃せないノウハウなのでコピペ。
出所:http://ameblo.jp/iphone0126/entry-10862455082.html


Code sign error:Provisioning profile 'xxx-xxx-xxx-xxx・・・' can't be found
xxx-xxx-xxx-xxx・・・ のとこに Profile Identifier が表示される。

実機テストも終わって Distribution やって アップロードだと思ったらエラー発生!
キーチェーンを作り直したりしてるうちに実機テストすらできなくなった。

エラーの内容は、 Profile Identifier のアンマッチ!
設定されている Profile Identifier と 実機転送時に使用される Profile Identifier が一致していないってエラー。
はまりましたね。

 
ビルドエラーの画面の Profile Identifier と、オーガナイザの Profile Identifier とを比較すると一致してないのがわかります。

修復する方法は、
テキストエディタで以下のファイルを読み込みます。
 
プロジェクトファイル(プロジェクト名.xcodeproj) -> 右クリック -> パッケージの内容を表示 -> project.pbxproj をテキストエディタで開きます。
上の写真参照: mi というアプリで開くと上の写真のように直接指定できました。
↓中身です。
 

PROVISIONING_PROFILE = 'xxxx-xxx-xxxx・・・・' てやつを全て削除します。
PROVISIONING_PROFILE[sdk=iphoneos*]= 'xxxx-xxx-xxxx・・・・'も削除します。
PROVISIONING_PROFILE = で検索するといいかも!
上の写真の赤枠のやつを削除!
4つか5つぐらいありました。
環境とか状態で数が違うのかなぁ??
とにかく検索して条件に該当するやつを全て削除しました。

よく見ると、ビルドエラーの時の Profile Identifier がセットされてますよね。
PROVISIONING_PROFILE = 'xxx-xxxx' の行ごと削除します。
PROVISIONING_PROFILE[sdk=iphoneos*]= 'xxxx-xxx-xxxx・・・・'の行ごと削除します。

あとは、上書き保存してビルドしなおせばOKです。