Swift on Applen moderni ohjelmointikieli.

Ohjelmointikielet Suomen mobiilikehityksessä 2020 – Osa #3: iOS Swift & Objective-C

Kahdessa edellisessä osassa käsiteltiin molempia Android™-natiivisovelluskehityksen pääohjelmointikieliä: Kotlinia™ ja Javaa™. Tässä vaiheessa julkaisusarjaa hypätään sen toisen suuren mobiilialustan puolelle ja tutkitaan mitä sen natiivikielille kuuluu. Aiheina siis tällä kertaa ovat iOS Swift® sekä Objective-C®.

Korkealla tasolla ohjelmointikielitilanne ja -trendi on iOS-puolella hyvin samankaltainen kuin Androidilla. Aivan alusta saakka sovelluskehityksen kulmakivenä toimineen, vanhan kehäketun niskaan on päässyt hiipimään nuorempi ja edistyneempi kilpakumppani. iOS-maailmassa ero näiden kahden välillä on huomattavasti Android-maailmaa suurempi. Tässä osassa paneudutaan tarkemmin näistä tuoreemman vaihtoehdon, Swiftin nykytilanteeseen. Lopuksi luodaan silmäys Apple-sovelluskehityksen konkariin, Objective-C:hen.

Swift on moderni natiiviohjelmointikieli sovelluskehitykseen Applen tuotteille. Modernilla tarkoitetaan tässä yhteydessä työvälineitä ja ominaisuuksia, jotka auttavat sovelluskehityksessä. Moderneilla välineillä pyritään helpottamaan aiempaa tehokkaampien, vakaampien ja turvallisempien sovellusten kehittämistä. Ominaisuustasolla puhutaan esimerkiksi automaattisesta muistinhallinnasta, turvallisesta tyypityksestä ja uudesta ohjelmointiparadigmasta nimeltä protokollaorientoitunut ohjelmointi.

Huolimatta siitä, että Apple tunnetaan useista Apple-spesifisistä, suljetuista ratkaisuista, Swiftin kehitys on avointa. Kuka tahansa voi seurata kielen teknistä edistymistä yhteisön sivulta ja GitHubista. Yhteisön sivuston luonti tapahtui joulukuussa 2015 julkistetun Open Source -toimenpiteen yhteydessä. Swiftin 1.0-versio julkistettiin reilu vuosi aiemmin, syyskuussa 2014.

Tätä kirjoitettaessa uusin versio on 5.2. Uusia 5.x.x-versioita julkaistiin vuonna 2019 kahdeksan kappaletta, alkaen versiosta 5.0 maaliskuun 2019 lopussa. Tämän vuoden aikana uusia versioita on tullut jo kuusi. Swift 5.3:n julkaisu on aivan nurkan takana. Kielen nopea kehittyminen edellisen viiden vuoden aikana ei ole ollut sovelluskehittäjien näkökulmasta pelkästään hyvä asia. Eri pääversioiden kesken nimittäin löytyy eroavaisuuksia ohjelmointirajapintojen toiminnan suhteen. Esimerkiksi niinkin perustason toiminnallisuus kuin merkkijonojen käsittely on erinomainen esimerkki mainituista eroista.

Vaikka kyseessä on läheisesti juurikin Applen tuotteisiin liittyvä ohjelmointikieli, kieltä luonnehditaan dokumentaatiossa yleisohjelmointikieleksi (“general-purpose programming language”). Swiftin käyttö ei rajoitu pelkästään mobiililaitteisiin saati Applen tuotteisiin. Swiftin palvelinpäänkäytön tueksi on perustettu oma ohjausryhmänsäkin nimeltä Swift Server Work Group (SSWG). Swiftillä on luotu pari suosittua Web-frameworkia, joista esimerkkinä mainittakoon Vapor

Valitettavasti Applen ulkopuolinen Swift-tuki ja erityisesti palvelinpään työ koki kolauksen viime vuoden lopulla IBM:n ilmoittaessa lopettavansa osallistumisensa Swift-kehitykseen vuonna 2020. IBM oli aktiivinen palvelinpään-Swift-tukija, oman, Kitura-nimisen Web-frameworkinsa kera. Kitura on yhä hengissä, vaikkakin Vapor lienee turvallisempi valinta, ainakin uusien ominaisuuksien puolesta.

Käytetyin Swift-sovelluskehitystyökalu on melkoisen todennäköisesti Applen oma Xcode. Edellä mainittuun palvelinpään kehitykseen liittyen, ns. “puhdas” Swift-sovelluskehitys onnistuu varsin mainiosti myös Linuxilla ja Microsoftin VSCodella.

