Lançamento programático de aplicações

Tenho andado a brincar com o NSWorkspace.

  • [[nsworkspace sharedspace] launchApplication:@ "fotos"] Funciona

  • [[nsworkspace sharedspace] launchApplication:@ "Contacts"] does not work

  • [[nsworkspace sharedWorkspace] launchApplication:@ " / Applications / Contacts.app"] funciona

(Mac OS Sierra)

Por isso, estava a pensar se há alguma forma segura de encontrar o caminho de aplicação "real". Talvez o aplicativo Contatos tem nomes diferentes em diferentes localizações do sistema ? Porque é que as" fotos " funcionam bem ?

eu imagino que deve haver uma maneira, a partir de um identificador de Aplicação documentado da Apple para obter o caminho da aplicação, mas eu não encontrei nada.

Author: AirXygène, 2017-02-21

2 answers

Lembre-se que launchApplication: devolve um BOOL se foi bem sucedido ou não.

Para ter a certeza da aplicação que está a lançar, também pode tentar procurá-la através do NSWorkspace.URLForApplicationWithBundleIdentifier: API, na qual pode ligar o ID da aplicação do contacto de com.apple.AddressBook.

Com o resultado, você pode ligar para a localização explícita do aplicativo via:

- (NSRunningApplication *)launchApplicationAtURL:(NSURL *)url options:(NSWorkspaceLaunchOptions)options configuration:(NSDictionary<NSString *,id> *)configuration error:(NSError * _Nullable *)error;

 4
Author: Michael Dautermann, 2017-02-21 20:00:52

A melhor maneira de abrir uma aplicação é a partir da localização do url do ficheiro. Eu fiz o mesmo para a minha aplicação como abaixo:

NSString *appPathIs = Url.path;

Tomo o caminho do url num texto e depois abro-o com o que indicou

[[NSWorkspace sharedWorkspace] launchApplication:appPathIs];
Tentei de todas as formas alcançar o mesmo, mas às vezes eles trabalham e outras vezes não. Se quiser experimentar outro, por favor, considere isto:
NSString *appPathIs = [[NSWorkspace sharedWorkspace] fullPathForApplication:appName];
NSString *identifier = [[NSBundle bundleWithPath:appPathIs] bundleIdentifier];
NSString *path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:identifier];

[[NSWorkspace sharedWorkspace] launchApplication:appPathIs];
 0
Author: vikram singh, 2017-05-29 06:08:13