I develop a Mac app that saves and loads files of a unique type. The type is properly declared in the info.plist under CFBundleDocumentTypes, listed as LSHandlerRank: Owner and CFBundleTypeRole: Editor. I am releasing a new version of my app and I would like that if users who already have a previous version of my app on their machine install the new version but keep the old version also installed, the new version automatically takes over the file association for this type from the old version of the app. But the default OS behavior seems to be to grant the earliest installed app associated with a file type to be it's permanent owner unless the user manually changes it. I know that the command line tool duti can make association changes, and also the system file com.apple.LaunchServices.plist can be edited, but these don't seem like the best or most reliable way to go about this programmatically from an app. Is there any "right"/Apple-sanctioned way to do what I want?
overriding Mac app file associations via CFBundleDocumentTypes in info.plist
1.6k Views Asked by keymap At
1
There are 1 best solutions below
Related Questions in MACOS
- Getting "Extra args block must be a javascript object literal." error when trying to move a Google Task
- Unable to authenticate with Google Tasks - Homework
- Google APIs - Different Versions
- Syncing Google Tasks created in Google Apps with those created in our Web Application (Grails/Java)
- Allowing others to add Google tasks
- Is it possible to add some meta information to Google Tasks?
- Google Tasks Shared List Limit?
- Google task api due field
- How do you use Google tasks API from an Android app?
- Due Date is not updating on google
Related Questions in INFO.PLIST
- Getting "Extra args block must be a javascript object literal." error when trying to move a Google Task
- Unable to authenticate with Google Tasks - Homework
- Google APIs - Different Versions
- Syncing Google Tasks created in Google Apps with those created in our Web Application (Grails/Java)
- Allowing others to add Google tasks
- Is it possible to add some meta information to Google Tasks?
- Google Tasks Shared List Limit?
- Google task api due field
- How do you use Google tasks API from an Android app?
- Due Date is not updating on google
Related Questions in CFBUNDLEDOCUMENTTYPES
- Getting "Extra args block must be a javascript object literal." error when trying to move a Google Task
- Unable to authenticate with Google Tasks - Homework
- Google APIs - Different Versions
- Syncing Google Tasks created in Google Apps with those created in our Web Application (Grails/Java)
- Allowing others to add Google tasks
- Is it possible to add some meta information to Google Tasks?
- Google Tasks Shared List Limit?
- Google task api due field
- How do you use Google tasks API from an Android app?
- Due Date is not updating on google
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
The official, Apple-sanctioned way for an application to set the default application for a file type is probably to use their provided
LSSetDefaultRoleHandlerForContentType
function. This function sets the values stored in LaunchServices.Here is the limited official documentation on how to use this API in Objective-C and Swift.
There doesn't appear to be any way to do this via
Info.plist
, as the first application get's set as the user preferred application. The user must change their preferred application, which you can facilitate with the above API.