広告

【Realm】デバッグ時の分析情報送信をオフ・通信エラーを解決

Swift

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

今回は、SwiftでRealmを使用した際に発生するエラーについて、対応策をまとめました。

使用するバージョン
  • macOS Monterey (M1)
  • Xcode 13
  • Swift 5
  • SwiftUI
広告

【紹介】個人開発

Mac向けの、定型文の挿入も可能なクリップボード履歴管理アプリです。
Windows版は以前からありましたが、基本的な使い方はMac版も同じですので、もしよかったらダウンロードしてみてください。

  • Xcode
  • Swift
  • SwiftUI
  • Realm Database
  • Appleによる公証済み

準備

CocoaPodsを利用してRealmを導入しますので、以下の記事を参考にしてください。

【Mac】CocoaPodsのインストールとアンインストール
MacにCocoaPodsを導入する手順をまとめました。

今回、Mac上で動く簡単なサンプルアプリを作成します。
SwiftUIで実装しますので、以下を参考にプロジェクトを作成してください。

【SwiftUI】Mac向けアプリを作ろう
SwiftUIを使って、Mac向けのネイティブアプリを作成する手順をまとめました。

Realmの導入は以下の記事をご覧ください。
本記事は、以下の記事の続きになります。

【SwiftUI】Realm Databaseの導入とアプリの作成
Mac向けのネイティブアプリに、Realmを導入する手順をまとめました。

事象確認

Xcodeでサンプルアプリを実行してみます。

確定ボタンをクリックしRealmにデータを登録する際、以下のようなエラーメッセージが表示されます。

networkd_settings_read_from_file Sandbox is preventing this process from reading networkd settings file at “/Library/Preferences/com.apple.networkd.plist”, please add an exception.
nw_resolver_can_use_dns_xpc_block_invoke Sandbox does not allow access to com.apple.dnssd.service
dnssd_clientstub ConnectToServer: connect() failed path:/var/run/mDNSResponder Socket:9 Err:-1 Errno:1 Operation not permitted
[connection] nw_resolver_create_dns_service_locked [C1] DNSServiceCreateDelegateConnection failed: ServiceNotRunning(-65563)

finished with error [-1003] Error Domain=NSURLErrorDomain Code=-1003 “A server with the specified hostname could not be found.”

原因

Realmがデバッグ時に、匿名の分析情報を送信しているためです。

ソースコードは以下です。

https://github.com/realm/realm-swift/blob/master/Realm/RLMAnalytics.mm

ソースのコメントにも、デバッグ時のみでそれ以外は送信しない旨は記載されていました。

To be clear: this does not run when your app is in production or on your end-user’s devices;
it will only run in the simulator or when a debugger is attached.

解析処理の送信は以下のようです。

void RLMSendAnalytics() {
    if (getenv("REALM_DISABLE_ANALYTICS") || !RLMIsDebuggerAttached() || RLMIsRunningInPlayground()) {
        return;
    }
    NSArray *urlStrings = @[@"https://data.mongodb-api.com/app/realmsdkmetrics-zmhtm/endpoint/metric_webhook/metric?data=%@"];
    NSData *payload = [NSJSONSerialization dataWithJSONObject:RLMAnalyticsPayload() options:0 error:nil];

    for (NSString *urlString in urlStrings) {
        NSString *formatted = [NSString stringWithFormat:urlString, [payload base64EncodedStringWithOptions:0]];
        // No error handling or anything because logging errors annoyed people for no
        // real benefit, and it's not clear what else we could do
        [[NSURLSession.sharedSession dataTaskWithURL:[NSURL URLWithString:formatted]] resume];
    }
}

また、Macアプリを作成する際、デフォルトでサンドボックスに対応したアプリになっているため、外部への通信が制限されている状態です。

この二つの理由により、エラーが発生します。

広告

対応

デバッグ時の匿名情報送信であり、そもそも通信できていない状態のエラーですので、実害は無いので無視しても構いませんが、送信しないように(エラーが発生しないように)対応します。

Xcodeのメニューバーの、Product -> Scheme -> Edit Schemeを開きます。

「Run Debug」を開きます。
「Environment Variables」のプラスボタンをクリックします。

Nameに「REALM_DISABLE_ANALYTICS」、Valueに「1」を入力します。

以上で対応は完了です。
再度アプリを実行して、エラーが発生しなくなることを確認してください。

さいごに

SwiftでRealmを使用した際に発生するエラーについて、対応策を解説しました。

他にも私のブログで、Swiftについて解説している記事がありますのでご覧ください。

MacOSSwiftプログラミング
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。
定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。
パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。
Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。
例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。
いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。
テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。
初心者の方はもちろん、もっと速く計算したい方にも役立ちます。
5万対局以上の実践から問題を収録。

コメント

タイトルとURLをコピーしました