Я разработал заставку, которая использовалась для отображения фотографий, хранящихся в приложении 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 о том, что доступ запрещен.
Но как пользователь может предоставить доступ к сторонним заставкам ??