Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/

Solução de problemas - Flutter SDK

Nesta página

  • Use o Realm com o macOS App Sandbox
  • Alocação incorreta do sistema operacional iOS/iPad/memória insuficiente disponível
  • Conecte-se ao App Services usando o Android 7 ou anterior

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 .

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/>

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);

Voltar

Transmitir Dados para o Atlas