テクノモンキーのアプリ開発日記

テクノモンキーの開発ブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsやアプリ開発に役立つ情報を発信します。

【iOS】Xcode11でRealmのエラー「Terminating app due to uncaught exception 'RLMException」が発生する場合の対処法

apps.apple.com


日記アプリ「Nikky」を久しぶりにアップデートしようとしたら

Xcode11でRealm関連のエラーが出てビルドできなかったので対処法をメモ。


Xcode11でRealmの「Terminating app due to uncaught exception 'RLMException」エラー


先日、iOSの最新版「iOS13」が公開されたこともあり、XcodeもXcode11になりました。

Xcodeを11にアップデート後、iOSプロジェクトをビルドしたら以下のエラーが出てビルドできませんでした。

2019-09-21 13:53:32.359632+0900 Nikky[1409:430233] *** Terminating app due to uncaught exception 'RLMException', reason: 'Primary key property 'date' does not exist on object 'DiaryData''


最後にプロジェクトをビルドしたのは1年くらい前だったのですが、その際はビルドエラーは出てなかったはずなので、

Xcode11にアップデートしたことによるエラーかと思われます。

エラー内容としては、RealmでPrimary keyがないというエラーのようですが、該当するクラスにはちゃんとプライマリーキーを設定していました。

import Foundation
import RealmSwift

class DiaryData: Object {
    
    @objc dynamic var date: String = ""
    @objc dynamic var text: String = ""
    @objc dynamic var attdata:Data? = nil
    @objc dynamic var thumnail:Data? = nil
    // プライマリキー
    override static func primaryKey() -> String? {
        return "date"
    }
}

プライマリーキーは設定しているのになぜかエラーが出る謎の状態なので、ネットで調べてみることに。



Xcode11でRealmの「Terminating app due to uncaught exception 'RLMException」エラーが出る場合の対処法


github.com


上記が参考になりました。
僕以外の人も、Xcode11にアップデートしてから同様のエラーが出ている人が多いようです。
対処法としては、RealmとRealmSwiftをXcode11対応版にアップデートすればOKなようです。

なので、cocoapodsの記述を下記に変更してインストールし直しました。

pod 'Realm', git: 'https://github.com/realm/realm-cocoa.git', branch: 'master', submodules: true
pod 'RealmSwift', git: 'https://github.com/realm/realm-cocoa.git', branch: 'master', submodules: true

そして再度ビルドし直したら「Terminating app due to uncaught exception 'RLMException」が消えてビルドが成功するようになりました。
いつもそうですが、メジャーアップデートするといつもと違ったエラーが出るからヒヤヒヤしますね...
(新しい内容だから参考になる情報も少なかったりするので...)

今回はとりあえず直ってよかったです...