首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScriptingBridge iTunesTrack VS.iTunesFileTrack -砂箱错误

ScriptingBridge iTunesTrack VS.iTunesFileTrack -砂箱错误
EN

Stack Overflow用户
提问于 2014-08-13 17:54:57
回答 1查看 214关注 0票数 1

我有一个AppleScript-ObjC应用程序,它是沙箱的,并且在尝试获取或设置iTunes轨道的属性时遇到了问题。奇怪的是,我可以在使用iTunesTrack对象时成功地运行get/set方法,但在处理iTunesFileTrack对象时却不能运行。

示例:

代码语言:javascript
复制
    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

当应用程序没有沙箱时,一切都能正常工作。我已经为我的项目添加了几乎所有的权利,包括:

代码语言:javascript
复制
com.apple.iTunes.library.read-write
com.apple.iTunes.user-interface
com.apple.iTunes.playerInfo
com.apple.iTunes.playback

有人能想办法绕过这件事吗?是否可以将iTunesFileTrack对象“转换”为iTunesTrack对象?谢谢您的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-13 19:00:54

保佑你的心。试试这个:

代码语言:javascript
复制
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_
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25292977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档