iOS 5 GMを待ちながら


毎日iOS Dev Centerをチェックしては、iOS 5 GMが出ねぇ、とつぶやいている日々であります。忙しい日々なんだけど、GMおよび正式リリースの日程が明らかにならないので、微妙にまったりとした感じが。

果たしていつになるのか?という予想はするだけ無駄なんで、Macお宝鑑定団blogの記事を読んで気を紛らわせたり。まー、正直なところ、人の会社の行動を予測して気を揉んでもつまらないので、自分の会社の心配だけをしておけ、と考えるようにしている。

GMが出たら、最終的な動作チェックを行うことになる。このチェックで問題は出るのか?この期に及んでAPIを変えてくるということは考えにくいので、そこは問題ないと思う。気になっているのは、アーキテクチャ的なことだな。

たとえば、ARMv6のサポート。iOS 5 SDK betaのコンパイラは、ARMv6用にコンパイルすることができていない。これが正式版になっても、切り捨てられたままなのか?もちろんiOS 5はARMv6では動かないけど、昔のデバイスを対象にしながら、iOS 5 SDKでビルドしたい、という必要はある。

あと、コンパイラ。iOS 5 SDK betaのたぶん7から、デフォルトコンパイラがApple LLVMになってた。いままではGCCのLLVMだったのに。正式版でもApple LLVMがデフォルトになるのか?自分で書いたソースコードだけなら対応できると思うけど、外部のライブラリがある場合は嫌だな。コンパイラ切り替えればいいんだけど、デフォルトが変わっちゃうのはやっぱり気になる。

なんてことを気にしつつ、日々のニュースチェックです。iPhone 5なんかよりも、 iOS 5 GMの方が気になるよ、ホントに。

idleTimerDisabledではまったこと


UIApplicationクラスに、idleTimerDisabledっていうプロパティがある。これをYESにしておくと、システムで設定した、スクリーンロックを無効にする事ができる。地図とかゲームみたいに、しばらく触らないで放っておくタイプのアプリでは、便利。

と、ここまではドキュメントを読めば分かる事。これを使ったアプリはいろいろ作っていたんだけど、これが機能しないというバグ報告があった。ふーんどれどれ、ということでソースコードをチェックして、あーなんかここ怪しいなー、というところを修正してテスト。まずはidleTimerDisabledをYESにして放置。2分後に確認すると、スクリーンロックしていない。よし、OK。次にidleTimerDisabledをNOにして放置。2分後に確認すると、、、ロックしていない。あれー?

昔からこれ使っているのになんで動作しないんだ?ということで、ソースコードの変更を繰り返しながら延々とテストを繰り返す。うまく動いてくれない。正確に言うと、ロックしてくれない。なんか、ずーっとロックしてくれないような。。。というところで気づいた。USBでつないでXcodeからアプリを起動した場合、スクリーンはロックしてくれないんだ。ケーブル外してテストしたところ、ちゃんと期待通りに動いてくれた。

何が嫌だったって、動作確認するのに毎回2分かかったんだよね。ちょっとコード変更して2分放置。また変更して2分放置。時間が大変浪費されたのでした。

[Mandal-Art Dev] 移転及び進捗報告


HMDTが開発しているマンダラアプリiMandalArt。いままでは、Mandal-Art Devというブログサイトを用意して、そちらで開発の進捗報告を行っていた。

これを、HMDT blogに統合する事にした。HMDTのページもブログ化を行ったし、2つのサイトに分断されているのは読者にとっても管理者にとってもよくない、と考えたので。

ということで、こちらでMandal-Art Devは続けていきますよ。まずは直近の進捗報告から。夏頃から新機能の追加開発を続けていて、それはだいぶ目鼻が付いていたところ。そのまま公開までいけるかな、と思っていたんだけど、ここに来てiOS 5の登場が迫って来たので、そちらの対応を先にやる事にした。

現在は、iOS 5上での動作確認を行っており、いくつかの不具合が確認されたのでその対応を行っている。iOS 5用ビルドの申請が可能になり次第、対応版をアップロードすることを目標にしている。そのときはまたお知らせするので、ユーザの方はアップグレードよろしくお願いします。

関連リンク:
旧Mandal-Art Dev(更新は停止)
Facebook iMandalArtファンページ

HMDTにて新人プログラマ募集


求人のお知らせです。HMDTでは、いまプログラマを募集しています。iOSまたはMac OS X向けアプリ開発が仕事になります。

今回は求人広告も作ってみました。Find Jobさんのこちらに載っております。細かい条件などは、そちらで確認してみて下さい。

