Todos nós sabemos a postura de exclusividade que a Apple tem em relação aos seus produtos, e isso não muda em relação ao desenvolvimento de aplicativos.

O que precisamos para desenvolver aplicativos para o iOS são:

  • OS X 10.9.4 ou superior;
  • Xcode;
  • iOS SDK;

O Xcode é um ambiente integrado de desenvolvimento, produzido pela própria Apple.

Com ele temos o editor de código, ferramenta gráfica para edição da interface de aplicativos, e diversas outras ferramentas interessantes como, por exemplo,uma ferramenta para debug de código.

O iOS SDK estende o Xcode para inclusão de ferramentas, compiladores, e frameworks que o desenvolvedor precise durante a fase de desenvolvimento de um aplicativo.

O iOS SDK contém todos os recursos que os desenvolvedores precisam para instalar, executar e testar nossos aplicativos nativos desenvolvidos para um dispositivo que rode o iOS.

Arquitetura do iOS

Toda a arquitetura do iOS está dividida em camadas, e em cada camada temos diversos frameworks, como podemos ver na Figura 1.

Arquitetura do iOS
Figura 1. Arquitetura do iOS.

Vamos detalhar cada uma das camadas apresentadas para que possamos entendê-las.

Cocoa TouchLayer

Está camada nos provê uma gama de frameworks que são utilizados para a construção dos nossos aplicativos.Dentre eles podemos citar frameworks para aparência, multi tasking, touch-based input, push notifications, dentre outros. Este assunto é vasto, portanto citaremos alguns recursos chave desta camada:

  • App Extensions: este recurso só foi disponibilizado agora pela Apple e ele nos permite criar extensões de nossos aplicativo sque podem ser utilizadas dentro de um contexto de trabalho do usuário. Por exemplo, nosso aplicativo deve permitir que os usuários possam compartilhar suas fotos em um site. Utilizando o app extensions o usuário, dentro do contexto do álbum, consegue compartilhar uma foto através da extensão do aplicativo sem a necessidade de ter de abri-lo. Desta forma, podemos criar diversas interações e facilidades de uso para os usuários, que estão cada vez mais exigentes. Temos essas áreas conhecidas como “extensions points”, ou seja, locais onde as extensões criadas serão executadas. Vamos detalhar a seguir cada uma destas “extensions points”:
    • Share:compartilhamento de conteúdos através de redes sociais, sites, dentre outros;
    • Action: execução de uma tarefa simples com o conteúdo em exibição;
    • Widget: acesso a publicação de conteúdos na barra de "Central de Notificações" ou na "Visão de Hoje";
    • Photo editing: permite a edições de fotos ou vídeos dentro do aplicativo de Fotos nativo do iOS;
    • Document provider: permite um local para armazenamento de documentos que podem ser acessados por outros aplicativos;
    • Custom keyboard: permite que o usuário possa configurar um teclado diferente do teclado padrão do iOS;
      Cada uma destas “extensions points” nos prove uma API para a utilização.
      Devemos saber também que uma extensão é diferente de um aplicativo, apesar de que as extensões para serem distribuídas devem ser criadas dentro de um aplicativo que são conhecidos como “containing app”.
  • Handoff: este é um recurso interessante disponível no OS X e iOS, pois permite queo usuário possa estender à utilização do aplicativo entre as plataformas. Através deste recurso o usuário pode iniciar uma funcionalidade do aplicativo em um dispositivo e mudar para outro, continuando a utilização da mesma funcionalidade que foi iniciada em outro aparelho. Por exemplo, um usuário está acessando um conteúdo qualquer na web através do Safari e muda para outro dispositivo rodando iOS logado com o mesmo Apple ID.
  • O que acontece é que o usuário irá ver este mesmo conteúdo automaticamente no outro dispositivo iOS, inclusive na mesma posição do dispositivo que iniciamos a funcionalidade. Em resumo o Handoff permite transferir as atividades dos usuários entre dois dispositivos associados ao mesmo Apple ID do usuário. Existem alguns aplicativos como, por exemplo, o Safari, Mail, Maps e outros, que fazem o uso deste recurso.
  • Local Notifications: é um complemento ao Push Notifications, que por sua vez, é um recurso que possibilita os aplicativos gerarem notificações locais. Aplicativos que estejam rodando em background podem usar o local notifications como uma forma de chamar a atenção do usuário quando eventos considerados importantes ocorrerem. Por exemplo, o aplicativo de mapas que gera notificações para o usuário no momento de fazer uma curva. Além disso, ele permite o agendamento da ocorrência de notificações para uma data futura, dessa forma as notificações serão acionadas mesmo que o aplicativo que fez o agendamento não esteja em execução.A vantagem é que as notificações locais são independentes do aplicativo: uma vez agendadas,as camadas de sistema irão gerenciar as entregas destas notificações.
  • AirDrop: este recurso permite que os usuários possam compartilhar diversos tipos de dados, como por exemplo, fotos e documentos com outros dispositivos iOS que estejam próximos.
  • Multitasking: este é um recurso que aperfeiçoa o consumo de bateria dos dispositivos iOS, dando aos aplicativos o tempo necessário para realização de tarefas críticas. Quando o usuário clica no botão Home, o aplicativo é enviado para ser executado em segundo plano e não havendo mais nenhuma tarefa a ser realizada, ele é colocado em um estado de congelamento, ou seja, fica em espera na memória até ser chamado novamente.
  • Auto Layout: através deste recurso podemos construir interfaces de usuários dinâmicas e versáteis através da definição de regras que irão definir a disposição dos elementos da tela, respondendo apropriadamente as alterações referentes a tamanho, orientação e localização. Para trabalhar com o auto layout utilizamos entidades, que são objetos conhecidos como “constraints”. Através das constraints podemos definir as regras para o layout dos elementos na tela, por exemplo, podemos criar uma constraint que especifica a largura de um elemento, ou a distancia horizontal entre dois elementos.

