Começando com Flutter: Instalação no MacOs

Instalar o Flutter no macOS é o primeiro passo para criar aplicações multiplataforma com Flutter e Dart, porque o Mac é o único sistema que compila apps para Android e iOS na mesma máquina. Este artigo faz parte de uma série sobre os passos iniciais com Flutter e mostra a instalação e a configuração completa dos ambientes Android e iOS.

Ao longo do texto, você vai preparar o Xcode, o Android Studio e o Visual Studio Code. Em seguida, vai colocar o SDK no PATH, criar emuladores e rodar o primeiro app em um dispositivo real.

O que você precisa para o Flutter no macOS

Para utilizar o Flutter no macOS, você precisa de uma versão de 64 bits do sistema e de cerca de 700 MB de espaço livre em disco. Esse número, porém, considera apenas o SDK.

Ele não inclui as máquinas virtuais do Android, os simuladores do iOS nem os outros SDKs necessários. Por isso, vale planejar o espaço do Flutter no macOS antes de começar.

Espaço em disco na prática

Como referência, em uma máquina nova e limpa, todo o conteúdo instalado ocupava 83 GB de disco. Esse total inclui ferramentas obrigatórias e também programas do dia a dia de quem produz conteúdo.

A lista abaixo mostra o que estava instalado nessa máquina. Os itens em negrito são os obrigatórios para o desenvolvimento:

  • Adobe Photoshop
  • Apple iMovie
  • Apple GarageBand
  • TechSmith Camtasia
  • OBS Studio
  • Microsoft Office (Excel, PowerPoint, Word, Teams, OneNote, Outlook e OneDrive)
  • Entretenimento (Spotify, WhatsApp e Telegram)
  • Visual Studio Code
  • Chrome
  • Hyper (com Zsh)
  • Xcode
  • Android Studio

Além desses programas, o ambiente tinha uma máquina virtual Android com o perfil do Google Pixel 2 XL. Também havia um iOS Simulator configurado como iPhone XR.

Esse número serve apenas como base para um ambiente completo. Na prática, ele varia bastante de acordo com a quantidade de simuladores que você pretende manter.

Um simulador de iPad, por exemplo, passa de 5 GB. Então, se o espaço estiver curto, remova os simuladores que você não usa mais.

Outra dica é usar um disco externo, já que é difícil ampliar o armazenamento dos MacBooks, iMacs e Mac minis mais recentes. Um SSD externo como o Samsung T5, ligado via USB-C ou Thunderbolt, entrega velocidade suficiente para rodar até outro sistema operacional sem perda perceptível de desempenho.

Ferramentas necessárias

A recomendação aqui é instalar o Xcode, o Android Studio e o Visual Studio Code. Pode parecer estranho, já que o VS Code é mais simples e leve para o dia a dia.

No entanto, o Android Studio e o Xcode já configuram muita coisa sozinhos ou oferecem assistentes para isso. Dá para fazer tudo manualmente, mas o processo fica bem mais trabalhoso.

Além disso, o Flutter depende de alguns utilitários de linha de comando:

  • bash
  • curl
  • git 2.x
  • mkdir
  • rm
  • unzip
  • which

No Flutter no macOS, o único item que pode não vir instalado é o Git. Nesse caso, baixe o instalador no site oficial do Git ou siga o guia de instalação e configuração do Git e do GitHub.

Xcode para o Flutter no macOS

O Xcode é a peça que permite ao Flutter no macOS compilar e assinar apps para iOS. Você instala o Xcode direto pela App Store, sem nenhum segredo.

Depois da instalação, abra o Xcode e aceite as licenças. Como alternativa, execute os comandos abaixo no terminal:

# Aponta as ferramentas de linha de comando para o Xcode instalado
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

# Abre o termo de licença para leitura e aceite
sudo xcodebuild -license

O primeiro comando define qual instalação do Xcode o terminal deve usar. Já o segundo exibe o termo de licença, que você precisa aceitar para compilar qualquer projeto.

A documentação atual do Flutter também sugere rodar xcodebuild -runFirstLaunch logo depois. Esse comando instala os componentes adicionais que o Xcode pede na primeira execução.

Instalação do Android Studio

Acesse a página oficial do Android Studio e faça o download do instalador. Em seguida, abra o pacote baixado e arraste o aplicativo para a pasta Applications.

Janela do instalador do Android Studio no macOS com o ícone do aplicativo pronto para ser arrastado para a pasta Applications
O pacote do Android Studio segue o padrão de instalação por arrastar e soltar.

Na primeira execução, o assistente de configuração pergunta se você deseja importar configurações anteriores. Depois, ele guia você pela escolha do tipo de instalação.

