カテゴリー : 2011年 10月

Apple Lossless Audio Codecがオープンソース化


Apple Lossless Audio Codes(ALAC)のエンコーダとデコーダがオープンソースになったらしい。Mac OS forgeプロジェクトが追加されている。

ALACは、名前の通り可逆圧縮のオーディオコーデック。どんなコーデックであっても、可逆って素敵。iTunesでのエンコードやiPodでのデコードなどに使われている。逆に言うと、それ以外ではほとんど使われていない。

これがオープンソースになると、嬉しいのは音楽プレイヤーデバイスやソフトウェアを開発している会社か。ALACも再生可能なコーデックに含めることができる。じゃあiTunes Storeで買った曲をどこでも再生できるようになるか、というとそうはいかなくて、DRMの問題は残る。FairPlayね。

その他の使い道っていうと、うーん、あんまり思いつかんな。

iOSデバイスの機能をUIRequiredDeviceCapabilitiesを使って調査


iOSアプリでは、アプリの情報をInfo.plistというファイルに記述する。ここにはいろんな情報を書けるんだけど、その中に「どのデバイスでこのアプリが使用可能か?」ということを表すものがある。UIRequiredDeviceCapabilitiesというキーに指定する。

ここでの指定は、デバイスのモデル名を直接書くのではなく、どんな能力を持つデバイスをサポートするか、ということを使う。たとえば、電話機能があるとか、カメラがあるとか、GPSがあるとか、っていう感じのやつがある。指定できるキーの一覧は、”Information Property List Key Reference“で定義されている。

ということでデバイスモデル名からは独立した形で指定するんだけど、とはいっても実際にどのデバイスにインストール可能なのか知りたいよねぇ。ということで、調べてみた。手持ちのデバイスをつないで、UIRequiredDeviceCapabilitiesの値を設定してインストールできるかどうか実験した。

iPhone 4 (5.0) iPhone 3GS (5.0) iPhone 3G (4.2.1) iPod touch 4th (5.0) iPod touch 3rd (5.0) iPod touch 2nd (4.2.1) iPad 2 3G (5.0) iPad 2 WiFi (5.0) iPad WiFi (5.0)
telephony
wifi
sms
still-camera
auto-focus-camera
front-facing-camera
camera-flash
video-camera
accelerometer
gyroscope
location-services
gps
magnetometer
gamekit
microphone
opengles-1
opengles-2
armv6
armv7
peer-peer
bluetooth-le

こんな感じ。iPhone 4SとiPod touch 5thは、まだ入手していないので実験できなかった。iPod touch 1stは、iOS 3.0をビルドできる環境がなかったのでこれも実験できず。

この表を漫然と見ても、直感的に分かりにくいよね。ということで、これをベン図にしてみた。こんな感じ。

どうよ?少しは分かりやすくなったかな。

作ってて思ったのは、iPhoneの世代とiPod touchの世代は、微妙にかみ合っていないこと。iPod touchはiPhoneの機能を少し遅れくらいでとりこんでいる。

あと、iPhone 3Gはgamekitに対応していないのがちょっと意外だった。iPod touch 2ndは対応しているのに。これは、Bluetoothを持っているかいないかというのが効いているんだと思う。Bluetoothがないとpeer-peerができないので。

iPadはWiFiモデルでもmagnetometerを持っているのもちょっと驚きだった。GPSなしだとちょっと無駄な気もするのだが。

この図を見ていると、iOSデバイスがどういう風にハードウェアを拡張してきたかが分かるね。

追記:コメントの方で、iTunes Connect Developer GuideのAppendixに載っている、っていう情報をいただきました。ありがとうございます。そんなところにあったとは気づかなかったすよ。

iOS 5でviewWillAppear:がaddSubview:しただけで呼ばれる


iOSアプリで、起動時処理の定型に、UIViewControllerのインスタンスを作成してウインドウにaddSubview:する、というものがある。iOS 4までは、これだとUIViewControllerのviewWillAppear:とかが呼ばれないので、自前で呼ぶというのが必要だった。

