Skip to content

mas-cli/mas

Repository files navigation

mas-cli

mas-cli

A simple command line interface for the Mac App Store. Designed for scripting and automation.

Software License Swift 5 GitHub Release Reviewed by Hound Build, Test, & Lint

📲 Install

🍺 Homebrew

Homebrewis the preferred way to install:

brew install mas

MacPorts

MacPortsworks as well:

sudo port install mas

⚠️Note that macOS 10.15 (Catalina) is required to install mas from MacPorts or the core Homebrew formula.

☎️ Older macOS Versions

We provide acustom Homebrew tapwith pre-built bottles for all macOS versions since 10.11.

To install mas from our tap:

brew install mas-cli/tap/mas

Swift 5 Runtime Support

mas requires Swift 5 runtime support. macOS 10.14.4 and later include it, but earlier releases did not. Without it, runningmasmay report an error similar to this:

dyld: Symbol not found: _$s11SubSequenceSlTl

To get Swift 5 support, you have a few options:

🐙 GitHub Releases

Alternatively, binaries are available in theGitHub Releases.

🤳🏻 Usage

Each application in the Mac App Store has a product identifier which is also used for mas-cli commands. Usingmas listwill show all installed applications and their product identifiers.

$ mas list
446107677 Screens
407963104 Pixelmator
497799835 Xcode

It is possible to search for applications by name usingmas searchwhich will search the Mac App Store and return matching identifiers. Include the--priceflag to include prices in the result.

$ mas search Xcode
497799835 Xcode
688199928 DocsforXcode
449589707 Dash 3 - API Docs&Snippets. Integrates with Xcode, Alfred, TextWrangler and many more.
[...]

Another way to find the identifier for an app is to

  1. Find the app in the Mac App Store
  2. SelectShare>Copy Link
  3. Grab the identifier from the string, e.g. for Xcode, https://apps.apple /us/app/xcode/id497799835?mt=12 has identifier497799835

To install or update an application simply runmas installwith an application identifier:

$ mas install 808809998
==>Downloading PaintCode 2
==>Installed PaintCode 2

If you want to install the first result that thesearchcommand returns, use theluckycommand.

$ mas lucky twitter
==>Downloading Twitter
==>Installed Twitter

Please note that this command will not allow you to install (or even purchase) an app for the first time: use thepurchasecommand in that case. ⛔ Thepurchasecommand is not supported as of macOS 10.15 Catalina. Please seeKnown Issues.

$ 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. This is the case if the application is not free or if you configured your account not to remember the credentials for free purchases.

Usemas outdatedto list all applications with pending updates.

$ mas outdated
497799835 Xcode (7.0)
446107677 Screens VNC - Access Your Computer From Anywhere (3.6.7)

masis only able to install/update applications that are listed in the Mac App Store itself. Usesoftwareupdate(8)utility for downloading system updates (e.g. Xcode Command Line Tools)

To install all pending updates runmas upgrade.

$ 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

Updates can be performed selectively by providing the app identifier(s) to mas upgrade

$ mas upgrade 715768417
Upgrading 1 outdated application:
Xcode (8.0)
==>Downloading Xcode
==>Installed Xcode

🚏📥 Sign-in

⛔ Thesignincommand is not supported as of macOS 10.13 High Sierra. Please seeKnown Issues.

To sign into the Mac App Store for the first time runmas signin.

$ mas signin mas@example
==>Signinginto Apple ID: mas@example
Password:

If you experience issues signing in this way, you can ask to sign in using a graphical dialog (provided by Mac App Store application):

$ mas signin --dialog mas@example
==>Signinginto Apple ID: mas@example

You can also embed your password in the command.

$ mas signin mas@example'ZdkM4f$gzF;gX3ABXNLf8KcCt.x.np'
==>Signinginto Apple ID: mas@example

Usemas signoutto sign out from the Mac App Store.

🍺 Homebrew integration

masis integrated withhomebrew-bundle.Ifmasis installed, and you runbrew bundle dump, then your Mac App Store apps will be included in the Brewfile created. See thehomebrew-bundle docs for more details.

⚠️Known Issues

Over time, Apple has changed the APIs used bymasto manage App Store apps, limiting its capabilities. Please sign in or purchase apps using the App Store app instead. Subsequent redownloads can be performed withmas install.

  • ⛔️ Thesignincommand is not supported as of macOS 10.13 High Sierra.#164
  • ⛔️ Thepurchasecommand is not supported as of macOS 10.15 Catalina.#289
  • ⛔️ Theaccountcommand is not supported as of macOS 12 Monterey.#417

The versionsmassees 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 theoutdatedandupgradecommands 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 propagation and caching between the time a new app version is released to the App Store, and the time it appears available in the App Store app or via themascommand. These issues cause symptoms like #384and#387.

Macs with Apple silicon can install and run iOS and iPadOS apps from the App Store.masis not yet aware of these apps, and is not yet able to install or update them.#321

💥 When something doesn't work

If you see this error, it's probably because you haven't installed the app through the App Store yet. See#46.

This redownload is not available for this Apple ID either because it was bought by a different user or the item was refunded or cancelled.

Ifmasdoesn't work for you as expected (e.g. you can't update/download apps), runmas resetand try again. If the issue persists, pleasefile a bug. All your feedback is much appreciated! ✨

📺 Usingtmux

masoperates 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 insidetmux.A wrapper tool existsto fix pasteboard behaviour which also works formas.

You should consider configuringtmuxto use the wrapper but if you do not wish to do this it can be used on a one-off basis as follows:

brew install reattach-to-user-namespace
reattach-to-user-namespace mas install

ℹ️ Build from source

You can build from Xcode by opening the rootmasdirectory, or from the Terminal:

script/bootstrap
script/build

Build output can be found in the.build/directory within the project.

✅ Tests

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 usingQuick.

script/test

📄 License

mas-cli was created by@argon. Code is under theMIT license.