문제 해결 - Flutter SDK
이 페이지의 내용
macOS 앱 Sandbox로 Realm 사용하기
macOS 앱 Sandbox에서 Realm Flutter SDK로 개발하는 경우 내장된 macOS 보안 설정으로 인해 네트워크 요청이 기본적으로 작동하지 않습니다. Atlas App Services 및 Realm Mobile 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/iPad OS 할당 불량/사용 가능한 메모리 부족
메모리가 부족한 iOS 또는 iPad 장치나 다수의 영역 또는 많은 알림을 사용하는 메모리 집약적인 애플리케이션을 사용하는 경우 다음과 같은 오류가 발생할 수 있습니다.
libc++abi: terminating due to an uncaught exception of type std::bad_alloc: std::bad_alloc
이 오류는 일반적으로 사용 가능한 메모리가 부족하여 리소스를 할당할 수 없음을 나타냅니다.
iOS + 또는 iPad +용으로 빌드하는 경우 확장 15 15 가상 주소 지정 권한 을 추가할 수 있습니다. 을(를) 클릭하여 이 문제를 해결하세요.
다음 키를 속성 목록에 추가하고 값을 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를 사용하려면 사용자 지정 Let's Encrypt TLS(전송 계층 보안) 암호화 인증서를 사용하여 HTTP 클라이언트를 App
에 추가해야 합니다.
이는 Android 7 이전 버전을 실행하는 기기에서 Flutter를 사용하여 Let's Encrypt TLS 인증서를 사용하는 웹 서버에 연결하는 알려진 문제 때문입니다. App Services 서버는 Let's Encrypt TLS 인증서를 사용하므로 사용자 지정 인증서를 추가해야 합니다.
다음 링크를 클릭하여 Let's 인증서를 다운로드하여 앱에 추가할 수 있습니다. 3
사용자 지정 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);