// Add controller
[_window addSubview:_viewController.view];

// Call viewWillAppear: and viewDidAppear:
[_viewController viewWillAppear:NO];
[_viewController viewDidAppear:NO];

んが、iOS 5になったら、addSubview:するだけでviewWillController:とかが呼ばれるようになってしまった。ある意味ありがたい。だけど、iOS 4とiOS 5の両方で動かそうとすると、問題が発生する。iOS 5だとviewWillAppear:が連続して2回呼ばれてしまうのだ。ある意味ありがた迷惑である。

となると、実行時にOSのバージョン調べて呼び分けるしかねーな。たとえば、iOS 5から追加されたメソッドを使って、判定する事ができる。

// Add controller
[_window addSubview:_viewController.view];

// For prior to 5.0
if (![_viewController respondsToSelector:@selector(willMoveToParentViewController:)]) {
    // Call viewWillAppear: and viewDidAppear:
    [_viewController viewWillAppear:NO];
    [_viewController viewDidAppear:NO];
}

これで期待通りの動きになる。ま、viewWillAppear:を2回連続で呼ばれても問題ないようにするべきなのかもしれんが、それはそれでいろいろあるし。

iOS 5専用にしちまえば問題はなくなるんだけど、現実問題そうもいかん。Appleの前バージョン切り捨ては容赦ないな。

Xcode 4.2 + armv6で浮動小数点のバグ


うちの会社で話題になったんだけど、Xcode 4.2 + armv6デバイスの組み合わせで、浮動小数点の演算にバグがあるらしい。演算結果が正しくないときがあるらしい。

どうやら最適化に関連する不具合のようで、最適化のレベルによって発生したりしなかったりするのがややこしい。

対策としては、Apple LLVM compilerで、Other C Flagsのところに、-mno-thumbを追加するらしい。

こんな感じに設定すると、armv6だけ設定できる。

stackoverflowなんかでも話題になっている。

iOS5 Xcode4.2 floating-point byte align error?

自分の関わっているプロダクトを思い返すと、心当たり、あるなぁ。チェックしないと。

[Mandal-Art Dev] iMandalArt 2.7.1登場


iMandalArtの開発現場からの情報をお伝えする、Mandal-Art Dev。今週も定例ミーティングを行いました。

アジェンダは主にiOS 5での不具合の報告と検討。まず、iMandalArt 2.7.1がApp Storeに登場。このバージョンでは、

  • iOS 5において、セル拡大時にテキストが欠けてしまう問題の修正
  • 下位マンダラに入力データがない場合は、セルにインジケータを表示しないよう修正

といった修正が行われているよ。テキストフィールドが広がらない問題はご迷惑をおかけしました。アップデートの方、よろしくお願いします。

続いて、iMandalArt HDで発生している不具合。まず、iOS 5から登場した分割キーボードを使っていると、不具合が発生する事がある。具体的には、キーボードのどこをタップしてもすぐキーボードが隠れてしまい、文字入力ができなくなってしまう。これについては症状を確認しているものの、対策は検討中です。とりあえずは、分割キーボードをあまり使わないようお願いします。

続いて、外部キーボードを使ったときの問題。外部キーボードを使って3×3セルに直接入力していると、変換候補が見えなくなる。具体的には、こんな状態。

こりゃ困るよ、ということで調査してみた。どうやらiOS 5では、外部キーボートを使って入力した場合、その変換候補はテキストビューの内部に表示されてしまうようだ。その外に出す方法は見つからなかった。もうこれはiOS 5の仕様としてあきらめるしかないかもしれない。

とりあえず、外部キーボードを使っている方は、セルを広げて入力していただくようお願いします。こうすれば、問題にはならないはず。

