iTunes-Bibliothek per ScriptingBridge am Mac erreichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • iTunes-Bibliothek per ScriptingBridge am Mac erreichen

    Guten Abend!

    Ich entwickle gerade eine App, mit der man iTunes steuern kann (keine Angst, nicht noch eine von den unzähligen im AppStore, meine wird GANZ anders! :) )
    Lautstärke, Play, Pause, selbst der Equalizer und einiges mehr funktionieren auch schon einwandfrei. Gemacht habe ich das natürlich mit ScriptingBridge. Was noch fehlt, obwohl es relativ wichtig ist, ist, dass man einen Song auswählen kann. Also, dass man die komplette iTunes-Bibliothek sehen kann und dann seinen Song auswählen kann der dann gespielt wird.
    Ich habe schon bei Apple und bei Google geschaut, aber da ich dort nicht fündig geworden bin, bin ich auf Ideen von euch gespannt!
    Danke im vorraus!
    Osxer
  • Soweit ich das im iTunes Header File sehe könntest du durch die sources deiner iTunesApplication an die Library rankommen. Wenn das nicht geht könntest du beim Start deiner App den User durch ein NSOpenPanel die iTunes Library auswählen lassen. Da bekommst du eine XML Datei und einen iTunes Media Ordner. Damit kannst du definitiv an die Library rankommen.
  • Hallo Mitwettbewerber,

    keine Angst, nicht noch eine von den unzähligen im AppStore, meine wird GANZ anders!

    Na, da bin ich ja mal gespannt… ;)

    … Gemacht habe ich das natürlich mit ScriptingBridge.

    Dafür absolut richtig.

    Was noch fehlt, obwohl es relativ wichtig ist, ist, dass man einen Song auswählen kann. Also, dass man die komplette iTunes-Bibliothek sehen kann und dann seinen Song auswählen kann der dann gespielt wird.

    Dafür ist die ScriptingBridge ungeeignet. Natürlich ist das problemlos möglich, aber Deine Anwender wollen das sicherlich nicht ertragen.
    Das Ermitteln der Titel selbst benötigt nur wenige "Anfragen". Du möchtest aber sicherlich Namen, Interpret etc. anzeigen.
    Somit würdest Du tausende "Anfragen" an iTunes senden und Deine Anwender könnten das Ding nicht mehr bedienen und Deine Anwendung wäre auch immer blockiert.

    Wenn das nicht geht könntest du beim Start deiner App den User durch ein NSOpenPanel die iTunes Library auswählen lassen. Da bekommst du eine XML Datei und einen iTunes Media Ordner. Damit kannst du definitiv an die Library rankommen.

    Genau. Nur das via einen Öffnen-Dialog zu steuern wäre plöht, da es zum einen unschön ist und zum anderen voraussetzt, dass der Anwender weiß wo das Zeugs liegt.
    Aus Erfahrung kann ich sagen, dass man dieses "Wissen" nicht voraussetzen kann.

    Die aktuell geöffnete Mediathek wird immer in der "com.apple.iApps.plist" eingetragen.
    Dort findest Du dann den Pfad zur XML-Datei.

    In den Mac App Store wird Deine Anwendung damit aber nicht kommen.
    Zum einen ist dieser Weg nicht offiziell und zum anderen mittels Sandbox nicht zu realisieren.

    Also, dass man die komplette iTunes-Bibliothek sehen kann und dann seinen Song auswählen kann

    Allerdings frage ich mich nach dem Sinn dieser Vorgehensweise, da Du ja die komplette iTunes Mediathek redundant abbilden würdest.
    Möchtest Du das? Wenn ja bedenke, dass Deine Anwendung dann je nach Umfang der Mediathek ordentlich Ressource verbrauchen wird.
    Anwender solcher iTunes-Erweiterungen sind berechtigterweise empfindlich bei solchen Dingen.

    Möchtest Du vielleicht eine Suche ermöglichen, dann schaue Dir die Methode –searchFor:… an.

    Wenn Du Deine Anwendung veröffentlich hast, dann schreibe hier doch mal was hier unter "Stelle Dein Projekt vor".
    Wäre lässig… ;)

    Viele Grüße
  • little_pixel schrieb:


    Genau. Nur das via einen Öffnen-Dialog zu steuern wäre plöht, da es zum einen unschön ist und zum anderen voraussetzt, dass der Anwender weiß wo das Zeugs liegt.
    Aus Erfahrung kann ich sagen, dass man dieses "Wissen" nicht voraussetzen kann.

    Die aktuell geöffnete Mediathek wird immer in der "com.apple.iApps.plist" eingetragen.
    Dort findest Du dann den Pfad zur XML-Datei.

    In den Mac App Store wird Deine Anwendung damit aber nicht kommen.
    Zum einen ist dieser Weg nicht offiziell und zum anderen mittels Sandbox nicht zu realisieren.

    Er könnte sich ja eine Temporary Exception für die Directory des Benutzers ins Entitlement File eintragen. Beim ersten Start könnte er in ~Music/iTunes/ schauen ob dort eine Library existiert. Wenn dort keine Library existiert kann man ja den Öffnen-Dialog präsentieren. Denn wen die Library dort nicht ist hat der Benutzer sie wahrscheinlich verschoben und sollte somit in der Lage sein sie auswählen zu können. Damit kommt man in den MAS.
  • Dafür ist die ScriptingBridge ungeeignet. Natürlich ist das problemlos möglich, aber Deine Anwender wollen das sicherlich nicht ertragen.
    Das Ermitteln der Titel selbst benötigt nur wenige "Anfragen". Du möchtest aber sicherlich Namen, Interpret etc. anzeigen.
    Somit würdest Du tausende "Anfragen" an iTunes senden und Deine Anwender könnten das Ding nicht mehr bedienen und Deine Anwendung wäre auch immer blockiert.

    Eine mögliche Umsetzung via Scripting Bridge wäre:

    - source zur Mediathek holen
    - alle Titel holen, ohne ! -get
    - Du hast ein Array und somit die Anzahl Titel
    - Du baust Deine Tabelle auf und lädst beim Scrollen dynamisch die Titelinformationen nach

    Das müßtest Du probieren. Funktionieren wird das sicherlich, aber wie smooth das ist weiß ich nicht.
    Das Laden der Daten von Deiner Anwendung aus machst Du natürlich in einer Operation bzw. Thread.
    Das iTunes blockiert ist wäre in dem Moment auch nicht so schlimm, da der Anwender ja gerade in Deiner Anwendung interagiert.
    Wechselt er zu iTunes, dann werden auch von Deiner Anwendung keine Daten mehr geladen und iTunes ist "frei".

    Viele Grüße
  • Er könnte sich ja eine Temporary Exception für die Directory des Benutzers ins Entitlement File eintragen.

    Damit ist unklar, ob das zukünftig gestattet bleiben wird. Siehe Stellungnahme Apple dazu.

    Beim ersten Start könnte er in ~Music/iTunes/ schauen ob dort eine Library existiert.

    Das muss aber nicht die Mediathek sein, die gerade geöffnet ist. Somit ist das ungewiss und kein Indikator dafür, ob diese die richtige ist.

    Damit kommt man in den MAS.

    Da wäre ich mir nicht sicher, da das nicht dokumentiert und nicht "öffentlich" ist.
    So etwas widerspricht den Bedingungen.

    Viele Grüße
  • little_pixel schrieb:

    Das wäre intressant zu wissen…
    Kannst ja den Entwickler (@indragie) fragen...

    Edit:


    Habe mir das Projekt gerade mal runtergeladen. Sonora ist nicht gesandboxed. Die URL der iTunes Library wird durch die com.apple.iApps.plist ermittelt (wie little pixel schon mal erwähnt hat). Wenn du (TO) dir das mal ansehen willst schau in die Klasse "SNRiTunesImportOperation".

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von floschliep ()

  • Vielen Dank euch beiden, floschliep und little_pixel!
    In euren Antworten stecken einige Ansätze, ich werde mal damit experimentieren. Sonora kannte ich noch gar nicht, aber es ist auch interessant, es mal anzuschauen.
    @little_pixel: Wenn das Projekt fertig und im AppStore ist, stelle ich es euch vor, das habe ich schon geplant und sozusagen als Ziel genommen!
    Ach ja, kann mir jemand in einem Satz erklären, was es genau bedeutet, dass eine App "gesandboxed" ist? Das wäre sehr nett!
    Danke noch mal,
    Osxer

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Osxer ()