Sekalaisia huomioita Developer-ohjelmasta

Tervehdys jälleen!

Nyt kun ensimmäinen applikaationi on pientä hiomista vaille valmis lähetettäväksi ehdolle App Storeen, voisin kerrata hieman mitkä asiat tuossa valmisteluprosessissa tuottivat itselleni eniten päänvaivaa, ja miten ne lopulta ratkesivat – lähinnä painotus siis tuossa App Storessa myymiseen liittyvässä (virtuaalisessa) paperityössä.

Ihan ensimmäiseksi

Jos olet juuri aloittamassa iOS (= kaikkien Applen mobiililaitteiden käyttis) -ohjelmointia, ihan ensiksi kannattaa huomioida, että sinulla on kaksi vaihtoehtoa:

  1. Voit aloittaa ilmaiseksi yksinkertaisesti rekisteröitymällä Apple Developeriksi: http://developer.apple.com/programs/register/
  2. Tai voit liittyä Applen maksulliseen (99 $/vuosi) Developer Programiin http://developer.apple.com/programs/ios/

Suurimmat erot ovat siinä, että maksullisen ohjelman jäsenenä pystyt testaamaan ohjelmiasi fyysisellä iPhone/iPad/iLaitteellasi, saat pääsyn suljetulle Developer-foorumille ja voit saada applikaatiosi App Storeen. Eli jos aiot julkaista jotain, ennemmin tai myöhemmin tarvitset tuon maksullisen tilin. Jos sata taalaa ei tunnu missään, voit kaikin mokomin liittyä Developer Programiin vaikka samantien. Omasta kokemuksesta voin kuitenkin sanoa, että opeteltavaa kyllä riittää ennen kuin laitteella testaaminen tai App Storeen pääsy alkaa olla välttämätöntä. Maksu on kuitenkin voimassa vuoden sopimuksen aloituspäivästä, joten jos opettelet perusteita suurinpiirtein puoli vuotta, kuten minä, tuolta ajalta maksaminen ei välttämättä ole kovin viisasta.

Kantapään kautta voittoon

Xcoden ja iOS SDK:n (Software Development Kit) lataamisessa ja asentamisessa ei ollut mitään ihmeellistä, Applella on tähän hyvät ja täsmälliset ohjeet.

Xcode on mainio kehitysympäristö, jonka vipstaakien opetteluun menee toki oma aikansa. Sitten tietysti pitää opetella kielen (Objective C), järjestelmän (Cocoa Touch) ja koko Applen voimakkaasti objektiorientoituneen ohjelmointifilosofian perusteet. Helpommin sanottu kuin tehty, mutta kyllä se onnistuu ei-insinööriltäkin – aika ajoin päätä seinään hakaten. Edelleen suosittelen painokkaasti aloittamaan tästä loistavasta Stanfordin videoluentosarjasta (en tiedä, onko jo uudempikin lukukausi julkaistu, mutta tämän ääressä itse opiskelin): http://itunes.apple.com/us/itunes-u/developing-apps-for-ios-sd/id395631522

Developer Program

Huomaat kyllä itsekin, kun maksulliseen ohjelmaan liittyminen alkaa olla ajankohtaista. Liittyminen on helppoa ja yksiselitteistä, sen jälkeen tapahtuva omien tietojen täydentäminen voi aiheuttaa paikka paikoin hieman enemmän pähkäilyä.

Kun olet maksanut jäsenyytesi ja saanut Applelta varmistusmeilin, että kaikki on ok, käyttöösi tulleet ominaisuudet löytyvät nätisti yhdelle sivulle koottuna Member Centeristä: https://developer.apple.com/membercenter/index.action

Varmaan oudoimman kuuloiset ja samalla tärkeimmät käyttöösi tulleet työkalut ovat ”iOS Provisioning Portal” ja ”iTunes Connect”. Ensinmainitussa luodaan tarvittavat kehityssertifikaatit ja ”App ID”:t  sekä rekisteröidään testauslaitteet. Jälkimmäisessä hallinnoit sopimus-, pankki-, ja verotustietojasi ja applikaatioidesi myyntiä/jakelua. Molemmat edellyttävät hieman pohjatyötä.

Provisioning Portal

