iOS 8.1 Simulator siempre usa el diseño de teclado de los EE. UU. a pesar del teclado de hardware alemán

Por alguna razón, ya no puedo ingresar texto con mi teclado alemán nativo en iOS Simulator.

Después de descargar Xcode 6.1 (que contiene iOS 8.1), estaba atascado con el diseño de EE. UU.

Intenté cosas como cambiar todas las configuraciones de Hardware / Teclado, eliminar ~/Library/Preferences/com.apple.iphonesimulator.plist , y reiniciar el simulador de iOS.

¡Nada ayudó!

¿Debo reinstalar el paquete completo?

Son los errores del simulador de iOS 8.1.

Pude probar el idioma configurando el “Idioma de la aplicación” en el esquema utilizado.

Vaya a Producto> Esquema> Editar esquema … o presione cmd + Y.

Fuente: Respuesta de Yoshihiro Sakamoto en el Apple Dev Forum

enter image description here

Este es un problema conocido con el tiempo de ejecución del simulador iOS 8.1 y se menciona en las Notas de la versión de Xcode 6.1 :

Los ajustes de localización y teclado, incluidos los teclados de terceros, no son respetados correctamente por Safari, Maps y las aplicaciones de desarrollador en el simulador iOS 8.1. [NSLocale currentLocale] devuelve en_US y solo están disponibles los teclados en inglés y Emoji. (18418630, 18512161)

Lo mismo es cierto para otras preferencias que deberían afectar a todas las aplicaciones y no solo a la configuración regional (p. Ej .: configuración del teclado).

Como se menciona en las notas de la versión de iOS SDK 8.2 beta 2 , este problema debería resolverse en iOS 8.2:

Solucionado en beta 2 Los teclados adicionales, incluidos los teclados de terceros, pueden no aparecer en Safari, Maps o aplicaciones de terceros en iOS Simulator

Si necesita usar iOS 8.1, debería poder utilizar el diseño alemán en algunas aplicaciones, pero no en otras. Por ejemplo, Safari y Maps son dos ejemplos de aplicaciones con las que no funcionará.

Antes de que Apple haga una corrección, se puede usar la siguiente solución comprobada basada en NSLocale swizzling .

De hecho, solo tenemos que sustituir el currentLocale incorrecto que está roto en el simulador iOS8.1.

Adjunte la categoría a los proyectos y agréguela en el archivo .pch ( no olvide borrar y reconstruir el proyecto ).

 // NSLocale+ios8.h // Created by Alexey Matveev on 01.11.2014. // Copyright (c) 2014 Alexey Matveev. All rights reserved. #if TARGET_IPHONE_SIMULATOR // define here your locale identifier: de_DE, ru_RU, etc #define LOCALE_IDENTIFIER @"de_DE" @interface NSLocale (iOS8) @end #endif // NSLocale+ios8.m // Created by Alexey Matveev on 01.11.2014. // Copyright (c) 2014 Alexey Matveev. All rights reserved. #if TARGET_IPHONE_SIMULATOR #import "NSLocale+ios8.h" #import  @implementation NSLocale (iOS8) + (void)load { Method originalMethod = class_getClassMethod(self, @selector(currentLocale)); Method swizzledMethod = class_getClassMethod(self, @selector(swizzled_currentLocale)); method_exchangeImplementations(originalMethod, swizzledMethod); } + (NSLocale*)swizzled_currentLocale { return [NSLocale localeWithLocaleIdentifier:LOCALE_IDENTIFIER]; } @end #endif 

Espero que ahora veas lo mismo

Captura de pantalla del simulador iOS8 con teclado alemán

Una cosa más, el uso de este enfoque tiene un efecto secundario agradable: el teclado elegido a través de la configuración regional de la categoría siempre está en uso y no depende de la configuración del sistema ni de los teclados agregados. Por lo tanto, el restablecimiento de la configuración del simulador no requiere agregar tu teclado nuevamente.

El enfoque de categoría permite anular las configuraciones de idioma y región para todos los objectives a la vez sin hacer el cambio de estos parámetros en cada esquema de destino por separado.

en su objective, vaya a editar el esquema -> seleccione la lengua de su aplicación y la región de aplicación (alemán). software de distribución del teclado, ok, hardware)

Hay otro problema conocido con 8.1 que hace que los teclados no se muestren en el simulador.

Teclados Problema conocido Los teclados adicionales, incluidos los teclados de terceros, pueden no aparecer en Safari, Maps o aplicaciones de terceros en el simulador.

Solución alternativa: los teclados deben poderse probar en Calendario, Foco, Contactos y Fotos.

Interpreto que esto significa que tu aplicación adjunta tampoco funcionará. Mi teclado no se mostrará en Safari o Maps, pero funciona bien en la barra de búsqueda de Fotos.

La solución @malex ‘al cambiar el actualLocale y agregarlo al archivo .pch casi me convenció. Habilitaba el teclado regional (danés) pero no lo convertía en el teclado predeterminado.

Para que sea el teclado predeterminado, también tuve que cambiar el método de idiomas preferidos en NSLocale.

Gracias @malex.

En total, terminó siendo:

 @interface NSLocale (iOS8) @end @implementation NSLocale (iOS8) + (void)load { Method originalCurrentLocale = class_getClassMethod(self, @selector(currentLocale)); Method swizzledCurrentLocale = class_getClassMethod(self, @selector(swizzled_currentLocale)); method_exchangeImplementations(originalCurrentLocale, swizzledCurrentLocale); Method originalPreferredLanguages = class_getClassMethod(self, @selector(preferredLanguages)); Method swizzledPreferredLanguages = class_getClassMethod(self, @selector(swizzled_preferredLanguages)); method_exchangeImplementations(originalPreferredLanguages, swizzledPreferredLanguages); } + (NSLocale *)swizzled_currentLocale { return [NSLocale localeWithLocaleIdentifier:@"da_DK"]; } + (NSArray *)swizzled_preferredLanguages { return @[@"da"]; } @end 

Como alternativa a las correcciones mencionadas anteriormente, uno puede hacer uso de las variables de entorno como una alternativa.

Agregue una variable de entorno, diga “myLocale” en: esquema de edición> argumentos> variables de entorno en Xcode.

(Asegúrese de habilitar la variable de entorno siempre que quiera forzar la configuración regional de su agrado) enter image description here

En su código, puede agregar una condición para verificar si la variable de entorno está habilitada.

 NSString *locale = [[[NSProcessInfo processInfo] environment] objectForKey:@"myLocale"]; if (locale) { NSLog(@"Using environment variable for locale"); } else{ NSLog(@"Using locale configured from settings"); } 

En la aplicación Configuración, en General> Teclado> Teclados, toque (clic) Agregar nuevo teclado:

enter image description here

Si quiere decir que el Simulador no aceptará la entrada de su teclado de hardware, necesita conectarlo (command-shift-K):

enter image description here

Esto está en el menú Hardware> Teclado.