2009-09-18 14 views
21

Estoy considerando utilizar MonoTouch para el desarrollo de algunos iPhone, pero el tamaño de la carga útil es un factor importante.¿Cuán grande es una aplicación para iPhone Objective-C vs. una aplicación MonoTouch?

Para un usuario que nunca antes ha instalado Mono en su iPhone, ¿cuál sería el tamaño de una aplicación Objective-C "Hello World" comparada con una aplicación MonoTouch "Hello World"?

Más específicamente, ¿cuál es la aprox. número de bytes que deben descargarse, y cuál es la cantidad aproximada de número de bytes utilizados una vez instalado?

Respuesta

17

Un programa "Hello world" en Objective-C ocupa 50   KB (toda la carpeta .app). Con MonoTouch, una aplicación similar "Hello World" ocupa 5   MB (toda la carpeta .app), lo cual no está nada mal considerando que tiene un tiempo de ejecución con recolección de basura.

+1

Las aplicaciones se envían comprimidas a la tienda de aplicaciones, por lo que puede contar con una reducción del tamaño de la descarga del 30 al 50% aproximadamente. Una vez instalado en el dispositivo, la aplicación tomará la misma cantidad que la carpeta .app que creó. –

+5

No es correcto Zoran. El tamaño ejecutable comprimido NO es lo que la tienda de aplicaciones enumera para el tamaño. Una de nuestras aplicaciones tenía menos de 10 MB cuando se comprimió y subió, sin embargo, ahora se muestra como 14.7 en la tienda. Desafortunadamente, esto nos excede del límite de descargas de 3g. – Lounges

+1

Sí, de hecho, dije equivocadamente el 70% cuando quise decir 30 ... Suprimí el comentario, pero ahora me doy cuenta de que no debería haberlo hecho porque alguien lo siguió :) Por lo tanto, prescinda del porcentaje de declaraciones. El tamaño de descarga es el tamaño de archivo comprimido. –

11

En MonoTouch 1.5

una versión de lanzamiento - que es un una aplicación creada con una licencia de distribución - y con nada más que la configuración del proyecto por defecto, es de 5 MB  . De ese 4.3   MB es el ejecutable binario.

En mi experiencia, a menudo alcanzan hasta 10   MB, y los foros pintan la misma imagen. La tienda de aplicaciones informa el tamaño descomprimido, sin embargo, se descargan comprimidos. Comprimido está alrededor de 3   MB que, incluso en un 3G, está bien.

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

En mi opinión, la mayoría de la gente no va a mirar el tamaño del archivo antes de descargar una aplicación, ni particularmente la atención. El límite de la tienda de aplicaciones para descargas de 3G ahora es 20   MB que está dentro del tamaño MonoTouch.

Para jugar al defensor del diablo, sí, es muchos pedidos más grande que el equivalente de Objective-C y podría asustar a algunas personas preocupadas por ocupar 4-10   MB más de su espacio de 16   GB. Sin embargo, también hay tiempo para comercializar y las herramientas existentes disponibles para .NET. Desarrollé y construyo todas mis aplicaciones MonoTouch en Visual Studio 2010 y luego las probé en Mac, y no creo que ni siquiera Apple diría que su IDE está cerca del líder de la industria.

+0

Hola, Chris: estoy un poco frustrado con MonoDevelop e interesado en el enfoque VS. ¿Tiene un escrito en algún lugar sobre lo que ha encontrado que es una buena manera de configurarlo? ¿O debería reformular eso como una pregunta SO?:) –

+1

@David Tengo una pequeña sección en VS2010 en http://www.shrinkrays.net/code-snippets/csharp/monotouch-tips-and-snippets.aspx Desplácese hasta "Usar un proyecto monotouch en Visual Studio 2008/2010 " –

+0

Genial, gracias. Parece que ya marqué tu página y no hice la conexión. :) –

8

De esta pregunta en MonoTouch and Size of Executables:

MonoTouch no se traduce en Obj-C. Se compila para .NET IL, luego compila (de la misma forma que un compilador JIT lo haría, pero antes de que sea ejecutándose, de ahí el compilador "anticipado") en el código ARM nativo.

manera:

Obj-C -> GCC (o LLVM) -> código ARM

VRS MT:

C# -> IL -> (AOT compilador) -> código ARM

Los archivos binarios de salida en 3.x son más grandes porque también está incluyendo un lote del .NET Framework (bueno, Mono Framework, pero lo mismo), así que si usted, por ejemplo, use System.Xml, tiene que incluir eso en la salida - mismo con System.dll etc. El enlazador es bastante inteligente , pero los binarios de salida siempre van a ser más grande.

Para mí, lo único importante es el tiempo de carga y el tamaño binario comprimido. cremallera binario para una aplicación "Hello World" se trata de 2.5-3meg (menor en 4.x Me han dicho) VRS sobre 300k de obj-c. La diferencia obtiene cada vez menos, ya que solo incluye los gustos de system.dll una vez. Tiempo de carga para MT vrs Obj-c, haciendo las mismas cosas al al mismo tiempo, está lo suficientemente cerca de lo mismo. Cualquiera de los dos se puede hacer a cargándose lentamente (simplemente haz algo largo corriendo en tu FinishedLaunching sin ponerlo en otro hilo).

El contestador continúa diciendo que siente que es más productivo con MonoTouch que Objective-C. YMMV.

+0

+1 Agradable además, gracias por la información – RedFilter

+0

@RedFilter: No se sabría si no fuera por Jeff Atwood al señalarlo en una publicación de blog. –

Cuestiones relacionadas