热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OmniAutomation的出现,让iOS版OmniFocus和Mac版一样强大

注:视频内提到的脚本和代码,在文章中附有相关连接。此外,文章的内容相比视频更完整丰富。和Mac平台的AppleScript相比,无论是通过URLScheme或是快捷指令,OmniFocusforiOS上的自动化始终显得不那么「Pro」,让poweruser感觉有

注:视频内提到的脚本和代码,在文章中附有相关连接。此外,文章的内容相比视频更完整丰富。

和 Mac 平台的 AppleScript 相比,无论是通过 URL Scheme 或是快捷指令,OmniFocus for iOS 上的自动化始终显得不那么 「Pro」,让 power user 感觉有些隔靴搔痒。

终于,在 上架一年半 之后,OmniFocus 3.8 推出了基于 Javascript 的自动化脚本 —— Omni Automation。第一次,OmniFocus for iOS 将拥有和 Mac 版一样的深度定制可能性。

关于应用脚本和 Omni Automation 可以聊的话题非常多,这次我们将专注于最基本也最重要的两点:

  1. 怎么在 macOS 和 iOS 上使用 Omni Automation 脚本?
  2. 相比 AppleScript、快捷指令和 URL Scheme,Omni Automation 有无过人之处?值不值得花时间深入研究?

Omni Automation 的安装与使用

每一种应用脚本都有特定的使用方式:快捷指令是以功能模块为基本单位进行组合,在快捷指令应用中使用;URL Scheme 是将应用提供的接口编写成一条 URL ,然后在可以执行 URL Scheme 的应用(例如 Launch Center Pro)中启动;而 AppleScript 则是需要编写独立的脚本文件。

每种方式都有它的应用场景和局限,而 Omni Automation 则是「通吃」了这三种使用方式。它既可以像 AppleScript 一样,以脚本文件的形式使用;也可以像 URL Scheme 一样,以「Omni Automation URL」的形式,插入 AppleScript 甚至 HTML 中。由于 Omni Automation 其实就是 Javascript 代码,于是也可以在 Automator 中,调用相关模块,借此运行 Omni Automation。

以脚本文件的形式使用

无论是 macOS 还是 iOS 上,将 OmniFocus 升级到 3.8 版本(专业版) 后,就会发现独立的 Omni Automation 入口。

在 Drafts 中运行

在 Drafts 中创建一个新动作,加入「Script」步骤以运行 Javascript。然后将这段代码粘贴进去:

(() => {
	// 定义动作
	function addNewTask(stringsArray){
		task = new Task(stringsArray)
	};

	// 读取 Drafts 当前文本
	const stringsArray = editor.getText();
	
	// 运行 Omni Automation URL
	app.openURL(
		'omnifocus://localhost/omnijs-run?script=' +
		encodeURIComponent(
			'(' + addNewTask + ')' +
			'(' + JSON.stringify(stringsArray) + ')'
		)
	);
})();

这段代码分为三部分。第一部分定义了函数 addNewTask ,可以看到,其中的语句完全与 Omni Automation 脚本中一样。这个函数与接受一个文本  stringsArray ,并以它为标题,在 OmniFocus 中创建一个新动作。第二部分则是在读取 Drafts 中当前的文本内容。第三部分则是将前两部分结合起来,再编码成 Omni Automation URL。

现在你就可以先在 Drafts 中写下动作的名字,再运行这个动作,就会看到像运行 Omni Automation URL 一样,在 OmniFocus 打开脚本窗口,然后创建一个新动作。

这个例子虽然简单,但已经完全实现了我们的需求。相比直接运行编码好的 Omni Automation URL,使用源代码运行 Omni Automation 无疑会更加灵活。不仅是 Drafts,其他应用(例如 macOS 上的 Automator),只要能运行 Javascript 脚本,就能将 Omni Automation 与之结合起来使用。

Omni Automation 值得我们花时间去学习吗?

作为老牌的 macOS/iOS 开发商,OmniFocus 在自动化脚本上非常完善。OmniFocus for Mac 支持 AppleScript,OmniFocus for iOS 上有 URL Scheme,在快捷指令应用中也支持不少动作。那为什么这次又要推出 Omni Automation 呢?

