Подтвердить что ты не робот

Можно ли отключить пользовательские клавиатуры (iOS8) для моего приложения?

EDIT: tl; dr - возможно, см. принятый ответ ниже.

Есть ли какой-либо (не только программный) способ предотвращения использования пользовательских клавиатур (iOS8) для моего приложения? Меня в основном интересует настройка "для каждого приложения", поэтому моему приложению не разрешено использовать пользовательские клавиатуры, но в последнее время отключить пользовательские клавиатуры в целом.

До сих пор я знаю, что пользовательские клавиатуры являются общесистемными и могут использоваться любым приложением. ОС вернется к клавиатуре запаса только для безопасного ввода текста (текстовые поля с secureTextEntry установлены на YES). Здесь мало надежды.

У меня появилось впечатление от App Extension Programming Guide, что MDM (Mobile Device Management) может вообще запретить использование пользовательских клавиатур, но я не нашел эту опцию в новой бета-версии Apple Configurator.app для OS X Yosemite. "Конфигуратор" просто не хватает этой опции?

Любые идеи здесь? Должен ли я регистрировать радар, чтобы предположить, что Apple должна ввести такую ​​функциональность?

4b9b3361

Ответ 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;
}