缘由
如果你有多个 Apple Store 账号,比如一个国区账号,一个美区账号。切来切去,每次都要退出重新登录,而且你可能会把两个账号的用户名和密码保存在某处,比如密码管理器等等。用到的时候,还得打开密码管理器等等,总之切换起来,流程比较繁琐。
Mac 上有个原生自带的自动化的工具,就是 Apple Script ,可以通过编程的方式控制应用程序的执行。
先说明一下,我的 macOS 的系统语言是英文,中文下的菜单是中文,Apple script 需要做不同的适配,以下的截图以英文为准
分析与实现
先观察一下手动登录 Apple Store 的过程
-
打开 Apple Store 的应用程序,看到 Apple Store 的应用窗口,对应的菜单栏也是 Apple Store 的菜单栏,如果未登录任何 Apple id ,Apple store 的菜单栏 store 菜单项的最后一个 菜单是 Sign In,如果已登录了某个 Apple id ,对应的最后一个菜单是 Sign Out
-
如果未登录,直接点击 Sign In ,如果是已登陆,先点击 Sign Out后,等待退出后,再点击 Sign In, 窗口会弹出一个小的弹窗,输入 Apple id 的账号,回车或者点击右下角的 Sign in 按钮
- 苹果会先校验一下账号,然后,才露出密码输入框(有点鸡贼,但是更安全吧),输完密码,回车或者点击右下角的 Sign in 按钮,如果账号没有开启二次验证,账号密码都正确,应该会正常登录,偶尔抽风,需要登录 2 次才成功。如果开启了 2 次验证,苹果默认会发验证码到已登陆的 Apple 设备上,如果接收通知的 Apple 设备不在身边,选择‘没有收到验证码’,换成用手机接收短信,填写收到的验证码即可。
下面是用 raycast 的 shell command ,Apple Script 实现自动登录,为了支持传参,运行在 raycast 环境下
参考代码:github gist
示例代码中,有非常详尽的注释
踩坑点
- 菜单项的名称和系统语言的设置项有关(需要做适配,上面的示例仅适配了简体中文和英文)
- 点击账户名后,text field 的索引会变化
- 文件编码:用 raycast 创建脚本,默认为 Western (Mac Roman) macroman ,使用 Mac 自带的脚本编辑器编辑后,会改变编码格式,所以推荐用 vscode 等文本编辑器,raycast 对于 utf-8 with BOM ,不能识别,utf-8 可以
