Desenvolvedores que usam o Visual Studio 2015 já podem desenvolver aplicativos iOS para uso com o Windows 10. A tecnologia havia sido mencionada anteriormente com o apelido de Project Islandwood, mas agora foi oficialmente lançada com o nome Windows Bridge para iOS. Publicado no GitHub, o projeto de código aberto está disponível sob a licença MIT.
O código
O Windows Bridge para iOS oferece aos desenvolvedores Windows um ambiente completo de desenvolvimento em Objective-C usando o Visual Studio. De forma, a tornar o suporte à linguagem mas útil, o Bridge também incluí uma camada para API iOS.
Atualmente, o Windows Bridge suporta o Windows 8.1 e o Windows 10 nas arquiteturas x86 e x64. Kevin Gallo, da Microsoft, indica que o suporte à dispositivos móveis (via ARM) está planejado para um lançamento futuro.
Salmaan Ahmed, gerente de programas da Microsoft, apresentou alguns detalhes a respeito dos quatro principais componentes do Windows Bridge: um compilador Objective-C, o runtime do Objective-C, headers e bibliotecas para API iOS e a integração com a IDE Visual Studio.
Curiosamente, apesar dos binários constarem no repositório GitHub, o compilador não terá seu código fonte aberto. Eventualmente, um versão final do compilador vai ser empacotada em formato binário e distribuída em uma atualização do VS2015 agendado para lançamento ainda este ano. O compilador é baseado no Clang que - de acordo com o conteúdo do repositório GitHub, é baseado no LLVM 3.6. Do que foi anunciado até agora, as customizações feitas pela Microsoft permitem que código Objective-C e C++/CX coexistam no mesmo projeto.
Leitores astutos vão notar que os quatro componentes listados acima não incluem um emulador ou runtime iOS. Ahmed informou que a meta da Microsoft para o projeto é permitir acesso total a API Windows, reuso de código iOS e que aplicativos se beneficiem de ambas APIs (iOS e Windows) sem qualquer tipo de limitação ou restrição. Executar aplicativos iOS no Windows, em um emulador, sem qualquer tipo de conversão (como é possível para aplicativos Android) não é uma meta do projeto.
A controvérsia
Depois que o lançamento veio a publico, vários desenvolvedores notaram que seu trabalho foi incluído no projeto WinObjC sem qualquer tipo de atribuição. Neste grupo de desenvolvedores estão Peter Steinberger e Christopher J. W. Lloyd. Ainda que a omissão tenha sido corrigida, esses desenvolvedores ficaram, justificadamente, chateados por seu código ter sido utilizado dessa maneira num primeiro momento. Quando questionada a respeito do assunto, a Microsoft respondeu o seguinte:
Esquecemos alguns créditos de autoria na versão de preview inicial do Islandwood. A comunidade percebeu os erros e fizemos as correções imediatamente. Apreciamos o feedback e pedimos desculpa pelo lapso.
A abertura do código fonte do projeto também trouxe a tona um problema de segurança que pode ser considerado um risco. Landon Fuller descobriu que o projeto troca a função arc4random() com a versão rand() que é menos otimizada. O perigo é que, da forma como o código se encontra, desenvolvedores podem passar por cima dos detalhes e pensar que estão usando a função arc4random() quando, de fato, não estão. Ao ser questionada a respeito, a Microsoft emitiu a nota:
A versão de preview tem como objetivo primário captar feedback da comunidade a respeito da arquitetura, de forma a garantir que o projeto tem uma base sólida para sua evolução. O feedback recebido até aqui sugere que componentes centrais do projeto, como a integração do compilador e a interoperabilidade com o Windows, tem uma arquitetura muito boa. Lançamos uma versão preview sabendo que a comunidade ajudaria a encontrar falhas na tecnologia e nos processos e já fizemos ajustes em pontos como, por exemplo: creditar corretamente a autoria de código baseado em sugestões da comunidade. O nível de interesse e a quantidade de feedbacks construtivos gerados por essa versão preview do Islandwood motiva a continuidade do trabalho com a comunidade. A participação da comunidade faz parte das perspectivas para evolução e melhoria do projeto.
Para os interessados, Matt Thompson escreveu uma breve explicação a respeito dos motivos que tornam o arc4random() uma opção melhor em soluções que precisem tratar aleatoriedade (veja a seção "Why should I use arc4random(3) instead of rand(3)").