() translation by (you can also view the original English article)
Um bom entendimento do SDK do iOS é a chave quando se desenvolve aplicativos iOS nativos. Isto não te ajudará apenas a escolher quais as ferramentas certas para resolver um problema em particular, isto também vai garantir que você não fique perdido nas dezenas de frameworks que estão inclusas no SDK. Neste artigo, daremos uma olhada na arquitetura do iOS e descobriremos quais aplicativos poderosos este tem sobre o capô.
O que é o SDK do iOS?
Tenho certeza de que até mesmo alguns desenvolvedores iOS experientes teriam dificuldades em definir o SDK do iOS em uma frase. O acrônimo SDK significa Software Development Kit ou Kit de Desenvolvimento de Software. O SDK do iOS contém ferramentas e recursos para o desenvolvimento de aplicativos iOS nativos, o que significa que o SDK possibilita que desenvolvedores desenvolvam, instalem, executem e testem aplicativos no simulador ou no dispositivos fisico.
As duas principais forças que dirigem os aplicativos iOS nativos são o Swift (ou Objective-C) e o sistemas de frameworks nativos do iOS. No artigo anterior, exploramos a linguagem Swift. Neste artigo, eu quero explorar os frameworks que da tanto poder aos aplicativos iOS nativos.
Isso inclui frameworks de alto nível, tais como os frameworks UIKit e Map Kit, mas também frameworks que são intimamente ligados ao hardware, como os frameworks Accelerate e o Core Location.
O que é um aplicativo iOS nativo?
Você sabe agora o que o SDK do iOS é, mas o que faz um aplicativo se qualificar como um aplicativo iOS nativo? A resposta simples é que um aplicativo iOS é um aplicativo que é executado em um dispositivo iOS. Entretanto, isso é apenas metade da verdade. E quanto aos aplicativos web, executados no Safari?
Um aplicativo iOS é uma aplicação Cocoa desenvolvida para a plataforma iOS. Ótimo. O que é uma aplicação Cocoa? Uma aplicação Cocoa é um pouco difícil de se definir. É a linguagem em que o aplicativo é escrito? Na verdade não. É a ferramenta com que uma aplicação Cocoa é construída? Não. É possível desenvolver uma aplicação Cocoa sem a ajuda do Xcode.
A Apple define uma aplicação Cocoa como uma aplicação composto de objetos que herdem do NSObject
, uma classe raiz declarada no framework Foundation e que é totalmente integrado em tempo de execução com o Objective-C
Neste artigo, eu quero focar nos frameworks que são usados para criar um aplicativo iOS nativo. Se você se interessar em aprender mais sobre o tempo de execução do Objective-C, que também é usado pelo Swift, eu recomendo que você dê uma olhada no Objective-C Runtime Reference ou leia o Objective-C Runtime Programming Guide da Apple.
O framework Foundation fornece uma segunda classe raiz, NSProxy
. Entretanto, você raramente, ou nunca, vai usa-la em qualquer projeto seu.
Arquitetura iOS
Outra diferença com os aplicativos web rodando no Safari é que aplicativos nativos interagem diretamente com o sistema operacional iOS e o sistema de frameworks do iOS. O sistema operacional age como um mediador entre o aplicativo e o hardware por baixo. A principal vantagem desta mediação ou abstração é que o aplicativo nativo não precisa se preocupar com futuras alterações de hardware ou especificações de dispositivos.
O sistema operacional fornece aos aplicativos nativos as informações necessárias sobre a capacidade de hardware (O dispositivo tem uma câmera?) e especificações do dispositivos (O aplicativo está rodando em um Iphone ou iPad?).
A arquitetura do iOS pode ser quebrada em quatro camadas distintas:
- Cocoa Touch
- Media
- Core Services
- Core OS



