将macOS服务器迁移至云端,使其能够24小时为你进行iMessage的收发,这件事情听起来仿若天方夜谭,然而借助亚马逊云科技的EC2 Mac实例,它已然成为开发者手中的自动化得力工具。这并非单纯的消息转发或者模拟器方案,而是要让真正的Messages.app在云端运行,从而原生接管你的苹果生态。
2021年,亚马逊云科技推出了EC2 Mac实例,这是一项独特服务,它首次把真正的Mac mini硬件,以裸机实例的形式,部署在了数据中心。用户获得的并非虚拟机,而是完整的macOS操作系统,运行在Apple Silicon硬件上,这意味着它能够原生运行所有Mac应用,其中包括Messages.app。
长久以来自动化苹果生态存在难题,而这种方案将其解决了。以往开发者在家中或者办公室得常备一台 Mac 当作服务器,由于网络、电力以及地理位置的限制。如今这台 Mac 能够托管在云端,获得数据中心稳定网络以及 24 小时不间断运行的保障,且借助 SSM Session Manager 达成安全的远程管理。
# 本地终端执行,保持窗口开着
aws ssm start-session \
--target i-xxxxxxxxxxxx \
--region us-west-2 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["18789"],"localPortNumber":["18789"]}'
aws ssm start-session --target i-xxxxxxxxxxxx --region us-west-2
# 在远程 Mac 上执行
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo dscl . -passwd /Users/$(whoami) "你的密码"
需明确一个关键点在开始之前:Mac实例是基于Dedicated Host运行的,其有着24小时的最低租用期。这就意味着即便你仅仅使用一小时,但是却需要支付一整天的费用,而这对于需要长期运行自动化任务的场景来讲反倒是一种优势。
用于一键创建所有必要资源的,供亚马逊云科技所提供的则是开源的CloudFormation部署模板,该模板会自动创建专用主机,会自动创建EC2 Mac实例,会自动创建带有Bedrock权限的IAM角色,会自动创建安全组,还会自动创建EBS存储。整个过程所需时间大约是10 - 15分钟,相较于普通实例而言要慢些,这是由于要等待专用主机分配以及macOS初始化。
brew install steipete/tap/imsg
which imsg
# /opt/homebrew/bin/imsg
-- 通过 AppleScript 操作 Mail.app
tell application "Mail"
set unreadMessages to every message of inbox whose read status is false
repeat with msg in unreadMessages
-- 检查发件人、标记重要、自动归档
end repeat
end tell
Mac 实例启动完毕之后,CloudFormation 的 Outputs 里面会展示出实例 ID 以及连接方式。针对 Mac 用户而言,最为简便的方式乃是运用系统自带的 Screen Sharing 工具径直进行连接。不存在 Mac 的用户能够借助 VNC 客户端连接 localhost:15900,条件是预先利用 SSM 构建端口转发。
xcodebuild -workspace MyApp.xcworkspace \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 16' \
test
在首次连接之际,输入系统用户名密码,便能够看到云端 Mac 的桌面。尽管大部分操作能够经由命令行予以完成,然而配置 iMessage 却必须借助图形界面才行,原因在于 Messages.app 需要用户进行登录并且完成双重认证,而这是任何 API 都没办法绕开的步骤。
在云端 Mac 的桌面上,将 Messages.app 予以打开,把你的 Apple ID 以及密码进行输入。首次登录之际,会触发双重认证,在这个时候,要用 iPhone 或者其他已经登录的设备去确认验证码。完成验证以后,要等待 1 至 3 分钟,从而让 iMessage 得以完全激活。
期间不存在任何模拟情形或者桥接状况,Messages.app 觉得自身运行于一台平常的 Mac 之上。激活之后,这台云端 Mac 便能够实时去接收以及发送 iMessage 消息,全部数据借助苹果的加密通道予以传输,跟个人 Mac 的使用感受全然相同。
# 在本地终端运行(保持窗口不关)
aws ssm start-session \
--target i-xxxxxxxxxxxx \
--region us-west-2 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["18789"],"localPortNumber":["18789"]}'
一款名为 OpenClaw 的,属开源性质的自动化工具,借助截屏以及 OCR 技术,来对界面元素予以识别,进而仿若人那般去操作 Mac 应用。于安装完毕之后,得对~/.openclaw/openclaw.json 这个配置文件进行编辑,于 channels 部分添加 iMessage 渠道配置。
需在配置之中指定 cliPath 参数,此参数要指向 imsg 命令行工具的路径,imsg 乃是一个轻量级工具,它能够让程序直接读和写 Messages 数据库。另外还要设置 dmPolicy 参数,该参数用于决定当自动化任务失败之际,是不是经由 iMessage 把错误日志发送给指定联系人。所有的远程访问借助 SSM 内网通道来进行,以此确保通信安全且可审计。
# 通过 SSM 连接到实例
aws ssm start-session --target i-xxxxxxxxxxxx --region us-west-2
# 在远程 Mac 上启用 Screen Sharing
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
# 设置登录密码
sudo dscl . -passwd /Users/$(whoami) "你的密码"
aws ssm start-session \
--target i-xxxxxxxxxxxx \
--region us-west-2 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["5900"],"localPortNumber":["15900"]}'
当配置好了 iMessage 机器人之后,OpenClaw 的能力并非仅仅局限于收发消息这一方面。它能够去调用 AppleScript 来对 Finder、Mail 等诸如此类的原生应用实施控制,同时它还能够触发以及管理 macOS Shortcuts,进而串联起多个 App 以此来形成复杂的工作流。
open -a "Screen Sharing" vnc://localhost:15900
诸如在接收到特定所指指令之际,机器人能够自行去整理桌面之上的文件,还能够发送邮件报告,甚至于去调用亚马逊云科技的Bedrock服务来开展AI分析。这样的一套方案使得开发者切实地把苹果生态的独占性能力和云端的算力相互结合起来,达成其他平台不能够做到的深度自动化。
你有没有也思考过要让自身的 Mac 在云端全天候不间断地为你开展工作呢,欢迎于评论区去分享你拥有的自动化创意,予以点赞这篇文章与此同时转发它从而让更多的开发者能够看到这个别具一格的解决方案。
brew install steipete/tap/imsg
which imsg
# 输出: /opt/homebrew/bin/imsg