,一款iOS程序员的效率提升利器,本文分享给大家的是我工作时用来提升效率的神器之一:AppleScript。AppleScript虽然是一种脚本语言,但在我看来,它是最接近自然语言、最不像计算机的编程语言。即使没有计算机基础,在看完基础文档和几个示例脚本后,马上就能编写出实用的脚本工具。感觉很多使用Mac系统的同学可能还没有意识到,每天陪伴在身边的Mac系统上还有这么强大高效的脚本语言,可以全方位提高我的工作效率。下一篇文章将与大家分享我使用AppleScript的两个场景。在开始之前,我们先简单总结一下AppleScript的应用环境。从应用来看,我们的Mac系统其实就是一个App的集合,包括系统自带的App(Mail、Safari、Terminal等)和安装的第三方App(Firefox、Chrome、Outlook、iTerm等).).主流应用其实是向系统暴露了一些实用的接口,实现一些高频操作的自动化。谁来调用这些接口?AppleScript。AppleScript可以将这些应用程序和应用程序内部的数据作为对象访问,甚至可以将不同的应用程序串联起来,在自动化之后形成一个工作流。如何编写AppleScript?Mac自带脚本编辑运行工具,通过SpotlightSearch搜索ScriptEditor即可。运行ScriptEditor后,可以通过菜单File->OpenDictionary打开如下图所示的文档,其中列出了所有支持AppleScript的应用程序以及每个应用程序支持的接口调用。提高工作效率,避免重复劳动。目前正在研究如何降低App的崩溃率,每天实时监控是否有新的崩溃。所有潜在的严重崩溃警报都通过电子邮件发送到我的邮箱。收到警报后,我需要复制电子邮件中的崩溃ID并在另一个网络工具中进行检查。每天早上看着一大堆的告警,如果要手动复制所有的crashid,一个一个粘贴到网页上查询,操作非常繁琐。AppleScript可以通过单击轻松地自动执行此过程。步骤如下:Mail分类邮件全部存储在MicrosoftOutlook中。我首先设置一个规则,将所有包含TrendingCrash:xxx的邮件标题存储到子文件夹:iOS-Crash中。遍历emails,然后通过AppleScript遍历iOS-Crash目录下的所有文件:就像和Siri聊天一样,告诉Siri遍历某个目录下的所有邮件。CrashIDAppleScript提取的另一个强大功能是它可以与系统自带的各种常用命令行工具(如grep、sed、awk等)进行交互,这意味着它可以轻松地对文本和文件进行操作。接下来,我会使用sed工具提取邮件中的CrashID:ifcrash_idisnotincrash_id_setandthelengthofcrash_id>0thensetcrash_id_settocrash_id_set&crash_idendifendrepeatendtell关键代码是这一行:tellmetosetcrash_idtodoshellscript"echo""edformofmsgContent&"|sed-E-n's_.*crash_id:(\1_1)xxApple\ripell\ript"切换运行脚本的方式“MicrosoftOutlook”是切换到Outlook的过程。tellmeto是切换到当前用户的运行环境,因为我们要执行命令行脚本,需要更高级的权限,所以需要切换到当前用户进程。接下来通过echo将电子邮件的内容传递给sed并提取crash-id并将值传递回AppleScript中方便的crash_id到一个数组中。组装url并在浏览器中打开它。这是最后一步。Opentheextractedresultaboveinthebrowser:tellapplication"MicrosoftOutlook"settheMessagestomessagesoffolder"iOS-Crash"ofdefaultaccountsetcrash_id_setto{}setparamto""repeatwiththeMessageintheMessagessetmsgContenttoplaintextcontentoftheMessagetellmetosetcrash_idtodoshellscriptt"Echo"&g"n's_.*crash_id:(.+)}_\\1_1p'"ifcrash_idisnotincrash_id_setandthelengthofcrash_id>0thensetcrash_id_settocrash_id_set&crash_idendifendrepeatrepeatwithcrash_idincrash_id_setsetparamtoparam&"%22"&crash_idendrepeattellmetodoshellscript"cat~/Documents/AppleScripts/ios_crash_url|sed-n-Es_crash_ids_""edformofparam&"_p|xargsopen"endtellurl原始Theinformationissavedinthefileios_crash_url.使用sed进行简单替换后,将url传递给打开命令。最后添加命令别名,一键完成。aliasioscrash='osascript/Users/fenggao/Documents/AppleScripts/outlook_ios_crash.scpt'代码重构我也用过AppleScript重构ObjectiveC代码,原理很简单,Xcode中选中的代码以文本形式传递给AppleScript,然后通过AppleScript传给命令行进行操作。或者将Xcode当前打开的class文件的路径通过AppleScript传递给命令行工具。下一步是基本的文件操作。您可以选择各种工具。例如,我们可以使用本地编译的clang来解析class文件,对ObjectiveC的语法特性进行Text修改。当我们有大量的代码文件需要修改,并且修改的规则遵循一定的规律时,使用脚本可以达到事半功倍的效果。通过osascript命令执行AppleScript是一种方式,另一种方式是通过Service。每个应用程序在菜单中都有一个服务项目。我们可以使用Automator添加一个可以被每个应用程序使用的服务。我们可以把一个Service看成一个工作流,一个工作流可以包含多个动作,执行AppleScript可以是其中一个动作。首先通过SpotlightSearch启动Automator,然后选择创建一个Service。然后就可以看到所有支持的动作,选择RunAppleScript,将其拖到右边的工作流区域,就可以执行一个AppleScript了。当然你也可以将RunShellScript拖到工作流区域,通过stdin在action之间传递数据。如下图所示:所有创建和保存的服务都会自动保存到~/Library/Services/目录下。保存后,我们可以在应用程序的服务目录中看到我们的目标。例如,在我保存xcode-text.workflow之后。我在Xcode中选中一段代码,右击可以看到我创建的服务,如图:关键字:automator->service->action->applescript总结AppleScript应用场景广泛,使用方便.一些Mac应用程序的核心功能甚至是用AppleScript编写的。比如Mac上的剪贴板工具就是利用AppleScript来操作其他应用程序当前编辑的文本,实现历史搜索和插入功能。工具的威力在于用户如何使用它,工具使用得越多越好。