Jos kuvaus Provisioning Portalista kuulosti heprealta, ei se mitään. Kaikki on yksityiskohtaisesti opastettu – sen ansiosta onnistuin saamaan kaiken toimimaan, vaikken yhtään tiennytkään, mitä olin tekemässä. Ainoa juttu, jota jouduin vähän korjailemaan jälkeenpäin, oli tuo App ID:n formaatti.

App ID koostuu siis Applelta automaattisesti tulevasta ”Bundle Seed ID”:stä sekä itse määräämästäsi ”Bundle Identifieristä”. Vaikka Bundle Identifierillä ei ymmärääkseni ole muuta ihan pakollista vaatimusta kuin että se on applikaatiosi tai applikaatiokokoelmasi uniikki tunnus, kannattaa noudattaa Applen suositusta ellei ole jotain erityistä syytä tehdä toisin. Applen suositus on ”reverse domain name style”, jonka tajusin vasta googlailun jälkeen todellakin viittaavan yrityksesi tai oman nettisivustosi domainnimeen.

Täydellisen App ID:n rakenne on siis seuraavanlainen:

ABCDEFGHIJ.com.yrityksesinimi.applikaationnimi tai
ABCDEFGHIJ.com.omanimesi.applikaationnimi

Tuo ABC… on se Bundle Seed ID, 10 merkin/numeron sarja, joka tulee Applelta. Tuo com.yrityksesinimi.applikaationnimi on se Bundle Identifier (jota muuten tuolla iTunes Connectin puolella kutsuttiin hämäävästi vähän eri nimellä, muistaakseni se oli joku App ID Suffix tms.)

Ja suositus tosiaan olisi, että sinulla todella olisi hallussa tuo http://www.yrityksesinimi.com tai http://www.omanimesi.com -domain netissä (näin pystyttäisiin takaamaan se, että App ID:si todella on uniikki). Pakollista tämä ei ymmärtääkseni ole, mutta ihan järkevä periaate mielestäni.

Applikaatiokokoelmia (suite) varten App ID:ssä on mahdollista käyttää asteriskia * jokerimerkkinä, tähän tapaan:

ABCDEFGHIJ.com.yrityksesinimi.* tai
ABCDEFGHIJ.*

Ymmärtääkseni viimeistään applikaation julkaisuvaiheessa pitää kuitenkin täydentää tuo applikaatiokohtainen loppuosakin. Tämän asian voisi joku kokeneempi selventää, itselle jäi tuo vähän hämäräksi.

iTunes Connect

Ekalla kerralla saattaa hämätä hieman, että iTunes Connectiin kirjaudutaan erikseen, vaikka tunnukset ovatkin samat kuin Member Centeriin. iTunes Connectin Contracts, Tax, and Banking -osiossa olikin sitten ehkä koko prosessin hankalimmat kohdat. iOS Free Applications -sopimus pitäisi olla valmiiksi hyväksyttynä, se kuuluu jo Developer Programin sopimukseen. Maksulliseen tai mainosrahoitteiseen sopimukseen tarvitaankin sitten pankki- ja verotietoja.

Jostain syystä esitäytettyihin tietoihini oli tullut väärä lähiosoite (en vieläkään tiedä, mistä se putkahti: Applelta, luottokunnalta vai mistä lie). Osoite oli muutaman korttelin päässä kotoani, mutta ei kuitenkaan oma osoitteeni. Asia korjautui joka tapauksessa itsestään siinä vaiheessa kun ehdin kirjoittaa asiasta kyselyn Applelle.

Seuraava hakala kohta olikin sitten Bank Info. Pitkä tarina lyhentäen: kävi ilmi, että oman pankkitilini alkuosa (pankkikonttorin tunniste) ei vastannutkaan kotikonttoriani tai ylipäätään mitään virallisissa rekistereissä olevaa pankkia. Kummallista kerrassaan, mutta tilinumero ei siis kelvannut Applelle, eikä pankkini osannut tehdä asialle mitään(!) Kaikeksi onneksi sain vinkin käyttää S-etutilini tilinumeroa, jonka Apple tosiaan hyväksyi heittämällä. Problem solved!

Sitten oli vielä Tax Information, jota kohtaan olin kehittänyt melkoiset ennakkopelot erinäisiä foorumeita seuraamalla. Tätä varten on ei-usalaisena vielä hiljattain täytynyt soitella Jenkkien verotoimistoon asti, kirjautua verovelvolliseksi Yhdysvalloissa (!) ja täytellä jotain IRS ja W-8BEN -lomakkeita.