iOS Objective-C

Objective-C on ohjelmointikieli, jolla on pitkä historia. Taustatarina on monipolvinen ja juontaa juurensa aina 80-luvulle saakka. Computer History Museum julkaisi vuonna 2017 kohtuullisen syväluotaavan Objective-C-historiikin Core-lehdessä, jonka voi lukea täältä. Kun tämän osan aluksi maalattiin kuva Objective-C:stä vanhempana työkaluna, herää kysymys, mitä sillä teknisessä mielessä oikein tarkoitetaan.

Kielen juuret ovat vanhassa C-ohjelmointikielessä. Karrikoiden, kuten nimestäkin voi päätellä, kyseessä on vanha kunnon C, johon on liitetty olio-ohjelmoinnin ominaisuuksia. Objective-C on C-kielen ylijoukko. Esimerkiksi syntaksi ja perustietotyypit ovat samat kuin C-kielessä. Lisätyt ominaisuudet mahdollistavat luokkien ja metodien tekemisen.

Objective-C:n dokumentaatio toteaa heti alkuun sen olevan pääasiallinen ohjelmointikieli OS X- ja iOS-sovelluskehityksessä. Pientä vinkkiä Objective-C:n nykytilasta saa siitä, että juurikin edellä mainitussa dokumentaatiossa viitataan järeämpään Applen käyttöjärjestelmään nimellä OS X. Mac OS X -käyttöjärjestelmän nimi nimittäin vaihtui macOS-muotoon jo vuonna 2016. 

Objective-C on ollut Swiftin ilmestymisen jälkeen hiljalleen matkaamassa kohti historiaa. Tätä nykyä Objective-C tulee vastaan lähinnä vanhan koodin hyödyntämisen kautta. Tyypillinen tapaus koskee projektia, joissa toiminnallisuuksia on pilkottu kirjastoihin. Vaikka sovellusta kehitettäisiinkin Swiftillä, on järkevää tai jopa pakko tukeutua jo käytännössä testattuihin kirjastoihin, vaikka ne olisikin toteutettu vanhalla kielellä.

Punoksen mielipide

Jos uuteen iOS-projektiin on valittu natiivilähestymistapa, tällä hetkellä ei käytännössä ole muita vaihtoehtoja kuin Swift. Swift on alati kehittyvänä kielenä pullollaan nykyaikaisia ratkaisuja, jotka edistävät tehokkaan ja virheettömän ohjelmakoodin luomista. 

Aina vedenpitävänä perusteluna iOS-natiivisovelluksen tekemiseen Swiftillä toimii sama kuin natiivisovelluksiin ylipäänsä: ensiluokkainen käyttäjäkokemus. Mikäli organisaatiolla ei siis ole pakottavaa tarvetta pyrkiä minimoimaan sovelluskehityksen kustannuksia tiiviin React Native -sovelluskehitystiimin kautta, kannattaa valita natiivikieli, joka tulee myös takuulla tukemaan aina uusimpia teknisiä ominaisuuksia.

Jos mietitään ylläpito- tai jatkokehitysvaiheen teknologiavalintaa, tilanne on Android-maailmaan verrattuna samankaltainen, mutta hieman kärjistyneempi. Aiemmassa osassa käsitelty Java Android-alustalla on matkalla auringonlaskuun, mutta se on kaikesta huolimatta yhä toimiva ja tuettu kieli. Kun analysoidaan iOS:n vaihtoehdoista Objective-C:n asemaa Swiftiin verrattuna, ensiksi mainittu on ohjelmointikielenä auttamattomasti vanhentunut Swiftin nykyaikaisiin ominaisuuksiin verrattuna. Mikäli tavoitteena on päivittää tai laajentaa Objective-C-sovellusta, se melkoisella varmuudella kannattaa tehdä Swiftillä.

Kielen pitkän käyttöhistorian vuoksi maailmassa on yhä lukuisia sovelluksia, jotka on toteutettu joko kokonaan tai osittain Objective-C:llä. Objective-C tulee varmasti olemaan seuranamme vielä pitkään.

Kotlin on Kotlin Foundationin tavaramerkki. Android on Google LLC:n tavaramerkki. Java on Oracle Corporationin rekisteröity tavaramerkki. Swift, Objective-C, OS X ja Xcode ovat Applen rekisteröityjä tavaramerkkejä. Linux on Linus Torvaldsin rekisteröity tavaramerkki.