Connect(); 2016

Volume 31 - Número 12

Visual Studio Development – Apresentando o Visual Studio para Mac

Por Mikayla Hutchinson; 2016

At Connect(); a Microsoft lançou em novembro uma versão de visualização do Visual Studio para Mac. Este é um desenvolvimento empolgante, e representa a evolução do IDE centrado em dispositivos móveis do Xamarin Studio em uma verdadeira ferramenta de desenvolvimento inédita para dispositivos móveis e nuvem para .NET e C#. Além disso, leva a experiência de desenvolvimento do Visual Studio para o Mac.

Um novo membro na família do Visual Studio

No fundo, o Visual Studio para Mac é uma contraparte para macOS da versão para Windows do Visual Studio. Se você gosta da experiência de desenvolvimento do Visual Studio, mas precisa ou quer usar o macOS, você sentirá como se estivesse em casa. A experiência do usuário é inspirada pelo Visual Studio, mas foi desenvolvida para proporcionar a aparência característica do macOS. E, assim como no Visual Studio para Windows, ela é complementada pelo Visual Studio Code, para aqueles momentos nos quais você não precisa de um IDE completo, mas apenas de um editor de código-fonte autônomo, leve, porém repleto de recursos.

Além da aparência, o Visual Studio para Mac também tem muito em comum com seus parentes da família do Visual Studio. Seu IntelliSense e refatoração usam a Roslyn Compiler Platform; seu sistema de projetos e mecanismo de compilação usam o MSBuild; e seu editor de código-fonte oferece suporte aos pacotes do TextMate. Ele usa os mesmos mecanismos de depuração para aplicativos Xamarin e .NET Core, e os mesmos designers para Xamarin.iOS e Xamarin.Android.

A compatibilidade é um dos principais focos do Visual Studio para Mac. Apesar de ser um produto novo e não oferecer suporte a todos os tipos de projeto do Visual Studio, ele ainda tem em comum com esses tipos a mesma solução e formato de projeto do MSBuild. Se alguns membros de sua equipe usarem macOS e Windows, ou você mesmo alternar entre os dois sistemas operacionais, será possível compartilhar tranquilamente seus projetos entre as plataformas. Não há qualquer necessidade de conversão ou migração.

Desenvolvimento inédito para celulares e para nuvem

As principais cargas de trabalho com suporte do Visual Studio para Mac são de desenvolvimento nativo em iOS, Android e Mac por meio do Xamarin, e de desenvolvimento em servidor por meio de .NET Core com integração com o Azure. Ele proporciona a você todas as ferramentas necessárias para desenvolver as experiências avançadas de aplicativo móvel nativo que os usuários esperam atualmente, e os back-ends de servidor com base em nuvem para capacitá-las.

Tudo isso com a tecnologia da linguagem C# que você conhece e adora, além dos aprimoramentos de produtividade mais recentes do C# 7. Você recebe o desempenho do código compilado, a produtividade de uma linguagem moderna fortemente tipada, acesso aos recursos exclusivos de cada plataforma e um ecossistema repleto de bibliotecas e ferramentas. Use sua experiência atual nos domínios móveis e em nuvem, compartilhando código entre o cliente e o servidor. Assim, com todos os seus projetos em uma solução, você pode aproveitar as vantagens da refatoração e navegação de código entre projetos e que envolve toda a solução.

C# não é a única linguagem com suporte no Visual Studio para Mac versão de visualização. Para os programadores funcionais entre vocês, ele inclui excelente suporte para F#, com a tecnologia do mesmo compilador de F# usado no Visual Studio.

iOS, Android e Mac

O mercado móvel e fragmentado atual exige a capacidade atender a uma ampla gama de dispositivos. Por ter base no Xamarin Studio, o Visual Studio para Mac apresenta suporte maduro para desenvolvimento em iOS, Android e Mac com base em C# na Plataforma Xamarin. Você pode aproveitar sua experiência atual e as bibliotecas em C# e compartilhar um código comum entre as plataformas, com acesso completo às APIs nativas, para compilar uma experiência de aplicativo nativo rápida e sofisticada.

