MediaLibrary.frameworkを使ってみる

事前にお断りしますが、失敗談なので。

 

MediaLibrary.frameworkを使って、ライブラリを検索するAppleScript(とASOC)を作ってみる。

AppleScriptエディタからテンプレートを使って、Cocoa-AppleScript Appletで書き始めたが、正直、Objective-Cでやった方が早いかもしれない。そして数時間・・・

もう、ダメだ耐えられない。たぶん、MediaLibrary.frameworkを呼び出すことができない。

そもそも、どうやってフレームワークにリンクしているのかわからないし。

 

普通にCocoaアプリで再挑戦。数年ぶりにXcode使ったので、操作に戸惑う。フレームワークの追加方法がXcode.app内を参照とか、ちょっとビックリ。

 

さて、mediaSourcesを取り出そうとすると戻り値は初回nilとか、KVOで受け取るとか。作業を進めて分かったが、このフレームワークは内部で非同期のXPCサービスを呼び出しているようで、ちょっと挙動があやしい。下のコードじゃライブラリは受け取れない。

 

NSDictionary *mediaSources = self.mediaLibrary.mediaSources;

 

 

 

ざっと、下みたいに書かないといけない。

 

self.mediaLibrary = [[MLMediaLibraryalloc] initWithOptions:opt];

    

//media librarymediaSourcesへのバインド

[self.mediaLibraryaddObserver:selfforKeyPath:@"mediaSources"options:NSKeyValueObservingOptionNewcontext:nil];

    

 

 

- (void)observeValueForKeyPath:(NSString *)keyPath

                      ofObject:(id)object

                        change:(NSDictionary *)change

                       context:(void *)context

{

    if (object == self.mediaLibrary && [keyPath isEqual:@"mediaSources"]) {

        id value = [change objectForKey:NSKeyValueChangeNewKey];

        NSDictionary *mediaSources = value;

        return;

    }

    [superobserveValueForKeyPath:keyPath ofObject:object change:change context:context];

}

 

 

 

でも、これが下のエラーで弾かれる。

 

MLMediaLibrary error obtaining remote object proxy: Error Domain=NSCocoaErrorDomain Code=4097 "Couldn’t communicate with a helper application."

 

 

ググってみると、以下の記事が。

 

Mavericks MediaLibrary framework - Google グループ

https://groups.google.com/forum/#!topic/imedia-dev/pSDQOIZ3Emk

 

ここのサンプルを見ると、NSMediaLibraryBrowserControllerクラスってのもあるらしい。使い方がわからんが。

で、ビルドしてみるとやはり動かない。

 

推測まじりの結論から言うと、MediaLibrary.framework(XPCサービス)はSandboxアプリが大前提。つまり、有料のDeveloper Programが必要。酷いっす。

 

気を取り直して、iTunesLibrary.frameworkも試してみる。こっちは、XMLを読み取ってNSDictionaryに突っ込むだけなのでSandboxはあまり関係ない。

そういえば、iTunes Music Library.xmlには歌詞は入っていないな。