objc.io

ennen iOS 7: ää kehittäjät olivat melko rajallisia siinä, mitä he pystyivät tekemään sovellustensa poistuessa etualalta. VOIP – ja sijaintiin perustuvien ominaisuuksien lisäksi ainoa tapa suorittaa koodia taustalla oli käyttää taustatehtäviä, jotka rajoittuivat muutamaksi minuutiksi. Jos halusit ladata suuren videon offline-katselua varten tai varmuuskopioida käyttäjän kuvat palvelimellesi, voit suorittaa vain osan työstä.

iOS 7 lisää kaksi uutta sovellusliittymää sovelluksen käyttöliittymän ja sisällön päivittämiseen taustalla. Ensimmäinen, Background Fetch, mahdollistaa uuden sisällön hakemisen verkosta säännöllisin väliajoin. Toinen, Remote Notifications, on uusi ominaisuus, joka hyödyntää Push Notifications ilmoittaa sovelluksen, kun tapahtuma on tapahtunut. Molemmat nämä uudet mekanismit auttavat sinua pitämään sovelluksen käyttöliittymän ajan tasalla, ja voi ajoittaa työtä uuden taustan siirto palvelu, jonka avulla voit suorittaa out-of-process verkon siirtoja (lataukset ja lisäykset).

Taustahakuilmoitukset ja Etäilmoitukset ovat yksinkertaisia sovelluksen delegointikoukkuja, joissa on 30 sekuntia aikaa seinäkellon suorittamiseen ennen kuin sovellus keskeytetään. Niitä ei ole tarkoitettu suorittimen intensiiviseen työhön tai pitkään käynnissä oleviin tehtäviin, vaan ne ovat jonottamiseen pitkäaikaisiin verkostoitumispyyntöihin, kuten suureen elokuvan lataukseen tai nopeiden sisältöpäivitysten suorittamiseen.

käyttäjän näkökulmasta ainoa ilmeinen muutos moniajoon on uusi app switcher, joka näyttää tilannekuvan kunkin sovelluksen käyttöliittymästä sellaisena kuin se oli, kun se lähti etualalta. Mutta on syy näyttää tilannekuvia – voit nyt päivittää sovelluksen tilannekuvan, kun olet suorittanut taustatyön, näyttää esikatselun uutta sisältöä. Sosiaalinen verkostoituminen, uutiset tai sääsovellukset voivat nyt näyttää uusimman sisällön ilman, että käyttäjän tarvitsee avata sovellusta. Katsotaan, miten tilannekuva päivitetään myöhemmin.

Background Fetch

Background Fetch on eräänlainen älykäs kyselymekanismi, joka toimii parhaiten sovelluksissa, joissa on usein sisältöpäivityksiä, kuten yhteisöpalveluissa, uutisissa tai sääsovelluksissa. Järjestelmä herättää sovelluksen käyttäjän käyttäytymisen perusteella ja pyrkii käynnistämään taustahakuja ennen kuin käyttäjä käynnistää sovelluksen. Esimerkiksi, jos käyttäjä käyttää sovellusta aina klo 13, järjestelmä oppii ja mukautuu, suorittamalla noudot ennen käyttöaikoja. Taustahakuja yhdistetään sovellusten välillä laitteen radion avulla akun käytön vähentämiseksi, ja jos ilmoitat, että uutta tietoa ei ollut saatavilla noudon aikana, iOS voi mukauttaa, käyttämällä näitä tietoja, jotta vältetään noutoja hiljaisina aikoina.

ensimmäinen vaihe taustan noudon käyttöönotossa on määrittää, että käytät ominaisuutta UIBackgroundModes – avaimessa info-plistissä. Helpoin tapa tehdä tämä on käyttää uusia ominaisuuksia-välilehteä Xcode 5: n projektieditorissa, joka sisältää taustatilat-osion moniajoasetusten helppoa konfigurointia varten.

Vaihtoehtoisesti voit muokata näppäintä manuaalisesti:

<key>UIBackgroundModes</key><array> <string>fetch</string></array>