Para obter um compartilhamento de código ainda melhor, use a biblioteca de interface de usuário de plataforma cruzada do Xamarin.Forms, que fornece um ambiente conhecido de desenvolvimento com base em XAML e pode atender a várias plataformas, incluindo iOS, Android, macOS e a UWP (Plataforma Universal do Windows)—embora o desenvolvimento em UWP tenha suporte apenas no Visual Studio no momento—e mapas para a interface de usuário nativa de cada plataforma. Quando você precisar de mais controle, combine o Xamarin.Forms com acesso direito aos kits de ferramenta nativos. Também há um imenso ecossistema de bibliotecas disponível para Xamarin por meio do NuGet, incluindo bibliotecas específicas à plataforma, associações a código nativo e bibliotecas .NET Standard portáteis.

Assim como o Visual Studio, o Visual Studio para Mac tem designers do tipo arrastar e soltar para desenvolvimento em iOS e Android que permitem montar e ajustar rapidamente sua interface de usuário. Para o Xamarin.Forms, ele proporciona XAML IntelliSense avançado e uma visualização dinâmica lado a lado, como mostra a Figura 1. Tanto o designer quanto a visualização dinâmica usam um simulador para processar seu aplicativo exatamente da forma como ele aparecerá no dispositivo, e isso funciona até mesmo para seus controles personalizados.

A visualização dinâmica de XAML do Xamarin.Forms
Figura 1 A visualização dinâmica de XAML do Xamarin.Forms

Nuvem de ponta

Praticamente todo aplicativo móvel tem o suporte de um serviço, e o Visual Studio para Mac facilita o desenvolvimento do serviço de seu aplicativo por meio de seu suporte para a plataforma de desenvolvimento na Web mais recente em ASP.NET Core. O ASP.NET Core é executado no .NET Core, a evolução mais recente do .NET Framework e tempo de execução. Ele foi ajustado a fim de proporcionar um desempenho ultrarrápido, perfeito para instalações de pequeno porte, e recriado para ser executado no Linux e macOS, e também no Windows.

O .NET Core proporciona a você muita flexibilidade no desenvolvimento e implantação de seu aplicativo de servidor, quer seja em seu próprio datacenter ou em uma plataforma de nuvem, como o Microsoft Azure. Como o .NET Core e a Plataforma Xamarin possuem o código-fonte aberto, não será necessário se preocupar com o aprisionamento tecnológico.

O suporte do Visual Studio para Mac para projetos do .NET Core também permite que você escreva bibliotecas do .NET Standard, a nova maneira de compartilhar código em plataformas .NET a partir de agora. As bibliotecas do .NET Standard substituem as PCLs (Bibliotecas de Classe Portátil) e oferecem uma área de superfície de API muito mais ampla. Como o .NET Core e a Plataforma Xamarin são compatíveis com .NET Standard, eles representam uma ótima maneira de compartilhar código, tanto dentro de sua solução quanto pelo NuGet Package Manager.

Um espaço de trabalho familiar

O espaço de trabalho do Visual Studio para Mac deve ser familiar para os desenvolvedores atuais em Visual Studio. Ao abri-lo pela primeira vez, você vê uma Página de Boas-vindas com uma lista de soluções abertas recentemente, um feed de notícias de desenvolvedores e outras informações para ajudar você a começar.

Para criar uma nova solução, acesse o menu Arquivo, selecione Novo Projeto e você verá o espaço de trabalho contendo sua nova solução. Como mostra a Figura 2, há um editor de código-fonte em uma guia central com diversas janelas encaixadas ou “painéis” ao redor dela, como Solution (Solução), Output (Saída), Properties (Propriedade), Document Outline (Estrutura do Documento) e Toolbox (Caixa de Ferramentas). Assim como no Visual Studio, esse layout pode ser amplamente personalizado e muda automaticamente, dependendo se você estiver codificando, depurando ou usando o designer do tipo arrastar e soltar.

O espaço de trabalho do Visual Studio para Mac
Figura 2 O espaço de trabalho do Visual Studio para Mac

A barra de ferramentas também é conhecida, mas apresenta diferenças notáveis:

