web-dev-qa-db-fra.com

le simulateur iOS 8.1 utilise toujours la disposition du clavier américain malgré le clavier allemand

Pour une raison quelconque, je ne peux plus entrer de texte avec mon clavier allemand natif dans iOS Simulator.

Après avoir téléchargé Xcode 6.1 (qui contient iOS 8.1), je suis resté coincé avec la mise en page américaine.

J'ai essayé des choses telles que la modification de tous les paramètres Matériel/Clavier, la suppression de ~/Library/Preferences/com.Apple.iphonesimulator.plist et la réinitialisation du simulateur iOS.

Rien n'a aidé!

Devrais-je réinstaller le package complet?

50
pawi

Ce sont les bogues du simulateur iOS 8.1. 

J'ai pu tester la langue en définissant la "Langue de l'application" dans le schéma utilisé.

Accédez à Produit> Schéma> Modifier le schéma ... ou appuyez sur les touches cmd + Y. 

Source: Réponse de Yoshihiro Sakamoto au forum Apple Dev

enter image description here

33
dobiho

Il s'agit d'un problème connu lié à l'exécution du simulateur iOS 8.1 et qui est mentionné dans les Notes de publication de Xcode 6.1 :

Les paramètres de localisation et de clavier, y compris les claviers tiers, ne sont pas correctement pris en compte par Safari, les applications de développement et les applications dans le simulateur iOS 8.1. [NSLocale currentLocale] retourne en_US et seuls les claviers anglais et Emoji sont disponibles. (18418630, 18512161)

Il en va de même pour les autres préférences qui devraient affecter toutes les applications et pas seulement les paramètres régionaux (par exemple, les paramètres du clavier).

Comme mentionné dans les notes de publication de iOS SDK 8.2 beta beta 2 , ce problème doit être résolu dans iOS 8.2:

Corrigé dans la version bêta 2 Claviers supplémentaires, y compris les claviers tiers, peut ne pas apparaître dans les applications Safari, Maps ou tierces dans iOS Simulator

Si vous devez utiliser iOS 8.1, vous devriez pouvoir utiliser la disposition allemande dans certaines applications mais pas dans d'autres. Par exemple, Safari et Maps sont deux exemples d'applications avec lesquelles cela ne fonctionnera pas.

Avant que Apple ne répare ses problèmes, vous pouvez utiliser la solution vérifiée suivante, basée sur NSLocale swizzling.

En fait, nous n'avons besoin que de substituer le mauvais currentLocale qui est cassé dans le simulateur iOS8.1.

Attachez la catégorie aux projets et ajoutez-la dans le fichier .pch ( n'oubliez pas d'effacer et de reconstruire le projet ).

//  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

J'espère que maintenant vous voyez la même chose

iOS8 simulator screenshot with German keyboard

Une dernière chose, en utilisant cette approche, vous obtenez un effet secondaire agréable: le clavier choisi via les paramètres régionaux de la catégorie est toujours utilisé et ne dépend pas des paramètres système et des claviers ajoutés. Ainsi, la réinitialisation des paramètres du simulateur ne nécessite pas l'ajout de votre clavier à nouveau. 

L'approche par catégorie permet de remplacer les paramètres de langue et de région pour toutes les cibles en même temps sans modifier séparément ces paramètres dans chaque schéma de cible.

13
malex

sur votre cible allez modifier le schéma -> sélectionnez votre langue d’application et votre région d’application (en allemand). disposition du clavier logiciel ok, matériel non) 

Il existe un autre problème connu avec la version 8.1, qui empêche l'affichage des claviers dans le simulateur. 

Claviers Problème connu Claviers supplémentaires, y compris ceux de tiers claviers, peuvent ne pas apparaître dans les applications Safari, Maps ou tierces sur le Simulateur.

Solution de contournement: les claviers doivent pouvoir être testés dans Calendar, Spotlight, Contacts et photos.

J'interprète cela comme signifiant que votre application ne fonctionnera pas non plus. Mon clavier ne s'affiche pas dans Safari ou dans Maps, mais fonctionne correctement dans la barre de recherche Photos.

7
SafeFastExpressive

La solution de @malex en balayant currentLocale et en l'ajoutant au fichier .pch a presque fait l'affaire pour moi. Il a activé le clavier de paramètres régionaux (danois), mais ne l'a pas fait comme clavier par défaut.

Pour en faire le clavier par défaut, je devais aussi bien utiliser la méthode preferredLanguages ​​sur NSLocale.

Merci @ malex.

En somme, cela a fini par être:

@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
2
micmdk

Au lieu des correctifs mentionnés ci-dessus, vous pouvez utiliser des variables d’environnement comme solution de contournement.

Ajoutez une variable d’environnement, dites "myLocale" sous: modifier le schéma> arguments> les variables d’environnement sur Xcode.

(Assurez-vous d'activer la variable d'environnement chaque fois que vous souhaitez forcer les paramètres régionaux de votre choix) enter image description here

Dans votre code, vous pouvez ajouter une condition pour vérifier si la variable d'environnement est activée.

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

Dans l'application Paramètres, sous Général> Clavier> Claviers, appuyez sur (cliquez) Ajouter un nouveau clavier:

enter image description here

Si vous voulez dire que le simulateur n'accepte pas les entrées de votre clavier matériel, vous devez le connecter (commande-shift-K):

enter image description here

Cela se trouve dans le menu Matériel> Clavier.

0
Undo