Использование новой iTunesLibrary Framework для доступа к библиотеке iTunes в Mac OS-X

Я рассматривал возможность добавления доступа к библиотеке iTunes в разрабатываемое мной приложение для Mac.

Я рассмотрел некоторые из существующих реализаций с открытым исходным кодом, такие как EyeTunes и iMedia, но обнаружил, что они не совсем то, что я искал. В общем перебор.

Поэтому я попробовал использовать Scripting Bridge и обнаружил, что, хотя он и работал, он был медленным. А так как мне особо не нужно было управлять iTunes, медлительность того не стоила. У этого также была обратная сторона, полагающаяся на iTunes, чтобы работать. Также немного раздражает то, что он работает в изолированном приложении (хотя это возможно).

Итак, я, наконец, начал создавать свою собственную библиотеку, прочитав файл iTunes Library.xml. Кажется, это работает нормально. Но в процессе исследования значения ключа/значения Distinguished Kind я наткнулся на совершенно новый, Apple предоставила iTunesLibrary.framework !!!

Красиво — документация по платформе iTunesLibrary находится здесь.

Однако, когда я пытаюсь инициализировать фреймворк, используя код, как показано в справочной ссылке:

NSError * error = nil;
ITLibrary* library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error];

Он возвращает nil и выдает очень полезную ошибку (в моем приложении в песочнице):

Домен ошибки = код NSPOSIXErrorDomain = 100001 «Не удалось загрузить». UserInfo=0x1140025b0 {NSLocalizedDescription=Не удалось загрузить., NSUunderlyingError=0x1026fbe20 "Операция не может быть завершена. (Ошибка OSStatus -50.)"}

Думая, что это может быть проблема с песочницей, я также создал утилиту быстрой командной строки, которая пытается запустить библиотеку и возвращает почти идентичную ошибку:

Не удалось открыть библиотеку: домен ошибки = код NSPOSIXErrorDomain = 100001 «Не удалось загрузить». UserInfo=0x1018015b0 {NSLocalizedDescription=Не удалось загрузить., NSUunderlyingError=0x103a000e0 "Операция не может быть завершена. (Ошибка OSStatus 100005.)"}

Кто-нибудь еще пробовал эту новую структуру библиотеки iTunes с большей удачей, чем я?

// РЕДАКТИРОВАТЬ: Ответ ниже правильный. Требуется подпись кода. Пример кода в ответе — удобная отправная точка для использования фреймворка. Кроме того, в моем случае проблема заключалась в том, что код платформы iTunesLibrary не работает, когда библиотека iTunes размещена на сетевом диске. Сделайте это чем-то вроде нарушения условий сделки, если Apple не исправит это.