À esquerda está o botão Run (Executar), um menu suspenso para selecionar a Active Configuration (Configuração Ativa) e outros menus suspensos para selecionar Run Configuration (Configuração de Execução) e Target Device (Dispositivo de Destino). Para o desenvolvimento móvel entre plataformas, é importante poder alternar com facilidade o dispositivo ou simulador no qual você está testando ou depurando seu aplicativo. A Run Configuration (Configuração de Execução) é como o projeto de inicialização no Visual Studio, com a exceção de que, além de alternar quais projetos são executados, você também pode criar conjuntos com nome personalizado de opções de execução.

No centro da barra de ferramentas está a área de notificação, que mostra mensagens sobre várias operações, por exemplo, compilação ou restauração de pacotes NuGet. Quando houver uma operação em execução, um botão cancelar aparecerá na área de notificação. Também é nesse local que as notificações sobre atualizações de software são exibidas. Você pode clicar em algumas notificações, como erros de build, e elas mostrarão um painel com mais informações.

À direita da barra de ferramentas está a pesquisa global. Além de ajudar você a encontrar coisas como comandos e arquivos em sua solução, seu sistema de filtragem camelCase a transforma em uma forma excelente de ativar rapidamente alguns comandos, ou ir direto até os arquivos ou tipos em sua solução. Ela pode até mesmo iniciar uma pesquisa do tipo Localizar nos Arquivos em sua solução, ou abrir o NuGet Package Manager a fim de pesquisar um pacote.

O painel Solution (Solução) funciona quase da mesma forma que o Gerenciador de Soluções no Visual Studio, permitindo a exploração e gerenciamento da estrutura de sua solução, de seu projeto e dos arquivos que ele contém. O menu de contexto fornece diversos comandos específicos ao contexto nos itens da árvore da solução, por exemplo, adicionar ou remover arquivos dos projetos, editar referências ao projeto, abrir janelas do Terminal em pastas e compilar ou depurar projetos específicos.

O painel Errors (Erros) mostra quaisquer avisos e erros de compilação, e também é o local onde você pode encontrar o log de build em uma exibição dividida. Ao contrário do Visual Studio, não há um painel unificado para todos os tipos de saída. Por exemplo, um painel Application Output (Saída do Aplicativo) mostra a saída de seu aplicativo quando você o executa ou depura, e logs de operações do NuGet são exibidos em um painel NuGet Console. O painel Properties (Propriedades) mostra contextualmente as propriedades da seleção atual, e pode ser usado para exibir e alterar a ação de build dos arquivos no painel da solução.

No centro está o coração do IDE, o editor de código-fonte, que possui todos os recursos esperados de um membro da família do Visual Studio. A Figura 3 mostra o IntelliSense e o realce de sintaxe de C# em um projeto do .NET Core. Também há o desdobramento de código, sublinhado dinâmico de erros e sugestões enquanto você digita, formatação automática configurável, comandos de navegação de código e diversas ferramentas avançadas de refatoração.

IntelliSense em um projeto .NET Core
Figura 3 IntelliSense em um projeto .NET Core

Nem todas as funcionalidades do editor estão habilitadas por padrão. É possível aprimorar as configurações do Visual Studio para Mac na caixa de diálogo Preferences (Preferências), que pode ser acessada no menu do aplicativo Mac. Ela é equivalente à caixa de diálogo Opções no menu Ferramentas do Visual Studio, e contém muitas opções que ajudarão você a personalizar o IDE para que ele funcione do seu jeito.

Há suporte para o teste de unidade usando o NUnit, e outros executores de teste podem ser conectados por meio das extensões. Os teste descobertos em seu assembly são exibidos em um painel Unit Tests (Testes de Unidade) que pode ser acessado no menu View | Pads (Exibir | Painéis). O editor de código-fonte também conta com um controle de versão git integrado, com uma linha de guias na parte inferior do editor a fim de acessar o log, um modo de exibição de comparação e de controle de mudança (blame) do arquivo atual.

Se você quiser começar rapidamente e receber mais dicas e truques, recomendo minha sessão “Become a Xamarin Studio Expert” (Tornar-se um especialista em Xamarin Studio) no Xamarin Evolve 2016 (xmn.io/xs-expert), pois esse conteúdo se aplica diretamente ao Visual Studio para Mac.

Núcleo de código-fonte aberto

