Можно ли отключить пользовательские клавиатуры (iOS8) для моего приложения?
EDIT: tl; dr - возможно, см. принятый ответ ниже.
Есть ли какой-либо (не только программный) способ предотвращения использования пользовательских клавиатур (iOS8) для моего приложения? Меня в основном интересует настройка "для каждого приложения", поэтому моему приложению не разрешено использовать пользовательские клавиатуры, но в последнее время отключить пользовательские клавиатуры в целом.
До сих пор я знаю, что пользовательские клавиатуры являются общесистемными и могут использоваться любым приложением. ОС вернется к клавиатуре запаса только для безопасного ввода текста (текстовые поля с secureTextEntry
установлены на YES
). Здесь мало надежды.
У меня появилось впечатление от App Extension Programming Guide
, что MDM (Mobile Device Management) может вообще запретить использование пользовательских клавиатур, но я не нашел эту опцию в новой бета-версии Apple Configurator.app
для OS X Yosemite. "Конфигуратор" просто не хватает этой опции?
Любые идеи здесь? Должен ли я регистрировать радар, чтобы предположить, что Apple должна ввести такую функциональность?
Ответы
Ответ 1
Похоже, вы получили то, что хотели в бета-семанте 3. Строка 440 из UIApplication.h:
// Applications may reject specific types of extensions based on the extension point identifier.
// Constants representing common extension point identifiers are provided further down.
// If unimplemented, the default behavior is to allow the extension point identifier.
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier NS_AVAILABLE_IOS(8_0);
В настоящее время он не включен в документы, но звучит так, как будто он будет делать именно то, что вы здесь задали.
Я предполагаю, что эти "идентификаторы точек расширения" не являются уникальными идентификаторами расширений, а их типов, поскольку это также относится к строке 545:
// Extension point identifier constants
UIKIT_EXTERN NSString *const UIApplicationKeyboardExtensionPointIdentifier NS_AVAILABLE_IOS(8_0);
TL;DR:, чтобы отключить пользовательские клавиатуры, вы включили бы что-то вроде этого в делегат приложения:
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier {
if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) {
return NO;
}
return YES;
}
Ответ 2
Swift 3:
func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
if extensionPointIdentifier == UIApplicationExtensionPointIdentifier.keyboard {
return false
}
return true
}
Ответ 3
Я просто хочу добавить это для тех разработчиков, которые хотят реализовать этот метод в Xamarin iOS. Идея состоит в том, чтобы переопределить метод ShouldAllowExtensionPointIdentifier
в AppDelegate
:
public override bool ShouldAllowExtensionPointIdentifier(UIApplication application, NSString extensionPointIdentifier)
{
if (extensionPointIdentifier == UIExtensionPointIdentifier.Keyboard)
{
return false;
}
return true;
}