MacBook Pro 2016/2017 TouchBar App 开发 —— 快捷键小程序 Fn

众所周知,2016年苹果发布了新一代的MacBook Pro,其搭载的Multi Touch Bar(以下简称TouchBar)成为了一大亮点,系统自带应用不用说基本都支持了TouchBar,许多第三方 mac app 也都适配了TouchBar,可以预见TouchBar可能会是后续MacBook系列的标配,就像当年MacBook的ForceTouch和iphone上3D Touch一样。

好了,介绍完了背景,现在回到本文标题:TouchBar App 开发

何为 TouchBar App ?我个人的定义是仅基于TouchBar实现的完整功能的应用程序(而不是像系统应用一样TouchBar只是一个快捷操作并非应用的全部),目前网上有一款国外大神开发的TouchBar App:

TouchSwitcher

它实现了在TouchBar上切换应用程序,详细的介绍可以看 http://qingmang.me/articles/1047548841454336058/

如果您只是想开发传统的支持TouchBar功能的应用程序的话,建议参考这一篇博客,作者讲的非常详细:http://www.jianshu.com/p/6fbcbadd155c


本人也开发了一款TouchBar App,名字叫Fn,主要功能是显示F1-F12按钮,先放几张截图:

运行后可以在TouchBar右侧系统按钮区常驻

点击可以展开Fn按钮

可以设置在切换到某些应用时自动展开或者收起按钮

开发这款应用的初衷,是想要解决在应用不支持TouchBar的情况下TouchBar空间浪费问题(在不支持TouchBar的应用下,TouchBar上会有大量空白,强迫症表示伤不起……),在不支持的应用下自动显示Fn按钮,当然系统也支持在指定应用下设置TouchBar默认显示Fn按钮,就像这样:

但是这样的话TouchBar就只能显示Fn按钮了,没办法同时显示右侧的系统按钮区了(这块区域官方叫做Control Strip),当然觉得这样好还是不好因人而异啦😏,反正我喜欢两者都显示,so~ 就又了这款应用。

啰嗦了这么多,该给下载地址了:https://pan.baidu.com/s/1slufA01

如果您的Mac不支持TouchBar,可以按照此帖的方法体(jia)验(zhuang)一(yong)下(you)TouchBar:http://technews.cn/2016/11/07/app-touch-bar/


如果您想了解如何开发出这样的TouchBar App,请继续往下看😉

首先,按照苹果官方的API,是没有办法像这样将一个自定义按钮放到右侧的Control Strip中的,这种情况下,需要使用系统提供的私有api。

有国外黑客发现了TouchBar私有api的用法,并公布到了Github上,但现在这个项目找不到了…… 总之,向他致敬!

他发现的是 NSTouchBarNSTouchBarItem 这两个TouchBar相关类和 DFRFoundation.framework 框架的隐藏api:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import <AppKit/AppKit.h>

extern void DFRElementSetControlStripPresenceForIdentifier(NSString *, BOOL);
extern void DFRSystemModalShowsCloseBoxWhenFrontMost(BOOL);

@interface NSTouchBarItem ()

+ (void)addSystemTrayItem:(NSTouchBarItem *)item;

@end

@interface NSTouchBar ()

+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSString *)identifier;
+ (void)dismissSystemModalFunctionBar:(NSTouchBar *)touchBar;
+ (void)minimizeSystemModalFunctionBar:(NSTouchBar *)touchBar;

@end

只需将上述头文件和 DFRFoundation.framework 引入工程,就可以访问隐藏api了😍

完整的实现方法您可以看该项目的源码,源码的GitHub地址:https://github.com/lonord/Fn

最后,欢迎感兴趣的朋友互相交流,可以加技术交流群:592175695