В этой небольшой статье я хочу поделится с вами одной хитростью при создании 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];
Пример приложения, запущенного в эмуляторе: