iOS4以降でのビュー切り替えとアニメーション

ビューを切り替える場合(に限らないが)のアニメーション記述方法がiOS4から変更になった。ネットで探してみても、iOS4以降の記述方法があまり見つからなかったのでメモしておく。

結果的にはかなりシンプルになっている。
長いので改行しているが、ビューの切り替えも含めて、1文で終わってしまう。

ちなみに以下のoldVC、newVCは、変更前後のビューに対するビューコントローラ。

iOS4以降の場合

	[UIView transitionFromView: oldVC.view
		toView: newVC.view
		duration:0.5 
		options:UIViewAnimationOptionTransitionCurlDown
			completion:^(BOOL finished){
				/* do something on animation completion */
	} ];

(参考)iOS3.xまでの場合

	// アニメーション
	[UIView beginAnimations:@"flipping view" context:nil];
	[UIView setAnimationDuration:1];
	[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
	[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown 
							   forView:self.view cache:YES];

	// Change View
	[oldVC.view removeFromSuperview];
	[self.view addSubview:newVC.view];
	
	[UIView commitAnimations];

SQLite+FMDBで日付型を扱う場合の注意点

忘れないように整理しておく。

SQLiteとFMDBで日付型を扱う際の前提

まず、整理の前提となる事実。

  • SQLiteでは日付型そのものの型はないので、日付を格納する列はtextやrealで代替定義している
  • FMDBは日付型を扱うためのメソッドを提供しているが、列定義がrealであることを想定している
  • FMDBは、real値を日付型として返すために NSDate クラスの dateWithTimeIntervalSince1970 を利用している
  • FMDBは、real値を日付型としてSQLiteに登録するために NSDate クラスの timeIntervalSince1970 を利用している
  • 日付情報はUNIX時間(1970年1月1日を起源とした差分値)で管理している。NSDateクラスには、その前提で倍精度数値データを扱うためのメソッドがある(dateWithTimeIntervalSince1970 / timeIntervalSince1970)

対応方針

上記の前提を踏まえると、SQLite, FMDBの組合せでアプリケーションを組む場合は、以下のような方針にすれば良さそうだ。

  • SQLiteのテーブル定義時は、日付を扱う列はreal型で定義する
  • FMDBで日付型データを参照する場合は dateForColumn / dateForColumnIndex を使う(NSData型の値が戻される)
  • FMDBで日付情報を登録/更新する場合は、NSDate型にしておけば、あとはFMDBが勝手にやってくれる

実際にはNSDateFormatterで書式を整えたりする必要があるが、FMDBやSQLiteとは直接関係ないのでとりあえず考えないでおく。

問題点

テストデータを事前に手操作なり何なりでDBに登録しておきたい場合、timeIntervalSince1970 なり何なりで変換したreal値を登録しなければならない。ごく普通に「2011/06/20」のような値を登録できない。

iPhoneアプリをAppStoreに申請する手順

自作iPhoneアプリをAppStoreに登録申請した。
ネット上に先人の記録は多数あるのだが、実施日時が違うせいか異なっているところがちらほらとあった。
2011/6/28時点での手順は以下の通り。ちなみにXCodeは3.2.6。

1. 事前準備

アプリケーション自体を完成させるのは当然として、その他に以下の準備をしておく。

  • Appleの参考文書を読む
  • スクリーンショットをとっておく(XCodeのオーガナイザを使う)。フォーマットはJPEG、PNGなど※
  • スクリーンショットを編集してステータスバー部分を除去する(Previewなり何なりを使う)。画像サイズが決められているので要注意(サイズは上記文書を参照)
  • AppStore表示用の大アイコンを512×512ピクセルで作っておく。フォーマットはJPEG、PNGなど※
  • サポートサイトを開設しておく(TwitterアカウントのURLでも良いとのコメントをどこかで見たことがある)
  • アプリケーションの説明文を考えておく(Primary LanguageをEnglishにする場合は英文も)
  • このアプリケーション固有のApp IDを未取得の場合、あらかじめ取得しておく(自分の場合は、実機へのインストール時に取得したので必要なかった)

※JPEGじゃないとダメと書いてあるサイトも多いが、現在は可能。Appleの文書に記載あり。

2. 配布用にアプリケーションを設定

既にやっているかもしれないが、XCodeで最終確認する。

Info.plistの以下の箇所を確認する。

  • Localization native development regionが適切かどうか。日本限定の場合はJapanにする
  • Bundle identifierの値が、iOS Provisioning Portalで取得したApp ID値と一致しているかを確認
  • Icon filesに小アイコン、大アイコンがあることを確認
  • Bundle nameにアプリケーション名が入っていることを確認
  • Bundle display nameに、画面に表示したいアプリケーション名が入っていることを確認
  • Bundle versionの値を確認

3. ディストリビューション用の証明書を取得、設定

  • iOS Provisioning Centerにログインする
  • 画面左側のメニュー(?)からCertificatesを実行
  • Distributionタブを選択
  • 既にCertificateが作られているので、ダウンロードする
  • ダウンロードしたファイルをダブルクリックする → 自動的にキーチェーンアクセスに登録される
  • WWDR intermediate certificateは、実機へのインストールをした際に設定済みなので不要
  • 画面右側に現れた「Request Certificate」ボタンを実行

4. Provisioning Profileの作成

  • iOS Provisioning Portalで、画面左側のメニュー(?)からProvisioningを実行
  • Distributionタブを選択
  • 右上の「New Profile」を実行
  • 「Distribution Method」は「App Store」を選択
  • Profile Nameに適宜値を入れる(自分が識別できればなんでもいい)
  • Certificatesにチェックを入れる
  • App IDは、作成済みのものを選択
  • 画面右下の「Submit」を実行
  • 作成されたプロファイルをダウンロードする
  • ダウンロードしたファイルをダブルクリックしてインストールする

5. XCodeでプロジェクトを設定

  • 「プロジェクト」→「プロジェクト設定の編集」を実行し「構成」タブを選択
  • Releaseを複製し、名前をDistributionにする
  • 「ビルド」タブを選択し、「構成」プルダウンでDistributionを選択
  • コード署名ID→Any iOSの値として、iPhone Distributionを選択
  • iOS Deployment Targetで、ターゲットとするOSバージョンを設定

6. ディストリビューション用にビルド

  • XCode画面左上の「概要」プルダウンで「Device」と「Distribution」を選択
  • 「ビルド」メニューから「すべてのターゲットをクリーニング」を実行し、一旦クリーンする
  • 「ビルド」メニューから「ビルド」を実行
  • プロジェクトフォルダの build の中にある Distribution-iphoneos に、アプリケーションができている。他のWebサイトでは拡張子appがついていることになっているが、パッと見ではついていない(が、実際にはついている)
  • アプリケーションを圧縮してZIPにする

7. App Storeへの登録

  • iOS Dev Center右側にあるリンクから、iTunes Connectに入る
  • 画面右下あたりにあるManage Your Applicationから登録画面に入る
  • 左上のAdd New Appを押す
  • Primary Languageを選択する。今回のアプリケーションは日本語版のみだが、今後は英語版も作るかもしれないのでEnglishにしておく (…という他サイトの記述に沿ってEnglishを選択したのだが、果たしてこれで良かったのかどうか。サイトの説明を読んでいても、これで良さそうな気はしたのだが)
  • Company Nameを入れる。これは芸名にしておく
  • Continueを押す
  • App Nameにアプリケーション名を入れる
  • SKU Numberに製品番号を入れる(勝手に決める)
  • Bundle IDを選択する
  • Continueを押す
  • Arailability Dateは、今日の日付にする
  • Price Tier(要するに販売価格)は、お好みで選ぶ。今回は無料アプリケーションなのでFreeにする
  • Discount for Educational Institutionsは、無料なら関係ないのでオフにする
  • Continueを押す
  • Version Numberには、XCodeでの設定値と同じ値を入れる
  • Descriptionにアプリケーションの説明を入れる
  • Primary Category, Secondary Categoryを選ぶ
  • Keywordsに何か入れておく
  • Copyrightに何か入れておく
  • Contact Email Addressに自分の連絡先を入れる(非公開)
  • Support URLにサポートサイトのURLを入れる
  • Ratingは、全部Noneにする
  • アイコンファイルをアップロードする
  • スクリーンショットをアップロードする
  • Saveを押す

ここで画面が替わる。

  • この画面の左下にあるView Detailsを押す
  • 画面の右側にあるManage Localizationを押す
  • 次の画面で、Add New Languageを押す
  • Japaneseを選択する
  • 英語版と同じく、各種情報を入力する
  • Saveを押す
  • Doneを押す
  • Ready to Upload Binaryを押す
  • Does your product contain encryption or does it use or access encryption from another source, e.g., iOS or Mac OS X? と聞かれるので、Noを選択する
  • Saveを押す

You are now ready to upload… とかいう画面になる。Webからアップロードかと思ったらそうではなく、これで終わってしまう。アップロードは、Application Loaderという別ツールで実施する。

8. アップロード

  • /Developer/Applications/Utilities/Application Loader.app を実行する
  • Nextを押す
  • Apple IDとpasswordを入れてログインする
  • アップロード対象のアプリケーションを選択する
  • iOS4でテストしたか?とか聞かれるので、はいと答える
  • ファイル選択ダイアログを起動し、圧縮したzipファイルを選択する
  • Sendを押す
  • アップロードが始まる。色々チェックしているらしく時間がかかる
  • アップロード完了。Nextを押す
  • Thank You.画面になる。Doneで終了
  • Appleから、ステータスがWaiting For Reviewになった、とかいうメールが来る

ここまでで、所要時間は何と4時間。初めての作業で、かつ記録をとりながらとは言え、ちょっとかかりすぎ。

ところで、過去の先人の記録によれば、言語を選べるっていう話だったんだけど、そんな画面は無かった。もしかして、USのApp Storeにも公開されてしまうのか? まあ日本語表記で困るのは俺じゃないから別にいいけど・・・

参考にしたサイト

http://tomorrow4u.wiki2.jp/archives/418
http://gihyo.jp/dev/serial/01/iphone/0010?page=1

iPhoneアプリを実機で動かすための設定

先人の知恵と経験を参考に実施した。先人の情報は若干古いようで、少しだけ違っていた。

証明書を作成

  • Finderで、アプリケーション→ユーティリティ→キーチェーンアクセス を起動
  • Fileメニュー→証明書アシスタント→ 認証局に証明書を要求 を実行
  • Appleに登録したメールアドレス、氏名を入力。「ディスクに保存」を選択。「鍵ペア情報を指定」にチェックを入れる
  • ダイアログが出るのでそのまま保存。次の画面は「続ける」を押す。すると、証明書要求が作られる★

証明書を要求

  • iOS Provisioning Portalにログインする
  • 画面左側のメニュー(?)からCertificatesを実行
  • 画面右側に現れた「Request Certificate」ボタンを実行
  • 画面下部にある「ファイルを選択」ボタンを押す
  • ファイル選択ダイアログで、上記★で作成したファイルを選択する
  • 画面右下の「Submit」を実行
  • すぐにメールが届く。その頃には証明書が出来ている筈。適当に別の画面に遷移してから、再びCertificates画面に戻ると、証明書のDownloadボタンが表示されているので、ダウンロードする(developer_identity.cer、というファイルをダウンロードする)
  • ダウンロードしたdeveloper_identity.cerをダブルクリックすると、キーチェーンアクセスに登録する画面になるので「追加」ボタンで登録する。登録した証明書は、キーチェーンアクセス左下ペインの「証明書」で確認できる
  • 同時に、同じ画面からWWDR intermediate certificateもダウンロードする。その後の処理は同じ(ダウンロードしたファイルをダブルクリック)

デバイスの登録

  • iPhoneをMacに接続する
  • XCodeのオーガナイザを開き、自分のiPhoneを選択する
  • 画面中央下のUse for Developmentを実行する。ここで表示されているIdentifierの値を後で使う
  • iOS Provisioning Portalで、画面左側のメニュー(?)からDevicesを実行
  • 自分のiPhoneが登録されていることを確認する(Identifierが同じ値の筈)

App IDの取得

  • iOS Provisioning Portalで、画面左側のメニュー(?)からApp IDsを実行
  • 右上の「New App ID」を実行
  • Descriptionに、何かしら値を入れる。所詮は説明なので、自分が識別できれば何でもいい
  • Bundle Identifier (App ID Suffix)に、App IDを入れる。自分のドメイン(の逆)+アプリ名でいい(”*”を入れればいい、という説明も多いが・・・)
  • 画面右下の「Submit」を実行

Provisioning Profileの作成

  • iOS Provisioning Portalで、画面左側のメニュー(?)からProvisioningを実行
  • 右上の「New Profile」を実行
  • Profile Nameに適宜値を入れる
  • Certificatesにチェックを入れる
  • App IDは、先ほど作ったものを選択
  • Deviceにチェックを入れる
  • 画面右下の「Submit」を実行
  • 作成されたプロファイルをダウンロードする

XCodeでProvisioning Profileを設定

  • XCodeのオーガナイザを開く
  • 画面左側のメニューからProvisioning Profilesを選ぶ
  • ダウンロードしたプロファイルファイルを、オーガナイザの画面上部にドラッグ&ドロップする

プロジェクトの設定

  • XCodeで当該プロジェクトを開く
  • メニュー「プロジェクト」→「プロジェクト設定を編集」を実行
  • 「ビルド」タブを選択
  • コード署名IDの値を、登録したProvisioning Profileの値に変更する

実行(デバイスへのインストール)

  • XCode画面左上のプルダウンで、SimulatorではなくDeviceを選ぶ
  • 「ビルドと実行」を実行する
  • 実機で試す

これでようやく終了。お疲れさまでした。

iOS Developer Programに登録

iPhoneアプリを実機で動かしたり、AppStoreで配布するには、有償のiOS Developer Programへの登録が必須。このプログラムには個人用、企業用、学生用等があるが、法人に所属しない個人が登録する場合は、個人用になる。ちなみにこれは$99なのだが、為替レートは全く考慮されず、ずっと前から10800円のまま。

個人用として登録すると、AppStoreでアプリケーションを配布する際の「販売業者」は個人名になる。ここで個人名を出すのは気が引けるというか、芸名を使いたいところだが、どうやらそれは無理な相談らしい。それなら企業として登録してはどうかということも考えたが、企業が存在していることを示す公的証書の提示を求められるらしいので、これも断念(このためだけに会社を設立したりするのも、それはそれで面白いとは思うけど)。諦めて個人として登録することにした。

ちなみに、わざわざ新規で登録しなくても、既にiPhoneを使っているなら大抵はApple IDを持っている筈なので、それをそのまま使うこともできる。但し、登録情報に日本語が含まれる場合、iOS Developer Program登録処理中に問題が出るらしいので、新規で登録する。

新規Apple IDを登録し、そのままiOS Developer Programに登録するための大雑把な手順は以下の通り。ちなみにSafariでやらないと問題が出るとの話を聞いたことがあるが、真偽は不明。

  • iOS Developer Programのページに行く
  • Enrollを押す(Enrollment画面になる)
  • Continueを押す(トグルボタンが並んだ画面になる)
  • I need to create a new account for an Apple Developer Program. を選ぶ
  • Individualを選ぶ
  • メールアドレス他、必要事項を入れる
  • 開発対象、開発経験等を選択する
  • Agreementに合意する
  • 登録したメールアドレスに送られてきた認証コードを入力する
  • 入力した名前、住所等がクレジットカード情報と一致するかを確認する
  • プログラムのリスト中からiOS Developer Programを選択する
  • 確認画面で確認後Continueする
  • Agreementに合意する
  • どこの国のApple Storeで買うかを選択する(Japanが選ばれている)
  • Add to cartする
  • 突然画面はApple Storeになり、ごく普通に注文する。ここでiOS Developer Programを買うことになる。クレジットカード情報やら配送先(何も送らないのに・・・)を入力する
  • 購入完了メールが送られてくる

ここで一段落。暫くすると(今回のケースでは6時間後)、登録コードが送られてくる。そのコードを使って登録しようとすると、噂通り、エラーになってしまう。登録情報をよくよく見てみると、当初State欄に”Kanagawa”と入れていたにもかかわらず、いつの間にか”?????”になっている。Apple Storeでの支払時に「神奈川」を選択したのが問題だったのかもしれないが、だとしたら完全にシステムの問題だ。いずれにせよ、これはよくあること、というか基本的に必ず発生するらしい。仕様だと思うしかない。

仕方がないので、contact usから連絡を入れる。その際、enroll IDとActivation Codeを入れておく。

暫くするとAppleからメールで連絡が来る。先人のレポートによれば2~3日かかるとのことだったが、今回は翌日(正確に言えば、30時間後)にメールが来た。今度は登録が成功し、ようやく購入処理が完了した。

随分時間がかかったような気がするが、これでようやくスタートラインに立ったばかり。先は長い。