2009-09-18 13 views
21

Sto considerando l'utilizzo di MonoTouch per lo sviluppo di iPhone, ma le dimensioni del payload sono un fattore importante.Quanto è grande un'app iPhone Objective-C rispetto a un'app MonoTouch?

Per un utente che non ha mai installato Mono sul proprio iPhone, quale sarebbe la dimensione di un'app Objective-C "Hello World" rispetto a un'app "Hello World" di MonoTouch?

In particolare, qual è il ca. numero di byte che devono essere scaricati, e quale è il ca. numero di byte utilizzati una volta installati?

risposta

17

Un programma "Hello world" in Objective-C occupa 50   KB (intera cartella .app). Con MonoTouch, un'app simile "Hello World" occupa 5   MB (intera cartella .app), che non è affatto male considerando che ha un runtime con la garbage collection.

+1

Le app vengono inviate zippate all'app store, quindi conteggiare una riduzione dal 30 al 50% delle dimensioni per la dimensione del download. Una volta installato sul dispositivo, l'app avrà lo stesso importo della cartella .app che hai creato. –

+5

Non corretto Zoran. La dimensione eseguibile zippata NON è quella che l'elenco di applicazioni elenca per dimensione. Una delle nostre applicazioni era inferiore a 10 MB quando compresso e caricato, tuttavia ora mostra 14.7 nello store. Questo purtroppo ci mette oltre il limite per i download di 3g. – Lounges

+1

Sì, infatti, ho erroneamente dichiarato il 70% quando intendevo 30 ... Eliminato il commento, ma ora mi rendo conto che non avrei dovuto farlo perché qualcuno ci ha seguito :) Quindi, ignorare le dichiarazioni di percentuale. La dimensione del download è qualunque sia la dimensione del file compresso. –

11

nella 1.5 MonoTouch

Una build di rilascio - che è un un'applicazione creata con una licenza di distribuzione - e con nient'altro che le impostazioni di progetto predefinite, è di 5 MB  . Di quello 4.3   MB è l'eseguibile binario.

Spesso si verificano fino a 10   MB nella mia esperienza e i forum dipingono la stessa immagine. L'app riporta la dimensione decompressa, tuttavia vengono scaricati in formato zip. Zipped è circa 3   MB che, anche su un 3G, va bene.

http://i40.tinypic.com/2jadrpd.png

A mio avviso, la maggior parte delle persone non si guarda la dimensione del file prima di scaricare un'app, né particolarmente cura. Il limite dell'appstore per i download 3G è ora il 20   MB che rientra perfettamente nella dimensione di MonoTouch.

Per svolgere l'avvocato del diavolo, sì, è molti ordini più grandi dell'equivalente Objective-C e potrebbe spaventare alcune persone preoccupate di occupare 4-10   MB in più del loro spazio 16   GB. Tuttavia, c'è anche il time to market e gli strumenti esistenti disponibili per .NET. Sviluppo e costruisco tutte le mie app MonoTouch in Visual Studio 2010, quindi li collaudo su Mac, e non credo nemmeno che Apple sosterrebbe che il loro IDE è vicino al leader del settore.

+0

Hey, Chris - Sono un po 'frustrato con MonoDevelop e interessato all'approccio VS. Hai una recensione ovunque su quello che hai trovato essere un buon modo per configurarlo? O dovrei riformulare quella domanda come SO?:) –

+1

@David Ho una piccola sezione su VS2010 a http://www.shrinkrays.net/code-snippets/csharp/monotouch-tips-and-snippets.aspx scorri verso il basso fino a "Utilizzare un progetto monotouch in Visual Studio 2008/2010 " –

+0

Cool, grazie. Sembra che abbia già inserito la tua pagina tra i preferiti e non abbia effettuato la connessione. :) –

8

Da questa domanda MonoTouch and Size of Executables:

MonoTouch non si traduce in Obj-C. Compilare su .NET IL, quindi su compila che (allo stesso modo di un compilatore JIT, ma prima che sia esegui - quindi il compilatore "in anticipo") nel codice ARM nativo.

così:

Obj-C -> GCC (o LLVM) -> codice ARM

VRS MT:

C# -> IL -> (AOT compilatore) -> il codice ARM

I file binari di uscita in 3.x sono più grandi perché si include anche un lotto di .NET framework (beh, Mono Framework, ma identico), quindi se , ad esempio, si utilizza System.Xml, deve includerlo nell'output - stesso con System.dll ecc. Il linker è abbastanza intelligente , ma i binari dell'uscita saranno sempre più grandi.

Per me, l'unica dimensione che conta è il tempo di caricamento e la dimensione binaria zippata . zip binario per un'applicazione "ciao mondo" è di circa 2.5-3meg (più piccolo in 4.x Mi hanno detto) VRS su 300k per obj-c. La differenza si riduce sempre di più, aggiungendo solo i file di tipo system.dll una volta. Il tempo di caricamento per MT vrs Obj-c, facendo le stesse cose allo allo stesso tempo, è abbastanza vicino allo stesso. O uno può essere fatto a caricare lentamente (basta fare qualcosa di lungo in esecuzione nel tuo FinishedLaunching senza metterlo su un altro thread).

Il rispondente prosegue dicendo che sente di essere più produttivo con MonoTouch che con Objective-C. YMMV.

+0

+1 Bella aggiunta, grazie per le informazioni – RedFilter

+0

@RedFilter: non lo saprei se non fosse per Jeff Atwood che lo indica in un post sul blog. –

Problemi correlati