WWDC Cocoa Development Tips まとめ
Cocoa Development Tips
「あなたが知らないCocoaの29のこと」という面白そうな副題がついてたので見てみました。
Internationalization
UserDefaults
- 4つの階層がある
- Argument Domain / Application Domain / Global Domain / Registration Domain
- 読み込み時は、先頭から順に問い合わせる
- 書き込み時はそれぞれの階層で手法が異なる
- Registration Domain > UserDefaults.standard.register([“key” : value])
- ↑これは永続化されない
- Global Domain > defaults write GlobalDomain key -bool value
- ↑コマンドラインから叩く。コードではない
- Application Domain > UserDefaults.standard.set(key, value)
- ↑よく使うもの
- Argument Domain > 起動時に設定。書き込みはない
- 4つの階層がある
役立つUserDefaults
-NSViewLayoutFeedbackLoopDebug YES
- 繰り返し発生しているレイアウトを追跡しやすくなる
-NSApplicationCrashOnException YES
- クラッシュ時の例外をキャッチして表示してくれる
UserDefaults + KVO
- UserDefaultsはKVOで監視できる
//新機能 extension UserDefaulst { @objc dynamic var showAtLaunch : Bool { return self.value(forKey: "showAtLaunch") as? Bool ?? false } } let observation = UserDefaults.standard.observe(\.showAtLaunch) { observed, change in //処理 }
Asset Catalogs
Unit Test
- XcodeのNewFileからUnitTestを選択することでテンプレートが生成される
NSBox
Restorable State
- こちらもMacOS専用
- NSResponderに状態を保持させ、再起動で復元させる?
- restorableStateKeyPathsプロパティを使えば楽になる?
CoreData
- ※もはやRealmの時代だとは思いますが
- NSPersistentContainerを使えば厄介なCoreData初期化で楽できる
- 配列を保存したいときは、RelationShip で ToMany を選択する
- 必要に応じorderedにもチェックをいれる
- Modelの新バージョンを作り、あとはCoreData側がマイグレーションしてくれる
- エラーは適切にハンドリングする
- 特に追加時
NSError
- NSErrorには各種メッセージがあるので、適切にユーザに表示する
- 自分でエラーを発生させるときも適切にメッセージを設定するように
- CocoaErrorを使えば楽できる(新規)
- 専用のドメインを作えばハンドルしやすくなる?
SharedKeySets
- 頻出するキーを渡しておけば高速化できる
- NSDictionary.sharedKeySet と NSMutableDicitonary.init(sharedKeySet:) をペアで使う
let set = NSDictionary.sharedKeySet(forKeys:["id", "name"]) let dict = NSMutableDictionary(sharedKeySet: set) dict["id"] = ... dict["name"] = ...
Accessibility
- VoiceOverはIBから簡単に設定できる
- Appを1024x640でテストしておく
- DeveloperToolのAccessibilityInspectorをうまく使う
Documents
- ユーザに保存させる文章にNSDocumentを使えばVersionControlなどいいようにやってくれる?
- CocoaAPIは使ったことがないのでイマイチつかめず
Reporting Exceptions
- NSApplication reportExceptionをオーバーライドすれば例外をロギングしやすくなる
Debugging
- XcodeのDebug領域をうまく使う
- View hierarchy, Debug memory graph, simulate location
Sound
- NSButtonにSoundを設定できる
※セッション一覧ページにはiOS/Mac/watchOS/tvOSとあったのですが、思ったよりMacでした。CocoaTipsなので当然かもしれませんが。