Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2021年12月05日

Core Dataの.xcdatamodeldをrenameする



既存プロジェクトを複製して新しいプロジェクトを作成したあと、各ファイルやフォルダの名称を変更していくが、Core Dataのモデル名称を変更するときにハマったのでメモ。

変更するべき箇所。

1. AppDelegate
(NSManagedObjectModel *)managedObjectModel メソッドで定義するNSURLのパスの名前を変更。

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Hoge" withExtension:@"momd"];


(NSPersistentStoreCoordinator *)persistentStoreCoordinator メソッドで定義するsqliteのパスの名前を変更。

NSURL *storeUrlFirst = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Hoge.sqlite"];



2. xcdatamodeld
2.1 Xcodeの左ペイン上のxcdatamodeldの名前を変更。

2.2 xcdatamodeldのパスを変更。
(1) Xcodeの左ペイン上のxcdatamodeldを選択してインスペクタを開き、Identity and TypeタブでLocationの右側にあるフォルダアイコンをタップして、xcdatamodeldの実体ファイルがどこにあるかを確認。

(2) Finderで上記(1)のファイルを開いてxcdatamodeldを選択し、右クリックして「パッケージの内容を表示」を選択。

(3) 上記(2)の操作で現われた xcdatamodelファイルを複製し、複製したファイルの名前を変更する。

(4) Xcodeに戻り、再びxcdatamodeldを選択してインスペクタを開き、Identity and TypeタブでLocationの右側にあるフォルダアイコンをタップして、xcdatamodeldの実体ファイルがあるフォルダを開く。

(5) 上記(2)操作で複製して名前を変更したファイルが表示されるので、このファイルをxcdatamodeldの実体ファイルとして選択する。

(6) XcodeのProductメニューからClean Build Folderを実行、Build & Runしてクラッシュしないことを確認する。

(7) 上記(2)の操作を再び実施し、複製前のxcdatamodelファイルを削除する。



ネットでxcdatamodeldをrenameする場合の手順を記した記事を探すと、上記(2)の操作で現われた隠しファイルの.xccurrentversionファイルの_XCCurrentVersionNameキーを変更すると記されているのだが、この手順は古く現在では通用しない。

既存のxcdatamodelファイルをxcdatamodeldの実体ファイルとして選択していると、_XCCurrentVersionNameキーを変更していてもXcodeを再起動したときに_XCCurrentVersionNameキーが元の名前に戻ってしまいアプリがクラッシュしてしまう。
xcdatamodeldの実体ファイルの名前を変更していても同じ現象となる。

Xcode 13.1 時点では、複製したxcdatamodelファイルをxcdatamodeldの実体ファイルに選択する必要がある。
この操作により、xccurrentversionファイルの_XCCurrentVersionNameキーは複製したxcdatamodelファイルの変更した名前で上書きされるようになる。



参考記事:
https://stackoverflow.com/questions/5621178/rename-xcdatamodel-file
https://stackoverflow.com/questions/17631587/xcode-modifies-current-coredata-model-version-at-every-launch
posted by mobileDeveloper at 14:52 | Comment(0) | Core Data はてなブックマーク - Core Dataの.xcdatamodeldをrenameする | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。