Media Layer

Esta camada nos prove tecnologias para facilitar a implementação e o desenvolvimento de experiências multimídia para os usuários como, por exemplo, recursos para design de interfaces ricas, áudio e vídeo.É considerada uma das camadas mais importantes, pois, de acordo com a filosofia da Apple, o desenvolvedor deve se preocupar em oferecer uma boa experiência aos seus usuários.

Dentre os recursos desta camada, temos:

  • Graphics Technologies: provê diversos recursos para criarmos interfaces de usuários de alta qualidade. Dentre os recursos podemos citar:
    • UIKit Graphics: prove suporte para criação de desenhos e animações, além de nos fornecer uma eficiente forma para trabalharmos com a renderização de imagens – o que é muito importante se tratando de dispositivos mobile – e conteúdos baseados em textos;
    • Core Graphics: é um recurso nativo de desenho que prove suporte para a criação de imagens em 2D;
    • Core Animation: prove recursos para aperfeiçoarmos as animações que são criadas nos aplicativos, inclusive o UIKit Views usa o Core Animation como suporte nas suas animações;
    • Core Image: prove poderosas ferramentas para criação de filtros para manipulação de vídeos e imagens estáticas;
    • Photos Library: trabalha em conjunto com outro framework, o PhotosUI. Podemos utiliza-lo para acessarmos fotos, vídeos e outros arquivos de mídia do usuário. Vale destacarmos que qualquer acesso do aplicativo aos dados do usuário, requer permissões do mesmo;
  • Audio Technologies: através desta tecnologia podemos trabalhar com reprodução e gravação de áudio de alta qualidade, e ainda fazer com que o dispositivo iOS emita sons personalizados conforme a nossa necessidade. Esta tecnologia trabalha com o hardware do dispositivo, nos fornecendo assim uma gama de possibilidades de criação e uso.
    Vamos listar abaixo os frameworks que fazem parte desta tecnologia:
    • Media Player Framework: através deste podemos ter acesso as bibliotecas do iTunes do usuário, bem como executar músicas;
    • AV Foundation: está é uma interface escrita em Objective-C para o gerenciamento de reprodução e gravação de áudio e vídeo;
    • OpenAL: é um framework voltado para o desenvolvimento de jogos, pois é um padrão da indústria de software para a entrega de áudio de alta qualidade;
    • Core Audio: é um conjunto avançado de frameworks que nos permite trabalharmos com gravação e reprodução de áudio e conteúdos MIDI;
  • Video Technologies: este recurso nós prove formas para gerenciarmos o conteúdo de vídeos dentro do aplicativo, e também reproduzirmos vídeos que estão armazenados na internet. Vale ressaltarmos que de acordo com o hardware do dispositivo, podemos fazer a captura de vídeo e incorpora-lo no aplicativo. Veja abaixo alguns recursos desta tecnologia:
    • UIImagePickerController: esta classe é um UIKit View Controller que permite que o usuário selecione um arquivo de mídia, e também permite a captura de um novo conteúdo;
    • AVKit: este framework utiliza objetos existentes no AV Foundation para gerenciarmos a reprodução de vídeos no dispositivo;
    • AV Foundation: este framework está presente também no Audio Technologies. Ele é uma interface escrita em Objective-C para o gerenciamento de reprodução e gravação de áudio e vídeo;
    • Core Media: define uma tipagem de baixo nível e interfaces para manipulação de mídias. É mais utilizado quando necessitamos ter um controle mais preciso sobre a criação e reprodução de conteúdo de áudio e vídeo;
  • AirPlay: através deste recurso podemos desenvolver aplicativos que possam se integrar a Apple TV permitindo fazermos stream de áudio e/ou vídeo com qualquer receptor/emissor que faça uso do AirPlay, como é o caso da Apple TV e também de terceiros. O AirPlay está incorporado em diversos frameworks já existentes, dessa forma, qualquer conteúdo que faz a utilização destes frameworks, automaticamente estão habilitados para serem utilizados por esta tecnologia.

