sábado, 10 de outubro de 2015

Prototipando no Mac

Que tal um Mac para construir Apps Genexus? Além do investimento necessário  para comprar o equipamento (parte mais dolorida digamos), também será preciso investir cinco minutos para configurar tudo, parece interessante não? de fato tudo se encaixa perfeitamente nesta brincadeira.

Mesmo que você tenha que criar toda a aplicação em uma máquina Windows, veja que salada:
  1.  Notebook Windows rodando Genexus (Evolution 3 no meu caso),
  2.  Mac rodando XCode, se não tiver instalado terá que baixar na Apple Store,
  3. Ambos Notebook e Mac rodando na mesma rede,
  4. Aplicação gerada no Genexus sendo enviada para o Mac, que cria um projeto na pasta Documents do usuário
  5. Simulador abrindo no Mac, permitindo que se interaja com a aplicação em execução
  6. Dados da aplicação sendo recuperadas do banco de dados que se encontra no Notebook Windows em um BD.
Enfim, um cenário muito complexo, mas por incrível que pareça, funciona!

Então, caso você tenha toda esta curiosidade, vou passar as dicas:

1) No Notebook

Será necessário desligar o Firewall do notebook para que não barre a transmissão de dados do BD local para o Mac. Faça isso selecionando Network and Sharing Center, tem uma opção para acessar o Firewall de lá
.

2) No Genexus

Além de construir um SD Panel + Dashboard (marcar como main), ou seja, seguir os procedimentos normais para criar uma App para o Ios, será necessário definir as propriedades corretas no Environment - Generators - SmartDevice

Onde as propriedades significam: mac-host é o valor de Computer name no mac, que pode ser obtido (se voce nao souber) na aba Software do System Reporter, (About This Mac). mac user e password é a senha do administrador da maquina Mac.

Em seguida no Environment terá que ajustar as propriedades para execução do programa por meio de IP e não pelo nome da máquina, isto porque o MAC deverá acessar os serviços REST por meio do IP onde se localizam.  Deve ficar mais ou menos assim: http://192.168.0.102/first.NetEnvironment/

3) Problemas: error: Auth fail

Gostaria muito de não passar por isso, mas ocorreu duas situações de erro aqui. Esta (Auth Fail) significa que o usuário fornecido não tem privilégios de administrador da maquina. Para corrigir designe o usuario no mac como administrador ou coloque o usuário correto no Genexus.

 \========== iOS Compilation started ==========
Command: MacTransfer compile "Douglas-Mac" "douglas" "" "first" ".Net Environment" "Map" "SimMac/iPhone-6/Latest" "Z:\Models\Produto\first\CSharpModel" "10.3.94353 U4"
Connecting to Douglas-Mac
error: Auth fail
iOS Compilation Failed
Run Map Failed


3) Problemas: error: Error getting sdk version (error code 69)

Para mim este erro ocorreu porque não havia ainda registrado o XCode para o usuário administrador do Mac. Após uma atualização perdeu-se este registro. Para realizar a operação deve-se abrir o XCode no Mac e fornecer a senha do usuário quando solicitada.

\Command: MacTransfer compile "Douglas-Mac" "Douglas H Oliveira" "" "first" ".Net Environment" "Map" "SimMac/iPhone-6/Latest" "Z:\Models\Produto\first\CSharpModel" "10.3.94353 U4"
Connecting to Douglas-Mac
error: Error getting sdk version (error code 69)
error: Execute in Mac's command line the following:
error: /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -version -sdk
iOS Compilation Failed
Run Map Failed


4) Sucesso

Nem só de erros vivemos esta vida, após os dois pequenos ajustes anteriormente chegamos a instalação correta do projeto no XCode no MAC.Lendo o resultado das mensagens apresentadas temos que o aplicativo foi instalado na pasta:

/Users/douglas/Documents/Projects/first/dotNet Environment/Map


Ao término da operação um comando para abrir o simulador no MAC é enviado e o simulador é aberto.
 

sshExec: osascript -e 'tell application "Terminal" to do script "/Users/douglas/Library/Artech/GeneXus/10.3.94353_U4/ios-sim launch \"~/Documents/Projects/first/dotNet Environment/Map/build/Debug-iphonesimulator/Map.app\" --devicetypeid \"com.apple.CoreSimulator.SimDeviceType.iPhone-6, 9.0\" --exit"'
iOS Execution Success
Run Map Success


 Comparando com a demora do emulador Android, diria que é bem mais rápido e preciso.