21 05 2014
Explorando as Universal XAML Apps
Olá caro(a) leitor(a)!
No último post eu listei quais são as novidades presentes no Visual Studio 2013 Update 2 relacionadas ao XAML. No artigo de hoje eu gostaria de me aprofundar em uma dessas novidades, que são as chamadas “Universal XAML Apps“.
Como mencionei anteriormente, a solução chamada “Universal XAML App” nada mais é que um conjunto de projetos que visa o máximo de compartilhamento de código entre um aplicativo para o Windows 8.1 (Metro) e um aplicativo para o Windows Phone 8.1.
Criando Universal XAML Apps
A maneira mais fácil de criar uma solução desse tipo é utilizando os próprios templates disponibilizados no Visual Studio 2013. Até o presente momento, é possível criarmos “Universal Apps” utilizando os templates “Blank App” ou “Hub App“:
Caso você já tenha um projeto de aplicativo para o Windows 8.1 ou um projeto de aplicativo para o Windows Phone 8.1 e quiser transformar esse projeto em uma solução do tipo “Universal App“, você pode clicar com o botão direito no projeto e escolher a opção “Add Windows Phone 8.1” (ou “Add Windows 8.1“):
A estrutura das Universal XAML Apps
A estrutura de uma “Universal XAML App” é muito simples. Elas são basicamente compostas por três projetos: um projeto de aplicação para o Windows 8.1, um projeto de aplicação para o Windows Phone 8.1 e um projeto compartilhado entre eles. Nos projetos específicos das plataformas, você deve colocar todos os recursos e lógicas de negócio que são específicas de cada plataforma. E todo o código presente no projeto compartilhado fica disponível nas duas plataformas. Se pensarmos de outra forma, poderíamos dizer que esse projeto compartilhado se comporta como se estivéssemos trabalhando com arquivos linkados. Dá até para escrever código XAML no projeto compartilhado (por exemplo, declaração de Converters).
Escrevendo código específico a uma plataforma no projeto compartilhado
Algo que é possível de ser feito (mas que eu não recomendo) é a possibilidade de se escrever código específico de uma ou outra plataforma no projeto compartilhado. Inclusive o próprio template de “Hub Universal App” faz uso dessa possibilidade. Para conferir, abra o arquivo NavigationHelper que se encontra dentro da pasta “Common” do projeto compartilhado:
Note a diretiva de compilação “WINDOWS_PHONE_APP” indicada pela seta na imagem acima. Ela estabelece que o código dentro daquele bloco seja somente considerado ao compilarmos o aplicativo para o Windows Phone. Também é possível utilizar a diretiva “WINDOWS_APP” para fazer justamente o contrário (definir que um bloco de código só deva ser considerado ao compilarmos o aplicativo para o Windows 8).
Além disso, note que na parte superior do editor de código conta com uma nova ComboBox que pode ser utilizada para selecionar qual plataforma estamos trabalhando no momento:
Essa opção faz com que o código da plataforma que não está ativa fique cinza, o que ajuda a entendermos qual código será utilizado ao compilarmos a solução para a plataforma selecionada. Além disso, o Intellisense também se comporta conforme a plataforma selecionada.
Quando utilizar Universal Apps e quando utilizar Portable Class Libraries?
Você provavelmente deve estar se perguntando (eu pelo menos me perguntei): mas e as Portable Class Libraries?
As Portable Class Libraries continuam existindo, e você pode continuar utilizando-as. Ao contrário do projeto compartilhado nas Universal Apps (que “embedam” o código na hora da compilação nos projetos específicos de cada plataforma), as Portable Class Libraries produzem um assembly separado que pode ser utilizado nas plataformas escolhidas. Elas acabam limitando consideravelmente a API que pode ser utilizada dentro delas, porém, é a maneira mais indicada de construir uma biblioteca a ser utilizada em vários projetos (e não somente em um, como é o caso do projeto compartilhado nas Universal Apps).
Para entender melhor quando utilizar uma e quando utilizar a outra, confira a tabela abaixo, que é uma versão traduzida da tabela disponível neste post do blog oficial do .NET Framework:
E você, já começou a desenvolver seu aplicativo para o Windows 8.1 e Windows Phone 8.1 utilizando as “Universal Apps”? Não? Está esperando o quê?
PS.: Estou planejando criar uma newsletter. Caso você queira ficar por dentro dos novos posts do blog, além de contar com outros conteúdos exclusivos, inscreva-se neste link!
Até a semana que vem!
André Lima
Photo by gianni used under Creative Commons
https://www.flickr.com/photos/xamad/518876976/
Novidades relacionadas ao XAML no Visual Studio 2013 Update 2 Syntatic Line Compression: Visualize uma quantidade maior de código no Visual Studio