El simulador iOS8.1 siempre usa el layout de keyboard de EE. UU. a pesar del keyboard de hardware alemán

Por alguna razón, no puedo ingresar text con mi keyboard nativo alemán en iOS Simulator más.

Después de download XCode 6.1 (que contiene iOS 8.1), me quedé atrapado con el layout de Estados Unidos.

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

¡Nada ayudó!

¿Debo volver a instalar el package completo?

Son los errores de iOS 8.1 Simulator.

Podría probar el idioma configurando el "Idioma de la aplicación" en el esquema usado.

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

Fuente: Respuesta de Yoshihiro Sakamoto en el Foro Apple Dev

introduzca la descripción de la imagen aquí

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

La configuration de localización y keyboard, incluidos los keyboards de terceros, no se cumplen correctamente con Safari, Maps y aplicaciones de desarrollador en iOS 8.1 Simulator. [NSLocale currentLocale] devuelve en_US y solo están disponibles los keyboards inglés y Emoji. (18418630, 18512161)

Lo mismo es cierto para otras preferences que deberían afectar a todas las aplicaciones y no solo a la configuration regional (por ejemplo, la configuration del keyboard).

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

Solucionado en beta 2 Los keyboards adicionales, incluidos los keyboards 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 layout 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 arreglos, uno puede usar la siguiente solución comprobada basada en el NSLocale swizzling .

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

Adjunte la categoría a proyectos y .pch file .pch ( no olvide borrar y rebuild 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 <objc/runtime.h> @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, usando este enfoque, obtienes un efecto secundario placinteger: el keyboard elegido a través de la configuration regional siempre está en uso y no depende de la configuration del sistema y los keyboards añadidos. Por lo tanto, el reinicio de la configuration del simulador no requiere volver a agregar el keyboard.

El enfoque de categoría le permite a uno anular las configuraciones de idioma y región para todos los objectives a la vez sin cambiar estos parameters en cada esquema de destino por separado.

En su objective vaya editar esquema -> select su idioma de aplicación y región de aplicación (alemán). layout del interruptor de keyboard de software correcto, hardware no)

Existe otro problema conocido con 8.1 que hace que los keyboards no se muestren en el simulador.

Teclados Problema conocido Teclados adicionales, incluidos los keyboards de terceros, pueden no aparecer en Safari, Mapas o aplicaciones de terceros en el simulador.

Solución: los keyboards deben ser comprobables en Calendario, Spotlight, Contactos y Fotos.

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

La solución de @malex al swizzling the currentLocale y al agregarlo al file .pch casi me sirvió. Habilitó el keyboard local (danés) pero no lo convirtió en el keyboard pnetworkingeterminado.

Para que sea el keyboard pnetworkingeterminado, tuve que cambiar el método prefernetworkingLanguages ​​en NSLocale también.

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 originalPrefernetworkingLanguages = class_getClassMethod(self, @selector(prefernetworkingLanguages)); Method swizzledPrefernetworkingLanguages = class_getClassMethod(self, @selector(swizzled_prefernetworkingLanguages)); method_exchangeImplementations(originalPrefernetworkingLanguages, swizzledPrefernetworkingLanguages); } + (NSLocale *)swizzled_currentLocale { return [NSLocale localeWithLocaleIdentifier:@"da_DK"]; } + (NSArray *)swizzled_prefernetworkingLanguages { return @[@"da"]; } @end 

Como una alternativa a las soluciones mencionadas anteriormente, uno puede hacer uso de las variables de entorno como una solución.

Agregue una variable de entorno, diga "myLocale" en: editar esquema> arguments> variables de entorno en Xcode.

(Asegúrate de habilitar la variable de entorno siempre que quieras forzar la configuration regional de tu gusto) introduzca la descripción de la imagen aquí

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 configunetworking from settings"); } 

En la aplicación Configuración, en General> Teclado> Teclados, toca (haz clic) Agregar nuevo keyboard:

introduzca la descripción de la imagen aquí

Si quiere decir que el simulador no aceptará la input de su keyboard de hardware, debe conectarlo (command-shift-K):

introduzca la descripción de la imagen aquí

Esto se encuentra en el menu Hardware> Teclado.