2011-03-23 10 views
10

Esiste un modo corretto per sviluppare un'app mobile multipiattaforma? Vogliamo che queste siano app native su ogni piattaforma e non necessariamente una sorta di pagina web.Mobile App - Targeting per iPhone, WP7, Android e Blackberry

Attualmente stiamo pensando di dividerlo in due lingue:

  • C# backend (logica di business)
  • -> standard C# app per WP7
  • -> App costruito su MonoTouch per iPhone/iPad/etc.
  • Java backend (logica di business)
  • -> standard Java app Android (versione MonoDroid di C# non sono ancora pronti )
  • -> standard BlackBerry Java app

Potremmo anche sviluppare inizialmente in C# e utilizzare uno degli strumenti di conversione disponibili per ottenere il nostro C# convertito in Java come punto di partenza.

C'è un altro approccio? I nostri skillset includono principalmente un forte background in C# .Net e una minore esperienza in Java.

Non vogliamo davvero scendere a un livello basso e utilizzare qualcosa come C/C++ per portare a termine il lavoro. Queste saranno in genere semplici applicazioni LOB che comunicano con alcuni servizi Web.

Domanda laterale: come fanno gli sviluppatori di giochi come i creatori di Angry Birds?

UPDATE:

MonoDroid è ora ufficialmente rilasciato. Quindi sembra che tu abbia solo bisogno di usare Java per il BlackBerry. Stiamo pensando di non sviluppare affatto per BlackBerry, perché lo sviluppo per le altre 3 piattaforme è stato semplificato. Ci sono sicuramente dei costi, visto che MonoTouch e MonoDroid sono entrambi $ 399 e avresti anche bisogno di una licenza per Visual Studio (questo non include i costi per l'App Store, ecc.).

+0

Leggi http://stackoverflow.com/questions/4221315/what-kind-of-conversion-efforts-are-there-involved-in-porting-a-complete-droid-ap/4221446#4221446 è un più piccolo Intervallo di domande ma spiega bene la mia opinione sul tema della cross platform. – blindstuff

+0

Sì, sono contento che lo stiamo pianificando dall'inizio. Certamente vogliamo separare il codice specifico del dispositivo UI dal codice riutilizzabile. – jonathanpeppers

risposta

2

Non va bene semplice risposta che so di tutte le piattaforme mobili. È possibile utilizzare ambienti di sviluppo come Appcelerator Titanium, che si compattano con il codice nativo su varie piattaforme (al momento, ad esempio, penso che Titanium supporti iOS e Android, con piani per Blackberry). Tuttavia, questi di solito hanno un'API limitata a cui hai accesso e hai ancora bisogno di progettare interfacce utente diverse per le diverse piattaforme (nel mio lavoro commerciale, non ho mai usato con successo una tale piattaforma)

Si potrebbe anche progettare tutta la logica di business in un back-end dei servizi web e quindi scrivere solo app "thin client" per ogni piattaforma. Questo funziona, ma naturalmente richiede l'accesso alla rete quando l'utente finale desidera utilizzare la tua app. (Di solito ci sarà, ma a volte potrebbe non esserlo)

Alla fine, di solito finisco per fare quello che mi proponi: scrivere la logica di business di base in un paio di lingue diverse nel modo più generico possibile, e poi raggrupparla in con interfaccia utente/codice dispositivo personalizzato per ogni piattaforma. Non ho trovato un modo migliore per me ...

(BTW, credo che giochi come Angry Birds siano scritti in gran parte in OpenGL e quindi caricati sul processore OpenGL su ogni piattaforma, ma potrei sbagliarmi ...)

+0

Beh, speravo in un "santo graal", ma non sembra che ci sia una cosa del genere. Potrei contrassegnarti come risposta se non ricevo altri suggerimenti. – jonathanpeppers

+0

Sì, penso che sfortunatamente il "Santo Graal" dello sviluppo di piattaforme cross-mobile sia un mito. Forse qualche volta ... –

+0

Un'alternativa a Appcelerator è PhoneGap. Ma sembri piuttosto deciso a non usare questo tipo di strumenti. Ho solo pensato di ottenere quello menzionato nel caso qualcuno cerchi questo thread in futuro e cerchi alternative. – Tony

0

Non penso che questo sia (facilmente) possibile, se non si utilizza un HTML5 (jquerymobile, ecc.) In una WebView nella propria app (sembra un'app reale, ma comunque vedrai in qualche modo che non lo è) al posto del normale browser. Puoi comunque utilizzare alcune API native dal dispositivo (accelerometro, ...).

Esistono piattaforme (commerciali) come Sybase Unwired Platform che consentono di generare codice client. Afaik per Blackberry e Windows Mobile anche alcune interfacce utente possono essere generate dagli oggetti business sul server. Ma a me sembra che questo potrebbe essere troppo pesante per il tuo caso.

saluti, Martin

+0

Penso che vogliamo evitare l'uso di HTML5, poiché credo che i nostri clienti vorranno fare cose più avanzate in background, ecc. – jonathanpeppers

1

Quelli sono alcuni grandi risposte. Sono d'accordo, lo sviluppo della piattaforma x è ancora molto primitivo. Vorrei aggiungere 2 punti:

1) Non è necessario scrivere il back-end in lingue diverse. Scegli una lingua (in base al tuo livello di comfort, i criteri di rendimento, ecc.) E quindi connettiti direttamente dalle app della tua piattaforma direttamente al back-end. Se il tuo backend è un codice lato server, un modo per parlarne sarà tramite XmlHttpClient. Se si tratta di un pezzo di codice nativo comune a varie app ed è scritto in C++, è possibile utilizzare JNI da Java e l'assieme wrapper da C#.

2) Un altro motivo per evitare gli strumenti x-platform è che è sempre necessario attendere che supportino le nuove API rilasciate dal fornitore della piattaforma (Apple, Google, MSFT ecc.). Una volta che queste aziende hanno rilasciato nuove API, gli strumenti dovranno essere aggiornati e solo allora sarai in grado di utilizzare le nuove API.

+1

Le cose sul lato server saranno tutte C# (o qualsiasi altra cosa desideriamo). Avrei dovuto essere più chiaro, ma per "backend" intendo il livello aziendale che comunica con il nostro server e ha alcune classi per rappresentare i dati dal server. Questa è la parte che verrebbe duplicata in 2 lingue. Sono assolutamente d'accordo sul fatto che vogliamo evitare gli strumenti x-platform in quanto in qualche modo sono tutti insufficienti, buoni punti. – jonathanpeppers

+0

Vorrei ancora provare ad evitare i livelli duplicati (molto più facili da mantenere, quando hai già a che fare con livelli UI duplicati per ogni piattaforma). Ecco cosa dovrei fare: strato UI -> Livello di business logic -> Livello di accesso ai dati -> DB e i diversi livelli dell'interfaccia utente comunicano tramite un servizio Web allo stesso livello di business logic. – Beta

+0

Il codice che fornisce la comunicazione al webservice sarebbe l'unico codice duplicato tra le 2 lingue. Puoi togliere il webservice dall'immagine, dato che possiamo svilupparlo come preferiamo. Mi riferisco solo al codice in esecuzione su ciascun dispositivo. – jonathanpeppers

Problemi correlati