Tengo la lista de las aplicaciones para la extensión de archivo dada (usando LSCopyApplicationURLsForURL). Quiero cambiar la asociación de archivos predeterminada del código al seleccionar una de las aplicaciones de la llamada anterior. ¿Hay alguna manera de hacer esto?Configuración de la aplicación predeterminada para la extensión de archivo dada en Mac OS X desde el código
Respuesta
- (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;
}
}
}
Aquí es un fragmento de código para una tarea muy relacionados: establecer a sí mismo como la aplicación por defecto para una extensión de archivo determinado:
#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
Gracias, pero ya encontré la respuesta (ver mi respuesta): la suya es un poco diferente a la mía, ya que solo encuentra UTI para una extensión. ¿Qué pasa si hay más? – beeci
Lamentablemente, esto ya no funciona para aplicaciones de espacio aislado. – user362515
Aquí es una versión ligeramente modificada y ARC-compatible de la solución de Guillaume :
#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
¿Sigue siendo la mejor manera de hacerlo? Estoy trabajando en una aplicación Mac en Swift y, si es así, lo traduciré a Swift. –
- 1. ¿Cómo configurar la aplicación predeterminada para tipos de archivos específicos en Mac OS X?
- 2. Configuración de DHCP en Mac OS X
- 3. Arquitectura de la aplicación Cocoa en Mac OS X
- 4. Configuración Bash en Mac OS X 10.4+
- 5. Cómo detectar la configuración regional actual en Mac OS X desde el shell
- 6. Habilitación de extensión PHP PDO_ODBC en un Mac OS X
- 7. Icono de alta resolución para archivo en Mac OS X?
- 8. TClientDataset en la aplicación OS X Firemonkey
- 9. ¿Cómo obtener el tipo de archivo en Mac OS X?
- 10. Configuración de TextMate para la programación de Haskell en Mac OS X
- 11. Mac OS X - aplicación sin menú?
- 12. Guardar archivo con la aplicación mac - extensión de archivo
- 13. Código fuente para Mac OS X Actualizaciones de Java
- 14. ldconfig para Mac OS X
- 15. Haga doble clic en el archivo del documento en Mac OS X para abrir la aplicación Java
- 16. Desinstalador para el paquete en Mac OS X
- 17. División de un archivo usando AWK en Mac OS X
- 18. SetWindowsHookEx para Mac OS X?
- 19. Ajustes de oscilación para Mac OS X
- 20. Mac OS X ignorando el archivo de hosts
- 21. UIActivityIndicatorView para Mac OS X?
- 22. JNotify en Mac OS X?
- 23. ¿Código para minimizar la ventana de la aplicación en Mac?
- 24. Crear una aplicación multiplataforma para Windows, Mac OS X
- 25. Portar una aplicación de iPhone en Mac OS X
- 26. Extensión de Mercurial OS X habilitando
- 27. Mac OS X View Swapping
- 28. Integrando Deltawalker para Mac OS X y la extensión extdiff de Mercurial
- 29. Makefile para dummies? Mac OS X
- 30. Escribir interfaz gráfica de usuario para la aplicación de línea de comandos en Mac OS X
Este código obtiene 'thisAppName' pero no hace nada con él. – JWWalker
Gracias, eliminado. – beeci
'getApplicationListForExtension:' no está definido. –