Assistente de configuração do Android Studio exibido na primeira execução, preparando o ambiente para o Flutter no macOS
O assistente inicial cuida do download do Android SDK.
Etapa intermediária do assistente do Android Studio com as opções de componentes do SDK a serem baixados
Os componentes do SDK são baixados nesta etapa.

Percorrendo esse caminho, você chega à tela final do assistente:

Tela final do assistente do Android Studio com o botão Finish habilitado após o download dos componentes
Ao clicar em Finish, a instalação do Android Studio termina.

Clique em Finish e pronto, o Android Studio está instalado e preparado para o Flutter no macOS.

Como instalar o Flutter no macOS

Acesse a página de instalação do Flutter e baixe o SDK para macOS. Depois, extraia o conteúdo para uma pasta da sua escolha.

A sugestão é criar uma pasta chamada development dentro da sua pasta de usuário. Assim, o SDK fica em um lugar fácil de encontrar e fora das pastas do sistema.

Finder mostrando a criação da pasta development na pasta do usuário para instalar o Flutter no macOS
A pasta development concentra os SDKs de desenvolvimento.

O resultado final fica assim:

Pasta flutter extraída dentro de development, com as subpastas bin, packages e demais arquivos do SDK do Flutter no macOS
A subpasta bin contém o executável que vamos colocar no PATH.

Se preferir o terminal, a extração pode ser feita com o unzip. Por exemplo:

# Cria a pasta de desenvolvimento e extrai o SDK baixado
mkdir -p ~/development
unzip ~/Downloads/flutter_macos_stable.zip -d ~/development/

O nome do arquivo .zip muda conforme a versão baixada. Portanto, ajuste o caminho de acordo com o arquivo que está na sua pasta Downloads.

Adicionando o Flutter ao PATH no macOS

No passo anterior, você apenas copiou o executável do Flutter para uma pasta. Agora, é preciso torná-lo disponível na linha de comando para criar e rodar aplicações.

A variável PATH lista as pastas onde o terminal procura comandos. Por isso, para o Flutter no macOS funcionar em qualquer terminal, basta acrescentar a pasta bin do SDK a ela.

Terminal com Bash

Se você usa o Bash, crie um arquivo .bash_profile na sua pasta de usuário, caso ele ainda não exista. Uma forma simples é abrir o Visual Studio Code, ir em File > New File e salvar o arquivo na home.

Visual Studio Code salvando o arquivo .bash_profile na pasta do usuário para configurar o PATH do Flutter no macOS
O arquivo de perfil do shell guarda a configuração do PATH.

O conteúdo do arquivo deve ser:

# Acrescenta a pasta bin do Flutter ao PATH
export PATH="$PATH:$HOME/development/flutter/bin"

Repare no uso de aspas duplas e da variável $HOME. Com aspas simples, o shell não expande $PATH, e a linha quebraria todos os comandos do terminal.

Terminal com Zsh

Se você usa o Zsh, a única mudança é o arquivo: ele passa a ser o .zshenv em vez do .bash_profile. Desde o macOS Catalina, aliás, o Zsh é o shell padrão do sistema.

Uma boa prática é criar os dois arquivos. Dessa forma, se você trocar de shell no futuro, não precisa configurar tudo de novo.

O conteúdo dos dois arquivos é exatamente o mesmo. A documentação mais recente do Flutter, por sua vez, usa o ~/.zprofile, que também funciona bem.

Validando o Flutter no macOS com o flutter doctor

Faça logout ou reinicie a máquina para que o shell leia o novo PATH. Depois, abra o terminal e digite:

# Verifica a instalação e lista o que ainda falta configurar
flutter doctor

Se tudo correr bem, o Flutter no macOS inicia um checkup completo do ambiente. Não se preocupe com as mensagens em vermelho, porque vamos corrigi-las nas próximas seções.

Configurando o VS Code para o Flutter no macOS

Abra o VS Code, clique no ícone de extensões na barra lateral e digite flutter na busca. Em seguida, instale a extensão oficial, que já traz o suporte ao Dart.

Painel de extensões do Visual Studio Code com a busca por flutter exibindo a extensão oficial do Flutter no macOS
A extensão oficial adiciona comandos, depuração e hot reload ao editor.

Se ainda não tem o editor instalado, o artigo sobre instalação e customização do Visual Studio Code mostra o processo completo.

Configurando o Android Studio

Abra o Android Studio, clique em Configure > Plugins e instale os plugins do Flutter e do Dart. Assim, o Android Studio também passa a reconhecer os projetos do Flutter no macOS.

Tela de plugins do Android Studio com os plugins Flutter e Dart prontos para instalação
O plugin do Flutter instala o plugin do Dart como dependência.

Depois, abra o terminal e aceite as licenças do Android SDK com o comando abaixo:

# Aceita as licenças pendentes do Android SDK
flutter doctor --android-licenses

Então, rode o flutter doctor novamente para ver o que ainda falta. Nesse momento, deve faltar apenas um dispositivo conectado.

