Slipp en iOS-app på 125 timer


Published: 23.07.2020

Jeg gikk ut i pappaperm med min førstefødte den 18.03.2020, og fikk høre av flere at det ikke var noe poeng i å planlegge prosjekter i permen ettersom tiden ikke ville strekke til. Derfor la jeg ingen planer og tenkte at dagene ville gå med på lek og bleier. Det viser seg derimot at barn sover mye, og jeg ble fort utålmodig, så jeg bestemte meg for å bygge noe. Siden jeg er temmelig ubrukelig som håndverker falt valget på å bygge noe virtuelt - en iOS-app. Programmering har vært en stor del av jobben min de siste ti årene, men jeg har stort sett skrevet kode for å analysere data eller bygge prediktive modeller. Det å skrive et program som andre skal bruke var temmelig fremmed for meg.

Heldigvis kjenner jeg Jonas Waage – en vaskeekte programmerer og IT-konsulent som sa seg villig til å hjelpe til. De første seksti timene gikk med på å utvikle noe helt annet enn appen vi endte opp med. Følelsen av å bruke såpass med tid på noe som aldri blir fullført, men som leder til noe annet er meg kjent. Når jeg noen år tilbake prøvde meg som musikkprodusent, fant jeg fort ut at man aldri vet om arbeidet man legger inn fører noen vei. Man ender fort opp med å bruke dager og uker på en låt for så å slette alt. Er man heldig finner man et gullkorn i en elendig låt, som kanskje fører til en mindre elendig en. Det er ikke lett å bygge noe nytt, uansett hva det er.

Problemet var at den første ideen vår var for kompleks. For at den skulle kunne slippes måtte vi ha skrevet både en iOS, - og en Android-app, funnet en måte å håndtere autentisering på, samt skrive generell serverkode med databaser og det hele. Overraskende nok hadde vi en fungerende iOS-app, autentisering med Auth0 og det meste av serverkoden skrevet i løpet av de første seksti timene. Mens Jonas fokuserte på autentisering og serverkoden, jobbet jeg med iOS-appen. Det viser seg at Apple virkelig har tatt til seg filosofien «ship early, ship often», som førte til mye frustrasjon.

Prosessen for å lære et nytt programmeringsspråk er typisk at man googler etter eksempler på kode som gjør noenlunde det man har lyst å gjøre. Etter en del søking lærte jeg at Apple tilbyr flere språk og språkbiblioteker å utvikle apper med. Forresten, et språkbibliotek er kode skrevet av andre (her Apple) som utviklere bruker for å raskere kunne utvikle applikasjoner. Språkene man har å velge mellom er Objective-C og Swift, der Swift er det mest moderne og det enkleste å sette seg inn i. Objective-C er beryktet for å være særs innfløkt så valget falt lett på Swift. Valget av bibliotek var ikke like lett. SwiftUI er det nyeste biblioteket og er det Apple har lyst vi skal bruke. Nettsiden ser flott ut og man får inntrykk av at dette er et solid og ferdig produkt. Gitt hvor gjennomtenkt hardwaren til Apple er, ble jeg noe sjokkert av å lese dokumentasjonen til SwiftUI. Uten sider som stackoverflow og hackingwithswift kommer man ikke langt i SwiftUI verdenen. I tillegg til elendig dokumentasjon er funksjonaliteten i SwiftUI meget begrenset. Med en gang man har lyst å gjøre egne tilpasninger må man ty til UIKit. Appen vi endte opp med består derfor nesten utelukkende av UIKit funksjonalitet pakket inn i SwiftUI – dette er ikke pent. Apple kalte seg modig når de lanserte en Macbook pro uten USB, og det kan godt være at de er, men det er ikke modig å lansere et så uferdig produkt som SwiftUI.

Selv om SwiftUI er litt knotete synes jeg resten av prosessen med å slippe en app er fin. Xcode, som er gratisverktøyet Apple tilbyr for å skrive apper i, har blitt utviklet over lang tid, og er etter min mening temmelig elegant. Prosessen for å tilgjengeliggjøre apper i App Store byr ikke på store utfordringer, og det er akkurat App Store som er den største grunnen til å ville skrive en app for iOS. Mengden betalingsvillige mennesker man kan nå via App Store er enormt, samt at kvaliteten på apper er høyere enn i Android-verden grunnet Apple sine noe strenge kriterier for hvem som slippe til på App Store. Det siste punktet om kvalitet er min subjektive oppfatning og må tas med en klype salt. Man må riktignok betale rundt hundre USD i måneden for å få lov til å ha appene sine på App Store, men det er det verdt dersom det reduserer mengden søppel.

Så hva endte vi opp med å lage? Noe så useriøst som et verktøy for å velge navn på din nye baby – Babynavnvelgeren. Det finnes selvfølgelig mange apper som gjør noe tilsvarende, men faktisk ingen som er utelukkende rettet mot det norske markedet. Vår app inneholder kun navn som ifølge SSB er i bruk i Norge. Søket er lynraskt, man kan filtrere etter populæritet og første bokstav, man kan lage liste over favorittnavn, og trykker man på et navn så popper det opp et vindu med søkeresultater fra Wikipedia. En enkel sak egentlig, men overraskende nyttig for de som er interessert i slikt.

En av mine svakheter er at jeg er noe vinglete, altså at jeg gjerne begynner på litt for mange ting som ikke blir fullført. Én måte som jeg selv har funnet på for å bekjempe dette noe, er å på forhånd bestemme antall timer tenkt brukt på et stykke arbeid. For dette prosjektet satt jeg hundre timer som et minimum, og tok på en timer hver gang jeg programmerte. Totalt 125 timer fordelt over 97 dager gikk med på dette, og jeg lærte mye, men det frister ikke å begynne på en ny app med det første gitt hvor mye tid gikk med på å løse tilsynelatende trivielle problemer.