person sckor    schedule 16.05.2013    source источник
comment
У меня точно такая же ошибка с кодом без песочницы, но я не знаю, как это исправить. У меня также были проблемы с импортом Framework. Наконец-то я заработал, скопировав и вставив фреймворк в каталог моего проекта и добавив его в проект. Мне интересно, как он знает, где искать библиотеку iTunes.   -  person abroekhof    schedule 18.05.2013
comment
Я собирался попробовать это, чтобы узнать кое-что о Objective-C, но я даже не могу правильно добавить его в свой проект. Предполагаю те же проблемы, что и у abroekhof... Он добавляется в проект, но я не могу импортировать заголовок (не найден). Я видел, как другие используют мост сценариев. Это может быть путь? Как вы добавили его в свой проект?   -  person Tobias Ritzau    schedule 19.05.2013
comment
abroekhof — Вы смогли успешно инициализировать библиотеку в приложении с подписью кода, скопировав Framework непосредственно в свой проект?   -  person sckor    schedule 20.05.2013
comment
@sckor да, это плохо? На самом деле я только что обновился до Mountain Lion, и теперь мое приложение больше не работает. Какое сопротивление. Я также получаю ошибку «Не удалось загрузить».   -  person abroekhof    schedule 31.05.2013
comment
Я подал отчет об ошибке в Apple. На что они почти сразу ответили, что не могут размножаться. Я предоставил им более подробную информацию о своей настройке и с тех пор ничего не слышал. Поэтому я просто продолжил свой первоначальный план прямого доступа к iTunes Library.xml и на данный момент забыл о новой структуре. Сожалеем, что у вас сейчас проблемы с Framework. :( Я бы посоветовал подать отчет об ошибке, чтобы они знали, что есть проблемы с фреймворком, над которыми еще нужно поработать.   -  person sckor    schedule 31.05.2013


Ответы (3)


Вам нужно будет кодировать свое приложение, используя сертификат от программы Mac Developer Program.

Это нигде не задокументировано, но я подозреваю, что это требование было добавлено из-за того, что облако iTunes является веб-службой, для которой требуется доступ к учетным записям пользователей.

// Редактировать: помимо установки CODE_SIGN_IDENTITY в настройках проекта, как обсуждалось выше, вам также нужно будет добавить /Library/Frameworks к FRAMEWORK_SEARCH_PATHS в настройках проекта, чтобы Xcode знал, где искать #import .

// Изменить 2: я написал небольшой образец приложения, чтобы показать, как используется iTunesLibrary, поскольку образец кода и документация Apple довольно скудны: https://github.com/zadr/iTunesLibraryExample

person zadr    schedule 18.05.2013
comment
Я пробовал оба способа - код подписан, а также нет, и он не работает в любом случае. Вы действительно получили фреймворк для инициализации? - person sckor; 20.05.2013
comment
да. Я могу без проблем получить доступ к ITLibrary, созданному из фреймворка, если в настройках сборки xcodeproj установлено значение CODE_SIGN_IDENTITY = Mac Developer. - person zadr; 20.05.2013
comment
Спасибо, что нашли время собрать образец проекта и опубликовать его на Github! У меня все еще та же проблема - подпись кода настроена, и она использует профиль команды Mac Developer, созданный Xcode по умолчанию... Поскольку это действительно как-то связано с подписью кода, я попробую еще немного обмануть профили и посмотрим, смогу ли я перейти к следующему шагу. - person sckor; 20.05.2013
comment
Мальчик, это расстраивает - я взял ваш пример кода, использовал функцию архива Xcode. Создал версию дистрибутива, подписанную с моим идентификатором разработчика из Организатора, и она все равно не работает: 2013-05-19 21:34:10.389 iTunesLibraryExample[53897]: ошибка: Ошибка домена = NSPOSIXErrorDomain Code = 100001 Не удалось загрузить. UserInfo=0x7f9faac0d840 {NSLocalizedDescription=Не удалось загрузить., NSUunderlyingError=0x7f9faac495c0 Операция не может быть завершена. (Ошибка OSStatus -50.)} - person sckor; 20.05.2013
comment
Вот и получается, что в фреймворке iTunesLibrary есть баг - по-моему. Моя библиотека iTunes по умолчанию находится на сетевом диске. Я перезапустил iTunes и указал его в своем локальном музыкальном каталоге, и теперь фреймворк работает. Я отправлю отчет об ошибке для этого; какое-то глупое предположение с их стороны. - person sckor; 20.05.2013
comment
@zadr Я тоже не могу заставить ваш код работать с тех пор, как обновился до 10.8. Похоже, что заголовки iTunesLibrary из фреймворка не добавляются. Затем возникает ошибка сборки «iTunesLibrary/ITLibrary.h», файл не найден. - person abroekhof; 31.05.2013
comment
@abroekhof Обновите версию iTunes. И старая версия iTunes поставлялась со сломанной структурой. - person zadr; 31.05.2013
comment
@zadr На самом деле не уверен - у меня есть последняя версия iTunes. Я сделал обновление программного обеспечения внутри и вне iTunes, перезапустил, повторно добавил фреймворк. Не уверен, что еще это может быть. Вот как это выглядит в Xcode: imgur.com/MjlXvRd. Кстати, спасибо за помощь в этом. - person abroekhof; 31.05.2013
comment
Повторно скачайте с itunes.com. - person zadr; 31.05.2013
comment
Мне кажется, что важно не только подписание, общая песочница и добавление фреймворка в поисковую часть, нужно еще явно разрешить доступ к музыке и фильмам через com.apple.security.assets.movies.read-only и com.apple.security.assets.music.read-only в правах. Например, так. - person Hendrik; 02.10.2014

Из Справочника по платформе библиотеки iTunes

  • Вы должны подписать код своего приложения, чтобы получить информацию из платформы библиотеки iTunes.
  • Платформа библиотеки iTunes доступна для пользователей, использующих iTunes версии 11.0 или выше.
person Parag Bafna    schedule 31.10.2013
comment
Ты прав. Однако проблема заключалась в ошибке в iTunes Library Framework. Я открыл отчет об ошибке в Apple, и он был исправлен в последней версии iTunes. - person sckor; 01.11.2013

Не уверен, что это верно для всех вас, но в моем случае мне помогло сохранение Code-Signing-Identity -. Теперь мне не нужно подписывать приложение.

person Sunil Chauhan    schedule 14.12.2016