OStack程序员社区-中国程序员成长平台

标题: ios - 创建自定义 iOS 越狱键盘 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 18:41
标题: ios - 创建自定义 iOS 越狱键盘

我已经开发了一个自定义输入法,现在想开发一个可以在 iOS 中将其注册为键盘的调整。

Cydia中有很多不同的键盘(主要来自中国的开发者)比如触宝、百度输入等,在设置中作为键盘出现,所以肯定是有可能的。

我曾尝试研究以下选项(在 IDA 中只用了 4 天,Xcode 与 theos 和控制台):

我尝试 Hook UIKeyboardDictationLayout 以在初始化时提供 UIKeyboardLayout 的普通实例 - 当我点击键盘上的麦克风按钮时,键盘变为空白!这种实现也会很好(即使不希望杀死听写功能)。但是,我也找不到在哪里发送打字事件。

所以要点是:

我问这个是希望已经有开发人员必须做类似的事情,因为我找不到任何文章或任何可以在头文件和包中给我提示的东西。

提前致谢。



Best Answer-推荐答案


我在今年 2 月做对了,尽管没有时间回复,而且现在 iOS 8 已经到来,这也不是很有必要了。 不过,这仍然是您加载自己的键盘的方式:

%hook UIKeyboardInputMode

+ (id)keyboardInputModeWithIdentifierid)arg1 {
    id o = %orig;
    return o;
}
- (id)primaryLanguage {
    if([TegakiLayout isTegaki:[self identifier]]) return @"Tegaki";
    return %orig;
}
%end

%hook UIKeyboardImpl
/* This is where the magic is! */
+ (Class)layoutClassForInputModeNSString*)arg1 keyboardTypeint)arg2 {
    Class sass = %orig;
    if ([TegakiLayout isTegaki: arg1]) {
        return [TegakiLayout class];
    }
    return sass;
}
%end



extern "C" NSArray*UIKeyboardGetSupportedInputModes();
extern "C" NSArray*UIKeyboardGetActiveInputModes();
static NSArray* (*orig_modes)();
NSArray* rep_modes() {
    NSArray* res = [orig_modes() arrayByAddingObjectsFromArray[@"TEGAKI", @"TEGAKI_Graffiti"]];
    return res;
}

static NSArray* (*orig_active_modes)();
NSArray* rep_active_modes() {
    NSArray* res = orig_active_modes();
    return res;
}



%ctor {
    %init;
    MSHookFunction(UIKeyboardGetSupportedInputModes, rep_modes, &orig_modes);
    MSHookFunction(UIKeyboardGetActiveInputModes, rep_active_modes, &orig_active_modes);
}

其中 TegakiLayout 是 UIKeyboardLayout 的子类。

然后你实现 - (BOOL)isAlphabeticPlane 来返回它是否是一个传统的键盘,并在 showKeyboardWithInputTraits:screenTraits:splitTraits: 中创建自定义 View 。

要输入你,然后使用 [[UIKeyboardImpl activeInstance]insertText"\n"];

要创建一个“地球”按钮,请使用:

Class sw = NSClassFromString(@"UIInputSwitcherView");
[[sw sharedInstance]selectNextInputMode];

别忘了实现 -keyboardName-keyplaneName ! 我可能有一天会发布整个项目,但现在它太大了,无法在这里描述。不过,这应该足以让您启动并运行。

关于ios - 创建自定义 iOS 越狱键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683820/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4