Quanto costa sviluppare un’app iOS?

Diversi mesi fa ero incappato in una discussione su StackOverflow riguardante il costo per lo sviluppo di un’applicazione iOS tipo Twitterific.

Volevo scrivere qualcosa a riguardo prendendo come riferimento il mercato italiano, ma me ne sono dimenticato.. tanto per cambiare. Nel frattempo è passato altro tempo e finalmente mi sono deciso.

La discussione verteva principalmente sul capire quanto potesse costare un’applicazione iOS simile a Twitterific (la domanda è stata posta nel 2008 ed i prezzi sono sicuramente cambiati, vista la crisi mondiale, anche se alcune risposte abbastanza recenti danno un’idea del costo del lavoro attuale o quasi negli Stati Uniti).

Uno dei programmatori di Twitterific, nel 2010, ha aggiunto il suo commento alla domanda portando come esempio il porting dell’app da iPhone ad iPad. Nel loro caso si trattava di portare l’app in 60 giorni. A conti fatti, prendendo come riferimento 6 giorni lavorativi alla settimana, per 10 ore al giorno, con due risorse dedicate, si arriva a 1.100 ore. Calcolando che la loro tariffa media per i clienti è di 150$/ora, si arriva ad una stima di 165.000$, a cui va aggiunto il costo di ciò che era già stato sviluppato e che è stimato in circa 35.000$. Si arriva ad un totale di 200.000$, senza tenere conto del design e del project management. Con quelli si arriva tranquillamente a circa 300.000$.

Questo stesso personaggio, porta come esempio anche il fatto che Instagram si sia fatto finanziare 500.000$ da un venture capitalist per rifare frontend e backend.
Altri sviluppatori hanno commentato rimanendo sempre nel range dei 150$/ora uomo. Ora non so dire se negli Stati Uniti ci siano pochi programmatori iOS, poche società che sviluppano per iOS, un mercato talmente grande che giustifica certe cifre o che altro, ma confrontate con quelle che sono le tariffe medie italiane, sono dei numeri esageratamente importanti.

Parlando con altri sviluppatori, sono arrivato alla cifra di 50€/ora come tariffa media per lo sviluppo puro. Che, diciamocelo, di questi tempi è anche un buon prendere. Ritornando al calcolo relativo a Twitterific, se l’avessimo fatto in Italia, il risultato sarebbe di 1.100 ore x 50€/ora = 55.000€ di solo sviluppo dell’aggiornamento per iPad. Sempre senza includere project management e design.

La realtà è, a mio avviso, che in Italia nessuno avrebbe investito una cifra del genere solo per portare un’app da iPhone ad iPad. La realtà è che, se si chiede 1/5 di quella cifra, si è ancora ancora concorrenziali.. e deve includere anche design e project management, altrimenti si è completamente fuori target.

Mi piacerebbe sentire l’opinione anche di altri sviluppatori che si muovono nell’ambito delle app mobile qui in Italia, per capire se siamo anche noi coinvolti dal momento di crisi che prima o poi passerà, o se c’è qualcosa di male nel sistema del mercato dello sviluppo, soprattutto tenendo conto che spesso e volentieri dobbiamo scontrarci con i lavoratori dell’est Europa che hanno prezzi estremamente concorrenziali ma che, allo stesso tempo, sono difficili da gestire, fanno perdere un sacco di tempo per spiegare che cosa si vuole e, in gran parte dei casi, il prodotto finale non è nemmeno lontanamente all’altezza di ciò che si voleva.

Contattatemi, anche in privato se preferite, per approfondire l’argomento.

 

Gestione rotazione dei device iOS

Ultimamente mi sono dovuto scontrare, per l’ennesima volta, nel delirio del cambio di orientamento dei device iOS. Per quanto in Apple si siano dati da fare per semplificare la vita agli sviluppatori, questo tema è ancora un buco nero. Ci sono diversi sistemi per gestire il cambio di orientamento, di cui uno
Chiaramente, il mio obiettivo è di scrivere meno codice possibile, utilizzare Interface Builder per permettere ai designer di modificare la geometria delle interfacce senza dover intervenire sul codice, ridurre al minimo i calcoli delle posizioni degli elementi all’interno dei controller.ufficiale e presentato da Apple come esempio sul sito developer. Il problema è che, per quanto sia ufficiale, non soddisfa le mie esigenze. Oltre alla rotazione, ho anche il problema di dover presentare interfacce diverse a seconda dell’orientamento e del device (iPhone o iPad).

Alla fine ho optato per un sistema con un UIViewController di base da cui derivano i vari controller portrait e landscape. I controller sono tutti agganciati ad un UINavigationController che si prende cura di mandare i messaggi di willRotate e didRotate ai vari controller collegati senza che dobbiamo gestirceli noi a mano.

