Setting default application for given file extension on Mac OS X from code

前端 未结 3 1653
旧巷少年郎
旧巷少年郎 2020-12-14 04:59

I have the list of the applications for given file extension (using LSCopyApplicationURLsForURL). I want to change the default file association from code upon selecting one

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-14 05:24

    Here’s a slightly modified and ARC-compliant version of Guillaume’s solution:

    #import 
    
    @interface LaunchServicesWrapper : NSObject
    
    + (BOOL)setMyselfAsDefaultApplicationForFileExtension:
      (NSString *)fileExtension;
    
    @end
    
    
    #import 
    #import "LaunchServicesWrapper.h"
    
    @implementation LaunchServicesWrapper
    
    + (NSString *)UTIforFileExtension:(NSString *)extension
    {
      return (NSString *)CFBridgingRelease(
        UTTypeCreatePreferredIdentifierForTag(
          kUTTagClassFilenameExtension, (__bridge CFStringRef)extension,
          NULL
        )
      );
    }
    
    + (BOOL)setMyselfAsDefaultApplicationForFileExtension:
      (NSString *)fileExtension
    {
      return LSSetDefaultRoleHandlerForContentType(
        (__bridge CFStringRef) [LaunchServicesWrapper
        UTIforFileExtension:fileExtension], kLSRolesAll,
        (__bridge CFStringRef) [[NSBundle mainBundle]
        bundleIdentifier]
      );
    }
    
    @end
    

提交回复
热议问题