Omni Automation 最重要的特性,当然是跨 macOS/iOS 平台运行代码级脚本。AppleScript 是非常强大的脚本语言,几乎可以实现对 OmniFocus 任何精细操作,不过只能运行在 macOS 平台上,同时因为这个原因,它的推广度也一直不温不火。URL Scheme 其实也是可以同时运行在 macOS/iOS 平台的,但是受到它本身设计的限制,在功能丰富度上远远不及 AppleScript 和 Omni Automation。例如 Packing List Plug-In 脚本可以调用一个对话框,让用户选择日期,这样的功能 URL Scheme 是无法实现的。

Omni Automation 的出现,让 iOS 版 OmniFocus 和 Mac 版一样强大
用脚本调用对话框

所以相较于 AppleScript 和 URL Scheme,Omni Automation 同时做到了「跨 macOS/iOS 平台运行」与「代码级脚本」两点 ,让它可以兼备强大的功能和通用性。

其次值得注意的是,Omni Automation 的出现使得 OmniFocus 与其他自动化应用的交互变得更加方便 。正如上文展示过的,OmniFocus Automation URL 可以任意插入其他应用中,例如 Drafts、Automator、快捷指令等。并且借着 Javascript 的风行,OmniFocus Automation 可以以源代码的形式和其他应用结合起来使用,这一点哪怕是 AppleScript 也做不到。

作为代码级的脚本,「在 Omni Automation 中调用其他应用」的需求也可以很方便地实现,例如 Launch Chosen Shortcut 脚本就可以在 OmniFocus 选择预设好的快捷指令并运行。上文展示过从 Drafts 中调用 OmniFocus,其实反过来,通过 Omni Automation 从 OmniFocus 也可以抓取信息放进 Drafts。

可以说,Omni Automation 是 非常值得我们花时间去深入研究 。虽然相较于 URL Scheme 和快捷指令它的入门门槛更高,但是它能实现的功能会比两者丰富得多,相比同样功能强大的 AppleScript,它的应用场景又更加丰富。

要明白的是,学习 Omni Automation 就等于在学 Javascript。可以看得出来,Javascript 正在逐渐取代 AppleScript 的作用,成为专业用户的选择。一方面这是得益于 Javascript 语言本身的风行,另一方面苹果也对 Javascript 提供了技术支持。无论是 Omni Automation、Drafts 还是 JSBox,底层其实都是依赖苹果 JavascriptCore 官方库。可以想象,会有越来越多的应用借助 JavascriptCore 实现自动化,所以学习 Omni Automation 的经验,以后也可以应用于其他应用中。

从技术上看 Omni Automation 无疑是潜力巨大的,回到使用者角度,我们有必要去学习它吗?

不可否认的是,快捷指令这种图形化的自动化工具,还是会成为更主流的选择。它相较于 Omni Automation 的优势不言自明:平滑的学习曲线,官方加持下的开发力度,与其他应用的高度结合。也难怪苹果官方要收购它,使其成为第一方应用。但是回看 AppleScript 与 OmniFocus 的过往,可以预见围绕 Omni Automation 将形成一个「 少数专业用户编写脚本,普通用户使用脚本 」的社区。即使你没有兴趣编写 Omni Automation,学会使用和简单地修改脚本,就能让你赚回购买 OminFocus 专业版的钱。

> 订阅OmniFocus 使用指南,教你搭建一套属于自己的任务管理系统 ⚙️

> 下载少数派客户端、关注少数派公众号,获取更多数码资讯 :iphone:

> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺


以上所述就是小编给大家介绍的《Omni Automation 的出现,让 iOS 版 OmniFocus 和 Mac 版一样强大》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 开发笔记:UEditor调用上传图片上传文件等模块
    1、引入ue相关文件,写好初始代码为了更好的封装整一个单独的插件,这里我们要做到示例化ue后隐藏网页中的编辑窗口,并移除焦点。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
author-avatar
西门庆重生727
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有