Objective-C には、iOS 開発者が iPhone や iPad の写真ライブラリにアクセスし、写真やビデオをメタデータと共に取得できるようにする、PhotoKit とも呼ばれる写真フレームワークがあります。
Mac 開発者は、同様のタスクをどのように実行しますか? PhotoKit は iOS 8.0 でしか利用できないようです。Mac OS X 用の Photos Framework に相当するものはありますか?
Objective-C には、iOS 開発者が iPhone や iPad の写真ライブラリにアクセスし、写真やビデオをメタデータと共に取得できるようにする、PhotoKit とも呼ばれる写真フレームワークがあります。
Mac 開発者は、同様のタスクをどのように実行しますか? PhotoKit は iOS 8.0 でしか利用できないようです。Mac OS X 用の Photos Framework に相当するものはありますか?
Pierre F の回答に基づいて、すべての写真の URL を表示するためのコードを拡張します。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSDictionary *options = @{
MLMediaLoadSourceTypesKey: @(MLMediaSourceTypeImage),
MLMediaLoadIncludeSourcesKey: @[MLMediaSourcePhotosIdentifier]
};
self.mediaLibrary = [[MLMediaLibrary alloc] initWithOptions:options];
[self.mediaLibrary addObserver:self
forKeyPath:@"mediaSources"
options:0
context:(__bridge void *)@"mediaLibraryLoaded"];
[self.mediaLibrary.mediaSources objectForKey:MLMediaSourcePhotosIdentifier];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
MLMediaSource *mediaSource = [self.mediaLibrary.mediaSources objectForKey:MLMediaSourcePhotosIdentifier];
if (context == (__bridge void *)@"mediaLibraryLoaded")
{
[mediaSource addObserver:self
forKeyPath:@"rootMediaGroup"
options:0
context:(__bridge void *)@"rootMediaGroupLoaded"];
[mediaSource rootMediaGroup];
}
else if (context == (__bridge void *)@"rootMediaGroupLoaded")
{
MLMediaGroup *albums = [mediaSource mediaGroupForIdentifier:@"TopLevelAlbums"];
for (MLMediaGroup *album in albums.childGroups)
{
NSString *albumIdentifier = [album.attributes objectForKey:@"identifier"];
if ([albumIdentifier isEqualTo:@"allPhotosAlbum"])
{
self.allPhotosAlbum = album;
[album addObserver:self
forKeyPath:@"mediaObjects"
options:0
context:@"mediaObjects"];
[album mediaObjects];
break;
}
}
}
else if (context == (__bridge void *)@"mediaObjects")
{
NSArray * mediaObjects = self.allPhotosAlbum.mediaObjects;
for(MLMediaObject * mediaObject in mediaObjects)
{
NSURL * url = mediaObject.URL;
NSLog(url.path);
}
}
}