Recientemente he publicado mi primer videojuego para iOS hecho con libGDX: Rainbow Diamonds.
Después de empaquetar la aplicación para distribuirla en el App Store de Apple, me encontré algunos problemas que me impedían hacer la subida a iTunes Connect. Estos errores se producen porque el archivo Info.plist.xml generado al crear el proyecto con libGDX no contiene toda la información necesaria para distribuir la aplicación en el App Store. Además, la modificación del fichero también me obliga a incluir nuevos recursos (iconos y launch screens).
Aclaro que en mi caso se trata de un videojuego para iPhone y iPad que funciona con orientación apaisada. En otros casos la configuración y los recursos necesarios pueden varias ligeramente.
Info.plist.xml
A continuación os dejo tanto el archivo original del proyecto (incompleto) como el archivo modificado (que permite la distribución de la aplicación) para que podáis ver las diferencias.
Archivo original (NO es válido)
El fichero original que se genera al crear el proyecto, y que no permite la publicación, sería tal que así:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleDisplayName</key> <string>${app.name}</string> <key>CFBundleExecutable</key> <string>${app.executable}</string> <key>CFBundleIdentifier</key> <string>${app.id}</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>${app.name}</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>${app.version}</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>${app.build}</string> <key>LSRequiresIPhoneOS</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/> <key>UIStatusBarHidden</key> <true/> <key>UIDeviceFamily</key> <array> <integer>1</integer> <integer>2</integer> </array> <key>UIRequiredDeviceCapabilities</key> <array> <string>armv7</string> <string>opengles-2</string> </array> <key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> <key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon</string> <string>Icon-72</string> </array> </dict> </dict> </dict> </plist> |
Archivo modificado
Esta versión del archivo sí permite distribuir la aplicación para iPhone e iPad.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleDisplayName</key> <string>${app.name}</string> <key>CFBundleExecutable</key> <string>${app.executable}</string> <key>CFBundleIconFile</key> <string>Icon-57.png</string> <key>CFBundleIconFiles</key> <array> <string>Icon-29</string> <string>Icon-40</string> <string>Icon-50</string> <string>Icon-57</string> <string>Icon-58</string> <string>Icon-72</string> <string>Icon-76</string> <string>Icon-80</string> <string>Icon-87</string> <string>Icon-100</string> <string>Icon-114</string> <string>Icon-120</string> <string>Icon-144</string> <string>Icon-152</string> <string>Icon-180</string> </array> <key>CFBundleIconFiles~ipad</key> <array> <string>Icon-29</string> <string>Icon-40</string> <string>Icon-50</string> <string>Icon-57</string> <string>Icon-58</string> <string>Icon-72</string> <string>Icon-76</string> <string>Icon-80</string> <string>Icon-87</string> <string>Icon-100</string> <string>Icon-114</string> <string>Icon-120</string> <string>Icon-144</string> <string>Icon-152</string> <string>Icon-180</string> </array> <key>CFBundleIdentifier</key> <string>${app.id}</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>${app.name}</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>${app.version}</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>${app.build}</string> <key>LSRequiresIPhoneOS</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/> <key>UIStatusBarHidden</key> <true/> <key>UIDeviceFamily</key> <array> <integer>1</integer> <integer>2</integer> </array> <key>UIRequiredDeviceCapabilities</key> <array> <string>armv7</string> <string>opengles-2</string> </array> <key>UIRequiresFullScreen</key> <true/> <key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> <key>MinimumOSVersion</key> <string>7.1.2</string> </dict> </plist> |
Nuevos recursos
Será necesario además incluir nuevos iconos e imágenes de launch screens para todos los dispositivos soportados.
Iconos
Con el nuevo archivo, se declaran más iconos de diferentes tamaños, con lo cual será necesario incluir las versiones de estos iconos delntro del directorio data/ del módulo ios de nuestro juego.
| Nombre del archivo | Dimensiones |
|---|---|
| Icon-29.png | 29×29 pixeles |
| Icon-40.png | 40×40 pixeles |
| Icon-50.png | 50×50 pixeles |
| Icon-57.png | 57×57 pixeles |
| Icon-58.png | 58×58 pixeles |
| Icon-72.png | 72×72 pixeles |
| Icon-76.png | 76×76 pixeles |
| Icon-80.png | 80×80 pixeles |
| Icon-87.png | 87×87 pixeles |
| Icon-100.png | 100×100 pixeles |
| Icon-114.png | 114×114 pixeles |
| Icon-120.png | 120×120 pixeles |
| Icon-144.png | 144×144 pixeles |
| Icon-152.png | 152×152 pixeles |
| Icon-180.png | 180×180 pixeles |
Launch screens
Las pantallas de inicio, o launch screens, son la primera imagen que se muestra al usuario mientas está cargando la aplicación. En función de los dispositivos y orientaciones soportadas, nuestra aplicación debe incluir launch screens de diferentes tamaños. En mi caso, la aplicación incluye las siguientes:
| Nombre del archivo | Dimensiones |
|---|---|
| Default.png | 320×480 pixeles |
| Default@2x.png | 640×960 pixeles |
| Default~ipad.png | 768×1004 pixeles |
| Default@2x~ipad.png | 1536×2008 pixeles |
| Default-Landscape~ipad.png | 1024×768 pixeles |
| Default-1024w-1366h@2x~ipad.png | 2048×2732 pixeles |
Para saber más
Puedes consultar toda la información que podemos incluir en el archivo Info.plist.xml en la documentación oficial de Apple.