Emulador Android para o Flutter no macOS

A forma mais rápida de trabalhar é usar uma máquina virtual, chamada carinhosamente de emulador. Você pode ter vários emuladores, cada um com sua versão do Android e do SDK.

Para começar, abra o Android Studio e clique em Configure > AVD Manager. Guarde bem esse caminho, porque é por ele que você abre seus emuladores.

Na primeira tela, clique em Create Virtual Device para exibir a seleção de hardware. Neste exemplo, o dispositivo escolhido foi o Pixel 2.

Seleção de hardware do AVD Manager com o Pixel 2 escolhido para o emulador do Flutter no macOS
O perfil de hardware define tela, resolução e recursos do emulador.

Na tela seguinte, selecione a imagem do sistema com o SDK desejado:

Lista de imagens de sistema Android disponíveis no AVD Manager para download e seleção
Cada imagem corresponde a uma versão do Android.

Depois, aceite os termos e revise as configurações finais:

Tela de revisão do AVD Manager com nome, orientação e configurações do dispositivo virtual
Nesta etapa você ainda pode ajustar memória e orientação.

Tudo pronto, basta iniciar o emulador:

Emulador Android do Pixel 2 em execução na tela inicial do sistema
O emulador em execução já aparece para o Flutter como dispositivo.

Aproveite e execute o flutter doctor para confirmar que o dispositivo aparece na lista. Além disso, sempre que quiser listar os dispositivos conectados, use o comando abaixo:

# Lista emuladores, simuladores e aparelhos conectados
flutter devices

Configurando o iOS Simulator

Abra o Xcode e navegue até Xcode > Preferences > Components. Nessa tela, você encontra a lista de simuladores disponíveis:

Aba Components das preferências do Xcode com a lista de simuladores iOS disponíveis para o Flutter no macOS
Cada simulador baixado ocupa vários gigabytes em disco.

Faça o download do simulador que desejar clicando no botão ao lado dele. Para abrir o simulador instalado, com o Xcode aberto, navegue até Xcode > Open Developer Tool > Simulator.

Também é possível abrir o simulador direto pelo terminal com open -a Simulator. Esse atalho é útil quando você usa o Flutter no macOS apenas pelo VS Code.

Testando o primeiro app Flutter no macOS

Abra um dos emuladores criados anteriormente e deixe-o rodando na tela inicial do sistema. Depois, abra o Visual Studio Code e pressione CMD+SHIFT+P.

Na caixa de comandos, digite flutter e selecione Flutter: New Project. Por fim, escolha o local onde a aplicação deve ser criada.

Se preferir a linha de comando, o resultado é o mesmo com o flutter create:

# Cria um novo projeto Flutter e executa no dispositivo disponível
flutter create my_first_app
cd my_first_app
flutter run

No terminal do VS Code, digite flutter run para executar a aplicação. Como resultado, o app de exemplo com o contador aparece no emulador:

Aplicativo de exemplo do Flutter no macOS com o contador em execução no emulador
O app contador é o modelo padrão de todo projeto novo.

Se houver mais de um dispositivo conectado, o flutter run exige uma opção extra com o ID do dispositivo. Nesse caso, liste os aparelhos e informe o ID desejado:

# Descobre o ID de cada dispositivo
flutter devices

# Executa o app em um dispositivo específico
flutter run -d <device-id>

Para entender o que vem depois da instalação, o artigo Flutter: por onde começar apresenta os próximos passos de estudo.

Rodando em dispositivos Android

Embora os emuladores ajudem bastante, é importante testar as aplicações em aparelhos reais. Com o Flutter no macOS configurado, basta conectar o celular ao Mac.

Ao conectar, o Android exibe a mensagem perguntando se você confia no computador. Confirme a máquina como fonte confiável para liberar a depuração.

O aparelho também precisa estar com o modo desenvolvedor e a depuração USB ativados. Esse processo varia entre fabricantes, então consulte o procedimento do seu modelo.

Com o aparelho conectado, execute novamente o flutter devices. Então, ele deve aparecer na lista.

Rodando o Flutter no macOS em dispositivos iOS

Rodar o Flutter no macOS em um iPhone exige um pouco mais de trabalho. Afinal, a Apple controla de perto a instalação de apps fora da App Store.

Instalando o Homebrew

O Homebrew é um gerenciador de pacotes para o macOS que ajuda bastante neste setup. Ele também serve para instalar outras ferramentas, como o Node.js.

Acesse o site oficial do Homebrew e siga a instrução de instalação. Normalmente, basta colar uma única linha de comando no terminal.

Ferramentas de comunicação com o iOS

Em seguida, reinicie o terminal e execute os comandos abaixo:

# Atualiza a lista de pacotes do Homebrew
brew update

