Estudo de caso - Um leitor de cardápio que escolhe o que pedir, todo no aparelho

Um app de iOS que lê o cardápio de um restaurante a partir de uma foto, cruza com o que você registrou hoje no Apple Saúde e ordena os pratos. O modelo no aparelho lê; o Swift faz as contas.

Cliente
Prandial
Ano
Serviço
Desenvolvimento iOS, IA no aparelho
Resultados do Prandial: três sugestões ordenadas de um cardápio de bistrô, cada uma com o seu motivo

Visão geral

O que pedir, a partir de uma foto

O Prandial é um app de iOS que diz o que pedir num restaurante. Ele lê o que você já registrou hoje no Apple Saúde, lê o cardápio a partir de uma única foto e ordena os pratos de acordo com o que ainda cabe no seu dia.

Tudo roda no iPhone. Não há conta nem código de rede, e o acesso ao Saúde é só de leitura. O modelo no aparelho não faz conta nenhuma: ele organiza o cardápio, encaixa cada prato numa faixa aproximada e escreve um motivo curto para cada sugestão. O Swift calcula todos os números e o ranking.

  • 100% no aparelho
  • Saúde, só leitura
  • Faixas de caloria, nunca números exatos
  • O modelo lê, o Swift ordena
  • Alérgenos separados

Como funciona

O modelo lê. O Swift decide.

A foto do cardápio passa por cinco etapas, todas no celular. O modelo no aparelho cuida da linguagem. Os números na tela e a ordem das sugestões saem de código Swift comum, coberto por testes.
Vision

Ler a foto

O reconhecimento de documentos do Vision lê o cardápio, dá preferência a tabelas e listas e recorre ao reconhecimento de texto simples quando precisa. O texto é dividido em trechos que cabem na janela de contexto do modelo.

Foundation Models

Organizar os pratos

O modelo transforma cada trecho em pratos com nome, descrição, seção e preço, além de uma faixa de caloria e do macro predominante. As respostas viram enums rígidos na hora. Se o modelo não estiver disponível ou recusar, um parser de linhas com preço assume.

Swift

Separar alérgenos

As marcações de conflito do modelo se somam a uma busca por palavra inteira, para que “ham” nunca case com “champagne”. Pratos marcados vão para o grupo “confirme com o restaurante” e nunca são recomendados. A detecção é só um indicativo, e o app pede para confirmar os ingredientes.

Swift

Ordenar em Swift

O Swift subtrai das suas metas o que o Saúde diz que você já comeu e divide o resto pelas refeições que faltam no dia. Cada prato que sobra recebe uma nota, e os três melhores voltam. Mudar o contexto da refeição refaz só esta etapa.

Foundation Models

Explicar a escolha

Uma segunda passada escreve, em streaming, uma ou duas frases sobre por que cada sugestão encaixa. O prompt já leva os números calculados pelo Swift e proíbe o modelo de inventar algum. Se a passada falhar, o resumo do próprio Swift continua na tela.

O app

Da foto do cardápio a três sugestões

A gravação é um escaneamento real no simulador do iOS 27: uma foto de cardápio escolhida na biblioteca, lida, analisada pelo modelo no aparelho e ordenada. As esperas do seletor de fotos e do modelo foram encurtadas; o resto passa como rodou.

As telas estáticas vêm do modo de screenshots de debug do app, que roda um cardápio fixo de bistrô pelo motor de ranking real, com as explicações escritas de antemão.

Gravação de tela: a escolha de uma foto de cardápio na biblioteca, o cartão de progresso Read, Analyze e Rank e as sugestões ordenadas com os motivos aparecendo aos poucos

Escaneamento real · da foto às sugestões

Resultados com Seared Salmon, Chopped Salad e Roast Vegetable Plate ordenados, cada um com faixa de caloria, macro predominante e um motivo de uma linha

Resultados · três sugestões

Tela Today mostrando 860 kcal para gastar no almoço, com a proteína, o carboidrato e a gordura que restam

Hoje · o que sobra

Fim dos resultados: os outros pratos e, depois, Chicken Satay Skewers separado por um possível conflito com amendoim, com o aviso para confirmar os ingredientes com o restaurante

Confirme com o restaurante

Ajustes mostrando a privacidade como 100% on-device, Apple Intelligence pronta e o aviso de que o Prandial só lê do Saúde

Ajustes · no aparelho

Primeiro cartão da introdução: um cardápio ilustrado dentro de cantos de escaneamento, com o título Point it at the menu

Introdução

Etapa do onboarding que pede para conectar o Saúde, explicando que o Prandial lê o que você registrou hoje e nunca escreve no Saúde

Configuração · Saúde, só leitura

Histórico com dois escaneamentos de almoço anteriores e as sugestões de cada um

Histórico

Stack e prova

Nada sai do celular

Não há servidor, então não há o que enviar. O Saúde é lido e nunca escrito, e os números na tela vêm de código Swift testado.
Faixas de caloria
3

Menos de 400, de 400 a 700 ou mais de 700 kcal. Nenhum prato ganha um número exato.

Alérgenos
9

Na lista do que evitar, além de texto livre. A detecção é só um indicativo: confirme com o restaurante.

Testes
83

Funções de Swift Testing, entre elas as que impedem calorias exatas por prato na interface

Requisições de rede
0

O app não tem nenhum código de rede

Tecnologias

  • Swift
  • SwiftUI
  • SwiftData
  • HealthKit
  • Vision
  • Foundation Models
  • Swift Testing

SwiftUI e SwiftData para o app e o histórico de escaneamentos; HealthKit com acesso só de leitura a calorias, proteína, carboidrato e gordura; Vision para o texto do cardápio; o framework Foundation Models, da Apple, para organizar os pratos e escrever as explicações. Sem a Apple Intelligence o app continua funcionando, com a lista de pratos, os filtros por palavra-chave e um aviso explicando por que as sugestões com IA estão desligadas.

Mais estudos de caso

Aulas de inglês a partir do jogo na sua tela

O Looté é um app iOS para gamers brasileiros que estão aprendendo inglês. Ele lê a tela do jogo, explica cada fala no contexto da cena e transforma o que você salva em flashcards com repetição espaçada.

Ler mais

Seu gosto musical entrega você.

Quem Botou Essa? transforma a playlist da call em um fichário de suspeitos. Um party game musical em tempo real, na web e em um cliente nativo SwiftUI, conectados à mesma sala.

Ler mais

Conte sobre o seu projeto

Onde estamos

  • São Paulo
    São Paulo, SP
    Brasil