Localice el nombre de la aplicación iOS en Unity

Estoy desarrollando un juego Unity3D que muestra un nombre de aplicación diferente (localizado) en la pantalla de inicio del iPhone según el idioma local del usuario. Tenga en count que:

  1. Ya sé cómo localizar el nombre de la aplicación iOS editando el proyecto Xcode (crea un file InfoPlist.string , InfoPlist.string , agrega la key CFBundleDisplayName , etc.)

  2. También sé cómo localizar automáticamente un nombre de aplicación de Android en el editor de Unity (agregue un file values-XX.xml con la propiedad app_name en Assets/Plugins/Android/res/ folder, etc.)

La pregunta es: ¿cómo puedo localizar automáticamente el nombre de mi aplicación iOS dentro de Unity Editor para que no necesite realizar la tarea propensa al error 1. cada vez que construyo el proyecto?

Creo que PostprocessBuildPlayer debería ser el path a seguir; sin embargo, no he encontrado ninguna documentation sobre cómo analizarlo y / o modificar correctamente el file del proyecto Xcode para lograrlo.

Hace mucho time me encontré con problemas cuando traté de modificar info.plist a través de Build Player Pipeline, especialmente cuando lo hago en modo Append . Funciona solo una vez y luego las comstackciones posteriores fallan con " Los datos no se pudieron leer porque no están en el formatting correcto". (s. Publicaciones del foro Unity como esta y mi blog publicando sobre este problema) Así que decidí tomar la forma alternativa de combinar una compilation personalizada con una XCode Build Pre-action.

Se requieren tres pasos:

(1) Configuración de Xcode:

En Xcode, vaya a Modificar esquema / Construcción / Pre acciones . Luego, click el signo + para agregar una nueva acción Ejecutar script .

  • En Proporcionar configuraciones de compilation, select Unity-iPhone .
  • Pegar . ${PROJECT_DIR}/modify_info_plist.sh (observe el punto y el espacio en blanco al principio, se asegura de que el script se ejecute en el shell del llamante)

Entonces debería verse así: Xcode captura de pantalla

(2) Script modify_info_plist.sh:

Dentro de su script, tiene acceso a todas las variables de entorno de Xcode ( reference Xcode Build Setting Reference ) y puede manipular Info.plist utilizando el command defaults ( página man ). Aquí hay una muestra que usé para agregar gyroscope a UIRequinetworkingDeviceCapabilities :

 # Code snippet used in Unity-iPhone scheme as "Build Pre-Action" my_domain=${PROJECT_DIR}/Info.plist status_bar_key=UIViewControllerBasedStatusBarAppearance logger "Start adding keys to info.plist" defaults write $my_domain $status_bar_key -boolean NO if [ `defaults read $my_domain UIRequinetworkingDeviceCapabilities | grep "gyroscope" | wc -l` = "0" ]; then defaults write $my_domain UIRequinetworkingDeviceCapabilities -array-add "gyroscope" fi logger "Keys added to info.plist successfully" 

(3) Build Pipeline:

Ponga el siguiente código en una class de editor estático para crear un nuevo elemento del menu Herramientas / Mi iOS Comstackción con acceso directo cmd + alt + b :

 static string IOSBuildDir= "Develop"; [MenuItem("Tools/My iOS Build %&b")] public static void IOSBuild () { string[] levels = { "Assets/Scenes/Boot.unity", "Assets/Scenes/Level-1.unity", // ... "Assets/Scenes/Menu.unity" }; string path = Directory.GetCurrentDirectory (); path += "/" + IOSBuildDir + "/Info.plist"; if (File.Exists (path)) { Debug.Log ("Removing file " + path); File.Delete (path); } BuildPipeline.BuildPlayer (levels, "Develop", BuildTarget.iPhone, BuildOptions.AcceptExternalModificationsToPlayer); } 

Sé que esta no es una solución perfecta, pero es la única que encontré estable. Dos inconvenientes:

  • El paso (1) debe repetirse después de que se cambie el formatting Xcode.
  • Las nuevas escenas deben agregarse en el código de class del editor en el paso (3)