# Ferramentas de comunicação USB com aparelhos iOS
brew install --HEAD usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller

# Instalação de apps no aparelho e gerenciador de dependências nativas
brew install ios-deploy cocoapods
pod setup

O usbmuxd e o libimobiledevice cuidam da comunicação USB com o aparelho. Já o ios-deploy instala o app no iPhone, enquanto o CocoaPods gerencia as dependências nativas dos plugins.

Nas versões mais recentes, o Flutter passou a baixar parte dessas ferramentas por conta própria. Por isso, a documentação atual pede apenas o CocoaPods, e o pod setup deixou de ser obrigatório a partir do CocoaPods 1.8.

Conectando o iPhone

Com o setup pronto, conecte o aparelho iOS ao Mac. A mensagem Trust This Computer aparece na tela do iPhone, e você deve tocar em Trust para liberar o acesso.

A partir desse momento, o aparelho aparece na lista quando você executa o flutter devices. Em versões mais novas do iOS, também é preciso ativar o Developer Mode em Ajustes > Privacidade e Segurança.

Assinando o app no Xcode

Ainda falta assinar o app para executá-lo no aparelho. Para isso, você precisa de uma conta de desenvolvedor da Apple, e o Xcode mostra as instruções caso você ainda não tenha uma.

Abra o Xcode e, em seguida, abra o arquivo ios/Runner.xcworkspace do app criado anteriormente.

Xcode abrindo o arquivo Runner.xcworkspace da pasta ios do projeto Flutter no macOS
O workspace Runner é o projeto nativo iOS gerado pelo Flutter.

Clique em Runner na barra lateral e, depois, em Add Account para autenticar com sua conta Apple.

Configurações de assinatura do target Runner no Xcode com a opção Add Account para vincular a conta Apple
A conta Apple vincula o app a um time de desenvolvimento.

Com a conta autenticada, selecione o time de desenvolvimento, caso tenha mais de um. Assim, o Xcode assina a aplicação automaticamente.

Seleção do time de desenvolvimento na aba Signing and Capabilities do Xcode
Com o time escolhido, o Xcode gera o perfil de provisionamento.

Para finalizar, defina um identificador único para a aplicação, o chamado bundle identifier.

Campo Bundle Identifier preenchido com um identificador único no Xcode
O bundle identifier precisa ser único entre todos os apps da Apple.

Pronto, agora basta executar o flutter run e ver a aplicação rodando no aparelho iOS.

Conclusão

Com esses passos, o Flutter no macOS fica pronto para compilar apps Android e iOS a partir da mesma base de código. Você instalou o Xcode, o Android Studio e o SDK, configurou o PATH e validou tudo com o flutter doctor.

Além disso, você criou um emulador Android, baixou um simulador iOS e rodou o primeiro app. Por fim, conectou aparelhos reais e assinou a aplicação no Xcode.

Sempre que algo parecer errado, volte ao flutter doctor. Ele continua sendo o melhor diagnóstico do ambiente do Flutter no macOS.

FAQ

Preciso de um Mac para desenvolver com Flutter para iOS?

Sim, porque a compilação e a assinatura de apps iOS dependem do Xcode, que roda apenas no macOS. Em outros sistemas, você desenvolve para Android normalmente.

Quanto espaço em disco o Flutter no macOS ocupa?

O SDK sozinho ocupa algumas centenas de megabytes. Somando Xcode, Android Studio e simuladores, porém, o ambiente completo passa facilmente de dezenas de gigabytes.

Por que o comando flutter não é encontrado no terminal?

Normalmente, a pasta bin do SDK não está no PATH ou o shell não releu o arquivo de perfil. Confira o caminho no .zshenv ou no .bash_profile e abra um novo terminal.

Preciso pagar a conta de desenvolvedor da Apple para testar no iPhone?

Para testar no seu próprio aparelho, uma Apple ID gratuita já permite assinar o app. A conta paga só é necessária para publicar na App Store.

Posso usar apenas o VS Code, sem abrir o Android Studio?

Sim, o desenvolvimento diário funciona bem só no VS Code. Mesmo assim, o Android Studio continua útil para baixar o SDK e gerenciar os emuladores.

Glossário

Termo Significado
Flutter Framework do Google para criar apps multiplataforma com uma única base de código.
Dart Linguagem de programação usada pelo Flutter.
SDK Kit de desenvolvimento com ferramentas, bibliotecas e executáveis de uma plataforma.
PATH Variável de ambiente com as pastas onde o shell procura comandos.
Zsh Shell de linha de comando padrão do macOS desde o Catalina.
AVD Android Virtual Device, o emulador configurável do Android.
Homebrew Gerenciador de pacotes de linha de comando para o macOS.
CocoaPods Gerenciador de dependências para projetos nativos iOS.
Bundle identifier Identificador único de um app no ecossistema Apple.

Fontes