ScriptingBridge iTunesTrack VS. iTunesFileTrack — ошибка песочницы

У меня есть приложение AppleScript-ObjC, которое находится в песочнице, и у меня возникла проблема с попыткой получить или установить свойства дорожки iTunes. Как ни странно, я могу успешно запускать методы get/set при работе с объектом iTunesTrack, но не могу при работе с объектом iTunesFileTrack.

Пример:

    set iTunesAppObject to current application's SBApplication's applicationWithBundleIdentifier_("com.apple.iTunes")
    set trackToEdit to iTunesAppObject's currentTrack()
    set trackPersistentID to trackToEdit's persistentID()
    trackToEdit's setName_("TEST NAME") -- this works, trackToEdit is an iTunesTrack object

    -- GET ALL SOURCES FROM ITUNES
    set iTunesSources to iTunesAppObject's sources()

    -- REPEAT FOR EVERY SOURCE
    repeat with aSource in iTunesSources

        -- LOOK FOR MAIN LIBRARY SOURCE
         if (aSource's |kind|()) is 1.800169826E+9 then
             set mainLibrary to aSource
             exit repeat
         end if

    end repeat

    set libraryPlaylist to mainLibrary's |libraryPlaylists|() -- GET LIBRARY PLAYLIST
    set libraryPlaylist to libraryPlaylist's objectAtIndex_(0)
    set allTracksInPlaylist to libraryPlaylist's |fileTracks|() -- GET ALL TRACKS IN PLAYLIST

    -- SET UP PREDICATE TO FIND TRACK WITH ID
    set searchPredicate to current application's NSPredicate's predicateWithFormat_(("persistentID == " & quoted form of (trackPersistentID as text)))
    allTracksInPlaylist's filterUsingPredicate_(searchPredicate) -- FILTER ARRAY
    set trackToEdit to allTracksInPlaylist's objectAtIndex_(0) -- GET REMAINING ITEM IN ARRAY, RETURNS iTunesFileTrack OBJECT


log trackToEdit -- returns a seemingly valid iTunesFileTrack object     
trackToEdit's setName_("TEST NAME") -- does NOT work, result in sandbox dispatch deny error in Console.app
log trackToEdit's |name|() -- does NOT work, returns null/missing value

Все работает, когда приложение не изолировано. Я добавил почти все права в свой проект, в том числе:

com.apple.iTunes.library.read-write
com.apple.iTunes.user-interface
com.apple.iTunes.playerInfo
com.apple.iTunes.playback

Кто-нибудь может придумать способ обойти это? Можно ли «преобразовать» объект iTunesFileTrack в объект iTunesTrack? Спасибо заранее за любые предложения!


person William Gustafson    schedule 13.08.2014    source источник


Ответы (1)


благослови свое сердце. попробуйте это:

property aTrack : missing value

on getTrack_(sender)

tell application "iTunes"
set aTrack to (get current track)
end tell

end getTrack_

on renameTrack_(sender)
set name of aTrack to "whatever"
end renameTrack_
person petey_wheatstraw    schedule 13.08.2014
comment
я должен тебе крылья, братан. Я поставил мяч и забыл, что покакал в воду. - person William Gustafson; 13.08.2014