如何在 Swift 中为 Mac OS X 开发一个简单的输入法



我知道有一个 InputMethodKit 框架的 API 参考。Objective-C 中也有示例代码,但它没有提供 Swift 中的示例。

有谁知道如何在 Swift 中制作一个简单的 IME?它可以具有重复字母但不做任何事情的功能,所以我可以知道它确实有效。您使用哪些 Xcode SDK 构建并成功运行它?

我已经将Apple的NumberInput示例代码上传到github存储库中,以便于阅读:

https://github.com/pkamb/NumberInput_IMKit_Sample

具体来说,我已经将示例项目演示中的每个"步骤"作为自己的 git 提交上传。这样可以更轻松地区分项目工作流。按照操作,了解他们如何向示例输入法项目添加要素。

我也尝试将Apple的IMKit示例第一部分"NumberInput 0"项目从Objective-c转换为Swift

如果 Swift 项目中的 "NumberInput 0" 有效,那么跟随 NumberInput 1,2,3 可以快速转换。

Swift 项目中的"NumberInput 0"可以编译、安装、添加到输入源中,可以选择和运行,但是当我使用 Xcode 调试时,IMKInputController 子类 NumberInputController 的方法 inputText(...) 无法通过键入键来访问 NumberInput.app

NumberInput 0 只是只包含 4 个文件,几行代码:

  1. 应用代表.swift
  2. 数字输入控制器.swift
  3. 主菜单.xib
  4. 信息列表

NumberInputController 列在 info.plist 中。

我已经成功地使用带有Xcode 7的Objective-C重新创建了"NumberInput 0"项目,所有工作正常,NumberInputController函数inputText(...)可以通过调试时键入键来访问。

我是 Swift 的新手,有人能帮我在 Swift 中获取"NumberInput 0"吗?

以下是 3 个文件的内容:

应用委托.swift

import Cocoa
import InputMethodKit
let kConnectionName = "NumberInput_1_Connection"
var server:IMKServer = IMKServer.init()
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        let identifier = NSBundle.mainBundle().bundleIdentifier;         
        server = IMKServer.init(name: kConnectionName, bundleIdentifier: identifier)
    }
    func applicationWillTerminate(aNotification: NSNotification) {
    }
}

数字输入控制器.swift

import Cocoa
import InputMethodKit
class NumberInputController: IMKInputController {
     override func inputText(string:String, client: AnyObject) ->Bool {
        // Debug break point put here
        print(string);
        return false;
    }
}

信息列表

 ...
<dict>
	....
    <key>NSMainNibFile</key>
	<string>MainMenu</string>
	<key>NSPrincipalClass</key>
	<string>NSApplication</string>
	<key>LSBackgroundOnly</key>
	<string>1</string>
	<key>InputMethodConnectionName</key>
	<string>NumberInput_1_Connection</string>
	<key>InputMethodServerControllerClass</key>
	<string>NumberInputController</string>
	<key>tsInputMethodIconFileKey</key>
	<string>nine.tiff</string>
	<key>tsInputMethodCharacterRepertoireKey</key>
	<array>
		<string>Latn</string>
	</array>
</dict>
</plist>

谢谢。

最新更新