Xcode 8 では CoreData 用のファイルは automatic になったんだって

仕事でアプリを作る必要があり、CoreData も使おうと。ようやく作り方にも慣れてきたところで、まずはモデリングして、次に、Editor -> Create NSManagedObject Subclassess... を選んでファイルを生成してと、慣れた手順でファイルを作ったら、build でエラー発生・・・

エラー内容は、以下の通り。

 

 

Showing All Messages

ld: 4 duplicate symbols for architecture x86_64

 

Showing All Messages

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

ナンジャコリャ。重複しているファイルがあるので、linker がエラーこきました、とのこと。しっかりしろよ、clang。

調べてみたら、このエラーは必要なライブラリを指定していない時に出るよとのことで、あぁ、そう言えば CoreData を linked framework に指定していなかったなぁ、ってか、そんなこと最近しなくてもよくなった気がしていたんだけど・・と思って、指定してもエラー解消せず・・・

最近 Xcode がアップデートしたので、ひょっとして Xcode の bug じゃないのか?と思って、さらに調べたところ、Xcode 8 から CoreData 用にモデリングしたファイルは自動生成されるようになったんで、Subclassess で生成してしまうと duplicate error が出てしまうと。

自動生成するかの指定は、.xcdatamodeld を選択して、Show the file Inspector の Tools

 Version を見るとわかります。Automatic (Xcode 8.0) と書いてあるので、自動生成だと。

全然知りませんでした。Release Note をよく読めってことですかね・・・

でも、便利な機能であることは間違いないなと思いました。これによって、アプリのバージョンアップの際、CoreData のモデルに変更があるとデータが失われてしまうので、migration 必要とかも解消するのかなぁ・・・