Use the LSRegisterURL() function in Launch Services.

-Jeff


On Jul 14, 2012, at 7:20 AM, Jerry Krinock wrote:

> I have an app in the field which handles a url.  I mean, it has one of these 
> in its Info.plist…
> 
>    <key>CFBundleURLTypes</key>
>    <array>
>        <dict>
>            <key>CFBundleURLSchemes</key>
>            <array>
>                <string>myapp</string>
>            </array>
>            <key>LSIsAppleDefaultForScheme</key>
>            <true/>
>        </dict>
>    </array>
> 
> In order to fix a longstanding issue, I've now moved this entry, and the code 
> to support it, into a helper app which is shipped in the main app's 
> Contents/Helpers.  The idea is that the helper app now handles this URL 
> instead of the main app.  I'm going to ship this as an update.  
> 
> It works for me, but due to past experience with the black-boxiness of Launch 
> Services, I'm worried that users' experiences in the field will vary.  I'm 
> not sandboxed.  So I've added some code which, upon first run of the updated 
> app, spawns an NSTask to run lsregister, giving it the path to my app 
> obtained from [[NSBundle mainBundle] bundlePath].  Since there are two paths 
> to lsregister in Mac OS X history, I first try the new path, then if that 
> does not return 0, the old path [1].  Running this command takes 80-100 
> milliseconds on my Core 2 Duo.
> 
> I'm worried there will still be trouble for some users, and would appreciate 
> any feedback, design or test suggestions.
> 
> Thanks,
> 
> Jerry Krinock
> 
> [1] Here are the two commands I use:
> 
> Using new path to lsregister:
> 
> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
>  -R /path/to/MyApp.app
> 
> Using old path to lsregister:
> 
> /System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
>  -R /path/to/MyApp.app
> 
> The arguments are passed in -[NSTask setArguments:], whose documentation 
> indicates that I "do not need to do special quoting", which I interpret to 
> mean that I need not quote the /path/to/MyApp.app.
> 
> The option "-R" means "Recursive directory scan, descending into packages and 
> invisible directories", which I presume is necessary in order to find my 
> helper buried in Contents/Helpers.
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/publicposting%40lapcatsoftware.com
> 
> This email sent to publicpost...@lapcatsoftware.com


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to