web-dev-qa-db-ja.com

アプリのカスタムキーボード(iOS8)を無効にできますか?

編集:tl; dr-可能です。以下の承認された回答を参照してください。

カスタムキーボード(iOS8)がアプリケーションに使用されないようにする(プログラムだけでなく)方法はありますか?私は主に「アプリごと」の設定に関心があるため、アプリだけでカスタムキーボードを使用することはできませんが、システム全体でカスタムキーボードを無効にするのが最後の手段です。

これまでのところ、カスタムキーボードはシステム全体であり、どのアプリケーションでも使用できることを知っています。 OSは、安全なテキスト入力(secureTextEntryYESに設定されたテキストフィールド)の場合にのみ、ストックキーボードにフォールバックします。ここではあまり希望はありません。

App Extension Programming Guideから、MDM(モバイルデバイス管理)によってデバイスがカスタムキーボードを使用することをまったく制限できるという印象を受けましたが、OS XYosemite用のApple Configurator.appの新しいベータバージョンではそのオプションが見つかりませんでした。 'Configurator'にはそのオプションがありませんか?

ここに何かアイデアはありますか? Appleがそのような機能を導入する必要があることを示唆するためにレーダーを提出する必要がありますか?

27
matm

ベータシード3で必要なものが得られたようです。UIApplication.hの440行目:

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

TLDR:カスタムキーボードを無効にするには、アプリデリゲートに次のようなものを含めます。

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier {
    if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) {
        return NO;
    }
    return YES;
}
48
Filip Radelic

スウィフト3:

func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
    if extensionPointIdentifier == UIApplicationExtensionPointIdentifier.keyboard {
        return false
    }
    return true
}
10
wuf810

XamariniOSでこのメソッドを実装したい開発者のためにこれを追加したいと思います。アイデアは、ShouldAllowExtensionPointIdentifierAppDelegateメソッドをオーバーライドすることです。

public override bool ShouldAllowExtensionPointIdentifier(UIApplication application, NSString extensionPointIdentifier)
{
    if (extensionPointIdentifier == UIExtensionPointIdentifier.Keyboard) 
    {           
        return false;
    }
    return true;
}
4
Sugat