Assim como o Xamarin Studio, o Visual Studio para Mac tem base no IDE de código-fonte aberto MonoDevelop, desenvolvido ativamente pela Microsoft. Ele é escrito totalmente em C#, e tem um modelo de extensibilidade avançado que pode ser usado para acrescentar funcionalidades que variam de comandos simples do editor até linguagens e tipos de projetos totalmente novos. Até mesmo funcionalidades básicas como edição em C#, Xamarin.iOS, Xamarin.Android e ASP.NET Core são implementadas como extensões.

Assim como no Visual Studio e no Visual Studio Code, o suporte para C# no Visual Studio para Mac tem a tecnologia da Roslyn Compiler Platform de código-fonte aberto. Você obtém exatamente a mesma experiência de IntelliSense com a qual está familiarizado no Visual Studio, além de suporte para Analisadores e Correções de código dinâmicas no editor. O Visual Studio para Mac inclui até mesmo a coleção Refactoring Essentials de Analisadores e Correções de código por padrão.

O Visual Studio para Mac oferece suporte à edição de várias linguagens por intermédio de pacotes TextMate, que fornecem realce de sintaxe e IntelliSense simples. Ele inclui vários pacotes TextMate de código-fonte aberto do Visual Studio Code.

Criação de um aplicativo do ASP.NET Core

Para mostrar a você como é fácil começar a usar o Visual Studio para Mac, vou realizar com vocês a criação de um back-end simples de ASP.NET Core. Ele servirá para um suposto aplicativo móvel de “Lista de tarefas compartilhada”, que permite que vários usuários adicionem itens, e todos os usuários vejam os itens publicados por qualquer um deles.

Observe que estou escrevendo este artigo usando uma versão de pré-lançamento do Visual Studio para Mac, e alguns detalhes da interface de usuário podem mudar no lançamento. No entanto, as abordagens e conceitos discutidos neste artigo ainda serão aplicadas.

Após a instalação e abertura do Visual Studio para Mac, eu começo clicando no botão New Solution (Nova Solução) na página de boas-vindas, o que abre a caixa de diálogo New Project (Novo Projeto). Navego até a seção Cloud (Nuvem), escolho o modelo ASP.NET Core Web Application e clico em Next (Avançar), em seguida escolho o modelo Web API. O modelo Web API cria um serviço Web RESTful que é perfeito para um back-end móvel, embora seja possível adicionar exibições posteriormente ao projeto a fim de criar um front-end da Web.

Por fim, eu dou o nome de HelloVSMac ao meu projeto e clico em Create (Criar). O Visual Studio para Mac cria os projetos usando o mecanismo de modelagem dotnet, os abre e começa a restaurar os pacotes NuGet dos quais eles dependem. Se você abrir o arquivo do projeto no editor usando o menu de contexto Tools | Edit File (Ferramentas | Editar Arquivo) no projeto, no painel da solução, será possível ver que é um arquivo de projeto minimalista com base em MSBuild de fácil compreensão. Se você editá-lo diretamente e depois salvá-lo, o IDE recarregará automaticamente sua versão modificada.

Ao olhar para o projeto no painel da solução, os principais itens são:

Packages (Pacotes): As dependências de pacote NuGet de seu projeto. ASP.NET Core, a estrutura .NET Core e os destinos MSBuild que compõem o pacote são todos instalados por meio de pacotes NuGet.

Program.cs: O ponto de entrada de seu aplicativo Web. Aplicativos ASP.NET Core são programas, portanto há um ponto de entrada de método principal (Main) que cria, compila e executa o WebHost no centro de seu aplicativo.

Startup.cs: Define uma classe de inicialização, Startup, passada ao WebHost. Essa classe contém os métodos de inicialização de seu aplicativo.

appsettings.json: As definições de configuração de seu aplicativo. Esse é o equivalente em ASP.NET Core do web.config de ASP.NET.

Para o objetivo deste passo a passo, deixarei todas essas opções como estão, e examinarei o arquivo ValuesController.cs na pasta Views (Modos de exibição). Ele contém uma classe ValuesController registrada na rota [Route("api/[controller]")]. [controller] é um espaço reservado para o nome da classe, portanto essa é na verdade a rota api/values.

