iOS 2D Texture Overrides
Unity Remote

Actualizando a 64 bit iOS

El soporte de iOS 64 bit está implementando con un backend de scripting llamado IL2CPP. Se ejecuta con su código C#/UnityScript.

El IL2CPP runtime combina un compilador ahead of time (AOT) con una maquina virtual para convertir assemblies a C++ mientras aprovecha los compiladores estándar C++ de plataforma para producir binarios nativos. El resultado neto es un rendimiento significativamente mayor, la compatibilidad de la plataforma y la facilidad de mantenimiento.

IL2CPP es el único backend de scripting para soportar el despliegue a ARM 64-bit en iOS, y por lo tanto es obligatorio desplegar a la Apple app-store para lanzar nuevas aplicaciones.

Para leer más acerca de IL2CPP mire los blogposts The future of scripting in Unity, and Apple iOS 64-bit support in Unity.

Cómo empezar a utilizar IL2CPP en iOS

Escoja en el desplegable de Scripting Backend en los Player Settings.

Selección del scripting backend
Selección del scripting backend

Por defecto, será construido para una arquitectura Universal (incluyendo ambos ARM64 y ARMv7), si se necesita usted puede cambiar a una arquitectura especifica en los Player Settings. Hay un número de cosas que debe hacer antes de que su aplicación esté en funcionamiento en 64 bits:

  • Usted necesita un dispositivo capaz de ejecutar 64 bits para probar. Estos son todos dispositivos con un chip A7 o posterior (actualmente estos son: iPhone 5S, iPad Air, iPad Mini Retina, iPhone 6, iPhone 6 Plus, iPad Mini 3, iPad Air 2).
  • Necesita que todos sus plugins nativos se compilen con soporte de 64 bits (o se proporcionarán como código fuente). Si está utilizando un plugin de terceros, debe ponerse en contacto con su proveedor de plugins para obtener una versión compatible con 64 bits compatible con IL2CPP de ese plugin. Por el momento todos los nuevos plugins Prime31 son conocidos por ser buenos.
  • Si es un proveedor de plugins o simplemente tiene sus propios plugins nativos entonces necesita mantener un par de cosas en mente:
    • IL2CPP is not API-compatible (which is unexposed) with the Mono Runtime API, which means if plugin is using mono_* functions won’t link anymore. The best way to resolve this issue is to switch to managed delegate/callback approach and pass your managed callbacks to the native side of plugin and call them back from there when some native data or event arrives.
    • Todos los plugins que vienen como librerías estáticas pre-compiladas (archivos .a) ahora deberían incluir ARM64 slice.
    • Al hacer conversiones de código/tipo nativo tenga en cuenta que los punteros y longs son ahora de 64 bits de ancho y los ints son todavía 32 de ancho.
  • Para minimizar la cantidad de código C++, IL2CPP siempre (incluso cuando el Stripping level está configurado a Disabled) está haciendo algo del stripping del código manejado. A veces usted necesitará ayudarlo. Mire la guía de link.xml en el manual de optimización del iOS player.

Resolución de problemas

  • P: Mi código se está ejecutando más lento en IL2CPP que en Mono. Por qué? R: Asegúrese de que esté probando el rendimiento de su código en la configuración de Xcode Release. Si el problema todavía sigue, por favor envíe un bugreport!
  • P: El proyecto de Xcode generado por Unity falla a compilar con el siguiente o similar error: Method not found: 'Default constructor not found...ctor() of System.ComponentModel.Int64Converter'. R: Deserializadores y serializadores a menudo hacen referencia a algunos tipos sólo a través de .NET Reflection API y en tales casos, estos métodos o incluso las clases pueden ser eliminados del proyecto. Puede sugerir el descifrador de código administrado que la clase / el método específico se utiliza a través de link.xml o a través de la introducción del código ficticio que lo hace referencia explícitamente en uno de sus scripts.
  • P: El proyecto xcode generado por Unity falla a compilar con algún error. R: Por favor verifique si todos sus plugins soportan ARM64 y IL2CPP y si este es el caso, por favor envíe un bug report y adjunte su proyecto (o simplemente la parte de scripting) al bug report. Gracias!
iOS 2D Texture Overrides
Unity Remote