热门标签 | 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 版一样强大》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
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社区 版权所有