Seuraava, kerro iOS kuinka usein haluat noutaa:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ ; return YES;}

oletusarvoinen noutoväli ei ole koskaan, joten sinun on asetettava aikaväli tai sovellusta ei koskaan kutsuta taustalla. Arvo UIApplicationBackgroundFetchIntervalMinimum pyytää järjestelmää hallitsemaan, kun sovellus herätetään, niin usein kuin mahdollista, mutta oma aikaväli kannattaa määrittää, jos se on tarpeetonta. Esimerkiksi sääsovellus saattaa päivittää ehtoja vain tunneittain. iOS odottaa ainakin määritellyn ajan välillä taustahakujen.

jos sovelluksesi sallii käyttäjän kirjautua ulos ja tiedät, ettei uusia tietoja tule, voit asettaa minimumBackgroundFetchInterval takaisin UIApplicationBackgroundFetchIntervalNever ollaksesi hyvä kansalainen ja säästääksesi resursseja.

viimeinen vaihe on toteuttaa seuraava menetelmä sovelluksessasi delegaatti:

- (void) application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ NSURLSessionConfiguration *sessionConfiguration = ; NSURLSession *session = ; NSURL *url = initWithString:@"http://yourserver.com/data.json"]; NSURLSessionDataTask *task = ; // Start the task ;}

tässä voi tehdä töitä, kun systeemi herättää. Muista, että sinulla on vain 30 sekuntia aikaa määrittää, onko uutta sisältöä saatavilla, käsitellä uutta sisältöä ja päivittää käyttöliittymäsi. Tämän pitäisi riittää tietojen hakemiseen verkosta ja muutaman näytekuvan hakemiseen käyttöliittymääsi, mutta ei paljon muuta. Kun verkkopyynnöt ovat valmiit ja käyttöliittymäsi on päivitetty, soita valmistumisen käsittelijälle.

täydennyskäsittelijä palvelee kahta tarkoitusta. Ensin järjestelmä mittaa prosessisi käyttämän tehon ja tallentaa, oliko uutta tietoa saatavilla ohittamasi UIBackgroundFetchResult – argumentin perusteella. Toiseksi, kun soitat valmistumisen käsittelijälle, otetaan kuvakaappaus käyttöliittymästä ja sovelluksen vaihtaja päivitetään. Käyttäjä näkee uuden sisällön, kun hän vaihtaa sovelluksia. Tämä täydennyskäsittelijän snapshotting-käyttäytyminen on yhteinen kaikille täydennyskäsittelijöille uusissa moniajoliittymissä.

reaalimaailman sovelluksessa kannattaa siirtää completionHandler sovelluksen osakomponentteihin ja soittaa sille, kun on käsitellyt tietoja ja päivittänyt käyttöliittymäänsä.

tässä vaiheessa saatat ihmetellä, miten iOS voi snapshot sovelluksen UI, kun se on käynnissä taustalla,ja miten sovelluksen elinkaari toimii Background Fetch. Jos sovelluksesi on tällä hetkellä keskeytettynä, järjestelmä herättää sen ennen soittoa application: performFetchWithCompletionHandler:. Jos sovellus ei ole käynnissä, järjestelmä käynnistää sen kutsuen tavallisia delegointimenetelmiä, mukaan lukien application: didFinishLaunchingWithOptions:. Voit ajatella sitä sovellus käynnissä täsmälleen samalla tavalla kuin jos käyttäjä oli käynnistänyt sen ponnahduslauta, paitsi UI on näkymätön, renderöity näytön ulkopuolella.

useimmissa tapauksissa suoritat saman työn sovelluksen käynnistyessä taustalla kuin etualalla, mutta voit havaita taustalaukaisut tarkastelemalla Uiapplicationin applicationState ominaisuutta:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ NSLog(@"Launched in background %d", UIApplicationStateBackground == application.applicationState); return YES;}

Testing Background Fetch

voit simuloida taustahakua kahdella tavalla. Helpoin tapa on ajaa sovellus Xcodesta ja napsauta simuloi Taustahakua Xcode-Vianetsintävalikon alla, Kun sovellus on käynnissä.

