1画面から始めるStoryboard

第56回 Cocoa勉強会関西で、『1画面から始めるStoryboard』というテーマで発表しました。

iOS 4時代から開発しているプロジェクトで、既にXIBが沢山あって全面的にStoryboardに移行するのは大変、という状況から生まれた手法です。

勉強会後の懇親会で、ごく短いStoryという事から『星新一メソッド』と名付けられました。(長大なものは『大河ドラマメソッド』)

Audio QueueでSin波再生

第49回 Cocoa勉強会関西で、Audio Queue Servicesでのサウンド再生の初歩について発表しました。

Audio Queue Services Programming Guideではファイルを読み込んで再生するという例で説明がなされていますが、ファイル読み込みがあるおかげでやや理解しにくい印象を受けます。スライドではファイル読み込み部分を省いて再生の要点部分だけに絞りました。

iOS 6 のAuto Rotation

第47回 Cocoa勉強会関西で、
iOS 6 のAuto Rotation』について発表しました。

スライドの補足

window.rootViewController必須

window.rootViewControllerが設定されていない場合うまく動きません。rootViewControllerはiOS 4から追加されたプロパティです。iOS 4以前はviewController.viewをwindowにaddSubviewするコードを書いていましたが、iOS 4以後はrootViewControllerを利用するべきです。(rootViewControllerを設定するとaddSubviewも自動で行われます)

supportedInterfaceOrientationsForWindow: のデフォルト実装

UIApplication.supportedInterfaceOrientationsForWindow: のリファレンスにはデフォルト実装ではInfo.plistのUIInterfaceOrientationの値が参照されるとありますが、これはUISupportedInterfaceOrientationsの誤りのようです。
スライド中の表ではUISupportedInterfaceOrientationsと記載し直しましたが、同ページにあるリファレンスからのコピペはUIInterfaceOrientationのままになっていますのでご注意ください。

CAKeyframeAnimation

第45回 Cocoa勉強会関西で、
『CAKeyframeAnimation』について発表しました。

サンプルコード
https://github.com/nakiwo/KeyFrameSample

Core Animationの明示的アニメーションで表示が元に戻る

第44回 Cocoa勉強会関西で、
『Core Animationの明示的アニメーションで表示が元に戻る問題』について発表しました。

サンプルコード
https://github.com/nakiwo/CoreAnimationSample1

iOS 5から、ディスクが一杯になると/Library/Cachesがクリアされるようになった

iOS 5.0.1 で、"do not back up" というファイル属性が追加されました。
この属性はどういう時に使うのでしょうか。

Technical Q&A QA1719
How do I prevent files from being backed up to iCloud and iTunes?

http://developer.apple.com/library/ios/#qa/qa1719/_index.html

再生成や再ダウンロードが可能なデータは、バックアップ対象にならないCachesディレクトリに入れておけという指針、これはiOS 5より前からずっと言われている事で特に代わりありません。

iOS 5で新しくなったのは、ディスク不足の時にCachesディレクトリが消されるようになったという点。iOS 4以前では、CachesディレクトリはOSリストアの時にしか消えませんでした。

ディスクをわざと一杯にしてみると、

  • バックグラウンドのアプリを全部殺す
  • 殺したアプリのCachesディレクトリをクリアする

という処理が走りました。他にも何らかのタイミングで消される可能性があります。

元々Cachesはバックアップ対象では無いのでいつデータが無くなっても大丈夫なように対処しておく必要がありますが、iOS 5ではそれが発生する可能性が高くなったという事です。

電子書籍ダウンロードのような物を考えてみましょう。ガイドラインに従うと、サーバにあって再ダウンロード出来るという事で、データはCachesに入れておく事になるでしょう。しかし、ディスクの空きが少ない場合Cachesに保存したデータは読もうと思った時には消えている可能性があります。

QA1719 に記載されている、Offline Data は、このような状況を避けるための方法。

  • "Caches"以外の場所にディレクトリを作成し、ディスク不足時に削除されないようにする
  • "do not backup"属性を付けてバックアップ対象から外す

の合わせ技で、iOS 4以前のCachesディレクトリと同じ挙動をするオフラインデータ用ディレクトリを作成する事が出来ます。

注意点。"do not backup"属性はバックアップするな、というフラグであり、ディスク不足の時に消さないで下さい、というフラグではありません。Cachesは常にディスク不足時の削除対象になります。

iOS 5.0には"do not backup"属性が無いので、iOS 4以前のCachesディレクトリと同じ挙動をさせる事は不可能です。

UIViewControllerのコンテナ機能

第41回 Cocoa勉強会関西で、
iOS 5で追加されたUIViewControllerのコンテナ機能について発表しました。

サンプルコード
https://github.com/nakiwo/ViewControllerContainerSample