出于某种原因,我无法再使用我的原生德语键盘输入文本进入iOS模拟器。
下载Xcode 6.1(包含iOS 8.1)后,我陷入了美国布局。
我尝试过更改所有硬件/键盘设置,删除~/Library/Preferences/com.apple.iphonesimulator.plist
和重置iOS模拟器等内容。
没有任何帮助!
我应该重新安装完整的包吗?
答案 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
答案 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
希望你现在看到相同的
还有一件事,使用这种方法可以得到一个很好的副作用:通过类别区域设置选择的键盘始终在使用,并且不依赖于系统设置和添加的键盘。因此,模拟器设置重置不需要再次添加键盘。
类别方法允许您同时覆盖所有目标的语言和区域设置,而无需单独更改每个目标方案中的这些参数。
答案 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;键盘,点击(单击)添加新键盘:
如果您的意思是模拟器不接受硬件键盘的输入,则需要连接它(命令移位-K):
这是在硬件&gt;键盘菜单。
答案 7 :(得分:0)
作为上述修复的替代方法,可以将环境变量用作解决方法。
在Xcode上添加一个环境变量,例如“myLocale”:edit scheme&gt; arguments&gt;环境变量。
(确保在您想要强制使用您喜欢的语言环境时启用环境变量)
在您的代码中,您可以添加一个条件来检查环境变量是否已启用。
NSString *locale = [[[NSProcessInfo processInfo] environment] objectForKey:@"myLocale"];
if (locale) {
NSLog(@"Using environment variable for locale");
} else{
NSLog(@"Using locale configured from settings");
}