Cocoa 框架 MASShortcut 的 fork 版发布

开源中国真理部部长
 开源中国真理部部长
发布于 2014年11月07日
收藏 17

很多时候我们在编写Mac下的应用时(其实不光光是Mac应用),都会需要提供全局快捷键或者局部快捷键的设置选项,比如全局呼出我在我之前的一个app:Oh My Cal!中实现的全局呼出功能。Cocoa中并没有类似NSGlobalShortcut这样的类让你很方便地设置全局快捷键,所以我在实现该功能时,不得不调用Carbon中的纯C函数,你可以在这里看到我在Oh My Cal!中实现全局呼出的代码。嗯,纯C的,不管怎么看和Objective-C的API相比还是有点丑陋,而且很麻烦。

懒惰是程序员的美德,所以自然有人出头解决这个问题:MASShortcut是一个由著名的Mac下的代码收集应用CodeBox的作者Vadim Shpakovski所编写的框架,其用于代替过于陈旧的ShortcutRecorder,来为Mac下的应用提供全局快捷键支持。

该框架使用Objective-C编写,适用于Mac应用。

screenshot1

screenshot2

screenshot3

我最近在GitHub上fork了这个repo,并对源码进行了改进,你可以在这里查看改进后的源码:

  • MASShortcut的架构设计非常棒,但是原作者的代码风格实在太烂,所以我对所有的源代码重新进行了格式化(不然没法愉快地阅读)。同时为了方便其他人理解代码所表达的想法,我还在阅读代码的过程中,在之前的基础上添加了不少注释。

  • 为快捷键记录器增加了一个recessed风格的绘制。

  • 将一些已经被Apple文档声明为deprecated的方法或函数改写为modern API。

  • 改善了错误处理模块。

  • 在我的fork版本中修复了一个内存泄漏的bug,但由于我以我的编码风格对源代码进行了大量的格式化,所以并没有提交pull request,而是给原作者开了一个issue报告了该bug,并且他采纳了我的建议,修复了这个内存泄漏的bug。你可以在这里找到该issue。

  • 更多微小的改进,你可以在GitHub上diff看看。

原作者编写的MASShortcut是一个ARC版本,但是我的fork版本是一个非ARC版本。另外,原作者为了该框架的使用者更容易地了解如何使用,专门写了一个demo,你可以在这里找到。同样,这个demo也是ARC版本的,并且该demo只是演示了界面方面的API用法,对于注册全局快捷键等其他功能并没有进行演示,所以我单独写了一个demo,来帮助该框架的使用者和代码阅读者更轻松一点,你可以在这里找到这个我写的demo(非ARC)。

How to use?

虽 然MASShortcut是一个Cocoa框架,但是为了增强灵活性,并没有被编译成二进制的bundle,而是直接以源代码文件的形式发布,再由使用者 以Git中的submodule的形式集成到自己的项目中。在你的项目目录中运行如下Git命令即可将MASShortcut集成到你的项目中:git submodule add https://github.com/TongG/MASShortcut

这样很方便,同时我在上游做出任何改进,你只需pull即可使用最新版的代码。 MASShortcut的源码文件会被clone到你的项目目录中,这是别忘了还要在Xcode中进行Add Files to {PROJECTNAME}...。

Build Environment:

  • OS X 10.9.5 (13F34)

  • Xcode 5.1.1 (5B1008)

  • Objective-C 2.0 without ARC

文章开头的三幅截图是我的fork版本的运行截图。如果你在使用中遇到任何问题,可以联系我或者原作者Vadim Shpakovski(当然我的中文要比他好一些)。


如果你遇到任何问题,你可以给我发送邮件:Tong-G@outlook.com或者在Twitter上DM我:@NSTongG

如果你使用GnuPG的话,也可以给我发送加密数据,我的GnuPG公钥为0x67B9E95236924648,你可以从公钥服务器上retrieve之。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Cocoa 框架 MASShortcut 的 fork 版发布
加载中
返回顶部
顶部