iOS 5は、キーボード周りがガラッと変わって、そのくせPublic APIは何も変わっていないので、ここで多くの問題が発生している印象。なかなかこちらではテストしきれないところがあるので、逐次の対応になってしまうけど、もう少しお待ちください。

 

 

 

iOS 5 Tech Talk 2011は東京なし


iOS 5 Tech Talk World Tour 2011の案内が出た。これは、WWDCのミニ版みたいなもので、世界の各都市でiOS 5の各種技術情報を解説してくれるもの。が、日本ではやらない。

これ、2009年にもやっているんだよね。iPhone Tech Talk World Tour 2009。このときは、日本でもやってた。私は行かなかったけど、予約は一瞬で満席になって、それなりに盛況だったっていう話も聞いた。

なぜに今年は東京でやらないの?ぱっと思いつくのは放射能のせいかな。アップルの人に聞かないと真相は分からんけど。

Appleの開催するこの手のイベントは、話の内容はともかく(どうせWWDCの焼き直しだろうし)、広い範囲の開発者を一堂に集める力はあるので、その機会が失われるのはさみしいね。

UIPageViewControllerとジェスチャー


iOS 5から追加されたUIPageViewControllerクラス。こいつを使うとページめくりができる。ひとつのページがひとつのビューコントローラになって、それを連ねる事で本みたいなものができるという仕組み。ビューコントローラベースなのが、ありがたい。将来的には、ページめくり以外にもいろいろなエフェクトが追加されて、Keynoteのスライドエフェクトみたいなものができるかも。

UIPageViewControllerは、デフォルトでタップやパンといったジェスチャーに対応している。画面の両端をシングルタップするとページめくり。パンすると追随するページめくり、といった感じ。これは便利。でもアプリに組み込んでいくと、独自のジェスチャーも追加したくなる。シングルタップでツールバー表示とかね。

そういったときは、UIPageViewControllerのgestureRecognizersプロパティを使う。これを経由して、UIPageViewControllerが管理しているジェスチャーにアクセスできる。ということは、こいつらのデリゲートとして自分のクラスを設定して、そこでgestureRecognizerShouldeBegin:といったようなUIGestureRecognizerDelegateのメソッドを実装してやる。そうすれば制御できる。

たとえばシングルタップ。ページ両端だったらページめくりで、それ以外だったらツールバー表示にしたい。となると、gestureRecognizerShouldeBegin:で受けて、タッチしたポジションを取得して、それが両端だったらYESを返してUIPageViewControllerに処理を任せる。そうでなければNOを返して、自前の処理にする。両端をタップしたかどうか?ってのは自分で判断しないといけないような気がする。

または新規にUIGestureRecognizerのインスタンスを作って、requireGestureRecognizerToFail:でどうにかするっていう手もあるかもしれない。でもこれ、うまくいくときといかないときがある感じ。どんなジェスチャーを追加したいかによる。

正直、UIPageViewControllerのAPIはまだこなれていない感じがするね。これ、新規に追加されたクラスではよくある。基本的な機能はきちんと実装されている。でもカスタマイズのためのものは、まだ粗削。ジェスチャーの制御に対してきめ細かなAPIを提供するのではなく、gestureRecognizersをポンっと投げて、これさえあれば後はそっちでどうにでもできるでしょ、って感じ。必要ではあるが充分ではない。どうにかしてそれを使って苦労して実装すると、次のバージョンですっごい便利なAPIを追加してきたりする。ムキーッてなる。

[MandalArt-Dev] iMandalArt HDでのキーボード分割の不具合


iPad版であるiMandalArt HDが、iOS 5での動作で不具合を確認しています。

iMandalArt HDで、iOS 5の新機能であるキーボードの分割を行うと、キーボードがすぐに隠れてしまい入力ができなくなるという不具合が起こることを確認しました。

現在、回避策を調査中です。キーボード分割を行わなければ問題は発生しませんので、とりあえずはそれでの回避をお願いします。

 

ご迷惑をかけて申し訳ありません。

