Чтение скриншота osx в песочнице

Я хочу, чтобы скриншот запускался разными ярлыками OSX. Поэтому я добавляю наблюдателя с kMDItemIsScreenCapture. Следующий код был использован для добавления наблюдателя.

_query = [[NSMetadataQuery alloc] init];
[_query setDelegate:self];
[_query setPredicate:[NSPredicate predicateWithFormat:@"kMDItemIsScreenCapture = 1"]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenshotQueryUpdated:) name:NSMetadataQueryDidUpdateNotification object:_query];
[_query startQuery];

Реализация screenshotQueryUpdated выглядит следующим образом:

NSMetadataItem *item = [[notification.userInfo objectForKey:(NSString *)kMDQueryUpdateAddedItems] lastObject];
if (item) {
    NSString *screenShotPath = [item valueForAttribute:NSMetadataItemPathKey];
    NSData* temp = [NSData dataWithContentsOfFile:screenShotPath];
    // More code....
}

Проблема в том, что я не могу прочитать файл в screenShotPath в режиме sandbox. Итак, как правильно получить файл скриншота в приложении с песочницей.


person Mirza Bilal    schedule 09.02.2015    source источник


Ответы (1)


Используйте NSOpenPanel, чтобы запросить у пользователя доступ либо к этому файлу, либо к папке, содержащей скриншоты. Затем вы сможете создать закладка безопасности, чтобы получить доступ к тому же ресурсу при последующих запусках вашего приложения.

person mahal tertin    schedule 10.02.2015
comment
Так это единственный способ, я не могу сделать это без security scoped bookmark, например, получение разрешения пользователя на это нарушит UX - person Mirza Bilal; 13.02.2015
comment
да. Извините. Безопасность и UX обычно несовместимы. - person mahal tertin; 13.02.2015