Usando C # no Mac para construir aplicativos iOS e Android - Processo Interno
Como fazer um aplicativo Android e iOS em C # em um Mac
Era uma vez uma empresa que tinha todas as melhores ferramentas e escrever software para a plataforma deles era incrível. Mas, lentamente, eles se tornaram indiferentes aos seus próprios problemas. Eles não ficaram alarmados quando seus sistemas falharam, mas aceitaram este estado do universo como um fato da vida. Eles acreditavam que seus programas eram perfeitos consigo mesmos, serenos e elegantes, seu propósito evidente.
Oh cara, se eles soubessem o quão errados estão ...
Já era tarde quando eles perceberam seus erros e seu CEO gritou para traga de volta todos os desenvolvedores que deixou sua plataforma e navegou. A empresa era Microsoft e eu, por exemplo, estava convencido de que seu destino havia sido selado e que lenta mas seguramente pereceriam na vanguarda do cenário tecnológico.
Estou tão feliz por estar errado!
Nos últimos anos, a Microsoft tirou alguns ases da manga. Sim, eles bagunçaram o Skype (ainda os odeio por isso), falharam com smartphones e quase tiveram sucesso com tablets. Mas, eles fizeram coisas realmente incríveis também. Renunciando à abordagem de império fechado, eles abriram o código-fonte do .NET, juntaram-se à Linux Foundation, lançaram o SQL Server para Linux e criaram esta excelente nova ferramenta chamada Visual Studio para Mac .
Isso mesmo, um real Microsoft IDE não para Windows, mas para Mac. Imagine isso!
Escrevendo seu primeiro aplicativo multiplataforma para Android e iOS usando C # no Mac
Você pode usar o Visual Studio para Mac para criar quase qualquer tipo de aplicativo. Pode ser iOS, tvOS, Android, Mac, .NET Core ou mesmo ASP.NET. Como todas as crianças legais agora estão escrevendo aplicativos móveis, vamos ver o que é necessário no Visual Studio para Mac para criar um aplicativo C # que será executado no Android e iOS.
tutorial do angular 5 para iniciantes
A primeira coisa que você precisa fazer é escolher o modelo do aplicativo. Vamos começar com um simples "Aplicativo de visualização única".
Depois de preencher o nome do pacote e inicializar seu aplicativo, o Visual Studio criará uma solução com três projetos. O primeiro projeto será uma biblioteca compartilhada onde você deve manter o código independente da plataforma, e os outros dois serão aplicativos Android e iOS.
Você pode usar o menu "Executar" ou comandos na barra de aplicativos para iniciar seu aplicativo.
Parabéns! Agora você é um desenvolvedor iOS e Android, independentemente do fato de nunca ter escrito uma linha de código Objective-C, Swift ou Java.
Ainda não conquistamos muito com nosso aplicativo. Vamos tornar as coisas mais interessantes e incorporar mapas e serviços de localização.
Usando mapas e serviços de localização
Tenha em mente que o VS para Mac ainda está em "Preview" e não há muita ajuda e documentação que você encontrará sobre como usá-lo. O melhor lugar para referências sobre como fazer as coisas ainda é a documentação oficial do Xamarin.
O Visual Studio para Mac não usa a mesma solução e estrutura de aplicativo que as ferramentas Xamarin que você pode ter visto no PC. Na maioria dos casos, você precisará experimentar e contornar alguns obstáculos para que seus exemplos funcionem. Esperamos que a Microsoft continue no topo de seu jogo e forneça uma coleção incrível de recursos do MSDN assim que a versão final do VS para Mac for lançada.
Mostrando localização atual no iOS
O acesso aos recursos do dispositivo móvel, como a localização atual, requer que os usuários concedam permissões "manualmente" ao seu aplicativo para usar esses recursos. iOS usa o arquivo info.plist para armazenar essas configurações. O VS para Mac fornece uma interface visual para editar este arquivo. A primeira coisa que precisamos fazer é adicionar um valor para a configuração chamada NSLocationWhenInUseUsageDescription.
Nota: O VS mostrará um nome longo para "NSLocationWhenInUseUsageDescription" quando você definir o nome da propriedade. Isso é esperado e não se preocupe com isso.
Nosso aplicativo bootstrapped foi criado com um botão simples que contava cliques. A primeira coisa que você deve fazer é removê-lo e substituir o conteúdo da tela por um mapa. Para fazer isso, procure o Main.storyboard arquivo no navegador da solução e clique duas vezes nele para abri-lo no editor.
Um storyboard é uma representação visual da interface do usuário de um aplicativo, mostrando telas de conteúdo e as conexões entre essas telas. Um storyboard é composto de uma sequência de cenas, cada uma das quais representa um controlador de visualização e suas visualizações; as cenas são conectadas por objetos segue, que representam uma transição entre dois controladores de visualização.
Os storyboards são introduzidos pela Apple e adotados pela Xamarin também. Referir-se Documentação Apple ou Documentação Xamarin Para maiores informações.
Remova o botão e adicione um componente Map View à página.
Certifique-se de nomear seu componente "mapView" corretamente.
Tudo o que resta agora é limpar seu ViewController.cs e modifique o arquivo ViewDidLoad() método para corresponder ao seguinte:
Você pode usar o recurso "Correção rápida" para que o VS adicione automaticamente uma referência à biblioteca CoreLocation ou você pode adicioná-la manualmente.
Depois de executar seu aplicativo iOS, você verá a solicitação para acessar sua localização. Assim que a permissão for concedida, seu mapa será carregado com um ponto azul padrão mostrando onde você está (ou onde finge estar usando o simulador iOS :)).
Mostrando localização atual no Android
Infelizmente, o Google e a Microsoft decidiram tornar essa tarefa simples um pouco mais complicada do que no iOS. Para usar mapas no aplicativo Android, você precisará criar uma chave de API do Google Maps e adicioná-la ao seu AndroidManifest.xml Arquivo.
Os caras do Xamarin criaram um guia bastante simples para obter uma chave de API do Google Maps . Siga as etapas em seu guia antes de continuar. Quando terminar, seu AndroidManifest.xml deve conter uma configuração como esta:
Agora você está pronto para adicionar um mapa ao seu aplicativo.
A grande vantagem do VS para Mac é que ele é movido por NuGet, assim como seu irmão mais velho. Como as bibliotecas de gerenciamento de mapas não são incluídas por padrão, você precisará instalar o LinearLayout pacote.
No entanto, não há nenhum componente "Visualização do mapa" que você pode simplesmente arrastar para a sua "Atividade". Em vez disso, adicionar um mapa à tela requer a alteração manual do arquivo Recursos-> layout-> Main.axml. Você pode usar a visualização do designer para excluir o botão criado antes, mas, em seguida, alternar para "Visualização do código" e adicionar o seguinte código de fragmento em seu AndroidManifest.xml:
Assim como no iOS, você precisará configurar seu aplicativo para solicitar as permissões adequadas. Para fazer isso, abra using Android.Gms.Maps.Model; using Android.Gms.Maps; using Android.Locations; Make your MainActivity also a ILocationListener. public class MainActivity : Activity, ILocationListener Implement the ILocationListener methods within your MainActivity: public void OnProviderEnabled(string provider) {} public void OnProviderDisabled(string provider) {} public void OnStatusChanged(string provider, Availability status, Bundle extras) {} public void OnLocationChanged(Android.Locations.Location location) { LatLng latLng = new LatLng(location.Latitude, location.Longitude); CameraPosition.Builder builder = CameraPosition.InvokeBuilder(); builder.Target(latLng); builder.Zoom(15); builder.Bearing(155); builder.Tilt(10); CameraPosition cameraPosition = builder.Build(); CameraUpdate cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition); MapFragment mapFrag = (MapFragment)FragmentManager.FindFragmentById(Resource.Id.map); GoogleMap map = mapFrag.Map; if (map != null) { map.MoveCamera(cameraUpdate); } } para edição e clique no botão "Aplicativo" no canto inferior esquerdo do editor. O VS mostrará uma interface visual para definir esses valores. Existem alguns deles que você precisará ativar, conforme mostrado abaixo.
Agora é hora de escrever algum código real. Encontre o LocationManager locMgr; string locationProvider; arquivo, abra-o para edição e faça as seguintes alterações:
Adicione referências de namespace:
Adicione as duas variáveis ​​a seguir como variáveis ​​de nível de classe:
E limpar o OnCreate() método para se parecer com este:
Chamando GetSystemService de dentro do ILocationListener método, seu RestClient.cs será ativado como um using System; using System.Net; namespace testshared { public delegate void callback(string responseText); class ReqState { public ReqState(HttpWebRequest req, callback cb) { request = req; callback = cb; } public HttpWebRequest request { get; set; } public callback callback; } public class RestClient { public RestClient() {} public void FetchPage(string url, callback cb) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.BeginGetResponse(new AsyncCallback(FinishWebRequest), new ReqState(request, cb)); } private void FinishWebRequest(IAsyncResult result) { ReqState reqState = (result.AsyncState as ReqState); HttpWebResponse response = reqState.request.EndGetResponse(result) as HttpWebResponse; using (var reader = new System.IO.StreamReader(response.GetResponseStream())) { string responseText = reader.ReadToEnd(); reqState.callback(responseText); } } } } e, portanto, será capaz de lidar com todos os eventos listados acima.
Execute seu aplicativo Android e você deve obter o mapa posicionado em sua localização, semelhante à imagem a seguir.
Usando bibliotecas compartilhadas para iOS e Android
Uma das grandes características do VS para Mac é a possibilidade de ter código compartilhado entre aplicativos iOS e Android. Idealmente, poderíamos ter toda a lógica de negócios do aplicativo em uma biblioteca compartilhada, limitando qualquer código específico do iOS e Android para fazer parte da IU.
Vamos criar uma classe compartilhada que executará de forma assíncrona uma solicitação HTTP e mostrará o conteúdo em um console de depuração.
Crie um novo arquivo de classe em sua biblioteca compartilhada chamada ViewController.cs com o seguinte código:
(Certifique-se de usar o namespace correto do seu projeto)
Usando a biblioteca no iOS
Modifique o seu MainActivity.cs arquivo no projeto iOS para corresponder ao seguinte código:
Execute seu aplicativo iOS, clique no botão e verifique a guia "Application Output" no Visual Studio. Ele deve exibir algo assim:
Usando a biblioteca no Android
As alterações necessárias em um aplicativo Android são muito semelhantes às necessárias no iOS. Modifique o RunOnUiThread arquivo para corresponder ao seguinte:
Nota: A arquitetura do sistema de ambas as plataformas, Android e iOS, requer que toda interação da IU aconteça no encadeamento do aplicativo principal. Isso significa que qualquer mudança nos elementos da interface do usuário também deve acontecer de dentro do thread principal. É aí que doneCallback() e
entrar. Como as solicitações de HTTP foram executadas em uma thread separada e
foi chamado fora do thread principal, tivemos que usar esses métodos para poder acessar os botões e alterar o rótulo.
Os desenvolvedores de C # estão assumindo o controle do Android e iOS
O Visual Studio para Mac ainda tem alguns problemas para resolver, mas desde a primeira vez, estou muito animado com seu futuro. A necessidade de aplicativos móveis cresce a cada dia e, com o Visual Studio para Mac, a Microsoft habilitou ainda mais um exército de ótimos desenvolvedores C # para preencher essa necessidade.
Swift e Java / JVM agora têm um novo e muito forte competidor na batalha por nossos ambientes de desenvolvimento de dispositivos móveis. Relacionado: .NET Core - Going Wild e Open Source. Microsoft, por que você demorou tanto ?! Relacionado: A linguagem Dart: quando Java e C # não são precisos o suficiente