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

Если вы iOS-разработчик, то, скорее всего, знаете, что получить доступ к библиотеке с музыкой (iPod Library) можно только на реальном устройстве, но не на эмуляторе (iPhone Simulator) [ссылка на документацию]:

Note: iPod library access works only on devices and not in the Simulator. This is because the Simulator has no access to a device’s iPod library. To develop applications using the classes in this technology, you need a provisioned iOS device.

Однако, не всегда нужен доступ именно к файлам с музыкой, порой достаточно только информации о треках (название, исполнитель, обложка и т.д.) Для такой ситуации можно создать иллюзию работы с iPod Library.

Когда может возникнуть такая ситуация? Предположим, вы пишете музыкальный плеер, тестируете его на реальном устройстве (к примеру, у вас их два: iPhone 4 и iPhone 5). Наступает время для публикации в App Store: нужны скриншоты. Вы делаете скриншоты со своих устройств. Остаются устройства (например, iPhone 6, iPhone 6 Plus), которых у вас нет. Вам нужны только скриншоты для недостающих устройств: вот здесь запуск эмулятора как нельзя кстати.

Итак, сперва нужно скопировать базы данных с информацией о треках с реального устройства. Для этих целей установите iFunBox (обратите внимание, что для версий iOS >= 8.3 доступ к файловой системе был закрыт). Достаточно скопировать следующие 3 файла и папку (целиком):

'Raw File System'/iTunes_Control/iTunes/MediaLibrary.sqlitedb 
'Raw File System'/iTunes_Control/iTunes/MediaLibrary.sqlitedb-shm 
'Raw File System'/iTunes_Control/iTunes/MediaLibrary.sqlitedb-wal 
'Raw File System'/iTunes_Control/iTunes/Artwork




Скопированные файлы нужно положить в папку:

~/Library/Developer/CoreSimulator/Devices/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/data/Media/iTunes_Control/iTunes

где xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx — для каждого типа устройства своя папка, название устройства можно посмотреть в находящемся в этой папке файле device.plist

Для предыдущих версий Xcode файлы нужно положить в папку:

~/Library/Application Support/iPhone Simulator/7.1/Media/iTunes_Control/iTunes/


Всё! Теперь вы можете получать информацию о треках, например:

MPMediaQuery *myAllSongsQuery = [MPMediaQuery songsQuery];
NSArray *allSongs = [myAllSongsQuery items];

//...

cell.songTitleLabel.text = [allSongs[indexPath.row] valueForProperty: MPMediaItemPropertyTitle];
cell.atristLabel.text = [allSongs[indexPath.row] valueForProperty: MPMediaItemPropertyArtist];
cell.coverImage.image = [[allSongs[indexPath.row] valueForProperty: MPMediaItemPropertyArtwork] imageWithSize:cell.coverImage.frame.size];


Пример приложения, запущенного в эмуляторе:

Комментарии (0)