Не удается получить доступ к фотографиям в MacOS Mojave с помощью MLMediaLibrary с моей заставки - PullRequest
0 голосов
/ 15 марта 2019

Я разработал заставку, которая использовалась для отображения фотографий, хранящихся в приложении Photos.app, с использованием MLMediaLibrary (с некоторыми дополнительными функциями).

Теперь, поскольку я перешел на Mojave, он не может получить доступ к фотографиям.Больше.Я подозреваю, что проблема заключается в новых возможностях TCC.Проблема в том, что я не вижу, как пользователь может предоставить доступ к фотографиям для заставки!Я добавил ключ NSPhotoLibraryUsageDescription в проект, но безрезультатно.

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

Я был бы очень признателен, если кто-нибудьможет пролить свет на это, указать мне правильное направление, предоставить пример кода или помочь любым другим способом!

Я также был бы рад использовать другие фреймворки.Я посмотрел на PhotoKit, но под macOS, который, кажется, работает только для расширений Photos.app.AppleScript, вероятно, не правильный путь, потому что он медленный, и мне нужно получить доступ к 10000 фотографий в Photos.app.Но я рад, что вы можете указать мне какую-то другую структуру или исправить меня, если я ошибаюсь.

Заранее большое спасибо.

Ниже приведены фрагменты кода.

В методе initWithFrame я получаю дескриптор библиотеки мультимедиа следующим образом:

NSDictionary *options = @{
                          MLMediaLoadSourceTypesKey: @(MLMediaSourceTypeImage),
                          MLMediaLoadIncludeSourcesKey: @[MLMediaSourcePhotosIdentifier]
                          };
mediaLibrary_ = [[MLMediaLibrary alloc] initWithOptions: options];
[self logMessage: [NSString stringWithFormat: @"mediaLibrary = %p", (void*)mediaLibrary_] asError: NO];
[mediaLibrary_ addObserver: self
                    forKeyPath: @"mediaSources"
                       options: 0
                       context: &MediaLibraryLoaded];
[mediaLibrary_.mediaSources objectForKey: MLMediaSourcePhotosIdentifier ];

Вот начало метода KVO:

- (void) observeValueForKeyPath: (NSString *) keyPath   ofObject: (id) object
                         change: (NSDictionary *) change context: (void *) context
{
    MLMediaSource * mediaSource = [mediaLibrary_.mediaSources objectForKey: MLMediaSourcePhotosIdentifier];
    if ( ! mediaSource )
        [self logMessage: @"mediasource = NULL!" asError: YES];

KVO вызывается, но mediaSource всегда NULL.

В файле журнала я также вижу (я думаю) некоторые сообщения от tccd о том, что доступ запрещен.

Но как пользователь может предоставить доступ к сторонним заставкам ??

...