An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
Como emular um iOS no Linux utilizando Docker
Depois de vrias tentativas sem sucesso, enfim consegui virtualizar um macOS para fazer testes em um aplicativo iOS no qual eu estava trabalhando.
Mas antes de continuar, necessrio saber que essa no uma soluo estvel e possue diversos problemas de desempenho, porm, para meu propsito consegui fazer o que queria.
Ns utilizaremos o QEMU para emular um macOS e dentro dele, utilizaremos o xCode para emular um iOS, s nisso voc j consegue perceber que no vai ser uma coisa leve.
O repositrio no github do Docker OSX tem uma explicao de como usar um iPhone via usb ao invs de emular, mas eu no tenho iPhone :p
Sumrio
- O que o Docker OSX
- Especificaes de hardware
- Instalao
- Rodando um app com React Native
- Rodando um app com Cordova
- Criando uma conexo de pastas utilizando o sshfs
- Consideraes finais
O que o Docker OSX
O Docker OSX uma docker image que utiliza por debaixo dos panos o QEMU para que possamos emular um sistema operacional.
Leia mais: O que docker?
Minhas especificaes de hardware
As especificaes do meu computador so consideradas OK pra fazer isso, porm, ainda consegui perceber algumas engasgadas enquanto utilizava o Docker OSX + xCode + Visual Studio Code + Dev Server. (Consegui at aquecer meu quarto com esse tanto de coisa.)
- OS: Manjaro Linux x86_64
- Kernel: 4.19.220-1-MANJARO
- Shell: zsh 5.8
- Resolution: 1440x900
- DE: GNOME 41.2
- WM: Mutter
- WM Theme: Orchis-orange-compact
- Icons: Win11-purple-dark [GTK2/3]
- Terminal: gnome-terminal
- CPU: Intel i7-3770 (8) @ 3.900GHz
- GPU: NVIDIA GeForce GTX 1050 Ti
- Memory: 4105MiB / 15985MiB
- SSD: Crucial BX500 240gb (Altamente recomendado um SSD)
Instalao
Primeiramente, necessrio ter o docker instalado no seu computador. No meu caso eu utilizo Manjaro, ento basta abrir o terminal e digitar:
Instalao dockerpacman -S docker
Ativando os servios do dockersystemctl start docker.service
Ativando os servios do docker para iniciar junto com o sistemasystemctl enable docker.service
Testando o docker:docker run hello-world
Certo, agora iremos baixar a imagem e executa-la utilizando o comando abaixo:docker run -it --device /dev/kvm -p 50922:10022 -e DEVICE_MODEL="iMacPro1,1" -e WIDTH=1440 -e HEIGHT=900 -e RAM=8 -e INTERNAL_SSH_PORT=23 -e AUDIO_DRIVER=alsa -e CORES=2 -v /tmp/.X11-unix:/tmp/.X11-unix -e "DISPLAY=${DISPLAY:-:0.0}" -e GENERATE_UNIQUE=true -e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist sickcodes/docker-osx:big-sur
Voc pode conferir o que cada flag significa olhando o repositrio no github do docker osx, mas resumidamente, especifiquei a resoluo, memria ram, cores do processador, verso big-sur do macOS e etc.
Em seguida, ele ir baixar a imagem e executar.
Quando abrir o emulador, de enter na opo macOS Base System
Quando carregar o sistema, clicaremos em Disk Utility
Agora, procuraremos a partio que est com mais espao de armazenamento e clicaremos na opo Erase
Para formatar preciso que as opes estejam estritamentes iguais a esta:
Clique em Erase
, aguarde e pode fechar a janela do Disk Utility.
Em seguida, iremos em Reinstall macOS Big Sur
aceitamos os termos, selecionamos a partio que acabamos de criar macOS
e nisso, ele comear a instao do sistema. (Esse processo geralmente leva 30min ~ 1h).
Aguardado esse tempo, o sistema deve reiniciar (ou no), no meu caso, eu tive que fazer isso de forma manual pois ele no reiniciou. Nesse caso, feche a janela do QEMU.
Novamente no terminal, digitaremos:
docker ps -a
Para saber qual o ID do nosso container, e em seguida iremos inicia-lo com:
docker start ID
Selecione o macOS Installer
e deixe que a instalao continue.
Aps o processo, ele ir reiniciar automaticamente (ou no), sendo assim, feche novamente o emulador e d start no container mais uma vez.
Ao iniciar, novamente selecione a opo macOS Installer
e aguarde o processo terminar, feito isso ele ir reiniciar. (Agora verdade).
Nosso macOS foi instalado, com isso, vamos selecionar a opo macOS
.
Feito isso, ir reiniciar novamente e voc selecione a mesma opo macOS
.
Show, nossa tela de bem vindo apareceu. Essa parte bastante lenta, mas aps isso ir ficar normal.
Configure a sua maneira, mas no faa login no AppleID agora.
Aps esse processo, nossa rea de trabalho aparecer e ento iremos aguardar at a dock aparecer, pois aps isso o sistema fica mais fludo.
Agora iremos utilizar o gerenciador brew
para instalar as coisas mais rapidamente.
Abra o terminal no macOS e instale o brew com o comando:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Ir pedir sua senha definida anteriormente para instalar.
Agora iremos instalar o xcode
na apple store.
Agora sim, podemos fazer o login da nossa conta AppleID.
Feito isso, aguarde a instalao.
Em seguida, abra o xcode e aceite os termos e aguarde instalar as dependncias.
Em seguida, v em Preferences -> Locations -> Command-Line Tools
vai estar vazio, selecione a opo com a verso do xcode.
Quando a instalao terminar, abriremos o terminal novamente e instalaremos o cocoapods. Ele serve como um gerenciador de dependncias do xCode.
brew install cocoapods
Feito isso, nosso macOS est instalado e configurado para rodar os projetos.
Rodando um app com React Native
Vamos rodar um hello world do React Native para ver se est tudo certo, lembrando que no irei testar o android somente o iOS.
Abra o terminal
Instalao no node:brew install node
Instalao do yarn (opcional):npm install -g yarn
Criando um projeto react native:npx react-native init teste
Se pedir pra instalar o cocoapods novamente, selecione a opo com brew.
Entrando no diretrio do react native:cd teste
Entrando no diretrio do ios:cd ios
Instalando as dependncias:pod install
Voltando para o diretrio raiz:cd ..
Listando os simuladores disponveis: (Opcional)xcrun simctl list devices
Rodando o projeto utilizando xcode:npx react-native run-ios --simulator="iPhone 13"
Para uma experincia melhor, veja a seo: Criando uma conexo de pastas utilizando o sshfs
Rodando um app com Cordova
Vamos rodar um hello world do Quasar para ver se est tudo certo, lembrando que no irei testar o android somente o iOS.
Lembrando que o Quasar usa o Cordova/Capacitor pro iOS e Android.
Instalao no node:brew install node
Instalao do yarn (opcional):npm install -g yarn
Instalao do quasar:yarn global add @quasar/cli
Instalao do cordova:yarn global add cordova
Criando um projeto com Quasar-CLI:quasar create teste
Entrando no diretrio do projeto:cd teste
Adicionando cordova ao projeto:quasar mode add cordova
Entrar no diretrio do cordova:cd src-cordova
Adicionar o iOS ao projeto:cordova platform add ios
Verificar se est tudo certo:cordova requirements
Listar emuladores disponveis: (Opcional)cordova emulate iOS --list
Instalar as dependncias do projeto:yarn
Voltar ao diretrio raiz:cd ..
Instalar as dependncias do projeto:yarn
Rodar o quasar no modo desenvolvimento ioS:quasar dev -m iOS -e "iPhone 8, 15.2"
Para uma experincia melhor, veja a seo: Criando uma conexo de pastas utilizando o sshfs
Criando uma conexo de pastas utilizando o sshfs
Agora que fizemos tudo e nosso app j est rodando no macOS, temos um problema: Abrir nosso editor de cdigo ou IDE dentro do macOS uma experincia muito ruim por causa da lentido, glitches, mapping do teclado e etc. Dessa forma, eu pesquisei uma soluo para criar uma conexo de arquivos utilizando o SSH.
Ou seja, eu posso abrir o servidor de desenvolvimento dentro do macOS e criar uma conexo em que eu possa alterar os arquivos direto do meu linux ou do macOS, de forma que atualize em ambos os lados, como uma via dupla. Isso nos garante tirar o proveito de algumas coisas que existem no modo desenvolvimento, como o fast refresh.
Conexo do Linux para o Mac
Primeiramente, precisamos permitir a conexo via ssh por login no mac. Para isso, abriremos o terminal e digitaremos:
Comando para abrir editar o arquivo de configurao do ssh:sudo nano /etc/ssh/sshd_config
Busque por PasswordAuthentication
e coloque a configurao como yes
e remova o #
no comeo da linha.
Salve o arquivo.
V para em System Preferences -> Sharing -> Remote Login
e ative para todos os usurios:
Comando para reiniciar o ssh:sudo launchctl stop com.openssh.sshd && sudo launchctl start com.openssh.sshd
Agora, no terminal do nosso Linux:
Instalao do sshfs:sudo pacman -S sshfs
Pegando o IP do nosso containerdocker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ID_CONTAINER
Criar uma pasta:mkdir projeto
Comando para abrir a conexo:sudo sshfs USER_MAC@IP_CONTAINER:/CAMINHO/DO/PROJETO/NO/MAC /CAMINHO/NO/LINUX -p 23
Exemplo:
Pronto, agora eu posso abrir o visual studio code no meu Linux e atualizar diretamente no Mac.
Se voc tiver um outro computador, pode fazer essa conexo tambm e deixar o seu principal apenas pra emular.
Conexo do Mac para o Linux
Mesmo processo anteriormente, s que o pacote do ssfs no mac pode ser instalado pelo comando abaixo.
Instalao sshfs no macbrew install --cask macfuse && brew install gromgit/fuse/sshfs-mac
No Linux:
Comando para abrir editar o arquivo de configurao do ssh:sudo nano /etc/ssh/sshd_config
Busque por PasswordAuthentication
e coloque a configurao como yes
e remova o #
no comeo da linha.
Salve o arquivo.
Comando para reiniciar o SSH no Manjaro:sudo systemctl restart sshd.service
De volta ao mac, criaremos uma pasta e abriremos a conexo.
Criar uma pasta:mkdir projeto
Comando para abrir a conexo:sudo sshfs USER_LINUX@IP_HOST:/CAMINHO/LINUX /CAMINHO/MAC -p 23
Aps rodar o comando, ir acontecer um erro:
Abra as prefrencias e clique em Allow
Reincie o mac.
Agora podemos abrir nossa conexo: (Meu SSH est com uma porta diferente, mas a padro 22)
Feito isso, podemos atualizar de qualquer lado que tambm ir atualizar.
Consideraes finais
Muito obrigado por ler este tutorial, que alis, o primeiro que publico depois de anos. Qualquer dvida ou sugesto sempre bem vinda.
Ah, nunca atualize o mac.
:)
Original Link: https://dev.to/ianito/como-emular-um-ios-no-linux-utilizando-docker-3l75
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To