当初シングルのアプリとして作っていたものに、後からドキュメントベース要素を追加しようとした時にどうしてもファイルを認識してくれなくてハマったことのメモ。
ドキュメントベースアプリではInfo.plistの項目としてDocument Typeの設定を行う箇所がある。この場所でファイルのUTIやRoleを宣言する他、Documentクラスと連携する場合はClassに対応するCocoaのクラスを設定する。
Objective-Cの場合はクラス名をそのまま書けば問題ないのだが、Swiftでモジュールを構成する場合、Documentクラスの名称は次のように書くのが正式となる。
Info.plist
$(PRODUCT_MODULE_NAME).DocumentClass
これが正しく設定されていないとオープンダイアログやDockのドラッグでファイルを渡しても認識してくれない。
エラーメッセージも開けないということしか教えてくれず、なぜ開けないのか説明がないのでハマってしまう。実はAppleのサンプルに記述があるのだが、NSDocumentには直接記載がない上、ドキュメントベース周りは古いドキュメントも多いので、うっかりObjective-Cの感覚でいると見落としてしまうと思う。というか、これで一時間悩んだ。