2021-05-03 20:42:10 +00:00
|
|
|
|
<h1 align="center"><img src="mas-cli.png" alt="mas-cli" width="450" height="auto"></h1>
|
2016-09-25 23:31:41 +00:00
|
|
|
|
|
2015-09-20 23:47:42 +00:00
|
|
|
|
# mas-cli
|
|
|
|
|
|
2018-01-27 04:23:03 +00:00
|
|
|
|
A simple command line interface for the Mac App Store. Designed for scripting and automation.
|
|
|
|
|
|
2021-05-08 17:23:59 +00:00
|
|
|
|
[![Software License](https://img.shields.io/badge/license-MIT-lightgrey.svg)](https://github.com/mas-cli/mas/blob/main/LICENSE)
|
2020-05-24 23:54:21 +00:00
|
|
|
|
[![Swift 5](https://img.shields.io/badge/Language-Swift_5-orange.svg)](https://swift.org)
|
2019-01-12 01:18:08 +00:00
|
|
|
|
[![GitHub Release](https://img.shields.io/github/release/mas-cli/mas.svg)](https://github.com/mas-cli/mas/releases)
|
2019-01-12 01:14:20 +00:00
|
|
|
|
[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)
|
2021-05-09 20:25:36 +00:00
|
|
|
|
[![Build, Test, & Lint](https://github.com/mas-cli/mas/actions/workflows/build-test.yml/badge.svg?branch=main)](https://github.com/mas-cli/mas/actions/workflows/build-test.yml?query=branch%3Amain)
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
## 📲 Install
|
|
|
|
|
|
|
|
|
|
### 🍺 Homebrew
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2016-09-27 12:44:17 +00:00
|
|
|
|
[Homebrew](http://brew.sh) is the preferred way to install:
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
brew install mas
|
|
|
|
|
```
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2020-08-11 15:21:39 +00:00
|
|
|
|
### MacPorts
|
|
|
|
|
|
|
|
|
|
[MacPorts](https://www.macports.org/install.php) works as well:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
sudo port install mas
|
|
|
|
|
```
|
|
|
|
|
|
2021-02-13 20:51:05 +00:00
|
|
|
|
⚠️ Note that macOS 10.15 (Catalina) is required to install mas from MacPorts or the core Homebrew formula.
|
2019-12-14 00:23:50 +00:00
|
|
|
|
|
2018-08-13 03:44:07 +00:00
|
|
|
|
### ☎️ Older macOS Versions
|
|
|
|
|
|
2018-08-18 03:23:36 +00:00
|
|
|
|
We provide a [custom Homebrew tap](https://github.com/mas-cli/homebrew-tap) with pre-built bottles
|
2019-01-04 01:03:47 +00:00
|
|
|
|
for all macOS versions since 10.11.
|
2018-08-13 03:44:07 +00:00
|
|
|
|
|
2019-12-14 00:23:50 +00:00
|
|
|
|
To install mas from our tap:
|
2018-08-13 03:44:07 +00:00
|
|
|
|
|
2019-04-30 13:39:28 +00:00
|
|
|
|
```bash
|
|
|
|
|
brew install mas-cli/tap/mas
|
2018-08-13 03:44:07 +00:00
|
|
|
|
```
|
|
|
|
|
|
2021-05-03 17:14:00 +00:00
|
|
|
|
#### Swift 5 Runtime Support
|
2019-12-14 00:23:50 +00:00
|
|
|
|
|
2021-05-03 17:14:00 +00:00
|
|
|
|
mas requires Swift 5 runtime support. macOS 10.14.4 and later include it, but earlier releases did not.
|
2021-05-04 05:18:28 +00:00
|
|
|
|
Without it, running `mas` may report an error similar to this:
|
|
|
|
|
> dyld: Symbol not found: _$s11SubSequenceSlTl
|
2019-12-14 00:23:50 +00:00
|
|
|
|
|
2021-05-03 17:14:00 +00:00
|
|
|
|
To get Swift 5 support, you have a few options:
|
2021-05-04 05:18:28 +00:00
|
|
|
|
|
2021-05-03 17:14:00 +00:00
|
|
|
|
- Install the [Swift 5 Runtime Support for Command Line Tools](https://support.apple.com/kb/DL1998).
|
|
|
|
|
- Update to macOS 10.14.4 or later.
|
|
|
|
|
- Install Xcode 10.2 or later to `/Applications/Xcode.app`.
|
2019-12-14 00:23:50 +00:00
|
|
|
|
|
2018-08-13 03:44:07 +00:00
|
|
|
|
### 🐙 GitHub Releases
|
|
|
|
|
|
2021-05-03 17:14:00 +00:00
|
|
|
|
Alternatively, binaries are available in the [GitHub Releases](https://github.com/mas-cli/mas/releases).
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2018-08-13 03:44:07 +00:00
|
|
|
|
## 🤳🏻 Usage
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
|
|
|
|
Each application in the Mac App Store has a product identifier which is also
|
2015-09-20 23:55:58 +00:00
|
|
|
|
used for mas-cli commands. Using `mas list` will show all installed
|
|
|
|
|
applications and their product identifiers.
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas list
|
|
|
|
|
446107677 Screens
|
|
|
|
|
407963104 Pixelmator
|
|
|
|
|
497799835 Xcode
|
|
|
|
|
```
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2016-04-17 00:26:52 +00:00
|
|
|
|
It is possible to search for applications by name using `mas search` which
|
2018-08-11 23:37:36 +00:00
|
|
|
|
will search the Mac App Store and return matching identifiers.
|
|
|
|
|
Include the `--price` flag to include prices in the result.
|
2016-04-17 00:26:52 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas search Xcode
|
|
|
|
|
497799835 Xcode
|
|
|
|
|
688199928 Docs for Xcode
|
|
|
|
|
449589707 Dash 3 - API Docs & Snippets. Integrates with Xcode, Alfred, TextWrangler and many more.
|
|
|
|
|
[...]
|
|
|
|
|
```
|
2016-04-17 00:26:52 +00:00
|
|
|
|
|
2022-04-05 03:29:47 +00:00
|
|
|
|
Another way to find the identifier for an app is to
|
2022-07-04 23:52:24 +00:00
|
|
|
|
|
2022-04-05 03:29:47 +00:00
|
|
|
|
1. Find the app in the Mac App Store
|
|
|
|
|
2. Select `Share` > `Copy Link`
|
2022-07-04 23:52:24 +00:00
|
|
|
|
3. Grab the identifier from the string, e.g. for Xcode,
|
|
|
|
|
[https://apps.apple.com/us/app/xcode/id497799835?mt=12](https://apps.apple.com/us/app/xcode/id497799835?mt=12)
|
|
|
|
|
has identifier `497799835`
|
2022-04-05 03:29:47 +00:00
|
|
|
|
|
2016-04-17 00:26:52 +00:00
|
|
|
|
To install or update an application simply run `mas install` with an
|
|
|
|
|
application identifier:
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas install 808809998
|
|
|
|
|
==> Downloading PaintCode 2
|
|
|
|
|
==> Installed PaintCode 2
|
|
|
|
|
```
|
2016-11-03 22:34:33 +00:00
|
|
|
|
|
2018-08-11 23:37:36 +00:00
|
|
|
|
If you want to install the first result that the `search` command returns, use the `lucky` command.
|
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas lucky twitter
|
|
|
|
|
==> Downloading Twitter
|
|
|
|
|
==> Installed Twitter
|
|
|
|
|
```
|
2018-08-11 23:37:36 +00:00
|
|
|
|
|
|
|
|
|
> Please note that this command will not allow you to install (or even purchase) an app for the first time:
|
2020-03-21 13:24:27 +00:00
|
|
|
|
use the `purchase` command in that case.
|
2021-11-03 20:48:18 +00:00
|
|
|
|
> ⛔ The `purchase` command is not supported as of macOS 10.15 Catalina. Please see [Known Issues](#%EF%B8%8F-known-issues).
|
2020-03-21 13:24:27 +00:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ mas purchase 768053424
|
|
|
|
|
==> Downloading Gapplin
|
|
|
|
|
==> Installed Gapplin
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> Please note that you may have to re-authenticate yourself in the App Store to complete the purchase.
|
2021-05-03 20:42:10 +00:00
|
|
|
|
This is the case if the application is not free or if you configured your account not to remember the
|
|
|
|
|
credentials for free purchases.
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
|
|
|
|
Use `mas outdated` to list all applications with pending updates.
|
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas outdated
|
|
|
|
|
497799835 Xcode (7.0)
|
|
|
|
|
446107677 Screens VNC - Access Your Computer From Anywhere (3.6.7)
|
|
|
|
|
```
|
2018-07-05 00:29:10 +00:00
|
|
|
|
|
2018-08-11 23:37:36 +00:00
|
|
|
|
> `mas` is only able to install/update applications that are listed in the Mac App Store itself.
|
2021-05-03 17:14:00 +00:00
|
|
|
|
Use [`softwareupdate(8)`] utility for downloading system updates (e.g. Xcode Command Line Tools)
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2015-12-30 21:03:45 +00:00
|
|
|
|
To install all pending updates run `mas upgrade`.
|
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas upgrade
|
|
|
|
|
Upgrading 2 outdated applications:
|
|
|
|
|
Xcode (7.0), Screens VNC - Access Your Computer From Anywhere (3.6.7)
|
|
|
|
|
==> Downloading Xcode
|
|
|
|
|
==> Installed Xcode
|
|
|
|
|
==> Downloading iFlicks
|
|
|
|
|
==> Installed iFlicks
|
|
|
|
|
```
|
2015-12-30 21:03:45 +00:00
|
|
|
|
|
2016-09-25 23:38:31 +00:00
|
|
|
|
Updates can be performed selectively by providing the app identifier(s) to
|
|
|
|
|
`mas upgrade`
|
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas upgrade 715768417
|
|
|
|
|
Upgrading 1 outdated application:
|
|
|
|
|
Xcode (8.0)
|
|
|
|
|
==> Downloading Xcode
|
|
|
|
|
==> Installed Xcode
|
|
|
|
|
```
|
2016-09-25 23:38:31 +00:00
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
### 🚏📥 Sign-in
|
2018-08-11 23:37:36 +00:00
|
|
|
|
|
2021-11-03 20:48:18 +00:00
|
|
|
|
> ⛔ The `signin` command is not supported as of macOS 10.13 High Sierra. Please see [Known Issues](#%EF%B8%8F-known-issues).
|
|
|
|
|
|
2016-02-14 01:42:18 +00:00
|
|
|
|
To sign into the Mac App Store for the first time run `mas signin`.
|
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
$ mas signin mas@example.com
|
|
|
|
|
Password:
|
|
|
|
|
```
|
2016-06-08 20:23:55 +00:00
|
|
|
|
|
2021-11-03 20:48:18 +00:00
|
|
|
|
If you experience issues signing in this way, you can ask to sign in using a graphical dialog
|
|
|
|
|
(provided by Mac App Store application):
|
2018-08-11 23:37:36 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
2024-10-10 21:47:59 +00:00
|
|
|
|
mas signin --dialog mas@example.com
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```
|
2016-06-08 20:23:55 +00:00
|
|
|
|
|
|
|
|
|
You can also embed your password in the command.
|
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
2024-10-10 21:47:59 +00:00
|
|
|
|
mas signin mas@example.com 'ZdkM4f$gzF;gX3ABXNLf8KcCt.x.np'
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```
|
2016-02-14 01:42:18 +00:00
|
|
|
|
|
|
|
|
|
Use `mas signout` to sign out from the Mac App Store.
|
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
## 🍺 Homebrew integration
|
2016-11-07 20:36:06 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
`mas` is integrated with [homebrew-bundle]. If `mas` is installed, and you run `brew bundle dump`,
|
|
|
|
|
then your Mac App Store apps will be included in the Brewfile created. See the [homebrew-bundle]
|
2018-08-11 23:37:36 +00:00
|
|
|
|
docs for more details.
|
2016-11-07 20:36:06 +00:00
|
|
|
|
|
2021-11-03 20:48:18 +00:00
|
|
|
|
## ⚠️ Known Issues
|
|
|
|
|
|
|
|
|
|
Over time, Apple has changed the APIs used by `mas` to manage App Store apps, limiting its capabilities. Please sign in
|
|
|
|
|
or purchase apps using the App Store app instead. Subsequent redownloads can be performed with `mas install`.
|
|
|
|
|
|
|
|
|
|
- ⛔️ The `signin` command is not supported as of macOS 10.13 High Sierra. [#164](https://github.com/mas-cli/mas/issues/164)
|
|
|
|
|
- ⛔️ The `purchase` command is not supported as of macOS 10.15 Catalina. [#289](https://github.com/mas-cli/mas/issues/289)
|
|
|
|
|
- ⛔️ The `account` command is not supported as of macOS 12 Monterey. [#417](https://github.com/mas-cli/mas/issues/417)
|
|
|
|
|
|
|
|
|
|
The versions `mas` sees from the app bundles on your Mac don't always match the versions reported by the App Store for
|
|
|
|
|
the same app bundles. This leads to some confusion when the `outdated` and `upgrade` commands differ in behavior from
|
|
|
|
|
what is shown as outdated in the App Store app. Further confusing matters, there is often some delay due to CDN
|
2021-11-10 06:40:41 +00:00
|
|
|
|
propagation and caching between the time a new app version is released to the App Store, and the time it appears
|
2021-11-03 20:48:18 +00:00
|
|
|
|
available in the App Store app or via the `mas` command. These issues cause symptoms like
|
|
|
|
|
[#384](https://github.com/mas-cli/mas/issues/384) and [#387](https://github.com/mas-cli/mas/issues/387).
|
|
|
|
|
|
2021-12-09 05:30:36 +00:00
|
|
|
|
Macs with Apple silicon can install and run iOS and iPadOS apps from the App Store. `mas` is not yet aware of these
|
|
|
|
|
apps, and is not yet able to install or update them. [#321](https://github.com/mas-cli/mas/issues/321)
|
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
## 💥 When something doesn't work
|
2016-10-31 11:05:04 +00:00
|
|
|
|
|
2021-05-03 20:42:10 +00:00
|
|
|
|
If you see this error, it's probably because you haven't installed the app through the App Store yet.
|
|
|
|
|
See [#46](https://github.com/mas-cli/mas/issues/46#issuecomment-248581233).
|
2022-05-02 16:47:27 +00:00
|
|
|
|
> This redownload is not available for this Apple ID either because it was bought by a different user or the
|
2021-05-03 20:42:10 +00:00
|
|
|
|
> item was refunded or cancelled.
|
2017-06-04 17:09:22 +00:00
|
|
|
|
|
2021-05-03 20:42:10 +00:00
|
|
|
|
If `mas` doesn't work for you as expected (e.g. you can't update/download apps), run `mas reset` and try again.
|
|
|
|
|
If the issue persists, please [file a bug](https://github.com/mas-cli/mas/issues/new).
|
|
|
|
|
All your feedback is much appreciated! ✨
|
2016-10-31 11:05:04 +00:00
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
## 📺 Using `tmux`
|
2016-06-15 11:29:01 +00:00
|
|
|
|
|
2016-09-25 23:39:59 +00:00
|
|
|
|
`mas` operates via the same system services as the Mac App Store. These exist as
|
|
|
|
|
separate processes with communication through XPC. As a result of this, `mas`
|
|
|
|
|
experiences similar problems as the pasteboard when running inside `tmux`. A
|
|
|
|
|
[wrapper tool exists](https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard) to
|
|
|
|
|
fix pasteboard behaviour which also works for `mas`.
|
|
|
|
|
|
|
|
|
|
You should consider configuring `tmux` to use the wrapper but if you do not wish
|
|
|
|
|
to do this it can be used on a one-off basis as follows:
|
2016-06-15 11:29:01 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
|
|
|
|
brew install reattach-to-user-namespace
|
|
|
|
|
reattach-to-user-namespace mas install
|
2016-06-15 11:29:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
## ℹ️ Build from source
|
2015-12-30 21:45:36 +00:00
|
|
|
|
|
2021-04-29 05:35:32 +00:00
|
|
|
|
You can build from Xcode by opening the root `mas` directory, or from the Terminal:
|
2015-12-30 21:45:36 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
```bash
|
2021-05-03 17:14:00 +00:00
|
|
|
|
script/bootstrap
|
2019-04-30 13:40:29 +00:00
|
|
|
|
script/build
|
2015-12-30 21:45:36 +00:00
|
|
|
|
```
|
|
|
|
|
|
2022-08-07 08:28:19 +00:00
|
|
|
|
Build output can be found in the `.build/` directory within the project.
|
2015-12-30 21:45:36 +00:00
|
|
|
|
|
2018-11-24 03:57:51 +00:00
|
|
|
|
## ✅ Tests
|
2018-02-11 22:39:52 +00:00
|
|
|
|
|
2018-11-24 03:57:51 +00:00
|
|
|
|
The tests in this project are a recent work-in-progress.
|
|
|
|
|
Since Xcode does not officially support tests for command-line tool targets,
|
|
|
|
|
all logic is part of the MasKit target with tests in MasKitTests.
|
|
|
|
|
Tests are written using [Quick].
|
2018-02-11 22:39:52 +00:00
|
|
|
|
|
2021-05-03 17:14:00 +00:00
|
|
|
|
```bash
|
|
|
|
|
script/test
|
|
|
|
|
```
|
|
|
|
|
|
2018-08-13 03:43:44 +00:00
|
|
|
|
## 📄 License
|
2015-09-20 23:47:42 +00:00
|
|
|
|
|
2018-01-29 00:20:27 +00:00
|
|
|
|
mas-cli was created by [@argon](https://github.com/argon).
|
2016-05-05 18:09:47 +00:00
|
|
|
|
Code is under the [MIT license](LICENSE).
|
2016-09-25 23:32:19 +00:00
|
|
|
|
|
2019-04-30 13:40:29 +00:00
|
|
|
|
[homebrew-bundle]: https://github.com/Homebrew/homebrew-bundle
|
2021-04-26 20:04:01 +00:00
|
|
|
|
[`softwareupdate(8)`]: https://www.unix.com/man-page/osx/8/softwareupdate/
|
2018-11-24 03:57:51 +00:00
|
|
|
|
[Quick]: https://github.com/Quick/Quick
|