Nähtävästi (sanon nähtävästi, koska minulla ei vielä ole yhtään applikaatiota kaupassa, eikä näin ollen tilityksiäkään tullut) asia on kuitenkin hiljattain muuttunut, eikä meiltä ulkomaalaisilta kysytä enää muuta kuin vakuutus siitä, että meillä ei ole muuta liiketoimintaa tai alaisia Yhdysvalloissa. Ainakaan missään ei kyselty yllämainittujen verotusdokumenttien perään, ja sopimukseni status näyttää ”hyväksyttyä”. Tällaisen keskustelun aiheesta löysin googlaamalla: http://www.iphonedevsdk.com/forum/busin … -info.html

Siinäpä se!

Verotus Suomen puolella on sitten ihan oma juttunsa. Se tuntuu olevan kaikille (eikä vähiten veroviranomaisille itselleen) täysin hämärän peitossa oleva juttu. Helpoin, ja näin ollen itselleni mieluisin tulkinta on se, että 8500 euroon asti tulot eivät edellytä yksityishenkilöltä muuta kuin yhdenkertaista kirjanpitoa ja tulojen kirjaamista verokortin kohtaan ”1.4 muut ansiotulot” ja vero.fi:stä lomakkeen 15: ”Taiteilijan ja freelancerin tulot” siihen liitteeksi. Lähde: Hopeisen Omenan keskustelu aiheesta: http://hopeinenomena.net/viewtopic.php?f=40&t=117834&start=25

iTunes Connect: Manage Your Apps

Jos ”Add New App” -painiketta ekaa kertaa klikatessa yhtään jännitä, on jotain kyllä vialla. Applikaation tietoja voi käydä koetäyttelemässä, jotta lomake tulee tutuksi, mutta jos on aikomus oikeasti julkaista jotain, kannattaa olla valmiina ainakin seuraavaa:

  • Applikaation virallinen nimi
  • SKU Number; tämä on siis itse keksimäsi applikaatiokohtainen tunniste, jota käytät siis vain omassa kirjanpidossasi jne., tässä ei ole mitään pakollista virallista formaattia. Mulla on 1001_applikaationnimi (1 = tyyppi, esim. peli versus hyötyohjelma, 001 = applikaation numero – kuten huomaat, olen varautunut 999 eri applikaation softaimperiumin pyörittämiseen, hehe, sitten alaviiva koristeeksi ja applikaation nimi pienillä kirjaimilla yhteen). Mutta tosiaan, suit yourself. Seuraavaan näkymään et kuitenkaan pääse, ellet täytä tuohon ainakin jotain.
  • Bundle ID: tämä valitaan siis tuolla Provisioning-puolella rekisteröimistäsi ID:stä, eli se pitää olla valmiina tässä vaiheessa. Jos käytät Bundle ID:ssäsi asteriskia jokerimerkkinä, ID:n loppuosa pitää täydentää tässä.
  • Availiability Date: voit laittaa lähetyspäivän – tämä on mahdollista muuttaa applikaation hyväksymispäivänä, ja vain sinä päivänä. Se kannattaakin tehdä, jotta applikaatiosi saa 15 minuuttia feimiään uusien julkaisujen kärjessä.
  • Price Tier. Eka tier näkyy App Storessa hintana 0.99$ / 0,79€ jne. – sinulle Apple tilittää sitten sen siivun kun tilittää
  • Description – App Storessa näkyvä kuvausteksti. Tämä kannattaa miettiä tarkkaan!
  • Keywords – näillä hakusanoilla softasi löytyy, todella tärkeä!
  • Support URL: tämä on pakollinen, eli joku paikka pitää olla valmiina, josta applikaation ostajat saavat (ainakin teoriassa) yhteyden kehittäjään
  • Vapaaehtoiset App URL (promoamiseen) ja Privacy Policy URL
  • Rating – kaikki likaiset yksityiskohdat kysellään, kannattaa olla varautunut
  • 512 x 512 px ikoni App Storea varten
  • Vähintään 1, maksimissaan 6 näyttökaappausta applikaatiosta jokaisella applikaatiosi tukemalla laiteresoluutiolla (standard, retina display, iPad). Pikselikoko määrätty tarkkaan – joko koko näyttö tai sitten ilman ylälaidan vakiostatusbaria, jos se ohjelmassasi on näkyvissä.
  • Jos juridinen kikkailu kiinnostaa, voit laatia oman EULA:si, muuten käytetään Applen standardipohjaa

