2017-12-31 48 views
1

私のプログラムはラジオ局を自動化します。 iTunesとの間で多くのコミュニケーションが行われています。私はスクリプトブリッジでそれをプログラミングしました。スクリプティングブリッジはメモリリークを被ります。スクリプティングブリッジを呼び出すたびに、少量のメモリがリークします。 24時間365日稼働するプログラムにたくさんの呼び出しを追加し、24時間以内に実行されるソフトウェアを入手してから終了します。ITLibraryは私に何も与えません(ヌル)

私の最初の試みは、スクリプティングブリッジに対する私の呼び出しを最小限に抑えることでした。そのことを研究するにあたり、私はItunesLibraryを訪れました。それは私のために働いていません。

NSError *error = nil; 
ITLibrary *library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error]; 
if (library) 
{ 
    NSArray *playlists = [[NSArray alloc]init]; 
    playlists = library.allPlaylists; 
    NSArray *tracks = [[NSArray alloc]init]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mediaKind == %d", ITLibMediaItemMediaKindSong]; 
    tracks = [library.allMediaItems filteredArrayUsingPredicate:predicate]; 

    NSLog(@"Playlists - %@",playlists); 
    NSLog(@"Tracks - %@",tracks); 
} 

このコードはAppleのドキュメントの外にあります。それはうまくいくはずです。

私は述語を追加する前に、自分のiTunesライブラリの各ポッドキャストに関する情報を得ました。 nslog出力では、私のプレイリストのそれぞれが ""と似たエントリを生成します。私の曲のそれぞれは、(null)以上のものを示していません。

すべての情報はiTunesにあります。私はスクリプトブリッジでそれを読むことができます。私はAVAssetでそれを読むことができます

AVAsset *asset = [AVURLAsset URLAssetWithURL:myUrl options:nil]; 

NSArray *metadata = [asset commonMetadata]; 
for (AVMetadataItem* item in metadata) 
{ 
    NSString *key = [item commonKey]; 
    NSString *value = [item stringValue]; 
    NSLog(@"key = %@, value = %@", key, value); 
} 

私はAVSsetでは、曲名、アルバム名、アーティスト名のみを取得します。 iTuneのID3タグの残りの部分にアクセスする必要があります。

私はItunesLibraryを壊すことはありませんか?

答えて

0

ItunesLibraryを動作させる秘密は、資格ファイルにあるようです。 「com.apple.security.assets.music.read-only」というキーを追加し、YESに設定する必要があります。私はgithub.comのプロジェクトを掘り下げてこれを得ました。

関連する問題