トラブルシューティング - Flutter SDK
macOS App Sandbox での Realm の使用
macOS App Sandbox で Realm Flutter SDK を使用して開発している場合、組み込みの macOS セキュリティ設定により、ネットワーク リクエストはデフォルトでは機能しません。 Atlas App Services と Device Sync を使用するにはネットワーク アクセスが必要です。
ネットワーク リクエストを有効にするには、次のコードを ファイルmacos/Runner/DebugProfile.entitlements
とmacos/Runner/Release.entitlements
の両方に追加します。
<!-- Other entitlements --> <key>com.apple.security.network.client</key> <true/> <!-- Other entitlements -->
このネットワーク アクセス権限を追加しなくても、Realm をローカルで使用することはできます。
macOS 用のFlutter開発の詳細については、 「 Flutterで macOS アプリを構築 する」を参照してください Flutterドキュメントの「」を参照してください。
iOS/IP OS が無効な割り当て/メモリが不足しています
使用可能なメモリがほとんどない iOS または IP デバイス、または複数の Realm や多数の通知を使用するメモリ集中型のアプリケーションでは、次のエラーが発生する可能性があります。
libc++abi: terminating due to an uncaught exception of type std::bad_alloc: std::bad_alloc
このエラーは通常、十分なメモリが利用できないため、リソースを割り当てることができないことを示します。
iOS15 + または iOS15 + 用にビルドしている場合は、 拡張仮想アドレス指定権限 を追加できます この問題を解決するには、 を使用します。
これらのキーをプロパティ リストに追加し、値を true
に設定します。
<key>com.apple.developer.kernel.extended-virtual-addressing</key> <true/> <key>com.apple.developer.kernel.increased-memory-limit</key> <true/>
Android 7 以前を使用した App Services への接続
Android 7 以降を使用しているデバイスで Realm SDK とともに App Services を使用するには、カスタム lets Encrypt トランスポート層セキュリティ(TLS)暗号化証明書を持つ HTTP クライアントをApp
に追加する必要があります。
これは、Android 7 以降を実行しているデバイスで Flutter を使用して、 let の暗号化 TLS 証明書を使用するウェブ サーバーに接続する既知の問題によるものです。 App Services サーバーは let の暗号化 TLS 証明書を使用するため、カスタム証明書を追加する必要があります。
次のリンクをクリックすると、アプリに追加する let s Encrypt 証明書をダウンロードできます。 https://lets-encrypt.org/certs/lets-encrypt-r3 .pem
カスタム HTTP クライアントを設定するには、次のコード例をアプリに調整します。
import 'package:realm_dart/realm.dart'; import "dart:io"; import "dart:convert"; IOClient createCustomHttpsClient(String cert) { SecurityContext context = SecurityContext.defaultContext; try { final bytes = utf8.encode(cert); context.setTrustedCertificatesBytes(bytes); } on TlsException catch (e) { final message = e.osError?.message ?? ""; if (!message.contains('CERT_ALREADY_IN_HASH_TABLE')) { rethrow; } } return IOClient(HttpClient(context: context)); } App createAppWithCustomHttpsClient( String letsEncryptCertificate, String appId) { IOClient ioClient = createCustomHttpsClient(letsEncryptCertificate); final appConfig = AppConfiguration(appId, httpClient: ioClient); return App(appConfig); } final letsEncryptCertificate = "<LET'S ENCRYPT CERTIFICATE>"; final appId = "<YOUR APP ID>"; final app = createAppWithCustomHttpsClient(letsEncryptCertificate, appId);