Esta arquitetura em camadas ilustra este nível de abstração, com as camadas de maior nível mais abstratas e as camadas de menor nível mais fundamentais, intimamente ligadas ao hardware. É evidente dizer que as camadas dos níveis superiores dependem das camadas dos níveis inferiores para algumas das suas funcionalidades.
A Apple recomenda sempre que possível o uso dos frameworks de nível superior, porque muitas vezes são abstrações orientada a objeto dos frameworks de nível inferior. Em outras palavras, as camadas de nível superior interagem diretamente com o hardware através das camadas de nível inferior, que são inerentemente mais complexas. Claro que, ainda é possível se voltar aos frameworks de nível inferiores se as estruturas do nível superior não atenderem às suas necessidades.
Um lembrete, um framework é um diretório que contém uma biblioteca dinâmica compartilhada e recursos associados, tais como arquivos de cabeçalho, imagens, etc. Frameworks são os pontos de acesso a várias interfaces de sistema, tais como o address book do iOS, rolo de câmera do dispositivo e a biblioteca de música.
Camada Cocoa Touch
No artigo anterior, eu escrevi sobre o Cocoa Touch e sua relação com o Swift e Objetive-C. Neste artigo, eu gostaria de discutir sobre o Cocoa Touch de um ponto de vista mais funcional. Como os aplicativos realmente dependem da camada Cocoa Touch? Qual a função do Cocoa Touch na arquitetura iOS?
A camada Cocoa Touch é a camada mais alta na arquitetura iOS. Ela contém alguns dos frameworks principais que os aplicativos iOS nativos se apoiam, com o mais proeminente sendo o framework UIKit.
A camada Cocoa Touch define o básico da infraestrutura do aplicativo e fornece um número vital de tecnologias, tais como a multi-tarefa e a entrada baseada em toques.
Como eu mencionei, aplicativos iOS dependem muito do framework UIKit. Aplicativos iOS nativos não podem operar se eles não estiverem ligados com os frameworks UIKit e Foundation.
O framework UIKit ou UIKit pra simplificar é adaptado para a plataforma iOS. Há um framework equivalente para a plataforma OS X, o framework Application Kit ou AppKit. O UIKit fornece a infraestrutura gráfica e orientada a eventos para aplicativos iOS. Ele também cuida de outros aspectos fundamentais que são específicos da plataforma iOS, tais como a multi-tarefa, push notifications e a acessibilidade.
A camada Cocoa Touch fornece aos desenvolvedores um grande número de funções de ato nível, tais como o Auto Layout, impressão, reconhecedores de gestos e suporte a documento. Em adição ao UIKit, ele contém os frameworks Map Kit, Event Kit e Message UI, entre outros.
Pra uma lista completa de todos os frameworks da camada Cocoa Touch, eu gostaria de referi ao guia iOS Technology Overview da Apple.
Camada Media
Gráficos, audio e video são manipulados pela camada Media. Esta camada contém muitas tecnologias chaves, tais como Core Graphics, OpenGL ES e OpenAL, AV Foundation e Core Media.
A camada Media contém um grande número de frameworks incluindo o framework Assets Library para acessar as fotos e videos armazenados no aparelho, o framework Core Image para manipulação de imagens através de filtros e o framework Core Graphics para desenhos 2D.
Dê uma olhada no guia iOS Technology Overview da Apple para uma lista completa de todos os frameworks da camada Media.
Camada Core Services
A camada Core Services é responsável pela gestão dos serviços fundamentais que um aplicativo iOS nativo usa. A camada Cocoa Touch depende da camada Core Services para algumas de suas funcionalidades. A camada Core Services também fornece muitas funções indispensáveis, tais como objetos block, Grand Central Dispatch, In-App Purchase e iCloud Storage.
Uma das adições mais bem vindas da camada Core Services é o ARC ou Automatic Reference Counting. o ARC é um recurso a nível de compilador, introduzido em 2011 durante o release do iOS 5. O ARC simplifica o processa de gerenciamento de memória no Objective-C.
O gerenciamento de memoria é um tópico que não vamos cobrir nesta serie, mas é importante que você entenda o básico do gerenciamento de memória quando desenvolver aplicações Cocoa. Automatic Reference Counting é uma grande adição, mas é importante que você saiba o que o ARC está fazendo por você.
Você pode ler mais sobre o gerenciamento de memória no Programando com Objective-C e eu realmente recomendo que você o faça.
O framework Foundation ou Foundation, para simplificar, é outro framework essencial para aplicativos iOS e OS X. No próximo artigo, exploraremos este framework com mais detalhe. O framework Foundation tem mais de uma coleção de classes úteis, tais como NSArray
, NSDictionary
e NSDate
.
O Foundation fornece a classe raiz NSObject
, qual fornece uma interface básica para o Objective-C em tempo de execução e isso também introduz vários paradigmas, tais como políticas para a propriedade do objeto. Como o Core Foundation (veja a seguir), o Foundation faz o possível para que diferentes bibliotecas e frameworks compartilhem facilmente dados e código.
Outra camada importante do Core Services e ligada ao framework Foundation, é o framework Core Foundation baseado em C ou Core Foundation para facilitar. Como o framework Foundation, ele disponibiliza várias bibliotecas e frameworks para compartilhar dados e código.
O Core Foundation tem uma característica conhecida como toll-free bridging, que permite a substituição de objetos Cocoa por objetos Core Foundation em parâmetros de função e vice e versa.
Para uma lista completa de todos os frameworks da camada Core Services, eu gostaria de referenciar o guia iOS Technology Overview.
Camada Core OS
A maioria das funcionalidades fornecida pelas três camadas de nível superiores é construída sobre a camada de Core OS e suas características de baixo nível. A camada Core OS fornece uma grande quantidade de frameworks que seu aplicativo pode usar diretamente, tal como o Accelerate e o framework Security.
A camada Core OS também encapsula o kernel e interfaces de baixo nível do UNIX o qual seu aplicativo não tem acesso, por razões obvias de segurança. Contudo, através da biblioteca libSystem, que é baseada em C, muitas características de baixo nível podem ser acessadas diretamente, tais como os sockets BSD, threads POSIX e serviços de DNS.
Documentação
Seu aliado mais próximo quanto ao desenvolvimento de aplicativos iOS nativos é a documentação junto ao SDK do iOS. Em sua maior parte, a documentação é excepcional e irá ajudá-lo a aprender rapidamente uma nova tecnologia ou estrutura com pouco esforço.
Mesmo que a documentação esteja disponível online, a maioria dos desenvolvedores usam o navegador de documentação que está incluso no Xcode. No Xcode 7, você pode procurar o navegador de documentação selecionando Documentation and API Reference no menu Window do Xcode.
Se você for usar a documentação extensivamente, você pode querer aprender alguns atalhos para achar o que você estiver procurando na documentação. Como eu mencionei no paragrafo anterior, o navegador de documentação fornece acesso fácil à documentação. Para acessar rapidamente a documentação, pressione Command + Shift + 0 dentro no Xcode.
Durante o desenvolvimento, fácilmente pode tornar-se maçante ficar alterando entre o editor de código e o navegador da documentação toda vez que você precisar encontrar um símbolo, tal como uma classe, método ou estrutura.
Há duas soluções para navegar de forma eficiente pela documentação. Se você colocar seu cursor no nome de uma classe ou método no editor do Xcode, o Quick Help Inspector na barra lateral da direita mostra um sumário do respectivo símbolo. O sumário contém vários links úteis que leva você à documentação.



Como geralmente escondo a barra lateral da direita quando estou trabalhando no editor, eu uso um método alternativo para mostrar a documentação de uma classe ou método. Se você pressionar a tecla Option e passar o mouse sobre um símbolo, o cursor mudará para um ponto de interrogação e o símbolo será realçado.
Clicando em um simbolo com a marca de interrogação, um pop up aparecerá contendo o mesmo sumário do Quick Help Inspector. Clicar em um dos links da janela levará você para o navegador da documentação. Essa é uma maneira rápida e conveniente de alterar entre o editor e o navegador de documentação, especialmente se você trabalha com dois monitores.



Conclusão
Agora você tem um bom entendimento do SDK do iOS e as várias camadas da arquitetura do iOS. Os dois principais frameworks de um aplicativo iOS, UIKit e Foundation, serão o foco dos dois próximos capítulos da série.
Estes frameworks não são apenas indispensáveis para todo aplicativo iOS, eles também contém dezenas de classes que você se verá utilizando frequentemente quando estiver desenvolvendo aplicativos iOS nativos.
Se você tiver alguma pergunta ou comentário, você pode nos deixar nos comentários abaixo ou me procurar no Twitter.
Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!