Começarei definindo uma classe ToDoItem bem simples e uma classe de armazenamento ToDoList. ToDoList é estático, para que possa ser compartilhado entre solicitações. Em um aplicativo real, você usaria um banco de dados para isso, mas isso vai servir no momento. Também renomeei a classe controller para ToDoController (que realiza a rota api/todo), conectei os métodos Get e Post ao armazenamento e limpei os outros métodos de controller não usados. O resultado podem ser visto na Figura 4.

Figura 4 O controller e seu armazenamento simples e compartilhado To-Do List

[Route("api/[controller]")]
public class ToDoController : Controller
{
  [HttpGet]
  public IEnumerable<ToDoItem> Get()
  {
    return ToDoList.GetAll();
  }
  [HttpPost]
  public void Post([FromBody]ToDoItem item)
  {
    ToDoList.Add(item);
  }
}
public class ToDoItem
{
  public string Title { get; set; }
}
public static class ToDoList
{
  static List<ToDoItem> list = new List<ToDoItem>();
  public static void Add(ToDoItem item)
  {
    lock (list) { list.Add(item); }
  }
  public static IEnumerable<ToDoItem> GetAll()
  {
    lock (list) { return list.ToArray(); }
  }
}

Agora, este é um serviço Web RESTful completo, mas muito pequeno. Vamos testar isso.

Coloquei um ponto de interrupção no método Post, e comecei a depurar o aplicativo. O painel Output (Saída) começa a mostrar a saída do servidor Web kestrel integrado ao ASP.NET Core à medida que o aplicativo é inicializado, por padrão na porta 5000, mas não fará qualquer coisa até que receba uma solicitação. Você pode abrir seu navegador da Web e verificar 127.0.0.1:5000/api/todo, mas será apenas uma matriz vazia.

Depuração de um projeto .NET Core
Figura 5  Depuração de um projeto .NET Core

Como ainda não há um cliente móvel para este serviço, é hora de abrir o aplicativo de Terminal do macOS e usar curl para enviar uma solicitação POST ao aplicativo:

$ curl -H "Content-type: application/json" -X POST -d '{ title: "build
  mobile app" }' 127.0.0.1:5000/api/todo

Isso dispara o ponto de interrupção no depurador. Você pode inspecionar o valor que foi analisado automaticamente do corpo JSON da solicitação e convertido no objeto ToDoItem. Veja que o Visual Studio para Mac inseriu automaticamente o layout de depuração, e apresenta todos os painéis de depuração que você esperava: Pilha, Locais, Threads, Pontos de interrupção etc.

Agora, volte ao terminal e use curl para acessar o método Get, e você verá a matriz JSON contendo o item adicionado:

$ curl 127.0.0.1:5000/api/todo
[{"title":"build mobile app"}]

A próxima etapa é compilar o aplicativo móvel, mas vou deixar você explorar isso por conta própria. Para obter informações mais detalhadas sobre ASP.NET Core, recomendo a leitura de asp.net/get-started, e se você quiser saber mais sobre o desenvolvimento em Xamarin, há diversos materiais incríveis em developer.xamarin.com. Embora ainda não exista muita documentação sobre o Visual Studio para Mac, a documentação do Xamarin Studio se aplica diretamente na maioria dos casos, e a documentação do Visual Studio também pode ser aplicada com frequência.

Conclusão

Espero que essa breve visão geral tenta aguçado seu apetite por experimentar o Visual Studio para Mac e torná-lo seu IDE de macOS preferido para desenvolvimento na nuvem e para dispositivos móveis! Se você tiver um Mac, eu incentivo o download da versão de visualização no VisualStudio.com. Experimente e conte-nos o que você achou. Aguardamos ansiosos seus comentários para ajudar na fase de visualização e além dela.


Mikayla Hutchinson é gerente de programa sênior da Plataforma Xamarin na Microsoft. Anteriormente, ela desenvolveu as ferramentas móveis e para Web do Xamarin Studio e era uma importante desenvolvedora em MonoDevelop. Siga-a no Twitter: @mjhutchinson.

Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Larry O’Brien e Lluis Sanchez
Larry O'Brien trabalha no grupo de documentação Xamarin na Microsoft. Ele já está ativo há um bom tempo no campo de publicação de desenvolvimento de software, tanto como autor quanto como editor.