Cocoa-alustaa edustaa nyt neljä erillistä makua eli osa-alustaa macOS-, iOS/iPadOS-, watchOS- ja tvOS-SDK:lla. Kukin SDK koostuu yksittäisistä kirjastoista, joita kutsutaan yleensä ”Frameworksiksi”.
Objective-C:n puolella kukin framework on .framework
-päätteellä varustettu nippu, joka sisältää sekä binääritiedostoja (.dylib
, joka on verrattavissa .dll
:een Windowsissa) että Objective-C-otsikkotiedostoja. Elementsissä jokainen SDK:n kehys on edustettuna .fx-tiedostolla, joka kokoaa yhteen kaikki otsikoiden metatiedot, jotta Elements-kääntäjä voi käyttää niitä helpommin ja nopeammin.
Elementsin mukana tulee valmiiksi luotuja .fx
-tiedostoja kaikille Applen vakiomuotoisten SDK:iden sisältämille kehyksille, jotka toimitetaan neljän SDK:n viimeisimmän version mukana (sekä tietyille vanhemmille versioille).
Täydellisen luettelon kaikista kehyksistä löydät alla olevasta luettelosta. Näet, että monet kehyksistä ovat yhteisiä joillekin tai jopa kaikille SDK:ille, ja ne tarjoavat laajan kirjaston luokkia, joiden avulla voit kirjoittaa koodia, joka voidaan kääntää ja jakaa kaikille osa-alustoille, kun taas jokainen SDK tarjoaa myös merkittävän määrän alustakohtaisia kehyksiä.
- Kaikki macOS SDK:n kehykset
- Kaikki iOS SDK:n kehykset
- Kaikki tvOS SDK:n kehykset
- Kaikki watchOS SDK:n kehykset
- Kaikki Mac Catalystin kehykset
Silmäilemme joitain näistä kehyksistä tarkemmin.
Foundation
Todennäköisesti kriittisin kehys mille tahansa Cocoa-sovellukselle on Foundation-kehys, koska – kuten nimikin kertoo – se tarjoaa suuren osan niistä perusluokista, jotka muodostavat sovelluksen Objective-C-ajoaikana. Tähän kuuluu suurin osa standardiluokista, joilla on NS*
-etuliite (lukuun ottamatta GUI-luokkia, joista lisää jäljempänä), yksinkertaisista ja välttämättömistä tyypeistä, kuten NSString
, NSArray
ja vastaavista, luokkiin, jotka tarjoavat pääsyn keskeisiin käyttöjärjestelmän palveluihin, kuten NSFileManager
levykäyttöön, NSNotificationCenter
ilmoitusten kanssa työskentelyyn, NSURL*
-luokkiin, jotka työskentelevät verkkopyyntöjen kanssa, ja moniin, moniin, moniin muihin luokkiin.”
Lue lisää osoitteessa: noin osoitteessa Foundation.fx
. Se on saatavilla kaikilla Cocoa-alustoilla.
Käyttäjärajapinnat: AppKit vs. UIKit vs. WatchKit.
Yhtäläisyydet iOS:n, watchOS:n, tvOS:n ja macOS:n SDK:iden välillä hälvenevät, kun siirrymme käyttöliittymäkehitykseen – ja hyvästä syystä, sillä näiden alustojen sovellusten käyttöliittymät ovat hyvin erilaisia. Tästä syystä SDK:t tarjoavat kolme hyvin erilaista kehystä:
AppKit
sisältyy vain macOS SDK:hon, ja se tarjoaa kaikki Mac-sovellusten luomiseen tarvittavat luokat ja ohjaimet. Vanhoista syistä useimmat näistä luokista jakavat Foundationin kanssa yhteisen nimiesimerkin ja alkavat NS*
:llä, ja luokkia, joiden kanssa tulet työskentelemään, ovat NSWindow
, NSButton
, NSTableView
ja vastaavat.
UIKit
on kehys, jota sekä iOS että tvOS käyttävät käyttöliittymiensä tarjoamiseen, ja sen luokat alkavat UI*
-esimerkillä. Monet käsitteet ovat yhteisiä AppKitille ja UIKitille, mutta luokat ovat erilaisia &mdash toiset enemmän kuin toiset. Esimerkiksi molemmilla kehyksillä on luokka värien esittämiseen (NSColor
ja UIColor
), jotka toimivat hyvin samankaltaisesti, kun taas muut käsitteet ovat melko ainutlaatuisia UIKitille, kuten sen käyttämät ennalta määritellyt ohjaimet, kuten UINavigationController
ja UITabBarController
. UIKitillä on myös eroja (osa pieniä, osa hyvin merkittäviä) iOS:n ja tvOS:n välillä.
WatchKit
, lopuksi, watchOS käyttää sitä Apple Watchin käyttöliittymän rakentamiseen sovellusten, Glancesin ja ilmoitusten osalta. (Kellotaulun komplikaatioiden rakentamiseen on myös ClockKit
.) WatchKit käyttää erilaista ja yksinkertaisempaa lähestymistapaa käyttöliittymäsuunnitteluun kuin UIKit.
Erolaiset kehykset pakottavat kehittäjän miettimään ja suunnittelemaan sovelluksensa käyttöliittymän alusta alkaen uudelleen, mutta se on hyvä asia, koska kummankin alustan käyttöliittymäparadigmat ovat perustavanlaatuisesti erilaisia: UIKit on pitkälti kosketuksen ohjaama (sekä suoran kosketusnäytön kautta että Apple TV:ssä Siri-kaukosäätimellä), kun taas AppKitiä käytetään perinteisempään hiiri+näppäimistö -tyyliseen vuorovaikutukseen.
Mutta monet kehysten taustalla olevista käsitteistä ovat samankaltaisia, ja huomaat, että jos opit luomaan sovelluksia yhdellä, se on monissa tapauksissa helposti siirrettävissä toiselle. Esimerkiksi kaikki kolme kehystä käyttävät Model-View-Controller-paradigmaa, jolla varsinainen käyttöliittymä erotetaan sitä ohjaavasta ”controller”-luokasta. Tämä käy selväksi heti, kun alat luoda ensimmäistä käyttöliittymääsi, sillä sen sijaan, että toteuttaisit oman Window- tai View-luokan (iOS:n yhden ikkunan luonteen vuoksi UIKit-sovellukset ajattelevat enimmäkseen näkymin, ei ikkunoin) koodissa, kuten .NET:ssä tai Delphissä, vaan toteutat ikkunan (tai näkymän) ”ohjaimen”.
Tämän dokumenttisivuston muissa aiheissa, kuten artikkelissa Työskentely XIB-tiedostojen kanssa, käsitellään näitä käsitteitä yksityiskohtaisemmin.
Lue lisää osoitteissa AppKit.fx
, UIKit.fx
ja WatchKit.fx
.
Huomautus: MacOS SDK:ssa on olemassa Cocoa.framework
(ja vastaava Cocoa.fx
). Tämä kehys on vain Foundationin ja AppKitin niputus. Sitä ei pidä sekoittaa siihen, että käytämme yleisesti termiä ”Cocoa” viittaamaan koko alustaan.
Spesifisempiä käyttöliittymäkehyksiä
Kumpikin SDK sisältää lisäkehyksiä, jotka rakentuvat AppKitin ja UIKitin päälle tarjotakseen pääsyn edistyneempiin tai spesifisempiin käyttöliittymäelementteihin.
Esimerkiksi:
- MacOS-, iOS- ja watchOS-SDK:t sisältävät MapKit:n, joka tarjoaa luokkia Apple Mapsin integroimiseksi sovellukseesi sekä karttojen näyttämiseen että maantieteellisten tietojen käsittelyyn. (MapKit toimii myös tiiviissä yhteistyössä CoreLocationin kanssa, jota käsitellään jäljempänä.)
- Kumpikin iOS ja macOS sisältävät uuden Social-kehyksen, jonka avulla sovelluksesi voi näyttää käyttöliittymän sisällön jakamiseen Twitterissä, Facebookissa, Sina Weibossa ja muissa sosiaalisissa verkostoissa.
- iOS tarjoaa MessageUI-kehyksen, jonka avulla voit olla vuorovaikutuksessa sähköpostin kanssa ja antaa käyttäjän lähettää sähköposteja suoraan sovelluksestasi.
- SpriteKit, joka on uusi sekä iOS 7.0:ssa että OS X 10.9:ssä, ja SceneKit (uusi OS X 10.9:ssä ja myös iOS:ssä versiosta 8.0 alkaen) helpottavat hienojen pelien käyttöliittymien luomista.
Järjestelmäpalvelut
On myös joukko kehyksiä, joiden avulla sovelluksesi voi olla vuorovaikutuksessa järjestelmäpalveluiden kanssa, kuten:
- StoreKit iOS- ja Mac App Store -sovellusten sovellussisäisten ostojen käsittelyyn.
- Turvallisuus, jonka avulla pääset käsiksi järjestelmän avainketjuun, voit varastoida salasanoja ja varmenteita ja hakea niitä jne.
- CoreLocation työskennelläksesi GPS:n (ja Wifi-pohjaisten paikannuspalveluiden) kanssa.
- CoreAudio ja CoreVideo työskennelläksesi audio- ja videomedian kanssa ja toistaaksesi sitä.
- Addressbook ja EventKit työskennelläksesi käyttäjien yhteystietojen ja kalentereiden kanssa (iOS:n EventKitUI:n rinnalla).
- GameKit integroidaaksesi pelisi Game Centerin kanssa.
- CoreGraphics on kaiken grafiikan renderöinnin perusta keskeisissä käyttöliittymäkehyksissä, ja voit ja tulet työskentelemään sen kanssa luodessasi omia mukautettuja ohjaimia.
- QuartzCore sisältää ”CoreAnimationin”, kirjaston, joka tarjoaa hienostuneen, mutta helpon pääsyn animaatioiden lisäämiseen sovelluksiisi – välttämätön kaikissa nykyaikaisissa iOS- ja Mac-sovelluksissa.
- GLKit mahdollistaa OpenGL-pohjaisten elementtien lisäämisen UIKit/AppKit-sovelluksiisi, kun taas alemman tason OpenGL- (macOS) ja OpenGLES-kehykset (iOS ja tvOS) antavat täyden pääsyn raakoihin OpenGL-API:hin.
-
rtl.fx
on vielä perustavanlaatuisempi kuin Foundation-kehys, ja se sisältää kaikki matalan tason C-tyyliset API:t, jotka muodostavat macOS:n, iOS:n, watchOS:n ja tvOS:n UNIX-järjestelmän ytimen; se sisältää myös kirjastoja, kuten Grand Central Dispatch ja CommonCrypto. Pohjimmiltaan rtl.fx edustaa suurinta osaa/usr/include
:n otsikoista. -
libToffee.fx
sisältää aputyyppejä, jotka ovat elintärkeitä itse Elements-kääntäjälle. Se sisältää esimerkiksi sisäisen tuen Future Types -tyypeille, yleisetNSArray<T>
– jaNSDictionary<T>
-tyypit, LINQ-tuen ja paljon muuta. -
libSwift.fx
tarjoaa Swift-kielelle ominaisia lisätyyppejä ja -funktioita.
(kaikki jaettu kaikkien alustojen kesken) ja paljon muuta.
Alemman tason kehykset
Jos haluat mennä käyttöliittymäkehityksessäsi pidemmälle kuin vain AppKit/UIKit, molemmat SDK:t tarjoavat myös kehyksiä, joiden avulla voit sotkea käsiäsi ja työskennellä käyttöliittymän kanssa alemmilla tasoilla.
rtl.fx, libToffee.fx, libSwift.fx
SDK:n ydinkehysten lisäksi Elements tarjoaa kolme muuta .fx
tiedostoa, jotka ovat ratkaisevia sen toiminnan kannalta.
Kaikki Cocoa-sovellukset viittaavat automaattisesti rtl.fx
:iin, riippumatta siitä, luetellaanko se eksplisiittisesti viittauksissa vai ei. Viittaukset libToffee.fx
:een ja libSwift.fx
:een ovat valinnaisia; kääntäjä varoittaa/virheellistää, jos käytetään ominaisuuksia, jotka vaativat viittauksen libToffee.fx
:een tai libSwift.fx
:een, eikä niihin ole viitattu.