過去にも何度かプログラマ募集のお知らせをやったけど、今回は以前のものとはちょっと違います。それは、未経験者も対象にしていること。iOSアプリ開発の経験がなくとも、何らかのプログラミングの経験があればオッケーです。新卒や第二新卒の方もオッケーです。

いままでHMDTで働く人は、Mac OS XでCocoaプログラミングをやっていた人でした。即戦力で働いてくれて、Appleの話もMacの話も通じるので、それはもちろんやりやすかった。でも今回は、新しい風を入れてみたい、と思っております。昔のMacの話は知らなくとも大丈夫。いまのiPhoneを触って、これからのアプリを作ってみたい人と仕事をしてみたいと感じています。

経験がなくとも、とにかく教え込みます。テキストは、まぁ、いままで書いた本がたくさんあるし。

ということで、興味のある方、特に若くてやる気のある方、Find Jobさんのサイトの方を見て応募して下さい。お待ちしてます。

デジタル大辞泉と龍馬の手紙がシニア向けAppに


秋の連休、いかがお過ごしでしょうか。東京は、秋とは思えない暑さ続いとりますが。

明日は敬老の日、ってことで、AppleがApp Storeで「シニア向けApp」のプロモーションをやっとります。その中の「一緒に学ぼう」のカテゴリで、HMDTで開発しました「デジタル大辞泉」と「直筆 坂本龍馬の手紙」が選ばれました。

 

 

うちのアプリは、シニアにもいけるぜ!で、「シニア向け」って言われるには、機能やコンテンツもそうだけれど、ユーザインタフェースの面でも配慮が必要だって考えている。

3年くらい前に大辞泉の最初のバージョンを作ったとき、始めは表示する字が全体的に小さめだったんですよ。そのとき、少しお年を召されたから、読めない、読めない、と散々言われたことがある。

読める人にとっては小さい字でも大きい字でも問題ないけど、読めない人にとっては小さい字であることは致命的だということに気づいた。それで、デフォルトの文字を大きくしたり、文字サイズを変更できる機能を追加したりした。

それ以来、「全ての人にとって致命的ではない」ということを念頭に機能を考えるようになった。字が小さいと、読めない人がいるかもしれない。似た色調の色使いだと、判別できない人がいるかもしれない。複数の指を使う複雑なタッチ操作だと、対応できない人がいるかもしれない。そんなときは代替表示や操作を用意して、とにかく「できる」ようにする。つーか、そもそもそんな問題は発生しないようにする。

「ユニバーサルデザイン」って言葉を使うと大上段に構えているような気がするので、全ての人に対して致命的ではありませんように、ってつぶやきながらユーザインタフェースを考えとります。

Xcode 4のポッチ


Xcode 4に移行したときからずっと気になっていたものがあって、エディタウインドウの左端に、丸いポッチが表示されていることがあるでしょ。

なんか、BCGの跡みたいで嫌だなー、キモチワリー、とだけ思っておりました。

よく見ていると、どうやらIBOutletとIBActionについているらしい。ふーん、とだけ思って、何のためにあるのか全然考えた事がありませんでした。

で、ある日何の気なしにクリックしてみると、なんと接続している.xib上の部品を表示するじゃないすか。選択すると、そのファイルにジャンプしてくれる。

おー、これは便利。と思っていたら、何気なくポッチからドラッグしてみると、線が引っ張りだせるじゃないすか。もしかして、と思ったらそのまま直接.xibの部品と接続できるじゃない。

うぉー、すげー!アシスタントウインドウ開いているときに便利だ。と思っていたら、もしかして、と気づいた。今度は.xibファイルの方から.hファイルに線を引っ張ってみると、なんとアウトレットとアクションを追加するための特別なユーザインタフェースが出てくるじゃないすか!

なんてこったい!全然気づかなかったよ。これがInterface BuilderをXcodeに統合した利点か。

今回の教訓。Xcodeにはまだまだ知らない機能がたくさんあるようだ、ということ。シンプルなユーザインタフェースは、初見ではどうやって使うか分からないこと。でも一旦分かってしまえば、応用が効くようなユーザインタフェースにするのが重要だという事。

で、最後なんだけど、この「ポッチ」って名前はなんていうだろう?名前が分からんから、Googleで検索もできんし、マニュアルで調べる事もできん。

MoneyTron 20,000本達成


webtronさんが配信しているiPhoneアプリMoneyTronが、販売本数20,000本を達成した模様。

