Привет! Я разработчик iOS‑приложения Music Player в компании MediaRise. Хотел поделиться инженерной частью: как мы организовали импорт музыки из Files, автосканирование, защиту от дубликатов и стабильное воспроизведение.

Screenshot приложения
Screenshot приложения

Задача:
Хотелось простого и предсказуемого плеера для локальных файлов, без стриминговой обвязки.

Ключевые требования:

1. Импорт музыки из Files.app и Finder/iTunes
2. Хранение файлов внутри контейнера приложения
3. Автосканирование папок приложения при запуске
4. Отсутствие дубликатов
5. Нормальное автопереключение следующего трека
6. UX‑фокус: как пользователь добавляет музыку


Мы решили поддерживать два сценария:

  • Через Files.app — пользователь кладёт файлы в Documents/Music

  • Через кнопку «+» — выбор файлов в интерфейсе

  • Плюс отдельно добавили вкладку Storages, где можно открыть папку приложения или Documents/Music напрямую. Это существенно снизило количество вопросов «где лежит папка приложения».

  • Через Files.app — пользователь кладёт файлы в Documents/Music
    Через кнопку “+” — выбор файлов в интерфейсе

  • Плюс отдельно добавили вкладку Storages, где можно открыть папку приложения или Documents/Music напрямую. Это существенно снизило количество вопросов «где лежит папка приложения».

Инстру��ция в UI
В пустой библиотеке показываем короткие шаги:

  1. Открыть Files.app

  2. Перейти в «На iPhone → Music Player»

  3. Положить музыку в Documents/Music

  4. Приложение само найдёт файлы

Воспроизведение: следующий трек

Оказалось, что автопереход на следующий трек «из коробки» не всегда стабилен, особенно если меняется AVPlayerItem. Решение — подписка на AVPlayerItemDidPlayToEndTime:

  1. Событие конца трека

  2. Вызываем nextTrack()

  3. Удаляем наблюдатель при остановке

  4. Так автоплей работает стабильно.

Технические детали, которые сыграли роль

  1. Security‑scoped bookmarks: на macOS важны, на iOS — не всегда, поэтому разделили поведение платформами.

  2. Перескан метаданных: делаем после добавления, чтобы подтянуть artist/title/artwork.

  3. Локализация: сразу поддержали несколько языков, чтобы UI не выглядел «сырым».

Что получилось

  1. Простой импорт для обычного пользователя

  2. Автосканирование без дубликатов

  3. Предсказуемое воспроизведение

  4. Удобный доступ к папкам приложения

Что дальше

Думаем добавить:

  1. Ручную сортировку плейлиста

  2. Быстрый поиск по библиотеке

  3. Экспорт плейлистов

Само приложение можно скачать здесь

TG канал

Исходный код проекта