Tässä vaiheessa tiedot voi tallentaa. Niitä pääsee muuttamaan vapaasti siihen asti, kunnes lähetät itse applikaatiopaketin tarkistukseen, ja taas applikaation hyväksymisen jälkeen hieman rajoitetummin.

Xcode-projektin puolella

Jos itsestäänselvyydet ohitetaan (softa ei saa kaatuilla jne.), ainakin pari kohtaa pitää säätää projektin asetuksissa.

Tuolla Applikaationnimi.plist-tiedostossa on tuo Bundle identifier – se on oletusarvoisesti tuollaisessa puoliautomaattisesti generoituvassa formaatissa (com.yourcompany.${PRODUCT_NAME:rfc1034identifier}, tuo hämärännäköinen rfc1034 paljastui lopulta kaikessa yksinkertaisuudessaan vaan muotoiluksi, joka varmistaa, ettei bundlenimessäsi ole erikoismerkkejä). Joka tapauksessa, jos toimintasi on pienimuotoista, eikä automatisoinilla ole tässä tilanteessa sinulle merkitystä, voit naputella bundle ID:n tuohon ihan rohkeasti käsin: ”com.yrityksesinimi.applikaatiosinimi”. Sitä 10-merkkistä Bundle Seed ID:tä ei enää nykyään tarvitse eikä kuulu tuohon kirjoittaa.

Toinen tärkeä juttu on Deployment Target, eli vanhin käyttisversio, jota haluat applikaatiosi tukevan. Tästä on hyvät kuvitetut ohjeet esim. täällä: http://iphonedevelopertips.com/xcode/base-sdk-and-iphone-os-deployment-target-developing-apps-with-the-4-x-sdk-deploying-to-3-x-devices.html

Jos applikaatiosi käyttisversion lisäksi ehdottomasti vaatii laitteelta jotain tiettyä ominaisuutta (kahta kameraa, gyroskooppia tms.), se kannattaa laittaa tuonne info.plistiin myös (ominaisuuden nimi on Required device capabilities, ja sinne Item 0:ksi vaadittu ominaisuus, ja niin edelleen).

Ai niin, ja jos vakiokiilto ei jostain syystä sovi applikaatioikonisi tyyliin, info.plistiin voi myös lisätä kohdan ”Icon already includes gloss effects”. Kulmanpyöristykset tulevat automaattisesti, niitä ei tarvitse eikä voi ottaa pois (tee siis ikonikuvasi ihan nurkasta nurkkaan asti).

