尽管德国硬件键盘,iOS 8.1模拟器始终使用美国键盘布局

时间:2014-10-01 17:03:45

标签: ios xcode keyboard ios-simulator

出于某种原因,我无法再使用我的原生德语键盘输入文本进入iOS模拟器。

下载Xcode 6.1(包含iOS 8.1)后,我陷入了美国布局。

我尝试过更改所有硬件/键盘设置,删除~/Library/Preferences/com.apple.iphonesimulator.plist和重置iOS模拟器等内容。

没有任何帮助!

我应该重新安装完整的包吗?

8 个答案:

答案 0 :(得分:46)

这是iOS 8.1模拟器运行时的已知问题,在Xcode 6.1 Release Notes中提及:

  

iOS 8.1模拟器中的Safari,地图和开发人员应用无法正确识别本地化和键盘设置(包括第三方键盘)。 [NSLocale currentLocale]返回en_US,只有英语和表情符号键盘可用。 (18418630,18512161)

对于应该影响所有应用而不仅仅是语言环境的其他偏好(例如:键盘设置)也是如此。

iOS SDK 8.2 beta 2 Release Notes中所述,此问题应在iOS 8.2中解决:

  

已修复测试版2其他键盘,包括第三方键盘,   可能不会出现在iOS模拟器中的Safari,地图或第三方应用

如果您需要使用iOS 8.1,您应该能够在某些应用中使用德语布局而不能使用其他应用。例如,Safari和地图是两个无法使用的应用示例。

答案 1 :(得分:34)

这是iOS 8.1模拟器的错误。

我可以通过设置"应用程序语言"来测试语言。在使用的方案中。

转到产品>方案>编辑方案...或按cmd + Y.

来源:Answer of Yoshihiro Sakamoto in Apple Dev Forum

enter image description here

答案 2 :(得分:13)

在Apple进行修复之前,可以使用基于NSLocale swizzling的以下检查解决方案。

实际上我们只需要替换在iOS8.1模拟器中被破坏的错误currentLocale

将类别附加到项目并将其添加到.pch文件中(不要忘记清除和重建项目)。

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

希望你现在看到相同的

iOS8 simulator screenshot with German keyboard

还有一件事,使用这种方法可以得到一个很好的副作用:通过类别区域设置选择的键盘始终在使用,并且不依赖于系统设置和添加的键盘。因此,模拟器设置重置不需要再次添加键盘。

类别方法允许您同时覆盖所有目标的语言和区域设置,而无需单独更改每个目标方案中的这些参数。

答案 3 :(得分:9)

在你的目标上去编辑方案 - &gt;选择您的应用程序和应用程序区域(德语)。软件键盘开关布局好,硬件没有)

答案 4 :(得分:7)

8.1存在另一个已知问题,导致键盘无法在模拟器中显示。

  

键盘已知问题附加键盘,包括第三方   键盘,可能不会出现在Safari,地图或第三方应用上   模拟器。

     

解决方法:键盘应该可在日历,Spotlight中测试   联系人和照片。

我认为这意味着你的封闭应用程序也无法正常工作。我的键盘不会显示在Safari或地图中,但在照片搜索栏中可以正常工作。

答案 5 :(得分:2)

@ malex&#39;通过调整currentLocale并将其添加到.pch文件的解决方案几乎可以解决这个问题。它启用了语言环境键盘(丹麦语)但它没有使它成为默认键盘。

要使它成为默认键盘,我必须在NSLocale上调用preferredLanguages方法。

谢谢@malex。

总而言之:

@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

答案 6 :(得分:0)

在“设置”应用中,在“常规”&gt;下;键盘&gt;键盘,点击(单击)添加新键盘:

enter image description here

如果您的意思是模拟器不接受硬件键盘的输入,则需要连接它(命令移位-K):

enter image description here

这是在硬件&gt;键盘菜单。

答案 7 :(得分:0)

作为上述修复的替代方法,可以将环境变量用作解决方法。

在Xcode上添加一个环境变量,例如“myLocale”:edit scheme&gt; arguments&gt;环境变量。

(确保在您想要强制使用您喜欢的语言环境时启用环境变量) enter image description here

在您的代码中,您可以添加一个条件来检查环境变量是否已启用。

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