2

I am sandboxing an osx app that uses scripting bridge to access iTunes.

        for(iTunesFileTrack* track in fileTracks)
        { 


           //url is nill in sandbox mode but good value in non sandbox mode
            NSURL* url = [track location];

            NSString* sourceFile = [[track location] path];

            if(sourceFile == nil)
            {
                NSLog(@"Sourcefile for the track %@ was nil", track);
                continue;
            }
         }

nil is returned, I am using following entitlements

            <?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.movies.read-write</key>
                <true/>
                <key>com.apple.security.assets.music.read-write</key>
                <true/>
                <key>com.apple.security.network.client</key>
                <true/>
                <key>com.apple.security.network.server</key>
                <true/>
                <key>com.apple.security.scripting-targets</key>
                <dict>
                    <key>com.apple.iTunes</key>
                    <array>
                        <string>com.apple.iTunes.device</string>
                        <string>com.apple.iTunes.library.read</string>
                        <string>com.apple.iTunes.library.read-write</string>
                        <string>com.apple.iTunes.playback</string>
                        <string>com.apple.iTunes.podcast</string>
                        <string>com.apple.iTunes.user-interface</string>
                    </array>
                </dict>
                <key>com.apple.security.temporary-exception.apple-events:before:10.8</key>
                <array>
                    <string>com.apple.itunes</string>
                </array>
            </dict>
            </plist>

The console shows following violation

  iTunes[1592]: AppleEvents/sandbox: Returning errAEPrivilegeError/-10004 and denying dispatch of event core/getd from process 'TestiTunesAccess'/0x0-0x4d04d, pid=1789, because it is not entitled to send an AppleEvent to this process.

it works fine in 10.7 and location is returned OK, but in 10.8 and 10.9 because the scripting-target entitlement is active, I can iterate the library but location of track is nil, why is that so ? if I just use temporary exception and remove the part:before10.8 then it works.

But since apple recommends we use scripting target in 10.8+ and not temporary exception entitlements, I am using the recommended ones. any help would be highly appreciated.

Ahmed
  • 14,503
  • 22
  • 92
  • 150
  • Possible duplicate of [Can't search music using iTunes Scripting Bridge and Sandboxing](http://stackoverflow.com/questions/19803339/cant-search-music-using-itunes-scripting-bridge-and-sandboxing) – JAL Jun 06 '16 at 20:42

1 Answers1

0

I fixed this by adding a temporary exception for iTunes, as shown in this answer.

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
  <string>com.apple.iTunes</string>
</array>
Community
  • 1
  • 1
Samuel Clay
  • 1,252
  • 2
  • 13
  • 24
  • Please vote to close questions as duplicates rather than duplicating answers from other posts on Stack Overflow. – JAL Jun 06 '16 at 20:42