0
Sandboxed 앱에서 Scripting Bridge를 사용하여 iTunes에서 트랙의 배열을 필터링하려고합니다. 다음 작품은 응용 프로그램 샌드 박스되지 않을 때,하지만하지 때샌드 박스가 SBElementArray로 NSPredicate를 깨뜨림
if(!self.iTunes){
self.iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
self.library = [[[[self.iTunes sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcLibrary]] objectAtIndex:0];
iTunesLibraryPlaylist *libraryPlaylist = [[[[self.library playlists] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"specialKind == %i", iTunesESpKMusic]] objectAtIndex:0];
self.musicTracks = [libraryPlaylist tracks];
}
// Create the playlist in iTunes
NSString *playlistName = selectedEquation.name;
iTunesPlaylist *playlist = [[[self.iTunes classForScriptingClass:@"playlist"] alloc] init];
[[self.library userPlaylists] insertObject:playlist atIndex:0];
[playlist setName:playlistName];
// Use persistent id to match between iTunesLibrary and ScriptingBridge
NSArray* iDArray = [self.tableTracks valueForKey:@"persistentID"];
for (NSNumber *decID in iDArray){
NSString* hexID = [NSString stringWithFormat:@"%llx", (long long)[decID integerValue]];
hexID = [hexID uppercaseString];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"persistentID", hexID];
[[[self.musicTracks filteredArrayUsingPredicate:predicate] objectAtIndex:0] duplicateTo:playlist];
}
이 버그, 아니면 내가 뭔가를 놓친 게 뭐죠? 필터를 실행하기 전에 self.musicTracks
을 NSArray
으로 변환하면 작동합니다. 그러나 이로 인해 상황이 상당히 느려지면서 실제로 사용할 수없는 수준으로 떨어집니다.
편집 : 여기 내 권한 파일입니다. 재생 목록과 트랙을 추가 할 수 있습니다. 더 이상 작동하지 않는 필터링 일뿐입니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.assets.music.read-write</key>
<true/>
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.iTunes</key>
<array>
<string>com.apple.iTunes.library.read-write</string>
</array>
</dict>
</dict>
</plist>
@TBlue 오른쪽, 좋은 지적. 그것은 질문에 추가했습니다 – abroekhof
이것은 나에게도 일어난 일입니다. 이 질문보기 : http://stackoverflow.com/questions/16420120/itunes-scripting-with-scripting-bridge-sandboxing – Alex