I den här artikeln skulle jag vilja prata om iOS 10 och vad du behöver göra för att förbereda dina appar för iOS 10.
Som med alla stora utgåvor introducerar iOS 10 en rad förändringar och förbättringar. Några krävs, andra rekommenderas, och det finns också några ändringar som kan förbättra användarens användarupplevelse. Låt oss börja med en översikt över vad som krävs om du bygger din ansökan mot iOS 10 SDK.
Den viktigaste förändringen är inte strikt relaterad till iOS 10, men det är viktigt att jag vill diskutera det först. Även om App Transport Security (ATS) har funnits sedan iOS 9 har det alltid varit lätt att välja bort ATS genom att lägga till följande kod i ditt mål Info.plist.
NSAppTransportSecurity NSAllowsArbitraryLoads
Men det är på väg att förändras. Den 1 januari 2017 måste alla ansökningar som skickas till App Store, inklusive uppdateringar av befintliga applikationer, följa ATS-riktlinjerna. Det innebär att din ansökan krävs för att säkert kunna kommunicera med webbtjänster via HTTPS.
Om du läser min detaljerade diskussion om App Transport Security, kan du komma ihåg att App Transport Security definierar en uppsättning regler. Servrarna som din ansökan kommunicerar med måste följa dessa regler. Med andra ord gör det inte tillräckligt med nätverksförfrågningar via HTTPS. Varje server som din ansökan pratar med måste säkras av och överensstämma med moderna säkerhetsstandarder.
Du kan fortfarande definiera undantagsdomen i målets Info.plist, men det är inte längre tillåtet att välja bort App Transport Security helt och hållet.
Jag har nyligen stött på ett problem relaterat till App Transport Security. Applikationen hos en klient som behövs för att kommunicera med andra enheter på samma nätverk. Den pratar med andra enheter som använder sin IP-adress, som inte stöds av undantagsdomen för App Transport Security. Och för att göra sakerna ännu mer komplicerade, är en IP-adress inte fixad. Det kan och kommer att förändras över tiden.
Lyckligtvis, från iOS 10, är det möjligt att lösa problemet genom att lägga till ett extra nyckelvärdespar till NSAppTransportSecurity
ordboken i målets Info.plist. Genom att ange värdet av NSAllowsLocalNetworking
till JA
, Det är möjligt att inaktivera App Transport Security för lokal nätverkstrafik.
Om du har kämpat med App Transport Security tidigare rekommenderar jag att du kolla på den uppdaterade App Transport Security-dokumentationen. Apple har lagt till några ytterligare nycklar som gör att man arbetar med ATS mindre av huvudvärk.
Till exempel laddar många applikationer innehåll från webben i en webbvy. Din ansökan vet ofta inte vilka webbplatser användaren ska besöka, vilket gör det omöjligt att definiera undantagsdomäner för App Transport Security i målets Info.plist. Från och med iOS 10 kan du inaktivera App Transport Security för webbvyer genom att ställa in NSAllowsArbitraryLoadsInWebContent
till JA
i målets Info.plist.
Vad du behöver komma ihåg är att App Transport Security krävs för varje applikation som skickas till App Store efter den 31 december. Att välja bort App Transport Security är inte längre möjligt. Observera att App Store-översynsteamet kräver en förklaring från dig om du delvis väljer bort App Transport Security med ett undantag, till exempel NSAllowsLocalNetworking
eller NSAllowsArbitraryLoadsInWebContent
. Du kan läsa mer om detta i Apples dokumentation.
Apple fortsätter att investera i att skydda privatlivet hos sina kunder, och det engagemanget har också konsekvenser för utvecklare. Vad betyder det för dig?
Om din applikation får tillgång till en systemtjänst eller enhetsfunktion som kräver användarens uttryckliga tillstånd, ser användaren en systemvarning där ansökan begär användarens tillstånd. Innehållet i den varningen tillhandahölls av operativsystemet om din ansökan inte angav en. Detta har ändrats i IOS 10.
När det gäller iOS 10 måste din applikation berätta för användaren varför den behöver tillgång till en viss systemtjänst eller enhetsfunktion. Du gör det genom att lägga till en nyckel till målets Info.plist. Om din ansökan är lokaliserad, ska du också tillhandahålla en översättning för beskrivningen i InfoPlist.strings fil.
Här är en komplett lista över sekretessnycklarna som finns i iOS 10. De flesta av dem ska se bekanta, men vissa är nya i IOS 10, till exempel NSSiriUsageDescription
och NSAppleMusicUsageDescription
.
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSLocationUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSVoIPUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSHomeKitUsageDescription
NSAppleMusicUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSpeechRecognitionUsageDescription
NSSiriUsageDescription
NSVideoSubscriberAccountUsageDescription
Om du inte lägger till en användningsbeskrivning för systemtjänsterna och enhetens funktioner som din applikation använder, visas en varning i konsolen och systemvarningen som frågar användaren om tillstånd visas inte för användaren. Till följd av detta nekas din ansökan till den särskilda tjänsten eller förmågan.
"Den här appen har försökt få åtkomst till sekretesskänsliga data utan en användningsbeskrivning. Appens Info.plist måste innehålla en NSLocationAlwaysUsageDescription-nyckel med ett strängvärde som förklarar användaren hur appen använder dessa data."
Det är självklart att App Store-översynsteamet avvisar alla program som bryter mot denna policy. Faktum är att byggnader som laddas upp till App Store, som inte följer denna policy, avvisas automatiskt.
Om du använder ett tredje parts bibliotek eller ram i din ansökan, se till att rätt användningsbeskrivningar läggs till i målets Info.plist. Bibliotek och ramverk för annonser kräver ofta flera behörigheter som du inte kan förvänta dig eller vet om.
Om du öppnar ett befintligt projekt för första gången i Xcode 8 och det innehåller Swift, blir du ombedd att migrera till Swift 3. Om du inte känner dig helt redo ändå frågar Xcode dig om att migrera till Swift 2.3 istället. Du måste välja den ena eller den andra eftersom Xcode 8 endast stöder dessa versioner av Swift-språket. Swift 2.2.1 och Swift 2.3 är mycket lika. Den viktigaste skillnaden är att Swift 2.3 är kompatibel med iOS 10, tvOS 10, watchOS 3 och macOS 10.12.
Ska du migrera till Swift 3 idag? Antagligen inte. Men vänta inte för länge. Vid något tillfälle kommer Apple att kräva att utvecklare skickar in ansökningar med Xcode 8, som inte stöder Swift 2.2.1. Du kan hålla fast vid Swift 2.3, men varför skulle du inte bara göra hoppet?
Det är sant att migrera ett projekt till Swift 3 har en dramatisk inverkan på ditt projekts kodbas. Nästan varje rad kod ändras på något sätt. API-ändringarna är väsentliga. Men uppåtsidan är att du får använda Swift 3. Jag har använt Swift 3 i flera månader, och jag älskar det. Det är en stor förbättring jämfört med Swift 2.2.1 och Swift 2.3.
Om du arbetar på ett stort projekt för en klient, se till att du noggrant planerar migreringen till Swift 3. För komplexa projekt kan migreringen ta flera dagar. Fördelarna är att du kan börja använda Swift 3 API, och du kan också dra nytta av den förbättrade Swift 3-kompilatorn som drivs av LLVM och Clang.
Med varje större release av iOS förbättrar Apple plattformen genom att lägga till och ta bort API: er. Flera ramverk har fått en signifikant uppdatering, och företaget introducerade också flera nya ramar.
Varför är det viktigt? Om du vill sticka ut i App Store, betalar det sig för att hålla dina program uppdaterade och lägga till stöd för nya funktioner på plattformen. Det är det här avsnittet handlar om.
De UILocalNotification
klassen avlägsnas från iOS 10. Vad betyder detta för dig? Du kan fortfarande använda UILocalNotification
att schemalägga och hantera lokala meddelanden, men det kommer förmodligen att gå iväg vid någon tidpunkt. Men varför har Apple beslutat att deprecera UILocalNotification
? Det fungerade bra, rätt?
IOS 10 introducerade Apple Användaranmälningar ramverk. Som namnet antyder är ramverket ansvarigt för schemaläggning, hantering och hantering av meddelanden, lokalt och avlägset. Det är det som gör ramverket bra. Din ansökan behöver inte längre skilja mellan lokala och fjärranslutna meddelanden. Användarmeddelandena innehåller ett enhetligt API för hantering av lokala och fjärranslutna meddelanden.
API ser ut och känns väldigt trevligt. Ramverket behandlar lokala och fjärranslutna meddelanden samma från utvecklarens perspektiv, vilket gör att anmälningsåtgärder är enkla och transparenta. Hanteringsanmälningsåtgärder är centraliserade i ett koncistent delegatprotokoll.
Vi har några handledningar om användarmeddelandena här på Envato Tuts+!
Du kanske också är intresserad av mina senaste blogginlägg om schemaläggning av lokala anmälningar och anmälningsåtgärder med användarmeddelanden.
Ett av de större meddelandena under årets WWDC var möjligheten att integrera din ansökan med Siri via SiriKit. Även om alternativen är begränsade för tillfället, om din ansökan passar in i en av de kategorier som stöds, är det ett bra sätt att ställa in din ansökan bortsett från tävlingen. Siri stöder för närvarande ett begränsat antal domäner, inklusive VoIP-samtal, meddelanden och träningspass.
Du integrerar med Siri genom att lägga till en förlängning till din ansökan. Varje applikation som integrerar med Siri behöver lägga till en intents förlängning. Det låter din ansökan utföra en uppgift som svar på information Siri skickar till din ansökan. Du kan eventuellt skapa en Intents UI-förlängning för att anpassa utseendet på det resulterande användargränssnittet som presenteras för användaren efter att uppgiften är klar.
Den helt nya haptiska motorn i iPhone 7 och iPhone 7 Plus har öppnat många nya möjligheter för utvecklare. I IOS 10 är det möjligt att använda enhetens haptiska motor för att ge användaren taktil återkoppling när de utför en specifik åtgärd eller en viss händelse inträffar.
Din ansökan kan driva den haptiska motorn genom UIFeedbackGenerator
klass och dess tre konkreta underklasser:
UIImpactFeedbackGenerator
UINotificationFeedbackGenerator
UISelectionFeedbackGenerator
Varje UIFeedbackGenerator
Underklassen är utformad för ett visst scenario. Om du lägger till stöd för hapticmotorn kommer du säkert att förvåna användarna av din ansökan. Ge det ett försök.
Core Data är förmodligen min favoritkakaoram och Apple har gjort det ännu mer jättebra på IOS 10 och med utgåvan av Swift 3. Det här är den största uppdateringen som ramverket har sett de senaste åren.
Swift 3 och Xcode 8 sammanfogar för att göra Core Data lättare att använda än någonsin tidigare. Apple introducerade också NSPersistentContainer
klass, som gör att man installerar och hanterar en Core Data-stack en bris.
Företaget uppgraderade till och med ramarna av ramverket genom att ompröva samspelet mellan ramarna med SQLite. Resultaten är verkligen fantastiska. Det är fantastiskt att Apple fortsätter investera i Core Data, mer än tio år efter introduktionen av MacOS Tiger.
För mer information om Core Data, kolla in några av våra andra kurser och handledning här på Envato Tuts+.
Om du bygger din ansökan mot iOS 10 SDK, vilket innebär att du använder Xcode 8, måste du se till att du följer App Transport Security och de sekretessbestämmelser Apple har infört. Se till att du markerar dessa rutor först.
Även om andra förbättringar och förbättringar är frivilliga uppmanar jag dig att ta en titt på dem. Till exempel, vänta inte för länge att migrera till Swift 3. Du kan överraska dina användare genom att lägga till stöd för hapticmotorn. Det är valfritt, men det är en möjlighet att stå ut i dagens trånga App Store.
För mer information om Swift 3 eller iOS 10, kolla in några av våra andra kurser och handledning.