По какой-то причине я больше не могу вводить текст с моей родной немецкой клавиатурой в iOS Simulator.
После загрузки XCode 6.1 (который содержит iOS 8.1), я застрял с макетом США.
Я пробовал такие вещи, как изменение всех настроек Hardware/Keyboard, удаление ~/Library/Preferences/com.apple.iphonesimulator.plist и сброс iOS-симулятора.
Ничего не помогло!
Должен ли я переустановить полный пакет?
Ответ 1
Это iOS 8.1 Симуляторы ошибок.
Я мог проверить язык, установив "Язык приложения" в используемой схеме.
Перейдите в раздел Продукт > Схемa > Изменить схему... или нажмите cmd + Y.
Источник: Ответ Yoshihiro Sakamoto в Apple Dev Forum
![enter image description here]()
Ответ 2
Это известная проблема с версией симулятора iOS 8.1 и упоминается в Примечания к выпуску Xcode 6.1:
Настройки локализации и клавиатуры, в том числе сторонние клавиатуры, неправильно соблюдаются приложениями Safari, Maps и разработчика в iOS 8.1 Simulator. [NSLocale currentLocale] возвращает en_US, и доступны только английские и Emoji-клавиатуры. (18418630, 18512161)
То же самое относится к другим предпочтениям, которые должны влиять на все приложения, а не только на локаль (например: настройки клавиатуры).
Как упоминалось в iOS SDK 8.2 beta 2 Примечания к выпуску, эта проблема должна быть решена в iOS 8.2:
Исправлено в бета-версии 2 Дополнительные клавиатуры, включая сторонние клавиатуры, может не отображаться в Safari, Maps или сторонних приложениях в iOS Simulator
Если вам нужно использовать iOS 8.1, вы можете использовать немецкий макет в некоторых приложениях, но не другие. Например, Safari и Maps - это два примера приложений, с которыми он не будет работать.
Ответ 3
Прежде чем Apple сделает исправление, можно использовать следующее проверенное решение на основе NSLocale swizzling
.
На самом деле нам нужно только заменить неправильный currentLocale
, который нарушен в iOS8.1 симуляторе.
Прикрепите категорию к проектам и добавьте ее в файл .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]()
Еще одна вещь, используя этот подход, вы получаете один приятный побочный эффект: клавиатура, выбранная по языку категории, всегда используется и не зависит от системных настроек и добавленных клавиш. Поэтому для установки симулятора reset не требуется снова добавлять клавиатуру.
Подкласс категории позволяет переопределять языковые и региональные настройки для всех целей одновременно без изменения этих параметров в каждой целевой схеме отдельно.
Ответ 4
на вашей целевой схеме редактирования → выберите приложение lang и область приложения (немецкий). программный клавиатурный переключатель макет ok, аппаратное обеспечение нет)
Ответ 5
Существует еще одна известная проблема с 8.1, которая заставляет клавиатуру не отображаться в симуляторе.
Клавиатуры Известный выпуск Дополнительные клавиатуры, в том числе сторонние клавиатурах, может не отображаться в Safari, Картах или сторонних приложениях на Тренажер.
Обходной путь: клавиатура должна проверяться в Календаре, Spotlight, Контакты и фотографии.
Я интерпретирую это как означающее, что ваше приложение для приложения не будет работать. Моя клавиатура не отображается в Safari или Maps, но отлично работает в панели поиска фотографий.
Ответ 6
@malex ', запустив currentLocale и добавив его в файл .pch, почти помогло. Он включил языковую клавиатуру (датский), но не сделал ее клавиатурой по умолчанию.
Чтобы сделать это клавиатурой по умолчанию, мне пришлось также использовать метод preferredLanguages в NSLocale.
Спасибо @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
Ответ 7
В качестве альтернативы исправлениям, упомянутым выше, можно использовать переменные среды в качестве работы.
Добавьте переменную окружения, скажем, "myLocale" в разделе: edit schem > arguments > переменные среды на Xcode.
(Обязательно включите переменную окружения всякий раз, когда вы хотите заставить локаль по своему вкусу)
![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");
}
Ответ 8
В приложении "Настройки" в разделе "Основные" > "Клавиатура" > "Клавиатуры" нажмите (щелкните) "Добавить новую клавиатуру":
![enter image description here]()
Если вы имеете в виду, что Simulator не будет принимать входные данные с вашей аппаратной клавиатуры, вам необходимо подключить его (command-shift-K):
![enter image description here]()
Это меню Hardware > Keyboard.