Clipping Physics を準備中

写真の切り抜きをつまんだり転がしたりして楽しむアプリケーションのリリースを準備中です。現在、アップルのAppStoreで公開のための審査を受けています。

大した実用性も無いので、無料で提供する予定です。お楽しみに。

Xcode 4とかiOS 4.3とか

Xcode 4 とか

便利になっているような気がしますが、あまりに変わりすぎです。何がどこに行ったのかさっぱりわからないという。一部は日本語訳されていたメニューとかの表示もすっかりそぎ落とされてシンプルに英語表記に。そして、インストール直後にオンラインでリファレンスをダウンロードするらしく、拙者のMacだと1時間ぐらいほぼ操作不能な状況になりました。しようがないので終わるまで放置していたらいつの間にか仮想記憶メモリが4GBを超えて異常終了してました。困ります。

iOS 4.3 とか

iPhone 3G とかが切り捨てられたりしてそれは酷いとか思っていたけれど、気のせいじゃなければプロジェクトの標準設定で ARM v6 アーキテクチャが切り捨てられている感じです。(3Gまでがv6で3GSからがv7なんですってよ)
これが火種になって、少し昔にビルドして使い回していたOpenCV-2.0.0のスタティックリンクライブラリが、armv6なんぞ知らんとかいって今開発している最中のアプリがビルドエラーを吐きまくる状況になりました。困ります。

思い出しながらライブラリのコンパイル設定を調査生成するスクリプトの中に書いてある対象SDKを4.0から4.3へ、対象アーキテクチャもarmv6からarmv7へ変更してメイクファイルを再度生成してコンパイルして、出来たライブラリをXcode 4であっち探しこっち探ししながらアプリのプロジェクトに組み込んで、最終的にどうにかビルド出来たのですが、解決するのに4時間ぐらい費やしました。

iPhoneで波紋

とは言っても、なんとかかんとかオーバードライブ!とか叫ぶわけではないですけど。(わかりにくいネタ)

iPhoneのプログラミングで、画面遷移アニメーションって簡単に設定できる(簡単だとか簡単に書くと後で簡単だろとか言われて自分の首が絞まる可能性があるので危険)わけですが、そのアニメーションのパターン番号がSDKで名前定義されていないのに動くものがあるわけです。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationTransition:110 forView:self.view cache:YES];
[UIView setAnimationDuration:2.0];
[UIView commitAnimations];

で、2行目の110ってところが肝。使える番号をハックしてまとめてくれているサイトを見てみると、SDKに定義されているのは0〜4まで。

  • 101 はメモ帳のページめくりアニメ。(3と同じかも)
  • 102 はメモ帳のページ逆めくりアニメ。(4と同じかも)
  • 103 はメモ帳や写真でゴミ箱に吸い込まれるときに使われるアニメ。
  • 105 はカメラのシャッターで使われるアニメ。
  • 106 はカメラのシャッターが閉じるアニメ。
  • 107 はカメラのシャッターが開くアニメ。
  • 110 はiPhoneではどこで使われているか分からないけど、Mac OS Xでウィジェットを追加したときの波紋のアニメ。

という感じです。

SDKに定義されていない秘密のAPIをアプリ内で使ったりするとAppleのアプリ審査には通らないけど、定数ってどうなんだろう。試してみるにも次のアプリのネタが無いという。

16進電卓の機能追加

先ほど、16進電卓の新しいバージョン(1.3.20)を、Appleのアプリ審査に提出しました。

Appleにアプリケーションのバイナリファイルをアップロードする方法が、前は圧縮ファイルを作ってWebページの流儀に沿ってアップロードしていたのが「Xcodeのビルド&アーカイブとオーガナイザを使いなさいよ!」ってことになっちゃってるような気がします。見落としてるだけかも知れないですけど。というか、アプリ新版の審査申請(アプリのバグ取りとも言う)を半年ぐらいしなかったら、開発者ポータルの操作手順が変わりまくっててちょいとビビりました。

このままリジェクトされなければ、来週末ぐらいにはユーザーの皆様のお手元のデバイスにビットシフト演算とか出来るようになったバージョンアップ版をダウンロードできるようになるのではないかと思います。なんのかんのと、初公開からもう1年ぐらい経ちました。多謝。

iPhoneアプリの起動から表示までを追ってみる

iPhoneアプリをホーム画面でタップしてから最初のアプリ画面が表示されるところまでの流れが、SDKドキュメントから見つけられなかったので(というか、英語で書かれたドキュメントが大量で、そもそもちゃんと見ていない)、新規プロジェクトのテンプレートから View-based Application を選んで、画面を表示するだけの簡単なプロジェクトを用意し、適当に見繕ったメソッドにNSLogを入れて、メソッドの呼び出し順を確認してみました。

動作環境は、iOS4.1です。

(アプリを初めて実行すると以下が発動)
   main
   UIViewController initWithCoder
   UIViewController awakeFromNib
   UIApplicationDelegate didFinishLaunchingWithOptions
     (viewController.viewを参照すると以下が発動)
       UIViewController loadView
       UIView initWithCoder
       UIView layerClass
       UIView awakeFromNib
       UIViewController viewDidLoad
     (windowにviewController.viewをaddSubviewすると以下が発動)
       UIViewController viewWillAppear
       UIView willMoveToWindow
       UIView willMoveToSuperview
       UIViewController shouldAutorotateToInterfaceOrientation
       UIViewController viewDidAppear
       UIViewController shouldAutorotateToInterfaceOrientation
       UIView didMoveToWindow
       UIView didMoveToSuperview
   UIApplicationDelegate applicationDidBecomeActive
   UIView drawRect
(アプリ実行時にホームボタンを押すと以下が発動)
   UIApplicationDelegate applicationWillResignActive
   UIApplicationDelegate applicationDidEnterBackground
(アプリをタスクバーから呼び出すと以下が発動)
   UIApplicationDelegate applicationWillEnterForeground
   UIApplicationDelegate applicationDidBecomeActive
(アプリをタスクバーから消すとSIGKILLが発動)
   たぶんトラップ不能

NSLogを入れていないクラスやメソッドも他にたくさんあるので、呼び出しはこれで全てという訳ではないと思います。流れを見ると、タスクバーから消すときは、アプリに問答無用というのがかなり割り切ってますね。何かwillなんとか呼んでくれてその上で数秒後にSIGKILLならまだ救われるのだけれども…。