iOS 5 SDKでドキュメントが見れない


iOS 5の正式版がリリースされたということで、iOS 5 SDKの話も解禁ということでいいのかな?いいよね?Mac App StoreにもXcode 4.2が登場したし。

しかし、XcodeはDev Centerからダウンロードするものと、Mac App Storeからインストールするものの2系統を管理しなくてはいけないので、めんどくさい。

では、早速文句を。iOS 5 SDKを新しいマシンにインストールした。通常の動作はできる。だけど、オーガナイザからドキュメントを見ようとしたら、Apple IDを入力してログインしろ、と言ってくる。それじゃあ、といってパスワードを打ち込もうとすると、「index.htmlがロックされていて編集できない」とか言われる。

そんなアホな。しょうがないからUnlockをクリックしてみると、Xcodeがクラッシュする。そんなアホな!

ということで、ドキュメントがまったく見れません。この問題、iOS 5 GMから発生したような気がする。すでにXcodeが入っているマシンで上書きした場合、この問題はなかった。どうにかしてくれ。

HMDTにて新人プログラマ採用決定


先日、新人プログラマの募集を行った訳ですけど、その後面接をやりまくりまして、ようやく決定しました。

今回の採用は、5人!うち程度の規模の会社にとっては、かなり思い切った決断です。始めは3人くらいかなー、と思ってたんですけど、面接しているうちに面白い人がどんどん出てくるので、5人になっちゃいました。

その5人ですが、バックグラウンドはバラバラです。ずっとWebサーバシステムやっていた人もいれば、映像技術系の人もいるし。10年近く働いている人もいれば、学生の人もいるし。Objective-Cに関しては、たくさんのiPhoneアプリ作っている人もいれば、まったく触ったことのない人もいるし。

まぁ、とにかく新しい風になってくれることは間違いないでしょう。これからこの会社がどうなっていくのか、私も楽しみです。

余談ですけど、HMDTでどういう面接をしたかを少しご紹介。履歴に関することとか、技術に関することは普通に聞くんだけど、今回は全員に共通して2つの質問をしました。まず面接の一番最初に、「iPhone持っていますか?Mac持っていますか?」と、聞いた。結構、所有率低かったっすよ。iPhoneは5割くらい、Macは3割程度の所有率だったかな。質問の目的は、話の入り口を作ることなんで、ここでの持っている持っていないは採用に影響を与えない。だけど、iPhoneアプリ作るにはMacが必要だ、ということを認識しているかどうかは重要。

もう1つの質問。これは面接の最後にした。「あなたがこの会社でアプリを作るとしたら、どんなアプリを作りたいですか?」というもの。ほとんどの人が想定外の質問だったらしく、「そうですね…」と考えながら答え始めた。この質問の目的は、実際にどういうアプリを作りたいかは重要ではなくて、自由にしゃべらせたときどれだけ話を広げることができるか、を視ること。

たとえば、「多くの人に使ってもらえるアプリを作りたいです」と答えたとする。うむ、立派な答えだ。じゃあ、いまApp Storeの無料ランキングのトップってドリランドでしょ。ドリランド作りたい?と聞くと、いやそれは違います、と答える。じゃあ、あなたの作りたい多くの人に使ってもらえるアプリって具体的にどういうものですか?と、追いつめる。

このとき、自分の持っている技術や知識を使ったものや、興味のあるフィールドを挙げて答えられるならばよし。またはApp Storeでのトレンドを解析して、それに見合ったアプリを提案するもよし。どれだけ具体的に、熱を持って語れるかを視させてもらった。ダメなパターンは、黙りこくってしまう、抽象的な言葉だけをベラベラと並べる、といったもの。ソフトウェアでものづくりする会社としては、抽象的な言葉は嫌います。必ず具体的なものに落としてもらう。

そんな感じの面接でした。新たな5人がどう活躍するか、何らかの形でお伝えできる場所がある、かも。