Search code examples
macosiphoto

XPC error when using MLMediaLibrary from command line daemon


I'm writing a command-line daemon to read images from iPhoto.

I can init and load an MLMediaLibrary fine from a full-blown Cocoa application, created using the Xcode project creation tools. However, when I try and do the same from a command-line tool (also created in Xcode), the following error appears in Xcode console window:

MLMediaLibrary error obtaining remote object proxy: Error Domain=NSCocoaErrorDomain Code=4097 "Couldn’t communicate with a helper application."

How can I access MLMediaLibrary from a command-line tool?


Solution

  • In order to access MLMediaLibrary your application has to be sandboxed and codesigned.

    Update

    It seems like you also have to add some permanent read-only access entitlements to your .entitlements file.

    If you want to access Photos, iPhoto or Aperture libraries:

    <key>com.apple.security.assets.pictures.read-only</key>
    <true/>
    

    If you want to access iMovie and FinalCut:

    <key>com.apple.security.assets.movies.read-only</key>
    <true/>
    

    If you want to access iTunes or Logic:

    <key>com.apple.security.assets.music.read-only</key>
    <true/>
    

    You can read about my poor experience with a MediaLibrary framework here: https://devforums.apple.com/message/1125821