2014-07-03 64 views
22

编辑:tl;博士 - 这是可能的,请参阅下面的接受答案。我可以为我的应用程序禁用自定义键盘(iOS8)吗?

是否有任何防止自定义键盘(iOS8)用于我的应用程序(不仅是程序化)的方式?我主要对“每应用程序”设置感兴趣,因此我的应用程序不允许使用自定义键盘,但禁用系统范围内的自定义键盘是最后的选择。

到目前为止,我知道自定义键盘是系统范围的,可以被任何应用程序使用。操作系统将退回到股票键盘仅用于安全文本输入(secureTextEntry设置为YES的文本字段)。这里没有多少希望。

我从App Extension Programming Guide得到了一个印象,即MDM(移动设备管理)可以限制设备使用自定义键盘,但我在OS X Yosemite的新测试版Apple Configurator.app中没有找到该选项。 '配置器'只是缺少那个选项?

这里的任何想法?我是否应该提供一个雷达来建议苹果应该引入这样的功能?

+2

如果用户想使用自定义的键盘,你是谁阻止他们? –

+2

@FilipRadelic:安全原因(企业应用程序)。 – matm

+1

@matm - AFAIK你不能那样做。自定义键盘“替换”系统范围内的系统键盘。从企业角度来看,唯一可以做到的事情是:a)禁止安装App Store应用程序或b)如果某人安装了包含自定义键盘的应用程序,则执行一些操作。但a)很难在自带设备上实现,b)很难找到... 然后,苹果开放给雷达(也许适用于iOS9)。 – muenzpraeger

回答

46

看起来你得到了你在测试种子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; 
} 
+0

这是个好消息!我今天即将通过API差异化,并有更多理由这样做:)感谢分享! – matm

+0

它的工作原理!非常感谢。 – echo

+0

它很棒!谢谢! – xlsmearlx

3

我只是想添加这个谁想要实现Xamarin的iOS这种方法的开发。我们的想法是要覆盖你的AppDelegateShouldAllowExtensionPointIdentifier方法:

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

斯威夫特3:

func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool { 
    if extensionPointIdentifier == UIApplicationExtensionPointIdentifier.keyboard { 
     return false 
    } 
    return true 
} 
相关问题