Core Service Layer

Está camada contém recursos fundamentais que utilizamos no desenvolvimento de aplicativos. Podemos citar os dois principais frameworks desta camada, o Core Foundation e o Foundation. Eles definem recursos que praticamente todos os aplicativos utilizam. Vejamos a seguir alguns dos frameworks que compõem esta camada:

  • CloudKit Framework: nos disponibiliza diversas interfaces para trabalharmos com transferências de dados entre os nossos aplicativos e os containers de armazenamento do iCloud. Desta forma podemos integrar nosso aplicativo ao iCloud, por exemplo;
  • Core Data Framework:fornece recursos para trabalharmos com armazenamento e gerenciamento de estruturas de dados em nossos aplicativos. As estruturas que definimos em nosso código são criadas em tempo de execução e ficam disponíveis para serem manipuladas a qualquer momento;
  • Core Foundation Framework: prove uma serie de interfaces baseadas na linguagem C para gerenciamento de dados e serviços, como por exemplo, coleções de dados, gerenciamento de strings, manipulação de stream, dentre outros recursos;
  • Core Location Framework: este framework nos prove meios para trabalharmos com informações de localização, uma das formas de obtermos a localização do dispositivo do usuário é através do GPS do dispositivo. Desta forma podemos criar aplicativos baseados na localização do usuário, por exemplo, o aplicativo deve fornecer ao usuário uma lista de bares e restaurantes próximos a ele.
  • Foundation Framework: prove-nos de containers de códigos escritos em Objective-C para muitos dos recursos que são disponibilizados pelo Core Foundation Framework;

Core OS Layer

Está é uma camada de baixo nível que é bastante utilizada pelas camadas de níveis superiores a ela, mesmo que não seja utilizada diretamente, ela de alguma forma é utilizada por outros frameworks de níveis superiores com que venhamos utilizar em algum momento. A utilização direta desta camada normalmente ocorre quando precisamos fazer uma negociação explicita de segurança ou uma comunicação com um hardware externo, por exemplo, comunicação via bluetooth. Vamos detalhar abaixo alguns dos frameworks desta camada:

  • Accelerate Framework: disponibiliza-nos uma variedade de interfaces para trabalharmos com o processamento de sinais digitais, álgebra linear e cálculos de processamento de imagens. Outro recurso que podemos citar são as diversas funções matemáticas que possibilitam trabalharmos com cálculos complexos;
  • Core Bluetooth Framework: prove-nos formas de interagirmos com dispositivos externos através do bluetooth. Por exemplo, um aplicativo que se comunica com um medidor de temperatura ou com um monitor de batimentos cardíacos;
  • Local Authentication Framework: este framework nos fornece recursos para integrarmos nossos aplicativos com o Touch ID, recurso de identificação por digital – este recurso está disponível somente a partir do modelo iPhone 5S;
  • Security Framework: este framework nos prove diversas interfaces para gerenciamento de certificados, chaves publicas e privadas e politicas de confiabilidade de acesso. Dentre alguns recursos podemos citar:
    • Suporte a criptografia baseada em números pseudorrandômicos;
    • Suporte para armazenamento de certificados e chaves criptografadas em uma espécie de chaveiro – repositório seguro para dados de usuários;
    • Compartilhamento de chaves entre aplicativos, por exemplo, um usuário precisa fazer login em dois aplicativos cujo login é o mesmo, através deste recurso de compartilhamento podemos identificar que o usuário já logou em um aplicativo e não será necessário logar novamente no outro aplicativo, pois o login já foi realizado. É claro que sempre precisamos ter muito cuidado quando se trata de segurança, mas dependendo dos requisitos, isto pode se encaixar muito bem.
  • System: este é o nível de sistema que engloba o ambiente do kernel, drivers, e interfaces de baixo nível UNIX do sistema operacional. Sendo o kernel responsável pelo gerenciamento da memoria virtual, threads, arquivos do sistema, rede e processos de comunicação. Por questões de segurança, o acesso ao kernel e drivers é restrito e limitado a um grupo de frameworks de sistema e aplicativos. O iOS nos prove uma série de interfaces que nós permite acessar diversos recursos de baixo nível do sistema operacional, através da biblioteca LibSystem. Veja a seguir alguns destes recursos:
    • Concorrência;
    • Padrões de entrada e saída;
    • Alocação de memória;
    • Recursos para cálculos matemáticos computacionais;

Ao longo deste artigo podemos ter uma divisão das camadas do iOS, e de seus frameworks. Podemos concluir que a arquitetura do iOS está organizada de tal maneira que, os recursos que necessitamos utilizar para o desenvolvimento de aplicativos podem ser utilizados através dos frameworks.

É muito importante conhecermos bem a arquitetura da plataforma e seus respectivos frameworks, pois isto nós permitirá utilizarmos com mais eficiência os recursos que estão disponíveis, além de podermos desenvolver funcionalidades cada vez mais interessantes.

Obrigado pela atenção e até a próxima.

Links