Solução de problemas - Flutter SDK
Nesta página
Use o Realm com o macOS App Sandbox
Se você estiver desenvolvendo com o Realm Flutter SDK no macOS App Sandbox, as solicitações de rede não funcionam por padrão devido às configurações de segurança integradas do macOS. O acesso à rede é necessário para usar o Atlas App Services e o Realm Mobile Sync.
Para habilitar as solicitações de rede, adicione o seguinte código aos arquivos macos/Runner/DebugProfile.entitlements
e macos/Runner/Release.entitlements
:
<!-- Other entitlements --> <key>com.apple.security.network.client</key> <true/> <!-- Other entitlements -->
Você ainda pode usar o Realm localmente sem adicionar essa permissão de acesso à rede.
Para obter mais informações sobre o desenvolvimento do Flutter para macOS, consulte Construindo aplicativos macOS com o Flutter na documentação do Flutter .
Alocação incorreta do sistema operacional iOS/iPad/memória insuficiente disponível
Em dispositivos iOS ou iPad com pouca memória disponível, ou quando você tiver um aplicativo com uso intensivo de memória que utilize vários realms ou muitas notificações, poderá encontrar o seguinte erro:
libc++abi: terminating due to an uncaught exception of type std::bad_alloc: std::bad_alloc
Esse erro normalmente indica que um recurso não pode ser alocado porque não há memória suficiente disponível.
Se estiver desenvolvendo para iOS 15+ ou iPad 15+, você pode adicionar o Extended Virtual Addressing Entitlement para resolver este problema.
Adicione estas chaves à sua Lista de propriedades e defina os valores para true
:
<key>com.apple.developer.kernel.extended-virtual-addressing</key> <true/> <key>com.apple.developer.kernel.increased-memory-limit</key> <true/>
Conecte-se ao App Services usando o Android 7 ou anterior
Para usar o App Services com o Realm SDK em um dispositivo com o Android 7 ou anterior, você deve adicionar um cliente HTTP com um certificado de criptografia Let's Encrypt Transport Layer Security (TLS) personalizado ao App
.
Isso se deve a um problema conhecido ao usar o Flutter em dispositivos que executam o Android 7 ou anterior para se conectar a servidores web que usam certificados Let's Encrypt TLS. Como o servidor do App Services usa um certificado Vamos Criptografar TLS, você deve adicionar o certificado personalizado.
Você pode baixar o certificado Let's Encrypt para adicionar ao seu aplicativo clicando neste link: https://letsencrypt.org/certs/lets-encrypt-r3.pem
Para configurar o cliente HTTP personalizado, adapte o seguinte exemplo de código para o seu aplicativo.
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);