I managed to get this working.

https://gist.github.com/nathankerr/38d8b0d45590741b57f5f79be336f07c

I don't know what sort of app you are making, so I made a simple gui that 
displays the url received, with some filler text before any are. I think 
the non-ui parts should transfer to whatever you are doing.

A few notes:

- main.go lines 3-8 (cgo and import C) are important. They tell go how to 
build the c and obj-c parts.
- after C.StartURLHandler is called, HandlerURL will be called. HandleURL 
needs to be non-blocking as it seems to block the whole UI, so put 
long-running stuff in another go routine. I had to buffer labelText so the 
a url received at the same time the app starts will not hang the program.
- I had to put C.StartURLHandler before the ui.Main stuff so the first url 
would not be lost when the app is opened with `open myapp://whatever` and 
the app was not already running.
- running `make` will setup the app, including building it. You will need 
to `go get -u github.com/andlabs/ui` before doing so.
- You might need to change the url scheme to something else because you 
(presumably) already have an app that registers myapp. I didn't think of 
this earlier as I was trying to follow your question.
- Before trying to open the url, open the app itself. This will register 
the url scheme with macOS. After doing so, the app will work if it is 
already running or not.
- I was not able to get cmd-Q to close the app. Just click the close (red) 
button on the window. This seems to be a limit of the ui package.

This worked for me using go1.8 on macOS 10.12.3 and the latest version of 
the ui package.

Hope it helps you out.

Nathan

On Wednesday, July 6, 2016 at 11:50:02 PM UTC+2, [email protected] wrote:
>
> Hi,
>
> I'm trying to hook up a Go application to a URL protocol handler in Mac OS 
> X.  I want a user to be able to click on a link such as myapp://foo/bar and 
> have that launch myapp and be able to access the full query parameters. 
>  I've made it as far as getting the OS to register the handler and launch 
> the app.  That's done by bundling the Go binary into a OS X-style .app 
> package with a Info.plist file like this:  
> https://gist.github.com/chrissnell/db95a3c5ad6ceca4c673e96cca0f7548
>
> The challenge now is to figure out how to reference the query parameters 
> within Go.  I've determined that they're not passed as command-line 
> arguments.   From what I can tell, you have to use Cocoa libraries to get 
> at them  [1].  I don't know Objective-C or Swift, though, so that's where 
> I'm stumbling.
>
> There are cheap hacks to do this with AppleScript [2] but I wanted 
> something more native. 
>
> Has anybody done this?
>
> Chris
>
>
> [1] 
> http://fredandrandall.com/blog/2011/07/30/how-to-launch-your-macios-app-with-a-custom-url/
>
> [2] 
> https://support.shotgunsoftware.com/hc/en-us/community/posts/209485898-Launching-External-Applications-using-Custom-Protocols-under-OSX
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to