Para times que publicam na App Store e no Google Play
Saiba por que o seu app crashou, travou ou ficou lento.
O Apsio é um SDK para o seu app iOS, Android ou React Native e um console que mostra cada crash, travamento e tela lenta com os passos que levaram até ele. Seu agente de código pode ler as mesmas issues.
14 dias, sem cartão. Uma chamada para instalar.
Ainda não quer instalar? Explore o sandbox
Mais que um crash reporter. Roda ao lado do Crashlytics ou do Sentry.
O problema
Um stack trace é a última linha da história.
Ele diz onde o app morreu. As perguntas do seu time começam antes.
O crash não tem um antes.
Você recebe um símbolo e uma linha, e reconstrói o caminho do usuário no chute.
Com o Apsio: a sessão inteira, com a tela, a requisição que falhou e o travamento que veio antes.
O travamento não deixa relatório.
Encerramentos por watchdog e por falta de memória matam o processo antes de qualquer registro.
Com o Apsio: esses encerramentos são encontrados nos registros do próprio sistema e na abertura seguinte.
Os números não batem.
Quando as sessões são amostradas, a taxa crash-free é uma estimativa.
Com o Apsio: toda sessão envia um resumo, então a saúde da release é exata.
Produto
Do crash de volta à causa.
Cinco perguntas que um time mobile faz toda semana, respondidas a partir das mesmas sessões.
Simbolizado até a linha.
Os crashes chegam agrupados por causa, com o arquivo e a linha, os passos até ali e quantas pessoas foram afetadas.
- Crashes no iOS, no Android e em código nativo, agrupados por causa.
- Erros tratados e endpoints com falha aparecem ao lado dos crashes.
- Os símbolos sobem do seu build: pela CLI, Xcode, fastlane, Gradle ou uma GitHub Action.
- Sessões
- 31
- Usuários
- 29
- Dos crashes da 5.2
- 64 %
Stack · thread 0
- objc_msgSendlibobjc.A.dylib
- CheckoutViewModel.total.getterCheckoutViewModel.swift:214
- CheckoutViewModel.submit()CheckoutViewModel.swift:188
- CheckoutView.body.getterCheckoutView.swift:61
Antes do crash
- −2.21 sCheckout aberto
- −2.00 sPOST /v1/orders 500
- −1.26 shang 1.24 s
- 0app.crash
Veja o que a main thread estava fazendo.
Quando o app para de responder, o Apsio mostra o stack da main thread e a sessão em volta, para que um travamento tenha causa e lugar.
- Hangs no iOS e ANRs no Android, com o stack.
- Encerramentos por watchdog e por falta de memória, encontrados mesmo quando o sistema não deixa relatório de crash.
- Frames lentos e congelados, para que as pausas menores também apareçam.
Main thread durante o hang
- JSONDecoder.decode(_:from:)Foundation
- OrderStore.reload()OrderStore.swift:88
- CheckoutViewModel.submit()CheckoutViewModel.swift:188
Tempo de início e de tela, como distribuições.
Inícios a frio, morno e quente são medidos separadamente. Cada tela informa o tempo até a primeira exibição, e até a exibição completa quando o seu app marca.
- Inicializações pré-aquecidas no iOS são medidas a partir do momento em que o app fica ativo, para não inflar os números.
- A exibição completa é uma chamada do seu app quando a tela está pronta.
- Os histogramas do MetricKit mantêm todas as faixas, então a cauda lenta continua visível.
- Frio p50
- 410 ms
- Frio p90
- 980 ms
- Morno p50
- 190 ms
| Tela | Primeira exibição | Exibição completa |
|---|---|---|
| Home | 210 ms | 640 ms |
| Search | 240 ms | 520 ms |
| Checkout | 188 ms | 1.92 s |
Cada requisição, ligada ao seu backend.
Os spans de rede trazem o tempo e o status, e apontam para o mesmo trace no seu APM, ou mostram os spans do seu backend se você também enviá-los.
- Endpoints com falha viram issues, ao lado dos seus crashes.
traceparentsó nos seus próprios hosts, nunca enviado a terceiros.- Corpos e query strings ficam no celular, a menos que você os ative.
| Endpoint | Requisições | Erros | p90 |
|---|---|---|---|
| GET /v1/feed | 48.2k | 0.1 % | 290 ms |
| POST /v1/orders | 3.1k | 2.4 % | 1.10 s |
| GET /v1/catalog | 22.7k | 0.0 % | 180 ms |
Ligados pelo traceparent. Os spans do backend chegam por OTLP.
Saúde da release em que dá para confiar.
O detalhe é amostrado, mas toda sessão é contada, então as taxas crash-free e a adoção são exatas.
- Sessões e usuários crash-free, por build.
- Compare duas releases quaisquer, no console ou pelo seu agente.
- Regressões reabrem issues resolvidas, e símbolos faltando aparecem por release.
| Métrica | 5.1 (790) | 5.2 (812) |
|---|---|---|
| Sessões crash-free | 99.71 % | 99.38 % −0.33 |
| Usuários crash-free | 99.80 % | 99.52 % −0.28 |
| Adoção | 61 % | 34 % |
| Início a frio p90 | 1.01 s | 980 ms −30 ms |
| Issues novas | 0 | 1 · iss_8kq2 |
Contado a partir de todas as sessões. O detalhe é amostrado; estes números não.
Tudo o que o Apsio cobreEstabilidade · Desempenho · Sessões · Releases · Dados · Fluxo de trabalho
Estabilidade
Crashes, hangs e ANRs, encerramentos por falta de memória e por watchdog, erros tratados, endpoints com falha como issues, e breadcrumbs antes de cada falha.
Desempenho
Inicialização, tempo até a primeira exibição e a exibição completa, frames lentos e congelados, spans de rede, e MetricKit como histogramas. Perfis de call stack vêm depois.
Sessões
A linha do tempo de cada sessão, replay em wireframe, jornadas e funis, usuários por um hash que você fornece, feature flags e controles de consentimento.
Releases
Taxas crash-free exatas, adoção por build, comparação de releases, regressões que reabrem issues resolvidas, e símbolos faltando por release.
Dados
Logs, métricas e eventos customizados, SQL e dashboards, exportação OTLP, retenção por projeto, e exclusão a pedido.
Fluxo de trabalho
Alertas para Slack, PagerDuty, Linear ou GitHub, amostragem de sessões e um kill switch, uma API pública, um servidor MCP remoto e uma CLI.
iOS e iPadOS 15+ · Android 7+ · React Native · Flutter depois
Como funciona
Uma chamada para começar. O resto vem ligado.
Adicione o SDK e chame start
Adicione o SDK com Swift Package Manager, Gradle ou npm. Crashes, inicializações, telas, rede e ciclo de vida já vêm ligados.
Envie os símbolos do seu build
A CLI
apsioencontra dSYMs, mapeamentos do R8 e símbolos do NDK e os envia. Xcode, fastlane, Gradle e uma GitHub Action chamam o mesmo binário.O celular faz o trabalho cuidadoso
O SDK remove dados sensíveis no dispositivo, amostra por sessão e guarda uma fila em disco. Os dados esperam um voo inteiro, e um crash é enviado na abertura seguinte, ainda ligado à sua sessão.
Leia de qualquer lugar
O console, a API, o servidor MCP e a CLI leem o mesmo armazenamento, e seus dados podem sair como OTLP para qualquer backend que você opere.
// AppDelegate.swift import Apsio Apsio.start(key: "a-k3f9q2x7")
// MainApplication.kt import io.apsio.Apsio Apsio.start(this, key = "a-p72xw4mt")
// App.tsx import { Apsio } from '@apsio/react-native' Apsio.start({ key: 'a-r58dn3vq' })
Apache-2.0 · iOS 15+ · Android 7+ · React Native · API em prévia, os nomes podem mudar antes da 1.0
Já usa OpenTelemetry? Aponte o seu exporter OTLP/HTTP para a URL de ingestão do seu app com o header Apsio-App-Key. JSON ou protobuf, nos caminhos padrão.
Agentes
Seu agente lê a mesma issue que você.
Pergunte ao seu agente de código o que quebrou na última release. Ele recebe o arquivo e a linha, a release e os passos antes do crash, e responde a partir das suas sessões reais.
- Funciona com o agente que você já usa. Claude, ChatGPT, Cursor e Codex, por MCP, CLI ou skills.
- As mesmas permissões de uma pessoa do seu time. Somente leitura por padrão, e toda chamada fica no log de auditoria.
- Nunca medido. Chamadas de agente, CLI e API não contam na sua fatura.
Desenvolvedor
A 5.2 (812) está pior que a 5.1 no iOS? Se o crash principal for novo, proponha uma correção.
Agente
Primeiro, comparando as duas releases.
$ apsio releases compare "5.1 (790)" "5.2 (812)" --app shop-ios --json --jq '.crash_free_sessions' { "5.1 (790)": 99.71, "5.2 (812)": 99.38 }
Caiu 0,33 ponto. Buscando os grupos de crash do build novo.
$ apsio issues --app shop-ios --release "5.2 (812)" --kind crash --json --jq '.[0:3] | map({id, title, sessions, first_seen})' [ { "id": "iss_8kq2", "title": "EXC_BAD_ACCESS in CheckoutViewModel.swift:214", "sessions": 31, "first_seen": "5.2 (812)" }, { "id": "iss_2x9f", "title": "SIGABRT in ImageCache.swift:77", "sessions": 9, "first_seen": "4.8 (701)" }, { "id": "iss_7hd1", "title": "EXC_BREAKPOINT in FeedStore.swift:142", "sessions": 5, "first_seen": "5.0 (744)" } ]
Um deles é novo neste build. Lendo o stack e os passos antes dele.
$ apsio issue iss_8kq2 --json --jq '{stack: .frames[0:3], before: .breadcrumbs}' { "stack": [ "objc_msgSend", "CheckoutViewModel.total.getter · CheckoutViewModel.swift:214", "CheckoutViewModel.submit() · CheckoutViewModel.swift:188" ], "before": [ "-2.21 s Checkout opened", "-2.00 s POST /v1/orders 500", "-1.26 s hang 1.24 s", "0 app.crash" ] }
Ele crasha depois que POST /v1/orders retorna 500: o view model lê o total do pedido depois que a requisição falhou. Abrindo a evidência.
$ apsio issue open iss_8kq2 -r https://app.apsio.io/acme/shop/issues/iss_8kq2
A 5.2 (812) está pior. As sessões crash-free caíram de 99,71% para 99,38%, e a queda é uma issue nova, iss_8kq2: 31 sessões, todas depois que POST /v1/orders retornou 500. A sessão 7f3c…e19a, no link acima, mostra o caminho inteiro.
A correção é sair mais cedo de submit() quando a requisição do pedido falha, antes de ler o total. Já está pronta como pull request para a sua revisão.
MCP
Para agentes sem shell: os apps do Claude e do ChatGPT, e agentes de IDE dentro de um sandbox. Login por OAuth, as permissões do seu time, e toda chamada no log de auditoria.
$ claude mcp add --transport http apsio https://mcp.apsio.io
CLI
Para agentes com shell, e para CI. Todo comando de leitura tem --json, um filtro --jq embutido e -r para strings puras, então o agente lê só o que precisa.
$ apsio login
Skills
Texto simples que ensina qualquer agente a fazer a triagem de uma issue do Apsio com a CLI ou as ferramentas MCP: qual comando primeiro, como ler um stack, quando parar.
$ npx skills add apsio/apsio-skills
O handoff, quando você liga depois
Uma regra dispara, o Apsio abre uma issue no GitHub ou no Linear, o seu agente abre um pull request, e uma pessoa revisa. Desligado por padrão. O Apsio nunca faz push de código, nunca faz merge e nunca atribui uma pessoa.
Seus dados
Nada de lock-in.
O que o Apsio coleta é seu. Sai em um formato padrão, o formato em si é público, e o código que coleta está aberto para você ler.
Sai como OpenTelemetry
Exporte tudo como OTLP para o Grafana, o Datadog ou o seu próprio collector, quando quiser. Seu backend pode enviar os spans dele pela mesma porta.
O formato é público
Onde o OpenTelemetry ainda não cobre um celular, o Apsio Mobile Profile cobre, publicado em spec.apsio.io sob CC BY 4.0, com vetores de conformidade.
Os SDKs são open source
Apache-2.0 e desenvolvidos em público, então você pode ler o que roda dentro do seu app e abrir uma issue quando algo parecer errado.
Privacidade
O que sai do celular é decidido no celular.
Feito para a App Store, a GDPR e a LGPD.
Remoção no dispositivo
Um campo que você exclui nunca sai do celular.
Replay sem pixels
Um wireframe do layout. O texto vem mascarado por padrão.
Corpos ficam no celular
Corpos de requisição e query strings ficam desligados até você ligar.
Sem identificadores de rastreamento
Nunca IDFV, IDFA ou Android ID. Usuários são um hash que você fornece, e nenhum IP é armazenado.
Uma região, dita com clareza
Armazenado no leste dos EUA (US East) durante o acesso antecipado, com a UE em seguida.
Retenção que você define
Por projeto, aplicada linha a linha. Exclusão a pedido.
O que você pode verificar
- SDKs open sourceApache-2.0. Leia o que roda dentro do seu app.
- Construído sobre código comprovadoKSCrash nas plataformas Apple, opentelemetry-android no Android.
- Overhead, medidoInicialização, CPU e memória medidos em CI e publicados a cada release.
O profile completo, com o que ele acrescenta ao OpenTelemetry, está em spec.apsio.io.
Preços
Uma unidade, sem surpresas.
Você paga por sessões capturadas: uma sessão é um uso do seu app, da abertura ao fechamento, e uma sessão capturada guarda todo o detalhe. Toda sessão continua contando para as taxas crash-free.
Pro
Para times50 mil sessões capturadas incluídas, depois R$ 2,79 a cada mil.
50 mil sessões capturadas por mês incluídas, depois R$ 2,79 a cada mil.
- Membros e projetos ilimitados
- 30 dias de detalhe das sessões
- 13 meses de crashes e saúde das releases
- Um limite de gasto que você define no checkout
Sem cartão. O produto inteiro por 14 dias.
Solo
Um desenvolvedorPara uma pessoa sem time, mediante inscrição.
- 10 mil sessões capturadas, limite fixo, nunca um excedente
- 1 membro e 1 projeto
- 14 dias de detalhe, 90 dias de crashes
Revisado à mão. Até a aprovação, você continua no trial.
Enterprise
Times grandesPreço por volume, SSO e SCIM, e retenção de detalhe de até 13 meses.
Uma pessoa responde, com uma proposta.
Todos os planos incluem o console, a API, o servidor MCP, a CLI e o handoff para agentes. Os planos anuais são 12 meses pelo preço de 10, pagos adiantado.
Comparar planos
| Recurso | Trial | Solo | Pro | Enterprise |
|---|---|---|---|---|
| Preço | R$ 0 por 14 dias | R$ 109 por mês | R$ 439 por mês | Contrato anual |
| Membros | Ilimitados | 1, mais tokens para a CLI, o MCP e o CI | Ilimitados | Ilimitados, SSO e SCIM |
| Projetos | Ilimitados | 1, com os apps iOS e Android dele | Ilimitados | Ilimitados |
| Sessões capturadas | 25 mil, com limite | 10 mil, limite fixo | 50 mil incluídas, depois R$ 2,79 a cada mil (R$ 2,25 a partir de 5 mi, R$ 1,69 a partir de 25 mi) | Preço por volume |
| Dados | Crashes, hangs, inicializações, telas, rede, logs e replay, e exportação OTLP a qualquer momento, em todos os planos | |||
| Retenção do detalhe | 14 dias | 14 dias | 30 dias | Até 13 meses |
| Crashes e saúde das releases | 14 dias | 90 dias | 13 meses | Sob medida |
| Handoff para agentes | Sim | Sim | Sim | Sim |
| Suporte | No contrato | |||
Nunca medido
Crashes, resumos de sessão, membros nos planos de time, chamadas de MCP, CLI e API, envio de símbolos e alertas.
Sem fatura surpresa
No Pro, um limite mensal de gasto é definido no checkout, com alertas em 50, 80 e 100 por cento. O Solo tem um limite fixo e nunca um excedente.
Quando o trial termina
A captura para, então você não deve nada. Seus dados continuam legíveis por 14 dias, e escolher um plano retoma a captura em até um minuto.
Preço travado
Assine antes do lançamento geral e mantenha o seu preço por 24 meses.
Preços em reais para clientes no Brasil, cobrados com cartão emitido no Brasil, Pix ou boleto, com NFS-e. Fora do Brasil, os preços são em dólares.
Perguntas
Antes de instalar.
Posso rodar ao lado do Crashlytics ou do Sentry?
Sim, com uma ressalva. Dois crash reporters no mesmo processo instalam handlers, e nenhum pode garantir que roda primeiro, então a contagem de crashes não vai bater enquanto os dois estiverem ligados.
Para um teste justo, desligue a captura de crashes nas opções de start e compare sessões, desempenho, rede e saúde das releases, ou rode os dois crash reporters em builds separados.
Qual o tamanho do SDK, e quanto ele custa em tempo de execução?
Publicamos medições, não promessas. Cada repositório de SDK mede o overhead de inicialização, CPU e memória em CI, com métricas do XCTest no iOS e Macrobenchmark no Android, e os números saem a cada release.
A captura de crashes nas plataformas Apple é o KSCrash, e o SDK Android é construído sobre o agente OpenTelemetry Android, então os dois se apoiam em código com anos de uso em produção.
O que é uma sessão capturada?
Uma sessão cujo detalhe o Apsio guarda: spans, logs e replay. Se uma sessão é capturada é decidido uma vez, no início, por um hash determinístico do id dela, e crashes e erros sempre passam.
Toda sessão, capturada ou não, envia um pequeno resumo com o resultado, a release e a classe do dispositivo. As taxas crash-free, a adoção e a contagem de sessões vêm desses resumos, então são exatas, e nunca são medidas para cobrança.
Quanto custa?
O Apsio começa com um trial. Ele dura 14 dias, sem cartão, com limite de 25 mil sessões capturadas. O Solo custa R$ 109 por mês, ou R$ 1.090 por ano, para um desenvolvedor: 10 mil sessões capturadas com limite fixo e nunca um excedente, mediante inscrição. O Pro custa R$ 439 por mês, ou R$ 4.390 por ano, para times: 50 mil sessões capturadas incluídas, depois R$ 2,79 a cada mil, com faixas de volume a partir de 5 mi e 25 mi.
Crashes, resumos, membros nos planos de time e chamadas de MCP, CLI e API nunca são medidos para cobrança. No Pro, um limite de gasto é definido no checkout. Assine antes do lançamento geral e mantenha o seu preço por 24 meses. A amostragem e o kill switch são sempre seus para ajustar.
Já uso um SDK OpenTelemetry. Preciso do de vocês?
Não. Aponte qualquer exporter OTLP/HTTP para a URL de ingestão do seu app com o header Apsio-App-Key, e seus logs, spans e métricas aparecem no console e na API.
Os SDKs do Apsio acrescentam o que um SDK genérico não faz num celular: captura de crashes e de encerramentos, hangs e ANRs, MetricKit como histogramas, uma fila em disco com ids de lote, amostragem de sessões e replay em wireframe.
Onde ficam os meus dados, e quem pode vê-los?
Eles ficam armazenados no leste dos EUA (US East) durante o acesso antecipado, e a UE vem em seguida. Seu app fala apenas com *.apsio.cloud.
Os agentes veem apenas o que o seu time pode ver, com as mesmas permissões, e toda chamada de agente fica no log de auditoria. Textos escritos pelos apps e pelos usuários deles são marcados como não confiáveis na saída das ferramentas.
React Native e Flutter?
O React Native sai junto com a primeira release, como uma camada fina sobre os dois SDKs nativos. Ele acrescenta erros de JavaScript, spans de fetch e XHR, nomes de tela do React Navigation ou do Expo Router, e source maps do Hermes.
O Flutter vem depois do lançamento. O Apsio é só para apps mobile: iOS e iPadOS, Android, React Native e Flutter.
É open source?
Os SDKs, a CLI, as skills e os vetores de conformidade são Apache-2.0, desenvolvidos em público desde o início. O profile é CC BY 4.0. O serviço em si é proprietário.
Posso dar uma olhada antes de instalar qualquer coisa?
Sim. O sandbox é uma organização somente leitura com dados de exemplo dos apps de amostra no iOS, no Android e no React Native. Não precisa de conta, e o seu agente também pode usá-lo.
Começar
Sua primeira sessão, hoje à tarde.
Uma chamada para começar, 14 dias para explorar, e uma pessoa que responde. Assine antes do lançamento geral e mantenha o seu preço por 24 meses.
- Sem cartão
- 25 mil sessões capturadas
- Crashes continuam chegando depois do limite
- Seus dados saem como OTLP quando você quiser
Ainda não? Explore o sandbox, sem cadastro.