Ich habe die Liste der Anwendungen für bestimmte Dateierweiterung (mit LSCopyApplicationURLsForURL). Ich möchte die Standarddateizuordnung vom Code ändern, wenn ich eine der Anwendungen aus dem obigen Aufruf auswähle. Gibt es eine Möglichkeit, dies zu tun?Einstellen der Standardanwendung für bestimmte Dateierweiterung unter Mac OS X von Code
Antwort
- (void) setApplication:(NSString *)applicationName forExtension:(NSString *)extension {
NSArray *appPaths = [self getApplicationListForExtension:extension];
for (NSString *appPath in appPaths) {
if ([appPath rangeOfString:applicationName].location != NSNotFound) {
NSArray *UTIs = (NSArray *)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension,
(CFStringRef)extension,
nil);
for (NSString *UTI in UTIs) {
LSSetDefaultRoleHandlerForContentType((CFStringRef)UTI,
kLSRolesEditor,
(CFStringRef)[[NSBundle bundleWithPath:appPath] bundleIdentifier]);
}
[UTIs release];
break;
}
}
}
Hier ist ein Code-Snippet für eine sehr ähnliche Aufgabe: Stellen Sie sich als Standardanwendung für eine Erweiterungsdatei angegeben:
#import <ApplicationServices/ApplicationServices.h>
#import "LaunchServicesWrapper.h"
@implementation LaunchServicesWrapper
+ (NSString *) UTIforFileExtension:(NSString *) extension {
NSString * UTIString = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)extension,
NULL);
return [UTIString autorelease];
}
+ (BOOL) setMyselfAsDefaultApplicationForFileExtension:(NSString *) fileExtension {
OSStatus returnStatus = LSSetDefaultRoleHandlerForContentType (
(CFStringRef) [LaunchServicesWrapper UTIforFileExtension:fileExtension],
kLSRolesAll,
(CFStringRef) [[NSBundle mainBundle] bundleIdentifier]
);
if (returnStatus != 0) {
NSLog(@"Got an error when setting default application - %d", returnStatus);
// Please see the documentation or LSInfo.h
return NO;
}
return YES;
}
@end
Danke, aber schon gefunden die Antwort (siehe meine Antwort) - Ihre ist ein bisschen anders als meine, da es nur UTI für eine Erweiterung gefunden. Was ist, wenn es mehr gibt? – beeci
Leider funktioniert dies nicht mehr für Sandbox-Anwendungen. – user362515
Hier ist eine leicht modifizierte und ARC-kompatible Version von Guillaume-Lösung :
#import <Foundation/Foundation.h>
@interface LaunchServicesWrapper : NSObject
+ (BOOL)setMyselfAsDefaultApplicationForFileExtension:
(NSString *)fileExtension;
@end
#import <ApplicationServices/ApplicationServices.h>
#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
Ist das immer noch der beste Weg? Ich arbeite an einer Mac-App in Swift und ich übersetze das Swift wenn es so ist. –
- 1. Anwendungsaktualisierungen unter Mac OS X
- 2. Qt4Dotnet unter Mac OS X
- 3. Aktualisieren von Ruby unter Mac OS X
- 4. Einzigartige Hardware-ID unter Mac OS X
- 5. Programmgesteuertes Ändern der Kindersicherung unter Mac OS X
- 6. Java Swing GUIs unter Mac OS X
- 7. Installieren von Eigenen unter Mac OS X für XCode
- 8. Verwenden von Eigen unter Mac OS X für XCode
- 9. Git core.editor unter Mac OS X
- 10. AVFoundation + GC unter Mac OS X
- 11. Java Drag & Drop unter Mac OS X
- 12. Testen Sie IE6 unter Mac OS X
- 13. Cocoa-Anwendungsarchitektur unter Mac OS X
- 14. OpenCV-Installation unter Mac OS X
- 15. Statische Verbindung wxHaskell unter Mac OS X
- 16. Assembly-Assembly unter Mac OS X bearbeiten
- 17. Sprachcodierung in Emacs unter Mac OS X
- 18. Windows Mobile Entwicklung Unter Mac OS X
- 19. Programmgesteuert beim Start unter Mac OS X?
- 20. Applet 1.6 unter Mac OS X
- 21. pygettext.py und msgfmt.py unter Mac OS X
- 22. OpenMP unter Mac OS X 10.11 installieren
- 23. /proc/uptime unter Mac OS X
- 24. Installieren Sie CLSQL unter Mac OS X
- 25. Java System.getProperty ("user.dir") unter Mac OS X
- 26. Aktualisieren Brew Fehler unter Mac OS X
- 27. Vim Insert-Modus unter Mac OS X
- 28. Einstellen der anfänglichen Fenstergröße einer App unter OS X?
- 29. ldconfig für Mac OS X
- 30. SetWindowsHookEx für Mac OS X?
Dieser Code erhält 'ThisAppName', aber tut nichts damit. – JWWalker
Danke, entfernt. – beeci
'getApplicationListForExtension:' ist nicht definiert. –