使用しているiOSのバージョンによって異なると思います。4.3より前は、アセットが返さnil
れるということは、単にアイテムがDRMされており、アクセスできなかったことを意味していると思います。ただし、現在のバージョン(5)では、nilはiCloudのみであることを意味します。たぶん、DRMされただけだと思うトラックがありますが、実際にはiCloudに保存されている曲です。私が取り組んでいる現在のアプリでは、元々iCloudトラックをまったく考慮していなかったため(以前のバージョンのiOSのアプリをターゲットにしていたため)、使用したデバイスによってはクラッシュが発生していました。問題を解決し、iCloud / DRMをテストするには、次のものを使用します。
AVURLAsset* asset;
NSURL* realAssetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];
if(!realAssetUrl){
//track is iCloud
}
asset = [[AVURLAsset alloc]initWithURL:realAssetUrl options:nil];
if(asset == nil || asset.hasProtectedContent){
//asset is DRMed such that it cannot be played back.
//most apps can stop here but I need to be able to export the song
}
if (!asset.exportable || !asset.readable){
//the asset cannot be exported and thus cannot be cached to a file
//the current app directory and cannot be transferred over network
//if asset passed earlier check, can still be used for local playback
}
[asset release];
それは私にとってはうまくいくようですが、あなたはすでに同じ道を進んでいることを意味しているので、それがあなたにどれほどの助けになるかはわかりません。しかし、あなたのプロジェクトで頑張ってください。あなたが探している答えが見つかることを願っています!