第62回 Cocoa勉強会に行ってきた(10/19)
会場は水道橋の貸し会議室 内海。ここ使うのはひさしぶり。
以下発表など。
「新しい通信クラス群NSURLSessionを使ってみる」iOS
iOS7で導入された新しい通信API。セッションとタスクを分けたことが大きい。
(通常の通信)
- NSURLConnectionとは異なり、デリゲートなしで処理できる。
- 通信完了後の処理はblocksで記述する。
- デリゲート使う場合はNSURLConnectionとデリゲートメソッドが微妙に変わってるので注意。
(認証と証明書)
- 以前は両方とも同じデリゲートだったが処理が分かれた。
- 認証は以前のようにcredentialを返り値とするのでなく、用意したcredentialを使ってhandler(blocks)を呼び出す。
- 証明書でオレオレ証明書を使うには証明書の処理をまるごと実装する必要あり。正規の証明書の処理をCoreFoundationを使って書く。
全体としてすごく使いやすくなっていて、iOS7以降ならNSURLConnectionを使う理由はもうない!
議論など
- Q.オレオレ証明書って使うの?
- A.要件としてそういうお仕事がわりとあるらしい。大学など組織で自己CA立ててるケースやExchangeのテストとか。
「APIを前方互換に拡張する」Mac?
古いOSでも新しいAPIを使いたい。自分で同じ機能をカテゴリと実装して
if (新しいOS) { OSの実装; } else { 自分の実装; }
としていた。これは不要になったときにコード修正個所が多いし、複数の開発者でやってると同じようなことを別々に実装してしまったりという問題もあった。
今回はObjective-Cの動的メソッド追加を利用して改善する。
- ランタイム関数class_addMethodなどを使う。
- メソッドの有無をrespondToSelector:で判定し、なかったら自前実装のメソッドを追加。
- +initialize で上述の処理を行う。
- 利用箇所ではそのまま新しいAPIを呼ぶように書く。
とする。
「RFC Viewerの紹介」iOS
[告知]来週セミナーやるよ http://atnd.org/events/43950
- モデル: singletonで管理する。
- データの保存と読み出しのインターフェイスを統一する。UserDefaultsも同様。
- 通信では応答の処理にblocksを使うようにした。並列で通信するとき要求と応答の関連を明確にするため。
おまけ QA1176
QA1176 - https://developer.apple.com/library/mac/qa/qa1176/_index.html
「ClangのModules」Xcode
自分の発表。Xcode5から導入された"Modules"の機能について、主にClang側からの視点で話した。
「Cocoaでマルチウィンドウ」Mac
NSDocument/NSDocumentControllerの話ではなくって、アプリ[A]-モデル[M]-ウィンドウ[W]の関連ごとの設計の話。関連の1対1、1対多の組み合わせで次の4種類に分ける。
No. A:M M:W (1) 1:1 1:1 計算機 (2) 1:N 1:1 辞書やMail.app (3) 1:1 1:N PagesやKeynote (4) 1:N 1:M PhotoshopやOmniGraffle
Todoアプリを作成しそれぞれのモデルの実装について説明。ウインドウのidentifierの管理など。
タブは1ウインドウに多ドキュメントだけどどうしよう?
議論など
- 見た目が単純でも複雑なパターンを使って実装することが多い。
- (1)(2)に相当するアプリでも[NS|UI]Document使う。
「不要になったシミュレータを捨てる方法」Xcode
Xcodeで古いiOSのシミュレータをインストールすることができるけれど
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/
にあるファイルを消すだけではダメで、Xcodeの次回起動時に「もう一度ダウンロードする?」とのダイアログが表示されてしまう。
~/Library/Caches/com.apple.dt.Xcode/Downloads
の.dmgファイルも削除することで再ダウンロードの確認も行われなくなる。ディスク使用量の削減的にもこっちも削除したほうがよい。
次回の予定
12/7(土)に千葉県の松戸で開催します。