A plataforma Cocoa é agora representada por quatro sabores distintos, ou sub-plataformas, com os SDKs macOS, iOS/iPadOS, watchOS e tvOS. Cada SDK é composto de bibliotecas individuais geralmente referidas como “Frameworks”.
No lado Objective-C, cada framework é um pacote com a extensão .framework
que contém tanto binários (.dylib
, que é comparável a .dll
no Windows) quanto arquivos de cabeçalho Objective-C. Para Elements, cada framework no SDK é representado por um arquivo .fx que agrega todos os metadados dos cabeçalhos para torná-los mais fáceis e rápidos para o compilador Elements consumir.
Elements vem com arquivos .fx
pré-criados para todos os frameworks nos SDKs padrão da Apple que vêm com as versões mais recentes dos quatro SDKs (assim como para selecionar versões mais antigas).
Você pode encontrar uma lista completa de todos os frameworks nas listas abaixo. Você verá que muitos dos frameworks são compartilhados por alguns ou mesmo todos os SDKs, fornecendo uma vasta biblioteca de classes que permitem escrever código que pode ser compilado e compartilhado entre todas as subplataformas, enquanto cada SDK também fornece um número significativo de frameworks que são específicos da plataforma.
- Todas as Estruturas MacOS SDK
- Todas as Estruturas SDK iOS
- Todas as Estruturas SDK tvOS
- Todas as Estruturas SDK watchOS
- Todas as Estruturas Mac Catalyst
Vamos dar uma olhada em alguns destes frameworks com mais detalhes.
Fundação
Provavelmente o framework mais crítico para qualquer aplicativo Cocoa é o framework Foundation, porque – como o nome implica – ele fornece grande parte das classes foundation que compõem uma aplicação no tempo de execução do Objective-C. Isto inclui a maioria das classes padrão com NS*
prefixos (além das classes GUI, mais abaixo), desde tipos simples e essenciais como NSString
, NSArray
e similares, até classes que fornecem acesso aos serviços centrais do SO, como NSFileManager
para acesso ao disco, NSNotificationCenter
para trabalhar com notificações, NSURL*
classes para trabalhar com requisições de rede, e muitas mais.
Ler mais em cerca de Foundation.fx
. Está disponível em todas as subplataformas de cacau.
Interfaces de usuário: AppKit vs. UIKit vs. WatchKit.
As semelhanças entre os SDKs iOS, watchOS, tvOS e macOS dissipam-se à medida que entramos no domínio do desenvolvimento da interface do utilizador – e por uma boa razão, uma vez que a interface do utilizador para aplicações nestas plataformas é vastamente diferente. Por esta razão, os SDKs fornecem três frameworks muito distintos:
AppKit
está incluído no SDK macOS apenas, e fornece todas as classes e controles que você precisa para criar aplicações Mac. Por razões antigas, a maioria dessas classes compartilham um prefixo comum de nomenclatura com Foundation e começam com NS*
, e as classes com as quais você estará trabalhando incluem NSWindow
, NSButton
, NSTableView
e similares.
UIKit
é o framework que tanto iOS quanto tvOS usam para fornecer suas UIs, e suas classes começam com um prefixo UI*
. Muitos conceitos são compartilhados por AppKit e UIKit, mas as classes são diferentes &mdash alguns mais do que outros. Por exemplo, ambos frameworks têm uma classe para representar cores (NSColor
e UIColor
, respectivamente) que funcionam de forma muito semelhante, enquanto outros conceitos são bastante exclusivos do UIKit, como o uso de controladores predefinidos como UINavigationController
e UITabBarController
. O UIKit também tem diferenças (algumas menores, outras muito significativas) entre iOS e tvOS.
WatchKit
, finalmente, é usado pelo watchOS para construir o UI para o Apple Watch em termos de Apps, Glances e Notificações. (Há também ClockKit
para a construção de Complicações de face de relógio.) O WatchKit usa uma abordagem diferente e mais simples para o design de IU do que o UIKit.
Os diferentes frameworks forçam o desenvolvedor a repensar e projetar sua IU de aplicação a partir do zero, mas isso é uma coisa boa, porque os paradigmas de IU em cada plataforma são fundamentalmente diferentes, com o UIKit sendo em grande parte impulsionado pelo toque (tanto direto e através do Siri Remote na Apple TV) e o AppKit sendo usado para a interação mais tradicional estilo mouse+keyboard.
Mas muitos dos conceitos por trás das frameworks são semelhantes, e você verá que aprender a criar aplicações em uma irá, em muitos casos, traduzir facilmente para a outra. Por exemplo, todos os três frameworks abraçam o paradigma Model-View-Controller para separar a UI real da classe “controller” que a conduz. Isso se torna aparente no momento em que você começa a criar sua primeira IU, porque ao invés de implementar sua própria classe Window ou View (devido à natureza de janela única do iOS, as aplicações UIKit pensam principalmente em termos de views, não de windows) em código como você faria em .NET ou Delphi, você implementa uma Window (ou View) ”Controller”.
Outros tópicos neste site de documentos, como o artigo Trabalhando com Arquivos XIB discute esses conceitos com mais detalhes.
Ler mais sobre AppKit.fx
, UIKit.fx
e WatchKit.fx
.
Nota: A Cocoa.framework
(e correspondência Cocoa.fx
) existe no SDK macOS. Este framework é apenas um pacote de Foundation e AppKit. Não deve ser confundido com nosso uso geral do termo “Cocoa” para se referir a toda a plataforma.
Outros frameworks de IU específicos
Bambos SDKs contêm frameworks adicionais que são construídos em cima do AppKit e UIKit para fornecer acesso a elementos de IU mais avançados ou específicos.
Por exemplo:
- Os SDKs macOS, iOS e watchOS contêm o MapKit, que fornece classes para integrar Apple Maps ao seu aplicativo, tanto para mostrar mapas, quanto para trabalhar com dados geográficos. (O MapKit também trabalha em conjunto com o CoreLocation, coberto abaixo.)
- Bambos iOS e macOS contêm o novo Social framework que permite a sua aplicação mostrar UI para compartilhar conteúdo no Twitter, Facebook, Sina Weibo e outras redes sociais.
- iOS fornece o framework MessageUI para interagir com e-mails e permitir que o usuário envie e-mails diretamente da sua aplicação.
- SpriteKit, novo tanto no iOS 7.0 e OS X 10.9 e SceneKit (novo no OS X 10.9 e também no iOS a partir da versão 8.0) facilita a criação de uma grande UI de jogo.
System Services
Há também um monte de frameworks que permitem que seu aplicativo interaja com serviços de sistema, tais como:
- StoreKit para lidar com compras no sistema para aplicativos iOS e Mac App Store.
- Segurança para acessar o chaveiro do sistema, armazenar e recuperar senhas e certificados, etc.
- CoreLocation para trabalhar com GPS (e serviços de localização baseados em Wifi).
- CoreAudio e CoreVideo para trabalhar e reproduzir mídia de áudio e vídeo.
- Addressbook e EventKit para trabalhar com Contatos e Calendários dos usuários (junto com EventKitUI no iOS).
- GameKit para integrar seus jogos com Game Center.
(todos compartilhados entre todas as plataformas) e muito mais.
Frameworks de nível inferior
Se você quiser ir além de apenas AppKit/UIKit para seu desenvolvimento de interface de usuário, ambos os SDKs também fornecem frameworks que permitem que você fique mais sujo e trabalhe com a interface de usuário em níveis inferiores.
- CoreGraphics é a base de toda a renderização gráfica nos frameworks da interface de usuário, e você pode e vai trabalhar com ela ao criar seus próprios controles personalizados.
- QuartzCore contém ”CoreAnimation”, a biblioteca que fornece acesso sofisticado e fácil para adicionar animação aos seus aplicativos – uma necessidade para qualquer aplicativo moderno iOS e Mac.
- GLKit permite-lhe adicionar elementos baseados em OpenGL às suas aplicações UIKit/AppKit, enquanto os frameworks OpenGL (macOS) e OpenGLES (iOS e tvOS) de nível inferior lhe dão acesso total às APIs OpenGL em bruto.
rtl.fx, libToffee.fx, libSwift.fx
Além dos frameworks SDK essenciais, a Elements fornece três arquivos adicionais .fx
que são cruciais para o seu funcionamento.
-
rtl.fx
é ainda mais fundamental que o framework Foundation, e contém todas as APIs de baixo nível estilo C que compõem o sistema central UNIX de macOS, iOS, watchOS e tvOS; ele também contém bibliotecas como Grand Central Dispatch e CommonCrypto. Essencialmente, rtl.fx representa a maioria dos cabeçalhos em/usr/include
. -
libToffee.fx
contém tipos de helper que são cruciais para o próprio compilador Elements. Por exemplo, contém suporte interno para Future Types, genéricosNSArray<T>
eNSDictionary<T>
tipos, suporte LINQ, e mais. -
libSwift.fx
fornece tipos adicionais e funções específicas para a linguagem Swift.
Any Cocoa application irá automaticamente fazer referência a rtl.fx
, quer esteja ou não explicitamente listada nas Referências. As referências a libToffee.fx
e libSwift.fx
são opcionais; o compilador avisará/erro se forem usadas características que requerem uma referência a libToffee.fx
ou libSwift.fx
e não são referenciadas.