Как открыть файл с помощью определенного пакета приложений?

Я написал приложение на Qt для macOS и Windows. Теперь мы хотим общаться с этим приложением из браузера, используя специальные протоколы. Поскольку добавить это в Qt кажется невозможным, я попытался создать вспомогательное приложение Cocoa, которое просто получает сообщение, созданное в браузере, из macOS, используя специальный протокол. До сих пор это работало и было просто.

Но мне не удается заставить его открыть документ в моем (отдельном Qt) приложении.

Испытание 1:

void launchApplicationBundleWithArguments(NSString *bundleIdentifier, NSString *executablePath, NSArray<NSString *> *arguments) 
{
    NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
    NSURL *url = [workspace URLForApplicationWithBundleIdentifier:bundleIdentifier];
    
    if (url) {
        NSError *error = nil;
        
        NSDictionary *configuration = @{NSWorkspaceLaunchConfigurationArguments: launchArguments};
      
        if (![workspace launchApplicationAtURL:url options:NSWorkspaceLaunchDefault configuration:configuration error:&error]) {
            NSLog(@"Error launching application: %@", error);
        }   
    } else {
        NSLog(@"Application bundle with identifier %@ not found", bundleIdentifier);
    }
}

Это запускает мое приложение, но не отправляет путь к файлу (хранящийся в аргументах) в командную строку моего основного приложения. Об ошибках не сообщается.

Испытание 2:

NSWorkspaceOpenConfiguration* configuration = [NSWorkspaceOpenConfiguration new];
[configuration setArguments: launchArguments];
 [configuration setPromptsUserIfNeeded: YES];
 [workspace openApplicationAtURL: [NSURL fileURLWithPath: executablePath] configuration: configuration completionHandler:^(NSRunningApplication* app, NSError* error) {
   if (error) {
     NSLog(@"Failed to run the app: %@", error.localizedDescription);
   }
 }];

Это не удается: появляется окно сообщения о том, что мое вспомогательное приложение не имеет достаточных прав доступа для запуска другого приложения.

Как это может быть сделано?

Ваши приложения находятся в песочнице? В документации к свойству argumentsNSWorkspaceOpenConfiguration говорится: «Если вызывающий процесс находится в песочнице, система игнорирует значение этого свойства».

JWWalker 19.04.2024 17:25

@JWWalker Я не могу сказать. Как мне это узнать?

RED SOFT ADAIR 19.04.2024 23:37

Обычно вы знаете, находится ли оно в песочнице, потому что вы задали этот параметр при создании приложения. Но также можно отобразить столбец в утилите «Монитор активности», чтобы увидеть, какие запущенные приложения находятся в «песочнице».

JWWalker 20.04.2024 06:11

Извините за задержку - сейчас я проверил Монитор активности - и отчеты приложений НЕ помещены в песочницу. Я могу успешно запустить приложение с терминала с параметрами. Есть идеи?

RED SOFT ADAIR 26.04.2024 11:24

Здесь есть два приложения, одно запускается, другое запускает. Какой из них, вы говорите, не находится в песочнице?

JWWalker 26.04.2024 17:17

Вспомогательное приложение действительно было помещено в песочницу! Очевидно, это настройка по умолчанию! В этом была проблема. Теперь работайте как положено. @JWWalker Большое спасибо.

RED SOFT ADAIR 27.04.2024 21:34

@JWWalker: Пожалуйста, ответьте на этот вопрос, чтобы я мог его принять.

RED SOFT ADAIR 28.04.2024 08:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документации свойства arguments класса NSWorkspaceOpenConfiguration, изолированное приложение не может передавать аргументы другому приложению, которое оно запускает. Поэтому убедитесь, что ваше вспомогательное приложение не изолировано в песочнице.

Другие вопросы по теме