5 Responses to Sekalaisia huomioita Developer-ohjelmasta

  1. Petteri Laamo kirjoitti:

    Itse olen yrittänyt nyt liittyä tuonne Developer Programmiin, mutta hirveä faksirumba menossa, ja kolmatta kertaa jo pyytävät täsmentämään yrityksen dokumentteja. Mitä itse laitoit menemään?

    • Samuli kirjoitti:

      Oma tilanteeni oli siinä mielessä onnekkaampi, että liityin yksityishenkilönä. Yritysjäsenyyden suhteen en siis valitettavasti osaa auttaa. Tuossa Hopeisen Omenan keskustelusäikeessä on kyllä paljon avuliaita Apple-devaajia, siellä varmaan osattaisiin neuvoa.

    • valstu kirjoitti:

      Yrität ilmeisesti liittyä yrityksenä Developer Programmiin. Meillä oli sama faksirumba mutta siitä selvittiin vain yhdellä ekstrakierroksella🙂 Lähetettiin sinne lopulta yrityksen virallisella ”letterheadillä” kaikki yrityksen tiedot ja kirjoitettiin siihen jonkinlainen lainvoimainen teksti siitä, että kyseisellä henkilöllä on oikeus liittää yrityksemme Applen Developer Programiin. Mukaan pistettiin myös PRH:lta saama virallinen rekisteröintitodistus suomeksi ja englanniksi. Voin laittaa sulle tuon meidän ”letterheadin” sisällön ja tiedot iitteistä jos vielä olet jumissa tuossa faksirumbassa.

      Terveisin,
      Valtteri Karesto
      Tiny Villain Creative
      http://www.tinyvillain.com
      valtteri@tinyvillain.com

  2. Samuli kirjoitti:

    Pieni päivitys: nyt on applikaatio ladattu arvioitavaksi. Vielä pari kommervenkkiä oli matkan varrella. Ensiksi ilmeni, että distribute-sertifikaatti olikin eri asia kuin developer-sertifikaatti, eli se piti vielä erikseen käydä hakemassa siellä Provisioning Portalissa. Sertifikaatti myönnetään onneksi automaattisesti, mutta sen verran monivaiheinen prosessi silti on, että portalin yksityiskohtaisia ohjeita ei kannata skippailla – arvaatte varmaan, yritinkö.

    Toisekseen sain huomata, että projektin tiedostonimien suhteen pätee hieman löyhemmät säännöt debugatessa kuin distribute-vaiheessa. Käytännössä projekti piti nimetä uudelleen ilman välilyöntejä. Vartavasten tähän tehtyä työkalua Xcode > Project > Rename kannattaa muuten käyttää, sillä käsipelillä nimiin jää helposti ristiriitaisuuksia. Kannattaa myös varmuuskopioida projekti etukäteen! Eikä muuten huolta, käyttäjälle saa välilyönnit kyllä näkymään lisäämällä ne projektin nimeen info.plistissä löytyvään kohtaan ”Bundle display name”. Samoin iTunes Connectiin saa kaikin mokomin laittaa applikaation nimeen välilyöntejä.

    Lisähämmennystä tuohon välilyöntiasiaan toi vielä ongelma, joka googlatessa varmistui tunnetuksi bugiksi käyttämässäni Xcoden 3.2.5 -versiossa. Lopullisen .ipa-tiedoston nimi määräytyy nähtävästi väärän muuttujan, eli juurikin tuon Bundle display namen mukaan, ja näin ollen muka ”laittomat” välilyönnit aiheuttavat validaation epäonnistumisen. Helpoin ratkaisu löytyi täältä: http://useyourloaf.com/blog/2011/1/3/app-store-whitespace-validation-failure-with-xcode-325.html

    Bonuksena vielä tuolta Hopeisen Omenan puolelta kanssadevaajalta tullut kommentti: ”Sellaisen asian haluaisin mainita, että siitä hetkestä kun jonkin ohjelman lisää iTunes Connectiin, on 120 päivää aikaa ladata binary. Sen jälkeen ko kehittäjä ei voi käyttää samaa nimeä ja bundle id:tä. Omakohtaisen kokemukseni perusteella tämän voi kuitenkin kiertää sillä että lataa jonkin binaryn ja samantien itse hylkää sen, tällöin Applen järjestelmiin näyttäisi jäävän merkintä että jotain on ladattu eikä aikarajaa enää seurata.”

  3. Markku Uusitupa kirjoitti:

    Hyvää tekstiä, tulee varmasti monelle tarpeen. Tässä kommentti yhteen kohtaan:

    ”Ymmärtääkseni viimeistään applikaation julkaisuvaiheessa pitää kuitenkin täydentää tuo applikaatiokohtainen loppuosakin. Tämän asian voisi joku kokeneempi selventää, itselle jäi tuo vähän hämäräksi.”

    AppID:nä provisioning portaalissa voi käyttää asteriskia myös julkaisussa, eli voit käyttää samaa distribution profilea usealle projektille. Jos kuitenkin haluaa käyttää Push Notificationia, Game Centeriä, ym. niin näissä tapauksissa vaaditaan yksilöllinen tunniste.

    Tuohon välilyöntiongelmaan ei välttämättä tarvitse nimetä koko projektia uudestaan, vaan muistaakseni riittää, että muuttaa targetin build asetuksissa ”Product name” arvoa. Tosin pitää myös huomioida, että oletuksena Info.plist taisi käyttää tuota Product name arvoa myös bundle/display nimenä. Lisäksi XCode 4:ssa voi schemestä muuttaa suoraan tuotettavan archiven nimeä. Vähän mutua tulee, kun en jaksa nyt varmistaa, mutta XCode 4:ssa myös targetin nimen muuttaminen taisi vaikuttaa siihen ipa nimeen.
    Suosittelen muutenkin siirtymään XCode 4:sen käyttöön. Nykyisin se alkaa olla jo suhteellisen vakaakin.

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s

%d bloggers like this: