Working on Transloader 3, I wanted to re-implement the Finder’s Open With… contextual menu:
Getting the apps in there turned out to be the easy part. What took some effort was the “App Store…” menu item, as I wanted to precisely replicate its functionality.
Right-click a file in Finder, select Open With -> App Store…, and it will launch the Mac App Store with a UTI search, for example: uti:public.zip-archive.
This will give you a list of all apps available in the Mac App Store that can handle that file type. Neat!
The ‘macappstores’ URL scheme
The Mac App Store app luckily offers a URL scheme:
Launches the Mac App Store
Launches the Mac App Store and takes you directly to your Updates page
Launches the Mac App Store and takes you directly to your Purchased page
Launches the Mac App Store and takes you directly to the product page, identified by the product ID
That’s very practical, but not what I was looking for. I was in need of a way to start a search the way Finder does.
In order to find out the URL Finder uses, I wrote a quick throwaway-app that would overtake the Mac App Store’s URL schemes (using LSSetDefaultHandlerForURLScheme) and print out the URL that was opened.
Alas – no dice. Apparently, Finder uses Apple Events or some other magic that “can not be used in a third-party sandboxed app anyway”™ to do its bidding.
After googling the issue, I found a URL that supposedly worked: macappstores://ax.search.itunes.apple.com/WebObjects/MZSearch.woa/wa/search?q=searchterm, but just to pour more salt into an already wide-open wound, it only worked on pre-10.9 systems:
Another dead end. Or was it?
I guess I should have experimented with that URL a little, because Jan Vitturi (@jan4843 on twitter) had the answer: just remove “ax.” from the URL, and it works (on both pre-10.9 and post-10.9 systems)!
Using this URL:
I was able to get a search going on the Mac App Store, right from within my app.
Sadly, there’s a caveat.
I can’t do a UTI search this way. When I pass (even a percent-escaped) search term along the lines of ‘uti:public.zip-archive’, the Mac App Store tells me there are no results. Reloading that very same page then does show the results – weird and annoying, but nothing I was able to work around.
Using extension:zip seemed to work a little better, but still didn’t return all results a reload would.
Jan Vitturi to the rescue again – the URL’s a little different for UTI or extension searches:
Alternatively, instead of uti=…, you can use extension=… to search by file path extensions.
My sincere thanks go to Jan Vitturi!
– – – Do you enjoy my blog and/or my software? – – –
Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most).
Thank you :)