有名どころが配信しているアプリでなくとも、いいものを作って、根気強くプロモーションしてれば、ちゃんと売れる。App Storeの売り上げは、小規模なチームなら充分潤うよ、と、いうことが証明できたんじゃないかな。

『列車図鑑 九州新幹線 新800系』発売


株式会社アリギリスさんより、iPad/iPhoneアプリ『列車図鑑 九州新幹線 新800系』が発売となっております。開発は、HMDTっす。

このアプリは、九州新幹線新800系をなめるように眺めることのできるもの。鉄道写真を撮らせたら並ぶものなしの、マシマ・レイルウェイ・ピクチャーズさんの撮り下し写真を収録。特殊技術で作った超ロングスーパーパノラマ写真で、全車両をつなげて見れちゃう。解説文やコラムはきしゃ旅フォトライターの松尾定行氏によるもの。写真をタッチすることで、新800系に隠された秘密をのぞけちゃうという、iPadならではギミックも搭載。

HMDT Webページの方でも紹介ページを作ったので、こちらも参考にしてね。

ということで、鉄道好きの方にはたまらない一品となっております。定価600円のところ、2011年9月30日までは発売記念セールで350円に。興味のある方は、ぜひご確認を。

HMDTではこんな感じの電子書籍も作っております。ePubやPDFだけが電子書籍ではない。書籍とアプリを合わせたような、新しいメディアを作りたい、って考えています。興味のあるコンテンツホルダーの方、一緒に何かやりませんか。

アップルジャパン解散


Macお宝鑑定団blog(羅針盤)によれば、アップルジャパン株式会社を解散して、Apple Japan合同会社と合併するとのこと。

日本の会社としてのアップルジャパンはなくなって、アメリカ本社直轄の一部署みたいになるってことかな?

うちの会社は、Apple製品で動くアプリを開発する関係上、たまにアップルジャパンの人たちに会ったりしてた。主に、サードパーティの開発社担当の方だね。お会いする方たちは悪い人じゃなくて、むしろとてもいい人たちなんだけど。いざ仕事の話となると、んまー、歯切れが悪くてね。結局何の成果も得られないことが多いから、アップルジャパンなくなっちゃえばいいのに、ってよく冗談半分に言ってた。そしたら、ほんとになくなっちゃった。

開発者としては、サードパーティの開発サポートがどうなるのかが気になる。個人的には本当は、クパチーノの開発部隊と強いコネクションを持ったアメリカ人が、日本に常駐してくれる形になると嬉しいんだけど。結局なにも変わりませんでした、ってのがオチかな。

UIViewControllerによるUIViewの回転 その2


前回に続き、UIViewControllerの話。今回は、親ビューとの関係を。

UIViewControllerを使って回転させると、管理しているビューのboundsとtransformが変化する。となると次は、親ビューでの位置を表すframeが気になってくる。だけど、UIViewのドキュメントによると、transformが単位行列以外の場合、frameの値は不定(undefined)ということになっている。だから、centerの値から考察するのが正しい。

ということで、ビューの回転とboundsおよびcenterの値を調べてみた。ウインドウの上に直接UIViewControllerを貼付けて、4方向に回転させる。結果はこんな感じ。

うーん?分かったような分からんような。

ポイントその1。向きによってboundsの値は同じであっても、centerの値は異なる。縦の正位置と逆さま位置、および横の右向き左向きは、それぞれboundsの値は同じだけどcenterの値が異なる。

ポイントその2。縦と横でcenterのずれる値の座標が違う。縦だとy座標がずれて、横だとx座標がずれる。

なんでこんなことが起きているかというと、boundsは子ビューの座標系で測るのに対して、centerは親ビューの座標系での値になるからだ。つまり、boundsはtransformの影響を受けるが、centerは受けない。親ビューの座標系では、デバイスがどんだけ回転しようと、デバイス左上が原点だ。

さらに話をややこしくしているのが、ステータスバーの存在。デバイスを回転すると、ビューが回転するけど、ステータスバーも回転する。ということは、その分centerは移動しなくてはいけない。

ということで、それぞれの向きの位置情報について、もう少し突っ込んで記述すると、こんな感じになる。

これで、boundsとcenterの関係が分かったでしょ。デバイスの回転とともにステータスバーも回転するんで、ステータスバーの高さである20ピクセルのずれが発生している。左上原点のところにステータスバーが存在するかどうかがポイントだね。あと、この図で見るとまるでcenterが回転しているみたいだけど、こっちじゃないからな。回転しているのはあくまでboundsの方だぞ。