我想从命令行强制更新App Store应用程序。
我怎样才能做到这一点?
我想从命令行强制更新App Store应用程序。
我怎样才能做到这一点?
Answers:
Apple没有提供命令行帮助程序或您可以闩锁以实现自动化的任何可编写脚本的可可类。与允许立即进行更新和安装的整体软件更新不同,您可以使用Automator编写使用鼠标单击按钮的过程的脚本。
但是,应用程序商店已经过反向工程并以开源形式和二进制形式发布:
安装速度很快,并且在最新版本的OS X 10.11上似乎非常可靠:
brew install argon/mas/mas
在发布源代码之后,我希望会弹出此工具的其他一些实现,甚至可能是使用python编写的脚本。
如果有人登录到macOS(windowmanager正在运行),则可以使用Automator和“监视我”功能来自动执行更新,并将存储密码存储在脚本中相当不安全。
如果满足您的需求,这里有两个教程可帮助您入门。
http://www.tuaw.com/2009/01/19/mac-automation-creating-watch-me-do-workflows/
http://automator.us/leopard/features/virtual-user.html
一旦有了工作脚本,就可以使用命令行open
命令将其启动。
如果App Store应用程序曾经将该功能公开给脚本,您将在命令行中有更多选择。它很容易使用sdef
,sdp
并且gen_bridge_metadata
可以从命令行使用ruby来转储整个可脚本化的字典和脚本内容,但是目前最好的选择是使用mas
命令行工具。
softwareupdate
过程,甚至可以挂接到Mountain Lion上的App Store中-但仅适用于非App Store应用程序。
App Store根本不适合管理。勉强是一个准软件包管理器,它几乎没有像pkgsrc,FreeBSD端口,aptitude,RPM,macports甚至是软件更新之类的真正软件包管理器有用或可靠。根据我的经验,这是不可预测的,并且对于商业开发人员来说,是胡扯他们的商品。因此,作为主管的管理员,实际上只有一种合理且负责任的方式与App Store合作:
sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.store_helper.plist
sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.storeagent.plist
sudo mkdir /System/Library/LaunchAgents\ \(disabled\)/
sudo mv /System/Library/LaunchAgents/com.apple.store* /System/Library/LaunchAgents\ \(disabled\)/
只需将它放在脑海中,就不会再困扰您了。;-)
使用ARD代替,尽管不是软件包管理器,但它管理软件包,安装,更新和升级,它将按照您想要的方式工作,节省时间,并且不会让您失望:
对于Apple Remote Desktop 3,对于10.9:
首先查看管理指南,以使自己确信这是要走的路:
curl -Ok http://images.apple.com/ca/fr/remotedesktop/pdf/ARD3_AdminGuide.pdf
open ARD3_AdminGuide.pdf
然后安装:
curl -Ok http://supportdownload.apple.com/download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/Mac_OS_X/downloads/031-2845.20140313.rerft/RemoteDesktopAdmin372.dmg
hdiutil attach -quiet -noverify -nobrowse -noautoopen RemoteDesktopAdmin372.dmg
sudo installer -pkg /Volumes/Apple\ Remote\ Desktop\ 3.7.2\ Admin\ Update/RemoteDesktopAdmin372.pkg -target /
但是,如果未运行10.9,或者未安装ARD的先前版本,则可能会抛出一个有趣的错误,如果确实如此,请尝试:
pkgutil --expand /Volumes/Apple\ Remote\ Desktop\ 3.7.2\ Admin\ Update/RemoteDesktopAdmin372.pkg ARDexpanded/
或相等的效果(要么/或者在这里,不需要同时使用pkgutil和xar……我只是在说透了):
mkdir ARDexpanded
cd ARDexpanded
xar -xf /Volumes/Apple\ Remote\ Desktop\ 3.7.2\ Admin\ Update/RemoteDesktopAdmin372.pkg
而且我们不再需要附加磁盘映像,因此将其弹出:
hdiutil detach -quiet /Volumes/Apple\ Remote\ Desktop\ 3.7.2\ Admin\ Update/
现在你会看到什么
cd ARDexpanded/RemoteDesktopAdmin372.pkg/
ls
是
Bom PackageInfo Payload Scripts
您所追求的是有效载荷文件中的内容,该文件是使用gzip压缩的cpio归档文件。因此,通过一些管道命令,我们可以转到应用程序捆绑包:
cat Payload | gzip -d - | cpio -id
ls
返回:
Applications Bom Library PackageInfo Payload Scripts
而且您快完成了。
cp -R Applications/Remote\ Desktop.app /Applications/
现在您已经安装了Apple Remote Desktop Admin 3.7.2
因此,剩下要做的就是购买许可证:
open http://store.apple.com/us_smb_78313/product/D6020Z/A/apple-remote-desktop-3-volume-licenses-20-seats-price-is-per-seat
启动/ Applications / Remote \ Desktop.app并进行序列化。并完成一些工作。
对于10.6 Snow Leopard,您需要使用稍早的ARD版本:
curl -Ok http://images.apple.com/ca/fr/remotedesktop/pdf/ARD3_AdminGuide.pdf
curl -Ok http://supportdownload.apple.com/download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/Mac_OS_X/downloads/041-6789.20120917.xD6TR/RemoteDesktopAdmin353.dmg
hdiutil attach -quiet -noverify -nobrowse -noautoopen RemoteDesktopAdmin353.dmg
sudo installer -pkg /Volumes/Apple\ Remote\ Desktop\ 3.5.3\ Admin\ Update/RemoteDesktopAdmin353.pkg -target /
如果它向您抛出此错误:
installer: Cannot install on volume / because it is disabled.
installer: This update could not find Remote Desktop on this volume.
然后尝试:
pkgutil --expand /Volumes/Apple\ Remote\ Desktop\ 3.5.3\ Admin\ Update/RemoteDesktopAdmin353.pkg ARD353
hdiutil detach -quiet /Volumes/Apple\ Remote\ Desktop\ 3.5.3\ Admin\ Update
深入了解有效负载:
cd ARD353/RemoteDesktopAdmin353.pkg/
ls
返回:
Bom PackageInfo Payload Scripts
因此运行:
cat Payload | gzip -d - | cpio -id
ls
返回:
Applications Bom Library PackageInfo Payload Scripts
您几乎完成了:
cp -R Applications/Remote\ Desktop.app /Applications/
购买许可证:
open http://store.apple.com/us_smb_78313/product/D6020Z/A/apple-remote-desktop-3-volume-licenses-20-seats-price-is-per-seat
启动/ Applications / Remote \ Desktop.app并进行序列化。并完成工作。
您可以使用该softwareupdate
工具。
sudo softwareupdate -l
列出所有可用的更新。
sudo softwareupdate -ia
安装所有可用的更新。