Il controller di base contiene anche tutti gli outlet che vengono collegati in IB agli oggetti disegnati nell’interfaccia, così possiamo tenere il codice di gestione di azioni e interazione con gli oggetti al minimo.
Per chi volesse vedere come funziona questo sistema, ho aperto un repository su GitHub chiamato RotationExample

 

 

 

 

 

Novità su iTablo

E’ da un po’ che volevo scrivere un paio di righe riguardo iTablo, la soluzione che abbiamo sviluppato per la pubblicazione di riviste e cataloghi su iPad. Qualcuno, probabilmente, avrà già letto qualcosa nei miei post di qualche mese fa. Per chi non sapesse di cosa sto parlando, iTablo è il nome che abbiamo dato a questa soluzione che è composta da un lettore (una app per iPad), un designer (un’applicazione desktop per OS X e Windows) ed una serie di servizi accessori per l’hosting dei contenuti. A che serve? A pubblicare dei PDF arricchiti da elementi multimediali fondamentalmente.

Rispetto agli esordi di un anno fa, il prodotto si è decisamente evoluto. Non sto qui a snocciolare i dettagli.. per quelli c’è il sito (per ora in lingua d’Albione, ma da metà settembre sarà anche in Italiano): http://www.itablo.com/

Magari in un prossimo post parlerò un po’ della tecnologia che sta dietro ad iTablo. Per ora mi limito a dire che sono parecchio orgoglioso del lavoro svolto dal team che lo ha concepito e portato avanti. E sono contento di poter dire di aver trovato un ottimo partner per la commercializzazione di iTablo. Infatti, fin da ora è possibile acquistare iTablo tramite Graphiland, azienda leader nella distribuzione di prodotti per l’editoria. La scheda del prodotto ed il listino sono reperibili qui: scheda di iTablo

Per chi, invece, volesse saperne di più, i signori di Graphiland hanno organizzato una serie di seminari per il mese di Settembre in cui il qui presente mostrerà come trasformare le proprie pubblicazioni cartacee in contenuti multimediali interattivi consultabili su iPad. Qui potete vedere il calendario. Iscrivetevi e non ve ne pentirete! Mi raccomando, nel caso fatemi sapere chi siete e che arrivate da qui! 🙂

Come esportare i certificati per le notifiche push di iOS

Un grazie di cuore ai signori di BoxedIce che, involontariamente, mi hanno fornito la soluzione al problema di capire come esportare i certificati corretti per l’utilizzo in un server per le notifiche push di iOS. Riporto qui sotto i passaggi essenziali:

Certificates

The first thing you need is your Push certificates. These identify you when communicating with APNS over SSL.

Generating the Apple Push Notification SSL certificate on Mac:

  1. Log in to the iPhone Developer Connection Portal and click App IDs
  2. Ensure you have created an App ID without a wildcard. Wildcard IDs cannot use the push notification service. For example, our iPhone application ID looks something likeAB123346CD.com.serverdensity.iphone
  3. Click Configure next to your App ID and then click the button to generate a Push Notification certificate. A wizard will appear guiding you through the steps to generate a signing authority and then upload it to the portal, then download the newly generated certificate. This step is also covered in the Apple documentation.
  4. Import your aps_developer_identity.cer into your Keychain by double clicking the.cer file.
  5. Launch Keychain Assistant from your local Mac and from the login keychain, filter by the Certificates category. You will see an expandable option called “Apple Development Push Services”
  6. Expand this option then right click on “Apple Development Push Services” > Export “Apple Development Push Services ID123″. Save this as apns-dev-cert.p12 file somewhere you can access it.
  7. Do the same again for the “Private Key” that was revealed when you expanded “Apple Development Push Services” ensuring you save it as apns-dev-key.p12 file.

ZipArchive + iOS = non come libreria non statica

Come sempre sono incappato in un problema di quelli che saltano fuori casualmente durante lo sviluppo. Sono mesi che utilizzo una mia libreria che, a sua volta, utilizza la ZipArchive. Di punto in bianco ha cominciato ad apparire questo errore:

___gxx_personality_v0$non_lazy_ptr in xxxxxLibrary (ZipArchive.o)

Dopo un pò di ricerche scopro che XCode per qualche motivo non utilizza g++ ma gcc per compilare le librerie. Il trucco sta nel rinominare ZipArchive.mm in ZipArchive.m .. perchè per qualche motivo così cambia il compilatore che utilizza.. mah.. XCode non smette mai di stupirmi.

Per maggiori info: http://code.google.com/p/ziparchive/issues/detail?id=4