vaihtoehtoisesti voit muuttaa ohjelman avulla Xcode-sovelluksen toimintaa. Valitse Xcode-valikkokohteen alla Scheme ja hallitse sitten järjestelmiä. Täältä, muokata tai lisätä uuden järjestelmän ja tarkista käynnistää koska tausta nouda tapahtuma valintaruutu alla.

Etäilmoitusten

Etäilmoitusten avulla voit ilmoittaa sovelluksellesi tärkeistä tapahtumista. Saatat olla uusia pikaviestejä toimittaa, uutiset hälytykset lähettää, tai uusin episodi käyttäjän suosikki TV-ohjelma valmis häntä ladata offline-katseluun. Etäilmoitukset sopivat hyvin satunnaiseen, mutta välittömästi tärkeään sisältöön, jossa viive taustahakujen välillä ei välttämättä ole hyväksyttävää. Etäilmoitukset voivat olla myös paljon tehokkaampia kuin Taustahaku, sillä sovellus käynnistyy vain tarvittaessa.

Etäilmoitus on oikeastaan vain normaali Push-ilmoitus, jossa on content-available lippuasetelma. Saatat lähettää push-viestin, jossa ilmoitetaan käyttäjälle, että jotain on tapahtunut, kun päivität taustalla olevaa käyttöliittymää. Mutta Etäilmoitukset voivat olla myös äänettömiä, ei sisällä varoitusviestiä tai ääntä, joita käytetään vain sovelluksen käyttöliittymän päivittämiseen tai taustatyön käynnistämiseen. Voit sitten lähettää paikallisen ilmoituksen, kun olet lopettanut uuden sisällön lataamisen tai käsittelyn.

Hiljaiset push-ilmoitukset ovat nopeudeltaan rajoitettuja, joten älä pelkää lähettää niin paljon kuin sovelluksesi tarvitsee. iOS ja APNS-palvelimet ohjaavat, kuinka usein ne toimitetaan, etkä joudu vaikeuksiin liian monen lähettämisestä. Jos push-ilmoitukset ovat kuristettuja, ne saattavat viivästyä, kunnes laite lähettää seuraavan kerran keep-alive-paketin tai vastaanottaa uuden ilmoituksen.

lähettämällä Etäilmoituksia

lähettääksesi etäilmoituksen, aseta sisältö-saatavilla oleva lippu push-ilmoituksen hyötykuormaan. Content-available-lippu on sama avain, jota käytetään Lehtikojun sovellusten ilmoittamiseen, joten useimmat push-skriptit ja kirjastot tukevat jo etäilmoituksia. Kun lähetät Etäilmoituksen, saatat myös haluta sisällyttää joitakin tietoja ilmoituksen hyötykuormaan, jotta sovelluksesi voi viitata tapahtumaan. Tämä voi säästää muutamia verkostoitumispyyntöjä ja lisätä sovelluksen reagointikykyä.

suosittelen käyttämään Nomad CLI: n Houston-apuohjelmaa push-viestien lähettämiseen kehittäessäsi, mutta voit käyttää suosikkikirjastoasi tai komentosarjaasi.

Houstonin voi asentaa osaksi nomad-cli ruby-jalokiveä:

gem install nomad-cli

ja lähetä sitten ilmoitus nomadiin sisältyvällä APN-apuohjelmalla

# Send a Push Notification to your Deviceapn push <device token> -c /path/to/key-cert.pem -n -d content-id=42

tässä -n – lippu määrittää, että sisällöllisesti saatavilla oleva avain tulee sisällyttää, ja -d mahdollistaa omien tietoavainten lisäämisen hyötykuormaan.

tuloksena oleva ilmoitushyötykuorma näyttää tältä:

{ "aps" : { "content-available" : 1 }, "content-id" : 42}

iOS 7 lisää uuden sovelluksen delegointimenetelmä, jota kutsutaan, kun push-ilmoitus, jossa on sisältö-käytettävissä oleva avain, on vastaanotettu:

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ NSLog(@"Remote Notification userInfo is %@", userInfo); NSNumber *contentID = userInfo; // Do something with the content ID completionHandler(UIBackgroundFetchResultNewData);}

taas sovellus käynnistetään taustalle ja sille annetaan 30 sekuntia aikaa hakea uutta sisältöä ja päivittää käyttöliittymänsä, ennen kuin soitetaan täydennyskäsittelijälle. Voisimme suorittaa nopean verkko-pyynnön, kuten teimme Background Fetch-esimerkissä, mutta käytetään tehokasta uutta Taustasiirtopalvelua tiedustellaksemme suurta lataustehtävää ja nähdäksemme, miten voimme päivittää käyttöliittymämme, kun se on valmis.

NSURLSession and Background Transfer Service

vaikka NSURLSession on uusi luokka iOS 7: ssä, se viittaa myös uuteen teknologiaan säätiön verkottumisessa. NSURLConnection korvaajaksi tarkoitetut tutut käsitteet ja luokat, kuten NSURL, NSURLRequest ja NSURLResponse, ovat säilyneet. NSURLConnection: n korvaavan NSURLSessionTask: n kanssa tehdään verkkopyyntöjä ja käsitellään niiden vastauksia. Istuntotehtäviä on kolmenlaisia – data, download ja upload – joista jokainen lisää syntaktisen sokerin arvoon NSURLSessionTask, joten käytä käyttötapaukseesi sopivaa.

An NSURLSession koordinoi yhtä tai useampaa näistä NSURLSessionTasks ja käyttäytyy sen NSURLSessionConfiguration mukaan, jolla se on luotu. Voit luoda useita NSURLSessions ryhmittelyyn liittyviä tehtäviä samalla kokoonpanolla. Voit olla vuorovaikutuksessa Taustasiirtopalvelun kanssa luomalla istuntoasetukset käyttämällä . Taustaistuntoon lisätyt tehtävät suoritetaan ulkoisessa prosessissa ja niitä jatketaan, vaikka sovellus olisi keskeytetty, kaatunut tai kuollut.

NSURLSessionConfiguration voit asettaa HTTP-otsikoita, määrittää välimuistikäytännöt, rajoittaa matkapuhelinverkon käyttöä ja paljon muuta. Yksi vaihtoehto on discretionary – lippu, jonka avulla järjestelmä voi ajoittaa tehtävät optimaaliseen suoritukseen. Tämä tarkoittaa sitä, että siirrot menevät Wifi-yhteyden yli vain, kun laitteessa on riittävästi virtaa. Jos akku on vähissä tai käytettävissä on vain matkapuhelinyhteys, tehtävääsi ei suoriteta. discretionary – lipulla on vaikutusta vain, jos istunnon asetusobjekti on rakennettu kutsumalla backgroundSessionConfiguration: – menetelmää ja jos taustansiirto aloitetaan sovelluksesi ollessa etualalla. Jos siirto aloitetaan taustalta, siirto suoritetaan aina harkinnanvaraisesti.

nyt tiedämme hieman NSURLSession: stä ja siitä, miten taustaistunto toimii, palataan Etäilmoitusesimerkkiimme ja lisätään koodia tiedustellaksesi latausta taustasiirtopalvelussa. Kun lataus on valmis, ilmoitamme käyttäjälle, että tiedosto on käytettävissä.

NSURLSessionDownloadTask

ensinnäkin hoidetaan Etäilmoitus ja tiedustellaan NSURLSessionDownloadTask taustasiirtopalvelusta. backgroundURLSession: ssä luomme NURLSession: n, jossa on taustakokoonpano, ja lisäämme sovelluksen delegaatin istunnon delegaatiksi. Dokumentaatio neuvoo olemaan asentamatta useita istuntoja samalla tunnisteella, joten käytämme dispatch_once mahdollisten ongelmien välttämiseksi:

- (NSURLSession *)backgroundURLSession{ static NSURLSession *session = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSString *identifier = @"io.objc.backgroundTransferExample"; NSURLSessionConfiguration* sessionConfig = ; session = ]; }); return session;}- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ NSLog(@"Received remote notification with userInfo %@", userInfo); NSNumber *contentID = userInfo; NSString *downloadURLString = ]; NSURL* downloadURL = ; NSURLRequest *request = ; NSURLSessionDownloadTask *task = downloadTaskWithRequest:request]; task.taskDescription = ]; ; completionHandler(UIBackgroundFetchResultNewData);}

luomme lataustehtävän käyttäen NSURLSession – luokkamenetelmää ja määritämme sen pyynnön sekä annamme kuvauksen myöhempää käyttöä varten. Sinun täytyy muistaa soittaa aloittaaksesi tehtävän, sillä kaikki istuntotehtävät alkavat keskeytetyssä tilassa.

nyt on otettava käyttöön NSURLSessionDownloadDelegate – menetelmät, joilla saadaan soittopyyntöjä, kun lataus on valmis. Voit myös joutua ottamaan käyttöön NSURLSessionDelegate tai NSURLSessionTaskDelegate – menetelmiä, jos haluat käsitellä todennusta tai muita istunnon elinkaaren tapahtumia. Sinun pitäisi kuulla Applen asiakirjan elinkaari URL-istunnon mukautettuja valtuutettuja, mikä selittää koko elinkaaren kaikissa istunnossa tehtäviä.

mikään NSURLSessionDownloadDelegate delegointimenetelmistä ei ole vapaaehtoinen, joskin ainoa, jossa meidän on tässä esimerkissä ryhdyttävä toimiin, on . Kun tehtävä on latautunut, saat väliaikaisen URL-osoitteen levyllä olevaan tiedostoon. Sinun täytyy siirtää tai kopioida tiedosto sovelluksen tallennustilaa, koska se poistetaan väliaikaisesta tallennustilasta, kun palaat tämän delegoida menetelmä.

#Pragma Mark - NSURLSessionDownloadDelegate- (void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{ NSLog(@"downloadTask:%@ didFinishDownloadingToURL:%@", downloadTask.taskDescription, location); // Copy file to your app's storage with NSFileManager // ... // Notify your UI}- (void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{}- (void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{}

jos sovelluksesi on yhä käynnissä etualalla taustaistuntotehtävän päättyessä, yllä oleva koodi riittää. Useimmissa tapauksissa, kuitenkin, sovellus ei ole käynnissä, tai se keskeytetään taustalla. Näissä tapauksissa, sinun täytyy toteuttaa kaksi sovellus delegoi menetelmiä, jotta järjestelmä voi herättää hakemuksen. Toisin kuin aikaisemmat delegaatin soittopyynnöt, sovellusvaltuutettua kutsutaan kahdesti, koska istunto – ja tehtävävaltuutetut voivat saada useita viestejä. App delegoi-menetelmää application: handleEventsForBackgroundURLSession: kutsutaan ennen kuin näitä NSURLSession delegaatti-viestejä lähetetään, ja URLSessionDidFinishEventsForBackgroundURLSession kutsutaan jälkeenpäin. Edellisessä menetelmässä tallennetaan tausta completionHandler, ja jälkimmäisessä sitä kutsutaan käyttöliittymän päivittämiseksi:

- (void) application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler{ // You must re-establish a reference to the background session, // or NSURLSessionDownloadDelegate and NSURLSessionDelegate methods will not be called // as no delegate is attached to the session. See backgroundURLSession above. NSURLSession *backgroundSession = ; NSLog(@"Rejoining session with identifier %@ %@", identifier, backgroundSession); // Store the completion handler to update your UI after processing session events ;}- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session{ NSLog(@"Background URL session %@ finished events.\n", session); if (session.configuration.identifier) { // Call the handler we stored in -application:handleEventsForBackgroundURLSession: ; }}- (void)addCompletionHandler:(CompletionHandlerType)handler forSession:(NSString *)identifier{ if () { NSLog(@"Error: Got multiple handlers for a single session identifier. This should not happen.\n"); } ;}- (void)callCompletionHandlerForSession: (NSString *)identifier{ CompletionHandlerType handler = ; if (handler) { ; NSLog(@"Calling completion handler for session %@", identifier); handler(); }}

tämä kaksivaiheinen prosessi on tarpeen päivittää sovelluksen käyttöliittymä, Jos et ole jo etualalla, kun Tausta siirto päättyy. Lisäksi, Jos sovellus ei ole lainkaan käynnissä kun taustasiirto päättyy, iOS käynnistää sen taustalle, ja edeltävä sovellus ja istunnon delegointimenetelmät kutsutaan jälkeen application:didFinishLaunchingWithOptions:.

kokoonpano ja rajoitus

olemme lyhyesti käsitelleet taustasiirtojen voimaa, mutta kannattaa tutustua dokumentaatioon ja katsoa NSURLSessionConfiguration vaihtoehtoja, jotka parhaiten tukevat käyttötapaustasi. Esimerkiksi NSURLSessionTasks tukee resurssiaikoja NSURLSessionConfigurationn timeoutIntervalForResource kiinteistön kautta. Voit käyttää tätä määrittää, kuinka kauan haluat sallia siirron loppuun ennen luopumista kokonaan. Voit käyttää tätä, jos sisältösi on saatavilla vain rajoitetun ajan tai jos resurssin lataamisen tai lataamisen epäonnistuminen annetussa ajassa osoittaa, että käyttäjällä ei ole riittävää Wifi-kaistanleveyttä.

lataustehtävien lisäksi NSURLSession tukee täysin lataustehtäviä, joten voit ladata videon palvelimellesi taustalla ja vakuuttaa käyttäjällesi, ettei hänen tarvitse enää jättää sovellusta käyntiin, kuten iOS 6: ssa on saatettu tehdä. Mukava kosketus olisi asettaa sessionSendsLaunchEvents ominaisuus NSURLSessionConfiguration NO, jos sovellus ei tarvitse käynnistää taustalla, kun siirto on valmis. Järjestelmäresurssien tehokas käyttö pitää sekä iOS: n että käyttäjän tyytyväisenä.

lopuksi taustajaksojen käytössä on pari rajoitusta. Koska delegaattia tarvitaan, ei voi käyttää yksinkertaisia lohkopohjaisia takaisinsoittomenetelmiä NSURLSession. Sovelluksen käynnistäminen taustalle on suhteellisen kallista,joten HTTP-uudelleenohjaukset otetaan aina. Taustansiirtopalvelu tukee vain HTTP-ja HTTPS-protokollia, etkä voi käyttää mukautettuja protokollia. Järjestelmä optimoi siirrot käytettävissä olevien resurssien perusteella, etkä voi pakottaa siirtoa etenemään taustalla koko ajan.

huomaa myös, että NSURLSessionDataTasks ei tueta taustaistunnoissa lainkaan, ja sinun tulisi käyttää näitä tehtäviä vain lyhytaikaisiin, pieniin pyyntöihin, ei latauksiin tai latauksiin.

Yhteenveto

iOS 7: n tehokkaat uudet moniajo-ja verkkoliittymät avaavat koko joukon mahdollisuuksia sekä uusille että olemassa oleville sovelluksille. Harkitse sovelluksen käyttötapauksia, jotka voivat hyötyä prosessin ulkopuolisista verkkosiirroista ja tuoreista tiedoista, ja hyödynnä näitä fantastisia uusia sovellusliittymiä. Yleensä toteuta taustasiirrot ikään kuin sovelluksesi olisi käynnissä etualalla, tee asianmukaiset KÄYTTÖLIITTYMÄPÄIVITYKSET, ja suurin osa työstä on jo tehty puolestasi.

  • Käytä sopivaa uutta sovellusliittymää sovelluksesi sisältöön.

  • ole tehokas ja soita valmistumisen käsittelijöille mahdollisimman aikaisin.

  • Täydennyskäsittelijät päivittävät sovelluksen UI-tilannekuvan.

lisätietoja

  • WWDC 2013 istunto ”Mitä uutta Multitasking”

  • WWDC 2013-istunto ”Mitä uutta säätiön verkostoitumisessa”

  • URL Loading System Programming Guide

Vastaa

Sähköpostiosoitettasi ei julkaista.