0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOSのデスクトップアプリを開発している時、ローカルで実行しているアプリのローカルデータベースに保存されているデータを削除したい

Posted at

Xcodeを使ってmacOSのネイティブアプリを開発している時、アプリのローカルデータベースに保存されているデータを全部消したい時があります。例えば自分の場合は、SwiftDataを使ってアプリを開発していて開発中のSwiftDataのモデルを変更した時です。開発中にデータモデルを変更したくらいでマイグレーション処理を書く必要はないので、単純にデータベースを削除したいのです。何故なら、そのままアプリを実行すると以下のようなエラーが発生してアプリを起動できなくなるためです(エラーメッセージはうろ覚えです)。

error: addPersistentStoreWithType:configuration:URL:options:error: returned error NSCocoaErrorDomain (134110)
Cannot migrate store in-place: Validation error missing attribute values on mandatory destination attribute,

上記のエラーは、既に作成されているテーブルに、後から追加したモデルのプロパティが存在しないため発生します。ローカルデータベースを削除して再起動すれば、テーブルが存在しない状態からアプリを起動することになるので、新たなスキーマでデータベースが作成されます。そのため、開発中にデータモデルを変更した場合は単純にデータベースを消してからアプリを起動したいのです。

が、これがなかなか難しい。開発中のアプリをアンインストールする方法がまずわからないし、開発中のアプリのバイナリを削除してもデータベースは削除されませんでした。

以下のSOの記事を読み、 ~/Library/Containers/your.app.bundle.here に関連データが保存されていることを知りました。

xcode - How to remove macOS app from device during development - Stack Overflow

your.app.bundle.here を削除した後、再度Xcodeからアプリをrunすると、新たなスキーマでアプリを起動することができました。まあ、それまでローカルに溜まっていたデータは全部消えますが。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?