I tillegg til å ha utviklings- og feilrettinger, må iOS-utviklere holde tabs på det som annonseres årlig på WWDC. Midt i de bemerkelsesverdige nye SDKene annonsert, er det noen endringer som iOS-devs må rulle ut for å holde deres apps plattformskompatible.
Med Swift å ha utviklet seg til versjon 4, sammen med forbedringer og endringer som kommer til iOS SDK selv, må utviklerne sile gjennom endringene og utarbeide en strategi for å oppdatere sine kodebaser. Alt uten å bryte noen av deres eksisterende funksjoner og funksjoner! Alt kommer ned til prioritering for prosjektet ditt: Hva er det minste du trenger å gjøre for å gjøre appen din iOS 11-kompatibel? Hva er det enkleste tilfellet du kan gjøre til prosjektets interessent eller prosjektleder?
Vital funksjoner kommer først, og deretter kommer det bra å ha, men ikke nødvendige forbedringer som iOS 11 bringer, fra optimalisering av søknaden din til den visuelle estetikken som vil ytterligere berike samspillet og funksjonaliteten til appen din. Med denne tanken vil denne veiledningen veilede deg gjennom trinnene å ta for å oppgradere appen din, ta en pragmatisk tilnærming til nødvendige og valgfrie forbedringer.
Denne artikkelen gir deg en oversikt over endringene som kreves for å oppdatere appen din for iOS 11, fra arkitektoniske til visuelle endringer, samt endringer i App Store-publisering. Videre vil denne opplæringen organisere seksjonene fra de nødvendige endringene som trengs, og omfanget og innsatsen som kreves, til de fine, men ikke nødvendige funksjonene som vil forbedre appen din som følge av iOS 11.
I denne opplæringen vil vi dekke følgende:
Denne opplæringen antar en mellomkunnskap om Swift eller Objective-C og Xcode, samt kjennskap til kjernens iOS SDK (for eksempel UIKit og Core Foundation).
Som med hver iterasjon av IOS, er de viktigste endringene vanligvis de arkitektoniske. Med iOS 11 involverer dette migrering til Swift 4, så oppdateringen av bygginnstillingene for Xcode 9 vil være den første oppgaven vi ser på.
Viktig | Må
For de som måtte migrere fra Swift 2 til 3 i fjor, var prosessen ekstremt smertefull, og mange endringer brøt den eksisterende kodebasen. Heldigvis er dette ikke tilfelle flyttet fra Swift 3.2 til 4, da de fleste sjansene er ansett som additiv, i stedet for depresjon, og som et resultat gjør Xcode 9-migreringsverktøyet en beundringsverdig jobb med å overføre koden til den nyeste Swift.
Dessuten, i motsetning til tidligere versjoner, vil du ikke bli tvunget til å gjøre oppgraderingen til 4 på en gang. Det vil si at Xcode-prosjekter samtidig støtter både Swift 4 og Swift 3.2, noe som betyr at du kan ha ett mål i prosjektkompilasjonen under Swift 3.2 og en annen kompilere i Swift 4. Migreringsverktøyet vil gi deg beskjed om hvilke klasser og funksjoner den har med suksess migrert , og hvilke som krever at manuelle inngrep skal løses, i form av feil eller advarsler.
Feilene betyr at du må fikse noe som ikke er bakoverkompatibelt, mens mange av advarslene vil indikere at det er en ny måte i Swift 4 å gjøre noe, for eksempel nye API-endringer. Løs feilene, og prioritere ovennevnte advarsler som en egen oppgave.
For å få tilgang til migreringsverktøyet, gå til Rediger> Konverter> Til Gjeldende Swift Syntax i Xcode, og følg instruksjonene, og velg målet / målene du vil migrere på dette stadiet.
Migreringsverktøyet vil gi deg beskjed om det minste arbeidet du trenger for å kompilere appen din, og det bør derfor ikke overraske at den anbefalte beste fremgangsmåten er å jobbe med å migrere appen fra 3 til 4 trinnvis, spesielt i store prosjekter, testing og konvertering av mål etter mål. Du trenger ikke å overføre alt på en gang, og du kan planlegge overføringsbanen din i trinn, hvor og når det er nødvendig.
Vi tar deretter en rask titt på hva endringene er i Swift 4 som ikke er obligatorisk å implementere, men godt å vite.
Viktig | Må
En annen stor endring i iOS 11 er at alle appene i App Store nå må være 64-bit, da 32-biters apps ikke lenger støttes, og faktisk fungerer ikke engang på enheter som kjører iOS 11. Dette bør ikke komme som en overraskelse da Apple har advart utviklere for en stund, men hvis appen din fortsatt ikke har gjort overgangen, kan du følge Apples retningslinjer for å konvertere appen til en 64-biters binær.
Ikke viktig | Valgfri
Utover det obligatoriske arbeidet som trengs for å få målet ditt til å bli Swift 4-kompatibelt, har du muligheten til å refactoring din eksisterende kode for å utnytte de nye Swift API-endringene, som brytes ned i henhold til følgende forbedringer på API-nivå:
String har fått mye oppmerksomhet i Swift 4, med den mest bemerkelsesverdige forandringen å være en reversering tilbake til Swift 1.0 hvor Strings igjen defineres som samlinger, slik at du kan iterere over et String-objekt karakter etter tegn (SE-0163) ved hjelp av en for sløyfe. Andre bemerkelsesverdige endringer i Strings klassen inkluderer:
unicodeScalars
eiendom til Karakter
Ordbøker og sett, som en del av samlinger, har også blitt omformet i Swift 4, som begynner med filtrering av ordbøker, som frem til nå har returnert en rekke tupler bestående av nøkkel / verdipar. For å få tilgang til et bestemt element, vil du bruke følgende abonnement, som i en matrise:
listOfCars [4] .Value
I Swift 4 får du en ordliste i stedet, og gir et mer konsistent syntaks, og du får tilgang til den returnerte ordlisten som du ville ha en vanlig ordbok. Det samme skjer nå for kart()
funksjon, hvor du også får tilbake en ordbok. Nytt til abonnement på ordbokstilgang, du kan angi en standardverdi hvis nøkkelen ikke eksisterer, slik at koden din blir sikrere.
la tomTheCat = dyr ["navn", standard: "id"]
Resten av endringene for samlinger inkluderer:
MutableCollection.swapAt (_: _ :)
Endelig er det noen forskjellige endringer som er verdt å merke seg som en del av denne utgivelsen angående språket:
Du finner den uttømmende listen over endringer og originale forslag på Swift.org.
IOS 11-brukere av App Store ville allerede ha lagt merke til at det er sportslig et helt nytt design med helt nye seksjoner, og gir utviklere nye måter de kan markedsføre sine apps på og kommunisere med sine brukere.
Vi starter med å se på det nye markedsføringsikonet som du nå må kreves for å laste opp med appoppdateringene dine.
Obligatorisk | Høyere prioritet
IOS 11, for nye innlegg, om appen din er ny eller en eksisterende, må du inkludere en icon-1024.png-et markedsføringsikon på 1024 x 1024 størrelse. Praktisk nok trenger du ikke å sende inn ikonet via iTunes Connect, men gjennom Xcode, byskal Images.xcassets og legge til riktig størrelse bildet, på samme måte som du administrerer dine andre ikoner:
Markedsikonet brukes som en del av den nye App Store-designprosessen, for å vise et større bildeikon som representerer appen din i delen Today eller andre deler der appgrafikken er forstørret.
Valgfritt | Lavere prioritet
Apple har gjort prosessen med kjøp i appen mer fremtredende og gjennomsiktig, slik at brukerne kan se alle innkjøpsalternativer for apper direkte på samme nivå som app-produktdisplayet, og faktisk selv starte et kjøp i appen for app mens du laster ned selve appen. Tenk på et abonnementsprogram der brukere som laster ned appen din allerede vil kjøpe abonnementet deres. iOS 11 gjør dette raskere og mer praktisk.
Fra iOS 11 er utviklere i stand til å markedsføre opptil 20 kjøp av apper, for eksempel abonnementer på produktens produktside. Disse kjøpsalternativene vises også i søkeresultatene.
Fremme kjøp av apper kan også oppmuntre nedlastinger av appen din. Når en bruker ikke har appen din installert, men ønsker å kjøpe et salgsfremmende kjøp i appen, får de en melding om å laste ned appen først. Når appen er lastet ned, fortsetter transaksjonen i appen. (Eple)
For å aktivere økt innsikt i kjøpforbedring i iTunes, må du inkludere følgende metadata i iTunes Connect:
Hvis du vil ha mer informasjon om å markedsføre ditt kjøp i app, kan du se Apples offisielle retningslinjer så vel som Apples Retningslinjer for produktsiden.
Valgfritt | Lavere prioritet
Noe som definitivt er for sent, og Android-utviklere har hatt glede av en stund, er muligheten til å svare direkte på brukerkommentarer. Som av iOS 11 kan utviklere nå også reagere direkte på brukerens vurderinger og kommentarer. Selv om dette ikke krever noen tekniske endringer og deltakelse, er valgfri, utviklere via iTunes Connect (app > Aktivitet > rangeringer) kan svare på ros og kritikk.
Individualiserte utviklerresponser kan utnyttes for å bygge sterkere og mer intime relasjoner, fremme dypere engasjement, ved å vise at tilbakemeldingene deres blir gjennomgått og reagert, og problemene de reist aktivt blir lyttet til. For å svare på kommentarer, gå ganske enkelt til iTunes Connect der du kan se tilbakemeldingen og svare hver for seg.
I tillegg til den nye utviklerens kommentarfunksjon har Apple også gitt en ny formalisert SDK for å be om at brukere vurderer og vurderer apper. Den nye SKStoreReviewController
bør brukes i stedet for noen tredjepart eller manuell oppfordring av brukere til vurderinger, fordi Apple vil at operativsystemet skal kunne kontrollere frekvensen av meldingene og deres visuelle utseende. Apple vil dermed begrense oppfordringer til ikke mer enn tre ganger i en 365-dagers periode.
Å implementere SKStoreReviewController
, bare importere StoreKit og ring requestReview ()
som vist under:
... import StoreKit ... SKStoreReviewController.requestReview () ...
Selv om Apple ikke har rett og slett forbudt de andre metodene for å spørre brukere om tilbakemelding, forvent det at dette endres i nær fremtid, så det er best at du begynner å tenke på å implementere Apples raskrevurderte motor i løpet av det neste året..
Se Apples retningslinjer, vurderinger og svar for mer informasjon.
Valgfritt | Lavere prioritet
En annen veldig nyttig funksjon iOS 11 bringer til utviklere er muligheten til å frigjøre sine apps til brukere trinnvis. Apple kaller denne faset slippe, og det er ment å redusere risikoen for overbelastning av produksjonsmiljøet samtidig, istedenfor å rulle ut oppdateringsoppdateringene over en syv-dagers periode.
Under Versjonsfrigivelse i iTunes Connect, heter det en ny seksjon Phased Release for automatiske oppdateringer, som gir deg muligheten til å enten slippe ut umiddelbart eller over syv dager. Utviklere kan også stoppe faseutrullingen i opptil 30 dager, noe som normalt vil skje hvis et stort problem oppdages og rapporteres..
Den fasede utrullingen hindrer ikke brukere i å få oppdateringen manuelt fra App Store, men rettere rettet mot brukere som bruker iOS automatisk nedlastingsinnstilling i App Store.
La oss deretter se på de visuelle endringene som ble introdusert som en del av IOS 11, da vi går gjennom de viktige så vel som de mindre viktige emnene.
Etter å ha sett på arkitektoniske samt appbutikkpubliseringer for iOS 11, er vi nå klare til å dissekere de visuelle endringene og hjelpe deg med å prioritere hvilke brukergrensesnittendringer som skal håndteres først.
Det er viktig at vi, selv om vi sikkert kan bygge våre iOS-apper uten å implementere noen av endringene i denne delen, bare adresserer de arkitektoniske og App Store-endringene, kan du først sørge for at appen din støtter den nye iPhone X visuelt. Dette betyr endringer i navigeringsstenger for å adressere den nye fysiske "hakk" øverst.
Med det i tankene vil vi se på å oppdatere brukergrensesnittet ditt til iPhone X først, etterfulgt av noen andre raske endringer som vil sikre at appen din vises moderne og oppdatert.
Obligatorisk | Høyere prioritet
En av de viktigste oppgavene for å oppdatere iOS-appen din, er å sikre at appen ser bra ut og fungerer fint på de nyere enhetene, mens du ikke bryter din forrige enhetsstøtte. Derfor har Apple jobbet veldig hardt for å gi utviklere verktøy som Auto Layout for å designe for skjerm-agnostiske oppsett, enten det er iPhone 4, 5C eller 6 og 6 Plus. Fra og med dette året har vi nå en telefon som ikke bare har nye dimensjoner, men har også en fysisk hakk øverst.
Legg merke til at vi ikke har rektangulær visningsport lenger, og hvordan anbefaler Apple at du håndterer det med det nye hakket på toppen for de fysiske sensorene? For en ting, vil Apple ikke ha deg til å plassere svarte barer øverst for å gjemme hakk! I stedet fortaler de for utviklere å omfavne det.
Ikke masker eller ring spesiell oppmerksomhet til viktige skjermfunksjoner. Forsøk ikke å skjule enhetens avrundede hjørner, sensorhus eller indikator for å få tilgang til startskjermbildet ved å plassere svarte barer øverst og nederst på skjermen. Ikke bruk visuelle utsmykninger som parenteser, beslag, former eller instruksjons tekst for å gi spesiell oppmerksomhet til disse områdene heller. (IOS Human Interface Guidelines)
Du må designe for fullskjerm-opplevelsen, slik at den nye enhetens firkantede design ikke brukes, mens du ikke skjuler deler av brukergrensesnittet ditt med enten avrundede hjørner eller sensorhus (hakk).
Den gode nyheten er Apples systemleverte UI-elementer fra UIKit som UINavigationBar
allerede konform og tilpasse seg de nye designkravene utenfor boksen. Men for alle egendefinerte brukergrensesnittelementer må du selv gjøre samsvarene.
Ser på bildene av iPhone 4.7 sammenlignet med den nye iPhone X ovenfor, vil du legge merke til hvordan statuslinjen nå er implementert annerledes, med utgangspunkt i høyden, som har vokst fra den historiske 20 pt til 44 pt på iPhone X.
Apple foreslår at apputviklere som har skjult sine statusfelt, bør revurdere den vedtaket i lys av iPhone X og bare skjule den i liggende modus, ikke portrettmodus.
Til slutt bruker du veiledningene for veiledning av områdeoppsett ved å utnytte automatiske oppsett som din primære tiltak for å sikre at appen din passer innenfor de riktige marginene, og garanterer ingen visuelle hindringer, for eksempel overlapping av statuslinjen eller navigasjonslinjen.
To gode ressurser som hjelper deg med å komme i gang med å designe for iPhone X, er følgende WWDC-videoer:
Valgfritt | Lavere prioritet
En av de mest snakket om nye SDKer på årets WWDC er dra og slipp. Dette er noe skrivebordsbrukere har vært vant til i svært lang tid, men fraværet i iOS-plattformen betydde at iPad og iPhone aldri har virkelig omfavnet multi-tasking. IOS 11, dette har endret seg, da den nye iOS vil støtte brukergrensesnittelementer som blir trukket ikke bare innenfor samme skjerm, men fra ett program til et annet.
Ved å trykke og holde på et bilde, en fil, en tekst eller et bestemt brukergrensesnittelement, kan du bruke iOS multi-touch-motor, og brukerne kan enkelt flytte innhold på en naturlig måte mellom apps på iPad (eller bare innenfor samme skjerm på iPhone) den. Dette er allerede integrert system-wide i iOS, slik at brukere for eksempel kan dra tekst fra Safari til dockingsprogrammets påminnelser-app for å opprette en ny påminnelsesvare.
Dette er ikke merket som obligatorisk for implementering, men fordi det raskt vil bli en forventet oppførsel på grunn av dens prevalens hele systemet, foreslås det at du prøver å prioritere dette før, snarere enn senere, slik at du kan lage appens UX i samsvar med den nye standardsystemet UX-oppførsel.
UIKit kommer med noen nivå av dra og slipp støtte innebygd, for komponenter som UITables
og UICollectionViews
, men du må bygge bro og tilpasse elementene med kode slik at andre komponenter kan motta den slepede komponenten. Dette kan være litt involvert, og det er utenfor rammen av denne artikkelen, men jeg vil dekke dra og slipp støtte mer fullstendig i en oppfølgingspost neste uke.
For øyeblikket, vil du legge til og støtte dra og slipp i din ViewController
's viewDidLoad ()
metode, ved å implementere de to delegatene vist nedenfor:
klasse ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITableViewDropDelegate, UITableViewDragDelegate ... func viewDidLoad () ... firstTableView.dragDelegate = selv // Du knytter dradelegatet til denne tabellen secondTableView.dropDelegate = selv // Du knytter drop-delegatet til denne tabellen firstTableView.dropDelegate = self secondTableView.dragDelegate = self firstTableView.dragInteractionEnabled = true secondTableView.dragInteractionEnabled = true ... ... func tableView (_ tableView: UITableView, itemsForBeginning session: UIDragSession, på indexPath: IndexPath) -> [UIDragItem] // 1) Drag blir initiert func tableView (_ tableView: UITableView, performDropWith koordinator: UITableViewDropCoordinator) // (2) Drop blir initiert
Hold deg oppdatert for vår kommende artikkel om hvordan du legger til Dra og slipp-støtte til din iOS 11-app.
Valgfritt | Lavere prioritet
Til slutt, la oss ta en titt på de resterende UIKit endringene nye til iOS 11, begynner med UINavigationBar
, som har noen bemerkelsesverdige forbedringer, inkludert integrering av SearchViewController
og store titler. Vi tar en titt på forbedringene til UITableView
, fra de nye og forbedrede swipe-handlingene for å vise visning av celler automatisk selvstørrelsen.
Vi har allerede rørt på navigasjonsbjelker tidligere når vi diskuterer iPhone X og hvordan den justerer seg med de nye statuslinjens dimensjoner. I tillegg til den nye, moderne designstilen som foreslo for iOS, finnes det nye større titler i navigasjonsfelt, først sett i Apple Music App i iOS 10, og siden da et etablert designmønster på tvers av alle de andre systemappene i iOS.
Den større tittelteksten gir større vekt på konteksten på skjermen i en navigeringslinje, og hjelper orientere brukere til den aktive kategorien mens du navigerer gjennom de ulike kategoriene. Størrelsen på tittelteksten er ikke statisk, men krympes heller når brukeren ruller ned, går tilbake til pre-iOS 11-stilen. På den annen side, når du drar ned i en rullevisning, øker tittelteksten litt.
Bruk en stor tittel når du trenger å legge ekstra vekt på konteksten. I noen apper kan den store, dristige teksten til en stor tittel hjelpe orientere folk mens de surfer og søker. I en flatt layout kan for eksempel store titler bidra til å klargjøre den aktive kategorien og informere brukeren når de har rullet til toppen. Telefon bruker denne tilnærmingen, mens Musikk bruker store titler for å skille mellom innholdsområder som album, artister, spillelister og radio. En stor tittelovergang til en standard tittel når brukeren begynner å rulle innhold. Store titler gir ikke mening i alle apper og bør aldri konkurrere med innhold. Selv om Klokke-appen har en fanebladoppsett, er store titler unødvendige fordi hver kategori har et tydelig, gjenkjennelig layout. (IOS Human Interface Guidelines))
Som utvikler er det opp til deg å avgjøre om og når du skal implementere den store tekststilen, basert på Apples retningslinjer for menneskelig grensesnitt, og Apple anbefaler at du bare bruker de store teksttitlene kun for toppnavigasjonsskjermbildene fremfor alle nivåer. For å aktivere stor tekst, legg ganske enkelt til følgende eiendom til din UINavigationController
:
navigationController? .navigationBar.prefersLargeTitles = true
Hierarkisk vil både master- og detaljvisningskontrollene under navigeringslinjen ha den store tekstmodusen som aktivert som standard på grunn av foreldrearven, og som nevnt, er det tilrådelig å bare ha toppnavigasjonsskjermbildene implementere stor tekstmodus. For å undertrykke den store tekstarvenningen i detaljskjermbildet, gå til visningskontrollen din og legg til følgende til sin initialiserer (den må settes på initialiseringstidspunktet):
kreves init? (koder aDecoder: NSCoder) super.init (koder: aDecoder) navigationItem.largeTitleDisplayMode = .never
De largeTitleDisplayMode
ovenfor er satt til .aldri
. Uten den linjen er standardverdien .Automatisk
, som er hvor detaljvisningskontrollen arver egenskapene til sin overordnede visningskontroller.
Søk kan nå integreres direkte i navigasjonsfeltene uten å måtte knytte UISearchViewController
forekomst med motivvisningskontrollen (og dens tabelloverskriftsvisning) separat. Fra iOS 11 kan du enkelt legge inn søylinjen i navigeringsfeltet:
navigationItem.searchController = UISearchController (searchResultsController: null)
Du må også overholde UISearchResultsUpdating
å reagere på søkeord, selvfølgelig. Mens iOS automatisk skjuler søkefeltet basert på antall rader i tabellvisningen, kan du tvinge søkefeltet til å være synlig til enhver tid ved å bytte:
navigationItem.hidesSearchBarWhenScrolling = false
Til slutt ser vi på to nye og fremtredende funksjoner introdusert til UITableViews
som av iOS 11: selvstørrelser og forbedrede sveipehandlinger. Selvklebende ble introdusert vei tilbake i iOS 8 for å lette byrden av utviklere som må manuelt formatere tabellvisning celler, med muligheten til å dynamisk størrelse cellene for å passe innholdet i raden ved hjelp av Auto Layout. Inntil nå måtte du eksplisitt be om automatisk liming ved hjelp av:
tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 100
Som i iOS 11 er den på og sett som standard uten ekstra kode, men du har fortsatt muligheten til å spesifisere din egen radhøyde eksplisitt, etter behov. iOS 11 har også ført til nye ledende og etterfølgende sveipehandlinger, utbredt i mange systemapper som Apples egen Mail app.
I tillegg til at du kan sveipe enten venstre eller høyre, kan du også legge ved bilder for å knytte til disse handlingene. Du implementerer to delegerte metoder som en del av UIContextualAction
, for ledende og etterfølgende sveipehandlinger:
overstyr func tableView (_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? let søppel = UIContextualAction (stil: .normal, tittel: "Slett") action, view, completionHandler i print ("Slett") completionHandler (true) delete.backgroundColor = UIColor.red delete.image = UIImage "delete") la actionGroup = UISwipeActionsConfiguration (handlinger: [delete]) actionGroup.performsFirstActionWithFullSwipe = falsk tilbakevendingsgruppe ... overstyre func tableView (_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? let archive = UIContextualAction (stil: .normal, tittel: "Arkiv") action, view, completionHandler i print ("Read") completionHandler (true) archive.backgroundColor = blue archive.image = UIImage (kalt: "arkiv "flytte" = UIContextualAction (stil: .normal, tittel: "Flytt") action, view, completionHandler in print ("Flytt") completionHandler (true) move.backgroundColor = lilla move.image = UIImage flytte ") la actionGroup = UISwipeActionsConfiguration (handlinger: [arkiv, flytt]) actionGroup.performsFirstActionWithFullSwipe = falsk tilbakevendingsgruppeGruppe
Ved hjelp av koden ovenfor kan du opprette mer enn en kontekstuell handling og legge den til i UISwipeActionsConfiguration
gruppering av forekomst, for mer enn én handling. Dette er en enkel, men engasjerende forbedring som gir større fleksibilitet til tabellvisningen, med minimal kodeendring, og selv om det ikke er obligatorisk, er det verdt å tildele noen timer til det i din sprintplank.
I dette innlegget har jeg gitt deg en oversikt over endringene på tvers av arkitekturen, App Store og visuelle komponenter i IOS 11, og gir deg en ide om hva du må handle umiddelbart, og hva som kan bli utsatt til en senere tid. Overføring til iOS 11 og Swift 4 vil være mye enklere enn det var i tidligere års oppdateringer.
Utover de overhengende endringene som må gjøres, har vi også gått gjennom Swift 4 endringene som forbedrer strenge og samlinger, samt de visuelle forbedringene til UITableView
og Search Controller. Dette bør gjøre det enklere for deg å planlegge arbeidet ditt for å gjøre oppdateringer til appen din!
Hold deg oppdatert for mitt kommende innlegg ved å implementere dra og slipp for iOS 11-appene dine, og i mellomtiden, sjekk ut noen av våre andre innlegg på nye endringer i iOS og Swift!