프로젝트 소개

MediaBridge는 MPMediaLibrary 통합을 위한 Swift 브리지로, Swift Package로 배포됩니다. iOS 15.0+ 및 visionOS 1.0+를 대상으로 하며 Swift 6.0 / Xcode 16 이상이 필요합니다. CI는 Swift 6.0에 대해 빌드하고 Swift 6.1부터 6.4까지 테스트를 실행합니다. 이 패키지는 Apple의 MediaPlayer 프레임워크를 더 높은 수준의 서비스 계층으로 감쌉니다. MusicLibrary 타입은 곡, 앨범, 아티스트, 재생목록, 장르, 작곡가, 컴필레이션, 팟캐스트, 오디오북을 가져오는 비동기 메서드와 songSections()를 통한 A–Z 인덱스 섹션을 제공합니다. changes 비동기 시퀀스를 통해 호출자는 라이브러리가 변경될 때 다시 가져올 수 있습니다. 키 경로 쿼리 빌더는 타입이 지정된 모델을 지원합니다. 쿼리는 필터링(예: isCloudItem 기준)하고, playCount 또는 releaseDate 같은 키 경로로 정렬하며, 결과 수를 제한할 수 있습니다. README는 Wrapped: Comparable인 경우 Optional: Comparable에 대한 공개 소급 적합성을 언급하여 선택적 키 경로를 정렬할 수 있게 하며, 다른 의존성에서 충돌하는 적합성이 있으면 명확화가 필요하다고 경고합니다. 재생목록 관리도 포함됩니다. 호출자는 id로 재생목록을 가져오거나 PlaylistMetadata로 생성한 뒤 가져온 항목을 추가할 수 있습니다. iOS에서는 mediaPicker SwiftUI 수정자가 시스템 선택기를 표시하고 선택된 곡을 반환합니다. SwiftUI의 경우 라이브러리를 환경을 통해 주입할 수 있습니다. 예제는 곡을 skip count로, 앨범을 track count로 정렬하고, 비교 타입으로 장르별 곡을 필터링하는 방법을 보여줍니다. 서비스 계층과 권한 관리자는 기본적으로 프로덕션(.live) 구현을 사용하며, 테스트나 특수 동작을 위해 사용자 정의 구현이 가능합니다. 권한은 명시적으로 요청할 수 있고, 가져오기 자체가 접근을 요청합니다. README는 Info.plist에 NSAppleMusicUsageDescription이 없으면 iOS가 첫 라이브러리 접근 시 앱을 종료한다고 강조합니다. 설치는 Swift Package Manager를 통해 이루어지며 버전 요구 사항은 0.14.0부터 시작합니다. README는 0.11.0(서비스 프로토콜이 MediaQueryRequest를 받는 items(_:)와 collections(_:)로 축소됨, 프리뷰는 .preview(...)를 통한 MusicLibrary 인스턴스, 거부된 프리뷰는 이제 throw함) 및 0.7.0(albumArtistID 술어가 UInt64를 받음, fetchSongs, fetchSong, fetch는 더 이상 프로토콜 요구 사항이 아니지만 사용 중단된 확장 메서드로 남음)에 대한 마이그레이션 노트를 문서화합니다. 문서는 Swift Package Index에 호스팅되며, 프로젝트는 MIT 라이선스이고 CONTRIBUTING.md에 기여 지침이 있습니다.