From 24966d17ca1e2df86c07481315c36dcf97c2ac7d Mon Sep 17 00:00:00 2001 From: Dimitar Nestorov <8790386+dimitarnestorov@users.noreply.github.com> Date: Thu, 29 Dec 2022 20:02:45 +0200 Subject: [PATCH 1/3] Add `MRClient` and modify `_MRNowPlayingClientProtobuf` --- .gitattributes | 2 ++ .github/workflows/test.yml | 11 ++++++-- .gitignore | 1 + .../MediaRemote.framework/MediaRemote.tbd | 2 +- .../ios/MediaRemote.framework/MediaRemote.tbd | 2 +- .../MediaRemote.framework/MediaRemote.tbd | 2 +- .../MediaRemote.framework/MediaRemote.tbd | 2 +- .../MediaRemote.framework/MediaRemote.tbd | 2 +- .../MediaRemote.framework/MediaRemote.tbd | 2 +- .../MediaRemote.framework/MediaRemote.tbd | 2 +- Sources/PrivateMediaRemote/Classes/MRClient.h | 20 +++++++++++++ .../{ => Classes}/_MRColorProtobuf.h | 0 .../_MRNowPlayingClientProtobuf.h | 0 Sources/PrivateMediaRemote/Functions.h | 12 +++++--- .../PrivateMediaRemote/PrivateMediaRemote.h | 5 ++-- Tests/TestClasses.h | 11 +++++++- Tests/TestFunctions.h | 28 +++++++++++++++++++ 17 files changed, 87 insertions(+), 17 deletions(-) create mode 100644 .gitattributes create mode 100644 Sources/PrivateMediaRemote/Classes/MRClient.h rename Sources/PrivateMediaRemote/{ => Classes}/_MRColorProtobuf.h (100%) rename Sources/PrivateMediaRemote/{ => Classes}/_MRNowPlayingClientProtobuf.h (100%) diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..93c7b10 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +Package.swift linguist-vendored +Tests/** linguist-vendored diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b8811f7..84781b3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,15 +2,20 @@ name: Test on: push: - branches: [ master ] + branches: [master] pull_request: - branches: [ master ] + branches: [master] jobs: test: runs-on: macos-latest steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 + + - name: Play sounds + run: open /System/Library/Sounds/* + - name: Run tests run: swift test -v diff --git a/.gitignore b/.gitignore index 29a1e94..f027003 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .build/ .swiftpm/ .DS_Store +DerivedData/ diff --git a/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd index c9a4e2e..967d6bc 100644 --- a/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ i386-ios-simulator, x86_64-ios-simulator, arm64-ios-simulator ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd index 372c44a..fdfb6dd 100644 --- a/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ x86_64-macos, arm64-macos, armv7-ios ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd index 11a957b..1e62dd5 100644 --- a/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ x86_64-macos, arm64-macos ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd index 553502d..5ee37ef 100644 --- a/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ x86_64-tvos-simulator, arm64-tvos-simulator ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd index a579312..b8ecd46 100644 --- a/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ arm64-tvos ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd index 954a3da..b62be27 100644 --- a/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ i386-watchos-simulator, x86_64-watchos-simulator, arm64-watchos-simulatorr ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd index eb0a4e1..4a2ccd6 100644 --- a/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd @@ -5,5 +5,5 @@ install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaR exports: - targets: [ armv7k-watchos, arm64_32-watchos ] symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf ] + objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] ... diff --git a/Sources/PrivateMediaRemote/Classes/MRClient.h b/Sources/PrivateMediaRemote/Classes/MRClient.h new file mode 100644 index 0000000..25be046 --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRClient.h @@ -0,0 +1,20 @@ +#ifndef PrivateMediaRemote_MRClient_h +#define PrivateMediaRemote_MRClient_h + +#import + +#include "_MRNowPlayingClientProtobuf.h" + +API_AVAILABLE(macos(10.15)) +@interface MRClient : NSObject { + NSString *_bundleIdentifier; +} + +@property (nonatomic, copy) NSString *bundleIdentifier; +@property (nonatomic, readonly) _MRNowPlayingClientProtobuf *protobuf; + +- (instancetype)initWithProtobuf:(_MRNowPlayingClientProtobuf *)protobuf; + +@end + +#endif /* PrivateMediaRemote_MRClient_h */ diff --git a/Sources/PrivateMediaRemote/_MRColorProtobuf.h b/Sources/PrivateMediaRemote/Classes/_MRColorProtobuf.h similarity index 100% rename from Sources/PrivateMediaRemote/_MRColorProtobuf.h rename to Sources/PrivateMediaRemote/Classes/_MRColorProtobuf.h diff --git a/Sources/PrivateMediaRemote/_MRNowPlayingClientProtobuf.h b/Sources/PrivateMediaRemote/Classes/_MRNowPlayingClientProtobuf.h similarity index 100% rename from Sources/PrivateMediaRemote/_MRNowPlayingClientProtobuf.h rename to Sources/PrivateMediaRemote/Classes/_MRNowPlayingClientProtobuf.h diff --git a/Sources/PrivateMediaRemote/Functions.h b/Sources/PrivateMediaRemote/Functions.h index c09dfdd..d225361 100644 --- a/Sources/PrivateMediaRemote/Functions.h +++ b/Sources/PrivateMediaRemote/Functions.h @@ -1,12 +1,16 @@ #ifndef PrivateMediaRemote_Functions_h #define PrivateMediaRemote_Functions_h -#import "_MRNowPlayingClientProtobuf.h" - void MRMediaRemoteRegisterForNowPlayingNotifications(dispatch_queue_t queue); void MRMediaRemoteUnregisterForNowPlayingNotifications(void); -typedef void (^MRMediaRemoteGetNowPlayingClientCallback)(_MRNowPlayingClientProtobuf *client); -void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingClientCallback block); + +/// - Parameters: +/// - queue: `dispatch_queue_t` +/// - block: +/// - Since macOS 10.15 it's `void (^)(MRClient *client)`. +/// - Since macOS 10.12 it's `void (^)(_MRNowPlayingClientProtobuf *client)`. +void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t queue, void (^block)(id client)); + typedef void (^MRMediaRemoteGetNowPlayingInfoCallback)(NSDictionary *info); void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingInfoCallback block); typedef void (^MRMediaRemoteGetNowPlayingApplicationIsPlayingCallback)(BOOL isPlaying); diff --git a/Sources/PrivateMediaRemote/PrivateMediaRemote.h b/Sources/PrivateMediaRemote/PrivateMediaRemote.h index c6264eb..241ee58 100644 --- a/Sources/PrivateMediaRemote/PrivateMediaRemote.h +++ b/Sources/PrivateMediaRemote/PrivateMediaRemote.h @@ -3,8 +3,9 @@ #import -#import "_MRColorProtobuf.h" -#import "_MRNowPlayingClientProtobuf.h" +#import "Classes/_MRColorProtobuf.h" +#import "Classes/_MRNowPlayingClientProtobuf.h" +#import "Classes/MRClient.h" #import "Constants.h" #import "Enums.h" #import "Functions.h" diff --git a/Tests/TestClasses.h b/Tests/TestClasses.h index fae49b1..1a3ecbc 100644 --- a/Tests/TestClasses.h +++ b/Tests/TestClasses.h @@ -11,9 +11,18 @@ BOOL Identifier(isClassDefined)(Class classInstance, NSString *classString) { #define TestClass(CLASS) XCTAssertTrue(IsClassDefined(CLASS)) #define TestUnlinkableClass(CLASS) XCTAssertTrue(IsUnlinkableClassDefined(CLASS)) +void Identifier(testClassesCatalina)() { + if (@available(macOS 10.15, *)) { + TestClass(MRClient); + } +} + +#define TestClassesCatalina Identifier(testClassesCatalina) + #define TestClasses \ -TestUnlinkableClass(_MRColorProtobuf); \ +TestClass(_MRColorProtobuf); \ TestClass(_MRNowPlayingClientProtobuf); \ +TestClassesCatalina(); \ #endif /* TestClasses_h */ diff --git a/Tests/TestFunctions.h b/Tests/TestFunctions.h index 9f35064..43e5fd5 100644 --- a/Tests/TestFunctions.h +++ b/Tests/TestFunctions.h @@ -5,6 +5,33 @@ #define TestFunction(FUNCTION) XCTAssertTrue(GetFunctionPointer(FUNCTION) != nil) +void Identifier(getNowPlayingClient)(Identifier(Tests) *self) { + typeof(MRMediaRemoteGetNowPlayingClient) *func = nil; + +#ifdef LINKED_TESTS + func = &MRMediaRemoteGetNowPlayingClient; +#elif defined(UNLINKED_TESTS) + func = CFBundleGetFunctionPointerForName(self.cfBundle, CFSTR("MRMediaRemoteGetNowPlayingClient")); +#endif + + XCTestExpectation *expectation = [self expectationWithDescription:@"Long method"]; + (*func)(dispatch_get_main_queue(), ^(id client) { + XCTAssertNotNil(client, @"`client` is `nil` when calling `MRMediaRemoteGetNowPlayingClient`. Play some music for this test to pass."); + + if (@available(macOS 10.15, *)) { + XCTAssertTrue([((NSObject *)client).className isEqualToString:@"MRClient"]); + } else { + XCTAssertTrue([((NSObject *)client).className isEqualToString:@"_MRNowPlayingClientProtobuf"]); + } + + [expectation fulfill]; + }); + + [self waitForExpectationsWithTimeout:1 handler:nil]; +} + +#define TestMRMediaRemoteGetNowPlayingClient Identifier(getNowPlayingClient) + #define TestFunctions \ TestFunction(MRMediaRemoteRegisterForNowPlayingNotifications); \ TestFunction(MRMediaRemoteUnregisterForNowPlayingNotifications); \ @@ -15,5 +42,6 @@ TestFunction(MRNowPlayingClientGetBundleIdentifier); \ TestFunction(MRNowPlayingClientGetParentAppBundleIdentifier); \ TestFunction(MRMediaRemoteSetElapsedTime); \ TestFunction(MRMediaRemoteSendCommand); \ +TestMRMediaRemoteGetNowPlayingClient(self); \ #endif /* TestFunctions_h */ From 40d54032f5d01201b13e3efa1755882c5701b399 Mon Sep 17 00:00:00 2001 From: Dimitar Nestorov <8790386+dimitarnestorov@users.noreply.github.com> Date: Fri, 30 Dec 2022 02:49:41 +0200 Subject: [PATCH 2/3] Add `MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync` --- .../MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../ios/MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../MediaRemote.framework/MediaRemote.tbd | 71 +++++++++++- .../PrivateMediaRemote/Classes/MRArtwork.h | 17 +++ .../Classes/MRContentItem.h | 16 +++ .../Classes/MRContentItemMetadata.h | 34 ++++++ Sources/PrivateMediaRemote/Classes/MROrigin.h | 15 +++ .../Classes/MRPlaybackQueue.h | 13 +++ .../Classes/MRPlaybackQueueRequest.h | 26 +++++ Sources/PrivateMediaRemote/Classes/MRPlayer.h | 18 ++++ .../PrivateMediaRemote/Classes/MRPlayerPath.h | 26 +++++ Sources/PrivateMediaRemote/Constants.h | 2 + Sources/PrivateMediaRemote/Functions.h | 13 +++ .../PrivateMediaRemote/PrivateMediaRemote.h | 8 ++ Tests/Linked/Tests.m | 8 +- Tests/TestClasses.h | 24 +++-- Tests/TestConstants.h | 102 +++++++++--------- Tests/TestFunctions.h | 59 +++++++--- Tests/TestSuperclasses.h | 8 +- Tests/Unlinked/Tests.m | 8 +- 24 files changed, 795 insertions(+), 99 deletions(-) create mode 100644 Sources/PrivateMediaRemote/Classes/MRArtwork.h create mode 100644 Sources/PrivateMediaRemote/Classes/MRContentItem.h create mode 100644 Sources/PrivateMediaRemote/Classes/MRContentItemMetadata.h create mode 100644 Sources/PrivateMediaRemote/Classes/MROrigin.h create mode 100644 Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h create mode 100644 Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h create mode 100644 Sources/PrivateMediaRemote/Classes/MRPlayer.h create mode 100644 Sources/PrivateMediaRemote/Classes/MRPlayerPath.h diff --git a/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd index 967d6bc..3258364 100644 --- a/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/ios-simulator/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ i386-ios-simulator, x86_64-ios-simulator, arm64-ios-simulator install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ i386-ios-simulator, x86_64-ios-simulator, arm64-ios-simulator ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd index fdfb6dd..f2d5bbb 100644 --- a/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ x86_64-macos, arm64-macos, armv7-ios ] install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ x86_64-macos, arm64-macos, armv7-ios ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd index 1e62dd5..8720a62 100644 --- a/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ x86_64-macos, arm64-macos ] install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ x86_64-macos, arm64-macos ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd index 5ee37ef..a9bb175 100644 --- a/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/tvos-simulator/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ x86_64-tvos-simulator, arm64-tvos-simulator ] install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ x86_64-tvos-simulator, arm64-tvos-simulator ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd index b8ecd46..c5a6f77 100644 --- a/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ arm64-tvos ] install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ arm64-tvos ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd index b62be27..9adedab 100644 --- a/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/watchos-simulator/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ i386-watchos-simulator, x86_64-watchos-simulator, arm64-watch install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ i386-watchos-simulator, x86_64-watchos-simulator, arm64-watchos-simulatorr ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd index 4a2ccd6..7ff9dc6 100644 --- a/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd @@ -4,6 +4,73 @@ targets: [ armv7k-watchos, arm64_32-watchos ] install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - targets: [ armv7k-watchos, arm64_32-watchos ] - symbols: [ _MRMediaRemoteRegisterForNowPlayingNotifications, _MRMediaRemoteUnregisterForNowPlayingNotifications, _MRMediaRemoteGetNowPlayingClient, _MRMediaRemoteGetNowPlayingInfo, _MRMediaRemoteGetNowPlayingApplicationIsPlaying, _MRNowPlayingClientGetBundleIdentifier, _MRNowPlayingClientGetParentAppBundleIdentifier, _MRMediaRemoteSetElapsedTime, _MRMediaRemoteSendCommand, _kMRMediaRemoteNowPlayingInfoDidChangeNotification, _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification, _kMRMediaRemotePickableRoutesDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationDidChangeNotification, _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification, _kMRMediaRemoteRouteStatusDidChangeNotification, _kMRNowPlayingPlaybackQueueChangedNotification, _kMRPlaybackQueueContentItemsChangedNotification, _kMRMediaRemoteNowPlayingInfoArtist, _kMRMediaRemoteNowPlayingInfoTitle, _kMRMediaRemoteNowPlayingInfoAlbum, _kMRMediaRemoteNowPlayingInfoArtworkData, _kMRMediaRemoteNowPlayingInfoPlaybackRate, _kMRMediaRemoteNowPlayingInfoDuration, _kMRMediaRemoteNowPlayingInfoElapsedTime, _kMRMediaRemoteNowPlayingInfoTimestamp, _kMRMediaRemoteNowPlayingInfoClientPropertiesData, _kMRMediaRemoteNowPlayingInfoArtworkIdentifier, _kMRMediaRemoteNowPlayingInfoShuffleMode, _kMRMediaRemoteNowPlayingInfoTrackNumber, _kMRMediaRemoteNowPlayingInfoTotalQueueCount, _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoArtworkMIMEType, _kMRMediaRemoteNowPlayingInfoMediaType, _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier, _kMRMediaRemoteNowPlayingInfoGenre, _kMRMediaRemoteNowPlayingInfoComposer, _kMRMediaRemoteNowPlayingInfoQueueIndex, _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier, _kMRMediaRemoteNowPlayingInfoTotalTrackCount, _kMRMediaRemoteNowPlayingInfoContentItemIdentifier, _kMRMediaRemoteNowPlayingInfoIsMusicApp, _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier, _kMRMediaRemoteNowPlayingInfoUniqueIdentifier, _kMRActiveNowPlayingPlayerPathUserInfoKey, _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey, _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey, _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey, _kMRMediaRemoteOriginUserInfoKey, _kMRMediaRemotePlaybackStateUserInfoKey, _kMRMediaRemoteUpdatedContentItemsUserInfoKey, _kMRNowPlayingClientUserInfoKey, _kMRNowPlayingPlayerPathUserInfoKey, _kMRNowPlayingPlayerUserInfoKey, _kMROriginActiveNowPlayingPlayerPathUserInfoKey ] - objc-classes: [ _MRColorProtobuf, _MRNowPlayingClientProtobuf, MRClient ] + symbols: + - _MRMediaRemoteRegisterForNowPlayingNotifications + - _MRMediaRemoteUnregisterForNowPlayingNotifications + - _MRMediaRemoteGetNowPlayingClient + - _MRMediaRemoteGetNowPlayingInfo + - _MRMediaRemoteGetNowPlayingApplicationIsPlaying + - _MRNowPlayingClientGetBundleIdentifier + - _MRNowPlayingClientGetParentAppBundleIdentifier + - _MRMediaRemoteSetElapsedTime + - _MRMediaRemoteSendCommand + - _MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync + - _kMRMediaRemoteNowPlayingInfoDidChangeNotification + - _kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification + - _kMRMediaRemotePickableRoutesDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationDidChangeNotification + - _kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification + - _kMRMediaRemoteRouteStatusDidChangeNotification + - _kMRNowPlayingPlaybackQueueChangedNotification + - _kMRPlaybackQueueContentItemsChangedNotification + - _kMRMediaRemoteNowPlayingInfoArtist + - _kMRMediaRemoteNowPlayingInfoTitle + - _kMRMediaRemoteNowPlayingInfoAlbum + - _kMRMediaRemoteNowPlayingInfoArtworkData + - _kMRMediaRemoteNowPlayingInfoPlaybackRate + - _kMRMediaRemoteNowPlayingInfoDuration + - _kMRMediaRemoteNowPlayingInfoElapsedTime + - _kMRMediaRemoteNowPlayingInfoTimestamp + - _kMRMediaRemoteNowPlayingInfoClientPropertiesData + - _kMRMediaRemoteNowPlayingInfoArtworkIdentifier + - _kMRMediaRemoteNowPlayingInfoShuffleMode + - _kMRMediaRemoteNowPlayingInfoTrackNumber + - _kMRMediaRemoteNowPlayingInfoTotalQueueCount + - _kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoArtworkMIMEType + - _kMRMediaRemoteNowPlayingInfoMediaType + - _kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoGenre + - _kMRMediaRemoteNowPlayingInfoComposer + - _kMRMediaRemoteNowPlayingInfoQueueIndex + - _kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier + - _kMRMediaRemoteNowPlayingInfoTotalTrackCount + - _kMRMediaRemoteNowPlayingInfoContentItemIdentifier + - _kMRMediaRemoteNowPlayingInfoIsMusicApp + - _kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier + - _kMRMediaRemoteNowPlayingInfoUniqueIdentifier + - _kMRActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey + - _kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey + - _kMRMediaRemoteOriginUserInfoKey + - _kMRMediaRemotePlaybackStateUserInfoKey + - _kMRMediaRemoteUpdatedContentItemsUserInfoKey + - _kMRNowPlayingClientUserInfoKey + - _kMRNowPlayingPlayerPathUserInfoKey + - _kMRNowPlayingPlayerUserInfoKey + - _kMROriginActiveNowPlayingPlayerPathUserInfoKey + - _kMRMediaRemoteFrameworkErrorDomain + objc-classes: + - _MRColorProtobuf + - _MRNowPlayingClientProtobuf + - MRClient + - MRArtwork + - MRContentItem + - MRContentItemMetadata + - MROrigin + - MRPlaybackQueue + - MRPlaybackQueueRequest + - MRPlayer + - MRPlayerPath ... diff --git a/Sources/PrivateMediaRemote/Classes/MRArtwork.h b/Sources/PrivateMediaRemote/Classes/MRArtwork.h new file mode 100644 index 0000000..222accc --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRArtwork.h @@ -0,0 +1,17 @@ +#ifndef PrivateMediaRemote_MRArtwork_h +#define PrivateMediaRemote_MRArtwork_h + +API_AVAILABLE(macos(10.15)) +@interface MRArtwork : NSObject { + NSData *_imageData; + long long _width; + long long _height; +} + +@property (nonatomic, copy) NSData *imageData; +@property (nonatomic) long long width; +@property (nonatomic) long long height; + +@end + +#endif /* PrivateMediaRemote_MRArtwork_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRContentItem.h b/Sources/PrivateMediaRemote/Classes/MRContentItem.h new file mode 100644 index 0000000..3d5dcb7 --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRContentItem.h @@ -0,0 +1,16 @@ +#ifndef PrivateMediaRemote_MRContentItem_h +#define PrivateMediaRemote_MRContentItem_h + +#import "MRContentItemMetadata.h" +#import "MRArtwork.h" + +/// Before macOS 11.0 `MRContentItem` inherited `_MRContentItemProtobuf` +@interface MRContentItem : NSObject + +@property (nonatomic, copy) NSString *identifier API_AVAILABLE(macos(11.0)); +@property (nonatomic, copy) MRContentItemMetadata *metadata API_AVAILABLE(macos(11.0)); +@property (nonatomic, retain) MRArtwork *artwork API_AVAILABLE(macos(11.0)); + +@end + +#endif /* PrivateMediaRemote_MRContentItem_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRContentItemMetadata.h b/Sources/PrivateMediaRemote/Classes/MRContentItemMetadata.h new file mode 100644 index 0000000..95b30ee --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRContentItemMetadata.h @@ -0,0 +1,34 @@ +#ifndef PrivateMediaRemote_MRContentItemMetadata_h +#define PrivateMediaRemote_MRContentItemMetadata_h + +@interface MRContentItemMetadata : NSObject { + NSDate *_currentPlaybackDate; +} + +@property (nonatomic, copy) NSDate *currentPlaybackDate; + +@end + +API_AVAILABLE(macos(11.0)) +@interface MRContentItemMetadata () { + NSString *_artworkMIMEType; + NSString *_trackArtistName; + NSString *_title; + NSString *_albumName; + double *_duration; + double *_elapsedTime; + double *_elapsedTimeTimestamp; +} + +@property (nonatomic, copy) NSString *artworkMIMEType; +@property (nonatomic, copy) NSString *trackArtistName; +@property (nonatomic, copy) NSString *title; +@property (nonatomic, copy) NSString *albumName; +@property (nonatomic) double duration; +@property (nonatomic) double elapsedTime; +@property (nonatomic) double elapsedTimeTimestamp; +@property (nonatomic, readonly) double calculatedPlaybackPosition; + +@end + +#endif /* PrivateMediaRemote_MRContentItemMetadata_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MROrigin.h b/Sources/PrivateMediaRemote/Classes/MROrigin.h new file mode 100644 index 0000000..97d00dc --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MROrigin.h @@ -0,0 +1,15 @@ +#ifndef PrivateMediaRemote_MROrigin_h +#define PrivateMediaRemote_MROrigin_h + +API_AVAILABLE(macos(10.15)) +@interface MROrigin : NSObject + +/// New instance on every call ++ (instancetype)anyOrigin API_AVAILABLE(macos(11.0)); + +/// Same instance on every call ++ (MROrigin *)localOrigin; + +@end + +#endif /* PrivateMediaRemote_MROrigin_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h b/Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h new file mode 100644 index 0000000..83fad06 --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h @@ -0,0 +1,13 @@ +#ifndef PrivateMediaRemote_MRPlaybackQueue_h +#define PrivateMediaRemote_MRPlaybackQueue_h + +API_AVAILABLE(macos(11.0)) +@interface MRPlaybackQueue : NSObject { + NSArray *_contentItems; +} + +@property (nonatomic, copy) NSArray *contentItems; + +@end + +#endif /* PrivateMediaRemote_MRPlaybackQueue_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h b/Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h new file mode 100644 index 0000000..bdc1cc0 --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h @@ -0,0 +1,26 @@ +#ifndef PrivateMediaRemote_MRPlaybackQueueRequest_h +#define PrivateMediaRemote_MRPlaybackQueueRequest_h + +API_AVAILABLE(macos(10.15)) +@interface MRPlaybackQueueRequest : NSObject { + double _artworkHeight; + double _artworkWidth; + BOOL _includeInfo; + BOOL _includeLanguageOptions; + BOOL _includeLyrics; + BOOL _includeMetadata; +} + +@property (nonatomic) double artworkHeight; +@property (nonatomic) double artworkWidth; +@property (nonatomic, readonly) BOOL includeArtwork; +@property (nonatomic) BOOL includeInfo; +@property (nonatomic) BOOL includeLanguageOptions; +@property (nonatomic) BOOL includeLyrics; +@property (nonatomic) BOOL includeMetadata; + ++ (instancetype)defaultPlaybackQueueRequest API_AVAILABLE(macos(11.0)); + +@end + +#endif /* PrivateMediaRemote_MRPlaybackQueueRequest_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRPlayer.h b/Sources/PrivateMediaRemote/Classes/MRPlayer.h new file mode 100644 index 0000000..2b6ccbb --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRPlayer.h @@ -0,0 +1,18 @@ +#ifndef PrivateMediaRemote_MRPlayer_h +#define PrivateMediaRemote_MRPlayer_h + +API_AVAILABLE(macos(10.15)) +@interface MRPlayer : NSObject { + NSString *_displayName; + NSString *_identifier; +} + ++ (instancetype)anyPlayer API_AVAILABLE(macos(11.0)); ++ (instancetype)defaultPlayer; + +@property (nonatomic, copy) NSString *identifier; +@property (nonatomic, copy) NSString *displayName; + +@end + +#endif /* PrivateMediaRemote_MRPlayer_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRPlayerPath.h b/Sources/PrivateMediaRemote/Classes/MRPlayerPath.h new file mode 100644 index 0000000..d6e86ca --- /dev/null +++ b/Sources/PrivateMediaRemote/Classes/MRPlayerPath.h @@ -0,0 +1,26 @@ +#ifndef PrivateMediaRemote_MRPlayerPath_h +#define PrivateMediaRemote_MRPlayerPath_h + +#import "MROrigin.h" +#import "MRClient.h" +#import "MRPlayer.h" + +API_AVAILABLE(macos(10.15)) +@interface MRPlayerPath : NSObject { + MROrigin *_origin; + MRClient *_client; + MRPlayer *_player; +} + +@property (nonatomic, copy) MROrigin *origin; +@property (nonatomic, copy) MRClient *client; +@property (nonatomic, copy) MRPlayer *player; + +- (instancetype)initWithOrigin:(MROrigin *)origin client:(MRClient *)client player:(MRPlayer *)player; + +/// New instance on every call ++ (instancetype)anyPlayerPath API_AVAILABLE(macos(12.0)); + +@end + +#endif /* PrivateMediaRemote_MRPlayerPath_h */ diff --git a/Sources/PrivateMediaRemote/Constants.h b/Sources/PrivateMediaRemote/Constants.h index 130bd26..de1ec5e 100644 --- a/Sources/PrivateMediaRemote/Constants.h +++ b/Sources/PrivateMediaRemote/Constants.h @@ -49,4 +49,6 @@ extern NSString *kMRNowPlayingPlayerPathUserInfoKey; extern NSString *kMRNowPlayingPlayerUserInfoKey; extern NSString *kMROriginActiveNowPlayingPlayerPathUserInfoKey; +extern NSString *kMRMediaRemoteFrameworkErrorDomain; + #endif /* PrivateMediaRemote_Constants_h */ diff --git a/Sources/PrivateMediaRemote/Functions.h b/Sources/PrivateMediaRemote/Functions.h index d225361..a855816 100644 --- a/Sources/PrivateMediaRemote/Functions.h +++ b/Sources/PrivateMediaRemote/Functions.h @@ -11,6 +11,19 @@ void MRMediaRemoteUnregisterForNowPlayingNotifications(void); /// - Since macOS 10.12 it's `void (^)(_MRNowPlayingClientProtobuf *client)`. void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t queue, void (^block)(id client)); +/// - Parameters: +/// - request: You can pass `nil`. +/// - Since macOS 10.15 it's `MRPlaybackQueueRequest *` +/// - Since macOS 10.12 it's `_MRPlaybackQueueRequestProtobuf *` +/// - playerPath: You can pass `nil`. +/// - Since macOS 10.15 it's `MRPlayerPath *` +/// - Since macOS 10.12 it's `_MRNowPlayingPlayerPathProtobuf *` +/// - queue: `dispatch_queue_t` +/// - block: +/// - Since macOS 11.0 it's `void (^)(MRPlaybackQueue *queue, NSError *error)`. +/// - Since macOS 10.12 it's `void (^)(_MRPlaybackQueueProtobuf *queue, NSError *error)`. +void MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync(id request, id playerPath, dispatch_queue_t queue, void (^block)(id queue, NSError *error)); + typedef void (^MRMediaRemoteGetNowPlayingInfoCallback)(NSDictionary *info); void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingInfoCallback block); typedef void (^MRMediaRemoteGetNowPlayingApplicationIsPlayingCallback)(BOOL isPlaying); diff --git a/Sources/PrivateMediaRemote/PrivateMediaRemote.h b/Sources/PrivateMediaRemote/PrivateMediaRemote.h index 241ee58..9914a5a 100644 --- a/Sources/PrivateMediaRemote/PrivateMediaRemote.h +++ b/Sources/PrivateMediaRemote/PrivateMediaRemote.h @@ -6,6 +6,14 @@ #import "Classes/_MRColorProtobuf.h" #import "Classes/_MRNowPlayingClientProtobuf.h" #import "Classes/MRClient.h" +#import "Classes/MRArtwork.h" +#import "Classes/MRContentItem.h" +#import "Classes/MRContentItemMetadata.h" +#import "Classes/MROrigin.h" +#import "Classes/MRPlaybackQueue.h" +#import "Classes/MRPlaybackQueueRequest.h" +#import "Classes/MRPlayer.h" +#import "Classes/MRPlayerPath.h" #import "Constants.h" #import "Enums.h" #import "Functions.h" diff --git a/Tests/Linked/Tests.m b/Tests/Linked/Tests.m index bf2ea34..110df2c 100644 --- a/Tests/Linked/Tests.m +++ b/Tests/Linked/Tests.m @@ -11,11 +11,11 @@ - (void)tearDown { } - (void)testClasses { - TestClasses + Identifier(testClasses)(); } - (void)testSuperclasses { - TestSuperclasses + Identifier(testSuperclasses)(); } - (void)testSelectors { @@ -31,11 +31,11 @@ - (void)testMethods { } - (void)testConstants { - TestConstants + Identifier(testConstants)(self); } - (void)testFunctions { - TestFunctions + Identifier(testFunctions)(self); } @end diff --git a/Tests/TestClasses.h b/Tests/TestClasses.h index 1a3ecbc..8b5f958 100644 --- a/Tests/TestClasses.h +++ b/Tests/TestClasses.h @@ -11,18 +11,24 @@ BOOL Identifier(isClassDefined)(Class classInstance, NSString *classString) { #define TestClass(CLASS) XCTAssertTrue(IsClassDefined(CLASS)) #define TestUnlinkableClass(CLASS) XCTAssertTrue(IsUnlinkableClassDefined(CLASS)) -void Identifier(testClassesCatalina)() { +void Identifier(testClasses)() { + TestClass(_MRColorProtobuf); + TestClass(_MRNowPlayingClientProtobuf); + TestClass(MRContentItem); + TestClass(MRContentItemMetadata); + if (@available(macOS 10.15, *)) { TestClass(MRClient); + TestClass(MRArtwork); + TestClass(MROrigin); + TestClass(MRPlaybackQueueRequest); + TestClass(MRPlayer); + TestClass(MRPlayerPath); + } + + if (@available(macOS 11.0, *)) { + TestClass(MRPlaybackQueue); } } -#define TestClassesCatalina Identifier(testClassesCatalina) - -#define TestClasses \ -TestClass(_MRColorProtobuf); \ -TestClass(_MRNowPlayingClientProtobuf); \ -TestClassesCatalina(); \ - - #endif /* TestClasses_h */ diff --git a/Tests/TestConstants.h b/Tests/TestConstants.h index b0d6100..6e377cf 100644 --- a/Tests/TestConstants.h +++ b/Tests/TestConstants.h @@ -4,65 +4,67 @@ #ifdef LINKED_TESTS #define IsVariableNameEqualToValue(STRING) [@#STRING isEqualToString:STRING] #elif defined(UNLINKED_TESTS) -BOOL Identifier(isVariableNameEqualToValue)(CFBundleRef cfBundle, CFStringRef cfString, NSString *string) { +BOOL isVariableNameEqualToValue(CFBundleRef cfBundle, CFStringRef cfString, NSString *string) { CFStringRef *ref = (CFStringRef *)CFBundleGetDataPointerForName(cfBundle, cfString); if (ref == nil) return NO; return [string isEqualToString:((__bridge NSString *)*ref)]; } -#define IsVariableNameEqualToValue(STRING) Identifier(isVariableNameEqualToValue)(self.cfBundle, CFSTR(#STRING), @#STRING) +#define IsVariableNameEqualToValue(STRING) isVariableNameEqualToValue(self.cfBundle, CFSTR(#STRING), @#STRING) #endif #define TestConstant(STRING) XCTAssertTrue(IsVariableNameEqualToValue(STRING)) -#define TestConstants \ -TestConstant(kMRMediaRemoteNowPlayingInfoDidChangeNotification); \ -TestConstant(kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification); \ -TestConstant(kMRMediaRemotePickableRoutesDidChangeNotification); \ -TestConstant(kMRMediaRemoteNowPlayingApplicationDidChangeNotification); \ -TestConstant(kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification); \ -TestConstant(kMRMediaRemoteRouteStatusDidChangeNotification); \ -TestConstant(kMRNowPlayingPlaybackQueueChangedNotification); \ -TestConstant(kMRPlaybackQueueContentItemsChangedNotification); \ -\ -TestConstant(kMRMediaRemoteNowPlayingInfoArtist); \ -TestConstant(kMRMediaRemoteNowPlayingInfoTitle); \ -TestConstant(kMRMediaRemoteNowPlayingInfoAlbum); \ -TestConstant(kMRMediaRemoteNowPlayingInfoArtworkData); \ -TestConstant(kMRMediaRemoteNowPlayingInfoPlaybackRate); \ -TestConstant(kMRMediaRemoteNowPlayingInfoDuration); \ -TestConstant(kMRMediaRemoteNowPlayingInfoElapsedTime); \ -TestConstant(kMRMediaRemoteNowPlayingInfoTimestamp); \ -TestConstant(kMRMediaRemoteNowPlayingInfoClientPropertiesData); \ -TestConstant(kMRMediaRemoteNowPlayingInfoArtworkIdentifier); \ -TestConstant(kMRMediaRemoteNowPlayingInfoShuffleMode); \ -TestConstant(kMRMediaRemoteNowPlayingInfoTrackNumber); \ -TestConstant(kMRMediaRemoteNowPlayingInfoTotalQueueCount); \ -TestConstant(kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier); \ -TestConstant(kMRMediaRemoteNowPlayingInfoArtworkMIMEType); \ -TestConstant(kMRMediaRemoteNowPlayingInfoMediaType); \ -TestConstant(kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier); \ -TestConstant(kMRMediaRemoteNowPlayingInfoGenre); \ -TestConstant(kMRMediaRemoteNowPlayingInfoComposer); \ -TestConstant(kMRMediaRemoteNowPlayingInfoQueueIndex); \ -TestConstant(kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier); \ -TestConstant(kMRMediaRemoteNowPlayingInfoTotalTrackCount); \ -TestConstant(kMRMediaRemoteNowPlayingInfoContentItemIdentifier); \ -TestConstant(kMRMediaRemoteNowPlayingInfoIsMusicApp); \ -TestConstant(kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier); \ -TestConstant(kMRMediaRemoteNowPlayingInfoUniqueIdentifier); \ -\ -TestConstant(kMRActiveNowPlayingPlayerPathUserInfoKey); \ -TestConstant(kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey); \ -TestConstant(kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey); \ -TestConstant(kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey); \ -TestConstant(kMRMediaRemoteOriginUserInfoKey); \ -TestConstant(kMRMediaRemotePlaybackStateUserInfoKey); \ -TestConstant(kMRMediaRemoteUpdatedContentItemsUserInfoKey); \ -TestConstant(kMRNowPlayingClientUserInfoKey); \ -TestConstant(kMRNowPlayingPlayerPathUserInfoKey); \ -TestConstant(kMRNowPlayingPlayerUserInfoKey); \ -TestConstant(kMROriginActiveNowPlayingPlayerPathUserInfoKey); \ +void Identifier(testConstants)(Identifier(Tests) *self) { + TestConstant(kMRMediaRemoteNowPlayingInfoDidChangeNotification); + TestConstant(kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification); + TestConstant(kMRMediaRemotePickableRoutesDidChangeNotification); + TestConstant(kMRMediaRemoteNowPlayingApplicationDidChangeNotification); + TestConstant(kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification); + TestConstant(kMRMediaRemoteRouteStatusDidChangeNotification); + TestConstant(kMRNowPlayingPlaybackQueueChangedNotification); + TestConstant(kMRPlaybackQueueContentItemsChangedNotification); + TestConstant(kMRMediaRemoteNowPlayingInfoArtist); + TestConstant(kMRMediaRemoteNowPlayingInfoTitle); + TestConstant(kMRMediaRemoteNowPlayingInfoAlbum); + TestConstant(kMRMediaRemoteNowPlayingInfoArtworkData); + TestConstant(kMRMediaRemoteNowPlayingInfoPlaybackRate); + TestConstant(kMRMediaRemoteNowPlayingInfoDuration); + TestConstant(kMRMediaRemoteNowPlayingInfoElapsedTime); + TestConstant(kMRMediaRemoteNowPlayingInfoTimestamp); + TestConstant(kMRMediaRemoteNowPlayingInfoClientPropertiesData); + TestConstant(kMRMediaRemoteNowPlayingInfoArtworkIdentifier); + TestConstant(kMRMediaRemoteNowPlayingInfoShuffleMode); + TestConstant(kMRMediaRemoteNowPlayingInfoTrackNumber); + TestConstant(kMRMediaRemoteNowPlayingInfoTotalQueueCount); + TestConstant(kMRMediaRemoteNowPlayingInfoArtistiTunesStoreAdamIdentifier); + TestConstant(kMRMediaRemoteNowPlayingInfoArtworkMIMEType); + TestConstant(kMRMediaRemoteNowPlayingInfoMediaType); + TestConstant(kMRMediaRemoteNowPlayingInfoiTunesStoreSubscriptionAdamIdentifier); + TestConstant(kMRMediaRemoteNowPlayingInfoGenre); + TestConstant(kMRMediaRemoteNowPlayingInfoComposer); + TestConstant(kMRMediaRemoteNowPlayingInfoQueueIndex); + TestConstant(kMRMediaRemoteNowPlayingInfoiTunesStoreIdentifier); + TestConstant(kMRMediaRemoteNowPlayingInfoTotalTrackCount); + TestConstant(kMRMediaRemoteNowPlayingInfoContentItemIdentifier); + TestConstant(kMRMediaRemoteNowPlayingInfoIsMusicApp); + TestConstant(kMRMediaRemoteNowPlayingInfoAlbumiTunesStoreAdamIdentifier); + TestConstant(kMRMediaRemoteNowPlayingInfoUniqueIdentifier); + + TestConstant(kMRActiveNowPlayingPlayerPathUserInfoKey); + TestConstant(kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey); + TestConstant(kMRMediaRemoteNowPlayingApplicationDisplayNameUserInfoKey); + TestConstant(kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey); + TestConstant(kMRMediaRemoteOriginUserInfoKey); + TestConstant(kMRMediaRemotePlaybackStateUserInfoKey); + TestConstant(kMRMediaRemoteUpdatedContentItemsUserInfoKey); + TestConstant(kMRNowPlayingClientUserInfoKey); + TestConstant(kMRNowPlayingPlayerPathUserInfoKey); + TestConstant(kMRNowPlayingPlayerUserInfoKey); + TestConstant(kMROriginActiveNowPlayingPlayerPathUserInfoKey); + + TestConstant(kMRMediaRemoteFrameworkErrorDomain); +} #endif /* TestConstants_h */ diff --git a/Tests/TestFunctions.h b/Tests/TestFunctions.h index 43e5fd5..55d0ac0 100644 --- a/Tests/TestFunctions.h +++ b/Tests/TestFunctions.h @@ -3,7 +3,11 @@ #define GetFunctionPointer(FUNCTION) CFBundleGetFunctionPointerForName(self.cfBundle, CFSTR(#FUNCTION)) +#ifdef LINKED_TESTS +#define TestFunction(FUNCTION) XCTAssertNotEqual(&FUNCTION, nil) +#elif defined(UNLINKED_TESTS) #define TestFunction(FUNCTION) XCTAssertTrue(GetFunctionPointer(FUNCTION) != nil) +#endif void Identifier(getNowPlayingClient)(Identifier(Tests) *self) { typeof(MRMediaRemoteGetNowPlayingClient) *func = nil; @@ -14,7 +18,7 @@ void Identifier(getNowPlayingClient)(Identifier(Tests) *self) { func = CFBundleGetFunctionPointerForName(self.cfBundle, CFSTR("MRMediaRemoteGetNowPlayingClient")); #endif - XCTestExpectation *expectation = [self expectationWithDescription:@"Long method"]; + XCTestExpectation *expectation = [self expectationWithDescription:@"MRMediaRemoteGetNowPlayingClient"]; (*func)(dispatch_get_main_queue(), ^(id client) { XCTAssertNotNil(client, @"`client` is `nil` when calling `MRMediaRemoteGetNowPlayingClient`. Play some music for this test to pass."); @@ -27,21 +31,48 @@ void Identifier(getNowPlayingClient)(Identifier(Tests) *self) { [expectation fulfill]; }); - [self waitForExpectationsWithTimeout:1 handler:nil]; + [self waitForExpectations:@[expectation] timeout:1]; } -#define TestMRMediaRemoteGetNowPlayingClient Identifier(getNowPlayingClient) +void Identifier(requestNowPlayingPlaybackQueueForPlayerSync)(Identifier(Tests) *self) { + typeof(MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync) *func = nil; + +#ifdef LINKED_TESTS + func = &MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync; +#elif defined(UNLINKED_TESTS) + func = CFBundleGetFunctionPointerForName(self.cfBundle, CFSTR("MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync")); +#endif + + XCTestExpectation *expectation = [self expectationWithDescription:@"MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync"]; + (*func)(nil, nil, dispatch_get_main_queue(), ^(id queue, NSError *error) { + XCTAssertNotNil(queue, @"`queue` is `nil` when calling `MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync`. Play some music for this test to pass."); + XCTAssertNil(error); + + if (@available(macOS 11.0, *)) { + XCTAssertTrue([((NSObject *)queue).className isEqualToString:@"MRPlaybackQueue"]); + } else { + XCTAssertTrue([((NSObject *)queue).className isEqualToString:@"_MRPlaybackQueueProtobuf"]); + } + + [expectation fulfill]; + }); + + [self waitForExpectations:@[expectation] timeout:1]; +} -#define TestFunctions \ -TestFunction(MRMediaRemoteRegisterForNowPlayingNotifications); \ -TestFunction(MRMediaRemoteUnregisterForNowPlayingNotifications); \ -TestFunction(MRMediaRemoteGetNowPlayingClient); \ -TestFunction(MRMediaRemoteGetNowPlayingInfo); \ -TestFunction(MRMediaRemoteGetNowPlayingApplicationIsPlaying); \ -TestFunction(MRNowPlayingClientGetBundleIdentifier); \ -TestFunction(MRNowPlayingClientGetParentAppBundleIdentifier); \ -TestFunction(MRMediaRemoteSetElapsedTime); \ -TestFunction(MRMediaRemoteSendCommand); \ -TestMRMediaRemoteGetNowPlayingClient(self); \ +void Identifier(testFunctions)(Identifier(Tests) *self) { + TestFunction(MRMediaRemoteRegisterForNowPlayingNotifications); + TestFunction(MRMediaRemoteUnregisterForNowPlayingNotifications); + TestFunction(MRMediaRemoteGetNowPlayingClient); + TestFunction(MRMediaRemoteGetNowPlayingInfo); + TestFunction(MRMediaRemoteGetNowPlayingApplicationIsPlaying); + TestFunction(MRNowPlayingClientGetBundleIdentifier); + TestFunction(MRNowPlayingClientGetParentAppBundleIdentifier); + TestFunction(MRMediaRemoteSetElapsedTime); + TestFunction(MRMediaRemoteSendCommand); + TestFunction(MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync); + Identifier(getNowPlayingClient)(self); + Identifier(requestNowPlayingPlaybackQueueForPlayerSync)(self); +} #endif /* TestFunctions_h */ diff --git a/Tests/TestSuperclasses.h b/Tests/TestSuperclasses.h index 939e94f..d100411 100644 --- a/Tests/TestSuperclasses.h +++ b/Tests/TestSuperclasses.h @@ -11,9 +11,9 @@ BOOL Identifier(checkSuperclass)(Class classInstance, Class superclassInstance) #define TestSuperclass(CLASS, SUPERCLASS) XCTAssertTrue(CheckSuperclass(CLASS, SUPERCLASS)) #define TestUnlinkableSuperclass(CLASS, SUPERCLASS) XCTAssertTrue(CheckUnlinkableSuperclass(CLASS, SUPERCLASS)) -#define TestSuperclasses \ -TestUnlinkableSuperclass(_MRColorProtobuf, PBCodable); \ -TestSuperclass(_MRNowPlayingClientProtobuf, PBCodable); \ - +void Identifier(testSuperclasses)() { + TestUnlinkableSuperclass(_MRColorProtobuf, PBCodable); + TestSuperclass(_MRNowPlayingClientProtobuf, PBCodable); +} #endif /* TestSuperclasses_h */ diff --git a/Tests/Unlinked/Tests.m b/Tests/Unlinked/Tests.m index bf2ea34..110df2c 100644 --- a/Tests/Unlinked/Tests.m +++ b/Tests/Unlinked/Tests.m @@ -11,11 +11,11 @@ - (void)tearDown { } - (void)testClasses { - TestClasses + Identifier(testClasses)(); } - (void)testSuperclasses { - TestSuperclasses + Identifier(testSuperclasses)(); } - (void)testSelectors { @@ -31,11 +31,11 @@ - (void)testMethods { } - (void)testConstants { - TestConstants + Identifier(testConstants)(self); } - (void)testFunctions { - TestFunctions + Identifier(testFunctions)(self); } @end From d231c7a875232ea73e8dba2eb05a8041fd3d6e45 Mon Sep 17 00:00:00 2001 From: Dimitar Nestorov <8790386+dimitarnestorov@users.noreply.github.com> Date: Mon, 16 Jan 2023 00:40:34 +0200 Subject: [PATCH 3/3] Test on macOS Mojave and iOS --- .gitignore | 2 + .travis.yml | 27 ++++ .vscode/settings.json | 3 + .../ios/MediaRemote.framework/MediaRemote.tbd | 32 ++-- .../MediaRemote.framework/MediaRemote.tbd | 32 ++-- .../MediaRemote.framework/MediaRemote.tbd | 32 ++-- .../MediaRemote.framework/MediaRemote.tbd | 32 ++-- Package.resolved | 4 +- Package.swift | 2 + Package@swift-4.0.swift | 26 ++++ Package@swift-5.3.swift | 42 +++++ .../Classes/MRContentItem.h | 16 -- .../{Classes => }/MRArtwork.h | 2 +- .../{Classes => }/MRClient.h | 4 +- Sources/PrivateMediaRemote/MRContentItem.h | 16 ++ .../{Classes => }/MRContentItemMetadata.h | 0 .../{Classes => }/MROrigin.h | 2 +- .../{Classes => }/MRPlaybackQueue.h | 2 +- .../{Classes => }/MRPlaybackQueueRequest.h | 2 +- .../{Classes => }/MRPlayer.h | 2 +- .../{Classes => }/MRPlayerPath.h | 8 +- .../PrivateMediaRemote/PrivateMediaRemote.h | 28 ++-- .../{Classes => }/_MRColorProtobuf.h | 2 + .../_MRNowPlayingClientProtobuf.h | 2 +- Tests/Common.h | 2 +- Tests/GetClass.h | 4 + Tests/Identifier.h | 2 + Tests/TestClasses.h | 25 ++- Tests/TestFunctions.h | 12 +- Tests/TestSuperclasses.h | 3 +- project.yml | 145 ++++++++++++++++++ 31 files changed, 394 insertions(+), 119 deletions(-) create mode 100644 .travis.yml create mode 100644 .vscode/settings.json create mode 100644 Package@swift-4.0.swift create mode 100644 Package@swift-5.3.swift delete mode 100644 Sources/PrivateMediaRemote/Classes/MRContentItem.h rename Sources/PrivateMediaRemote/{Classes => }/MRArtwork.h (85%) rename Sources/PrivateMediaRemote/{Classes => }/MRClient.h (78%) create mode 100644 Sources/PrivateMediaRemote/MRContentItem.h rename Sources/PrivateMediaRemote/{Classes => }/MRContentItemMetadata.h (100%) rename Sources/PrivateMediaRemote/{Classes => }/MROrigin.h (83%) rename Sources/PrivateMediaRemote/{Classes => }/MRPlaybackQueue.h (83%) rename Sources/PrivateMediaRemote/{Classes => }/MRPlaybackQueueRequest.h (92%) rename Sources/PrivateMediaRemote/{Classes => }/MRPlayer.h (87%) rename Sources/PrivateMediaRemote/{Classes => }/MRPlayerPath.h (76%) rename Sources/PrivateMediaRemote/{Classes => }/_MRColorProtobuf.h (94%) rename Sources/PrivateMediaRemote/{Classes => }/_MRNowPlayingClientProtobuf.h (97%) create mode 100644 project.yml diff --git a/.gitignore b/.gitignore index f027003..6e8dc31 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .swiftpm/ .DS_Store DerivedData/ +build/ +*.xcodeproj diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8908b03 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,27 @@ +os: osx +install: + - wget https://github.com/yonaskolb/XcodeGen/releases/download/2.10.1/xcodegen.zip + - unzip xcodegen.zip + - git clone https://github.com/PrivateFrameworks/ProtocolBuffer.git + - cd ProtocolBuffer && ../xcodegen/bin/xcodegen && cd .. + - xcodegen/bin/xcodegen +language: objective-c +xcode_project: PrivateProtocolBuffer.xcodeproj +# env: + # - XCODE_SCHEME="Linked tests ios" DESTINATION="platform=iOS Simulator,name=iPhone 8" + # - XCODE_SCHEME="Unlinked tests ios" DESTINATION="platform=iOS Simulator,name=iPhone 8" + # - XCODE_SCHEME="Linked tests tvos" DESTINATION="platform=tvOS Simulator,name=Apple TV" + # - XCODE_SCHEME="Unlinked tests tvos" DESTINATION="platform=tvOS Simulator,name=Apple TV" + # - XCODE_SCHEME="Linked tests macos" DESTINATION="platform=macOS" + # - XCODE_SCHEME="Unlinked tests macos" DESTINATION="platform=macOS" +script: + - bash -c "$BEFORE" + - bash -c "xcodebuild test -project PrivateProtocolBuffer.xcodeproj -scheme $XCODE_SCHEME -destination $DESTINATION" + +matrix: + include: + - env: XCODE_SCHEME="Linked\\ tests\\ ios" DESTINATION="platform=iOS\\ Simulator,name=iPhone\\ 8" BEFORE="xcrun simctl boot iPhone\\ 8 && sleep 5 && xcrun simctl openurl booted http://stream.radioreklama.bg/radio164 && sleep 5" + osx_image: xcode10.2 + + # - env: XCODE_SCHEME="Linked\\ tests\\ macos" DESTINATION="platform=macOS" BEFORE="open /System/Library/Sounds/*" + # osx_image: xcode10.2 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7c2feb7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": false +} diff --git a/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd index f2d5bbb..f308f8d 100644 --- a/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/ios/MediaRemote.framework/MediaRemote.tbd @@ -1,9 +1,9 @@ ---- !tapi-tbd -tbd-version: 4 -targets: [ x86_64-macos, arm64-macos, armv7-ios ] -install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' +--- +archs: [ x86_64, arm64 ] +platform: ios +install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - - targets: [ x86_64-macos, arm64-macos, armv7-ios ] + - archs: [ x86_64, arm64 ] symbols: - _MRMediaRemoteRegisterForNowPlayingNotifications - _MRMediaRemoteUnregisterForNowPlayingNotifications @@ -62,15 +62,15 @@ exports: - _kMROriginActiveNowPlayingPlayerPathUserInfoKey - _kMRMediaRemoteFrameworkErrorDomain objc-classes: - - _MRColorProtobuf - - _MRNowPlayingClientProtobuf - - MRClient - - MRArtwork - - MRContentItem - - MRContentItemMetadata - - MROrigin - - MRPlaybackQueue - - MRPlaybackQueueRequest - - MRPlayer - - MRPlayerPath + - __MRColorProtobuf + - __MRNowPlayingClientProtobuf + - _MRClient + - _MRArtwork + - _MRContentItem + - _MRContentItemMetadata + - _MROrigin + - _MRPlaybackQueue + - _MRPlaybackQueueRequest + - _MRPlayer + - _MRPlayerPath ... diff --git a/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd index 8720a62..94db779 100644 --- a/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/macos/MediaRemote.framework/MediaRemote.tbd @@ -1,9 +1,9 @@ ---- !tapi-tbd -tbd-version: 4 -targets: [ x86_64-macos, arm64-macos ] -install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' +--- +archs: [ x86_64, arm64 ] +platform: macosx +install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - - targets: [ x86_64-macos, arm64-macos ] + - archs: [ x86_64, arm64 ] symbols: - _MRMediaRemoteRegisterForNowPlayingNotifications - _MRMediaRemoteUnregisterForNowPlayingNotifications @@ -62,15 +62,15 @@ exports: - _kMROriginActiveNowPlayingPlayerPathUserInfoKey - _kMRMediaRemoteFrameworkErrorDomain objc-classes: - - _MRColorProtobuf - - _MRNowPlayingClientProtobuf - - MRClient - - MRArtwork - - MRContentItem - - MRContentItemMetadata - - MROrigin - - MRPlaybackQueue - - MRPlaybackQueueRequest - - MRPlayer - - MRPlayerPath + - __MRColorProtobuf + - __MRNowPlayingClientProtobuf + - _MRClient + - _MRArtwork + - _MRContentItem + - _MRContentItemMetadata + - _MROrigin + - _MRPlaybackQueue + - _MRPlaybackQueueRequest + - _MRPlayer + - _MRPlayerPath ... diff --git a/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd index c5a6f77..0d93cf5 100644 --- a/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/tvos/MediaRemote.framework/MediaRemote.tbd @@ -1,9 +1,9 @@ ---- !tapi-tbd -tbd-version: 4 -targets: [ arm64-tvos ] -install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' +--- +archs: [ x86_64, arm64 ] +platform: tvos +install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - - targets: [ arm64-tvos ] + - archs: [ x86_64, arm64 ] symbols: - _MRMediaRemoteRegisterForNowPlayingNotifications - _MRMediaRemoteUnregisterForNowPlayingNotifications @@ -62,15 +62,15 @@ exports: - _kMROriginActiveNowPlayingPlayerPathUserInfoKey - _kMRMediaRemoteFrameworkErrorDomain objc-classes: - - _MRColorProtobuf - - _MRNowPlayingClientProtobuf - - MRClient - - MRArtwork - - MRContentItem - - MRContentItemMetadata - - MROrigin - - MRPlaybackQueue - - MRPlaybackQueueRequest - - MRPlayer - - MRPlayerPath + - __MRColorProtobuf + - __MRNowPlayingClientProtobuf + - _MRClient + - _MRArtwork + - _MRContentItem + - _MRContentItemMetadata + - _MROrigin + - _MRPlaybackQueue + - _MRPlaybackQueueRequest + - _MRPlayer + - _MRPlayerPath ... diff --git a/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd b/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd index 7ff9dc6..cc94b26 100644 --- a/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd +++ b/MediaRemote.xcframework/watchos/MediaRemote.framework/MediaRemote.tbd @@ -1,9 +1,9 @@ ---- !tapi-tbd -tbd-version: 4 -targets: [ armv7k-watchos, arm64_32-watchos ] -install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' +--- +archs: [ x86_64, arm64, i386, armv7, armv7s ] +platform: watchos +install-name: '/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote' exports: - - targets: [ armv7k-watchos, arm64_32-watchos ] + - archs: [ x86_64, arm64, i386, armv7, armv7s ] symbols: - _MRMediaRemoteRegisterForNowPlayingNotifications - _MRMediaRemoteUnregisterForNowPlayingNotifications @@ -62,15 +62,15 @@ exports: - _kMROriginActiveNowPlayingPlayerPathUserInfoKey - _kMRMediaRemoteFrameworkErrorDomain objc-classes: - - _MRColorProtobuf - - _MRNowPlayingClientProtobuf - - MRClient - - MRArtwork - - MRContentItem - - MRContentItemMetadata - - MROrigin - - MRPlaybackQueue - - MRPlaybackQueueRequest - - MRPlayer - - MRPlayerPath + - __MRColorProtobuf + - __MRNowPlayingClientProtobuf + - _MRClient + - _MRArtwork + - _MRContentItem + - _MRContentItemMetadata + - _MROrigin + - _MRPlaybackQueue + - _MRPlaybackQueueRequest + - _MRPlayer + - _MRPlayerPath ... diff --git a/Package.resolved b/Package.resolved index 6d8f7a7..a9c58da 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/PrivateFrameworks/ProtocolBuffer", "state": { "branch": null, - "revision": "20b692d09393389120bea65098ddf66129352bb7", - "version": "0.1.0" + "revision": "d4c569d9ce5e146e9185ebc056fdbaaf9784ec5d", + "version": "0.1.1" } } ] diff --git a/Package.swift b/Package.swift index 29918c8..d5a1406 100644 --- a/Package.swift +++ b/Package.swift @@ -1,5 +1,7 @@ // swift-tools-version:5.5 +// PackageDescription 5.5 adds `macCatalyst` + import PackageDescription let package = Package( diff --git a/Package@swift-4.0.swift b/Package@swift-4.0.swift new file mode 100644 index 0000000..0b7fff8 --- /dev/null +++ b/Package@swift-4.0.swift @@ -0,0 +1,26 @@ +// swift-tools-version:4.0 + +import PackageDescription + +let package = Package( + name: "PrivateMediaRemote", + products: [ + .library( + name: "PrivateMediaRemote", + targets: ["PrivateMediaRemote"] + ), + ], + dependencies: [ + .package(url: "https://github.com/PrivateFrameworks/ProtocolBuffer", .upToNextMinor(from: "0.1.0")), + ], + targets: [ + .target( + name: "PrivateMediaRemote", + dependencies: [ + .product(name: "PrivateProtocolBuffer", package: "ProtocolBuffer"), + ], + path: "Sources", + publicHeadersPath: "." + ), + ] +) diff --git a/Package@swift-5.3.swift b/Package@swift-5.3.swift new file mode 100644 index 0000000..6a5f42a --- /dev/null +++ b/Package@swift-5.3.swift @@ -0,0 +1,42 @@ +// swift-tools-version:5.3 + +// Swift 5.3 adds support for `binaryTarget` + +import PackageDescription + +let package = Package( + name: "PrivateMediaRemote", + platforms: [ + .iOS(.v8), + .macOS(.v10_12), + .tvOS(.v9), + .watchOS(.v2), + ], + products: [ + .library( + name: "PrivateMediaRemote", + targets: ["PrivateMediaRemote"] + ), + .library( + name: "MediaRemote", + targets: ["MediaRemote"] + ), + ], + dependencies: [ + .package(url: "https://github.com/PrivateFrameworks/ProtocolBuffer", .upToNextMinor(from: "0.1.0")), + ], + targets: [ + .target( + name: "PrivateMediaRemote", + dependencies: [ + .product(name: "PrivateProtocolBuffer", package: "ProtocolBuffer"), + ], + path: "Sources", + publicHeadersPath: "." + ), + .binaryTarget( + name: "MediaRemote", + path: "MediaRemote.xcframework" + ), + ] +) diff --git a/Sources/PrivateMediaRemote/Classes/MRContentItem.h b/Sources/PrivateMediaRemote/Classes/MRContentItem.h deleted file mode 100644 index 3d5dcb7..0000000 --- a/Sources/PrivateMediaRemote/Classes/MRContentItem.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef PrivateMediaRemote_MRContentItem_h -#define PrivateMediaRemote_MRContentItem_h - -#import "MRContentItemMetadata.h" -#import "MRArtwork.h" - -/// Before macOS 11.0 `MRContentItem` inherited `_MRContentItemProtobuf` -@interface MRContentItem : NSObject - -@property (nonatomic, copy) NSString *identifier API_AVAILABLE(macos(11.0)); -@property (nonatomic, copy) MRContentItemMetadata *metadata API_AVAILABLE(macos(11.0)); -@property (nonatomic, retain) MRArtwork *artwork API_AVAILABLE(macos(11.0)); - -@end - -#endif /* PrivateMediaRemote_MRContentItem_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRArtwork.h b/Sources/PrivateMediaRemote/MRArtwork.h similarity index 85% rename from Sources/PrivateMediaRemote/Classes/MRArtwork.h rename to Sources/PrivateMediaRemote/MRArtwork.h index 222accc..3be1d94 100644 --- a/Sources/PrivateMediaRemote/Classes/MRArtwork.h +++ b/Sources/PrivateMediaRemote/MRArtwork.h @@ -1,7 +1,7 @@ #ifndef PrivateMediaRemote_MRArtwork_h #define PrivateMediaRemote_MRArtwork_h -API_AVAILABLE(macos(10.15)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(10.15)) @interface MRArtwork : NSObject { NSData *_imageData; long long _width; diff --git a/Sources/PrivateMediaRemote/Classes/MRClient.h b/Sources/PrivateMediaRemote/MRClient.h similarity index 78% rename from Sources/PrivateMediaRemote/Classes/MRClient.h rename to Sources/PrivateMediaRemote/MRClient.h index 25be046..05efc9a 100644 --- a/Sources/PrivateMediaRemote/Classes/MRClient.h +++ b/Sources/PrivateMediaRemote/MRClient.h @@ -3,9 +3,9 @@ #import -#include "_MRNowPlayingClientProtobuf.h" +#include -API_AVAILABLE(macos(10.15)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(10.15)) @interface MRClient : NSObject { NSString *_bundleIdentifier; } diff --git a/Sources/PrivateMediaRemote/MRContentItem.h b/Sources/PrivateMediaRemote/MRContentItem.h new file mode 100644 index 0000000..9490192 --- /dev/null +++ b/Sources/PrivateMediaRemote/MRContentItem.h @@ -0,0 +1,16 @@ +#ifndef PrivateMediaRemote_MRContentItem_h +#define PrivateMediaRemote_MRContentItem_h + +#import +#import + +/// Before macOS 11.0 `MRContentItem` inherited `_MRContentItemProtobuf` +@interface MRContentItem : NSObject + +@property (nonatomic, copy) NSString *identifier API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(11.0)); +@property (nonatomic, copy) MRContentItemMetadata *metadata API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(11.0)); +@property (nonatomic, retain) MRArtwork *artwork API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(11.0)); + +@end + +#endif /* PrivateMediaRemote_MRContentItem_h */ diff --git a/Sources/PrivateMediaRemote/Classes/MRContentItemMetadata.h b/Sources/PrivateMediaRemote/MRContentItemMetadata.h similarity index 100% rename from Sources/PrivateMediaRemote/Classes/MRContentItemMetadata.h rename to Sources/PrivateMediaRemote/MRContentItemMetadata.h diff --git a/Sources/PrivateMediaRemote/Classes/MROrigin.h b/Sources/PrivateMediaRemote/MROrigin.h similarity index 83% rename from Sources/PrivateMediaRemote/Classes/MROrigin.h rename to Sources/PrivateMediaRemote/MROrigin.h index 97d00dc..47b8d61 100644 --- a/Sources/PrivateMediaRemote/Classes/MROrigin.h +++ b/Sources/PrivateMediaRemote/MROrigin.h @@ -1,7 +1,7 @@ #ifndef PrivateMediaRemote_MROrigin_h #define PrivateMediaRemote_MROrigin_h -API_AVAILABLE(macos(10.15)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(10.15)) @interface MROrigin : NSObject /// New instance on every call diff --git a/Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h b/Sources/PrivateMediaRemote/MRPlaybackQueue.h similarity index 83% rename from Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h rename to Sources/PrivateMediaRemote/MRPlaybackQueue.h index 83fad06..764813b 100644 --- a/Sources/PrivateMediaRemote/Classes/MRPlaybackQueue.h +++ b/Sources/PrivateMediaRemote/MRPlaybackQueue.h @@ -1,7 +1,7 @@ #ifndef PrivateMediaRemote_MRPlaybackQueue_h #define PrivateMediaRemote_MRPlaybackQueue_h -API_AVAILABLE(macos(11.0)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(11.0)) @interface MRPlaybackQueue : NSObject { NSArray *_contentItems; } diff --git a/Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h b/Sources/PrivateMediaRemote/MRPlaybackQueueRequest.h similarity index 92% rename from Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h rename to Sources/PrivateMediaRemote/MRPlaybackQueueRequest.h index bdc1cc0..9827506 100644 --- a/Sources/PrivateMediaRemote/Classes/MRPlaybackQueueRequest.h +++ b/Sources/PrivateMediaRemote/MRPlaybackQueueRequest.h @@ -1,7 +1,7 @@ #ifndef PrivateMediaRemote_MRPlaybackQueueRequest_h #define PrivateMediaRemote_MRPlaybackQueueRequest_h -API_AVAILABLE(macos(10.15)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(10.15)) @interface MRPlaybackQueueRequest : NSObject { double _artworkHeight; double _artworkWidth; diff --git a/Sources/PrivateMediaRemote/Classes/MRPlayer.h b/Sources/PrivateMediaRemote/MRPlayer.h similarity index 87% rename from Sources/PrivateMediaRemote/Classes/MRPlayer.h rename to Sources/PrivateMediaRemote/MRPlayer.h index 2b6ccbb..e6fb6ac 100644 --- a/Sources/PrivateMediaRemote/Classes/MRPlayer.h +++ b/Sources/PrivateMediaRemote/MRPlayer.h @@ -1,7 +1,7 @@ #ifndef PrivateMediaRemote_MRPlayer_h #define PrivateMediaRemote_MRPlayer_h -API_AVAILABLE(macos(10.15)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(10.15)) @interface MRPlayer : NSObject { NSString *_displayName; NSString *_identifier; diff --git a/Sources/PrivateMediaRemote/Classes/MRPlayerPath.h b/Sources/PrivateMediaRemote/MRPlayerPath.h similarity index 76% rename from Sources/PrivateMediaRemote/Classes/MRPlayerPath.h rename to Sources/PrivateMediaRemote/MRPlayerPath.h index d6e86ca..ee4412e 100644 --- a/Sources/PrivateMediaRemote/Classes/MRPlayerPath.h +++ b/Sources/PrivateMediaRemote/MRPlayerPath.h @@ -1,11 +1,11 @@ #ifndef PrivateMediaRemote_MRPlayerPath_h #define PrivateMediaRemote_MRPlayerPath_h -#import "MROrigin.h" -#import "MRClient.h" -#import "MRPlayer.h" +#import +#import +#import -API_AVAILABLE(macos(10.15)) +API_AVAILABLE(ios(14), tvos(14), watchos(7), macos(10.15)) @interface MRPlayerPath : NSObject { MROrigin *_origin; MRClient *_client; diff --git a/Sources/PrivateMediaRemote/PrivateMediaRemote.h b/Sources/PrivateMediaRemote/PrivateMediaRemote.h index 9914a5a..65f73e0 100644 --- a/Sources/PrivateMediaRemote/PrivateMediaRemote.h +++ b/Sources/PrivateMediaRemote/PrivateMediaRemote.h @@ -3,20 +3,20 @@ #import -#import "Classes/_MRColorProtobuf.h" -#import "Classes/_MRNowPlayingClientProtobuf.h" -#import "Classes/MRClient.h" -#import "Classes/MRArtwork.h" -#import "Classes/MRContentItem.h" -#import "Classes/MRContentItemMetadata.h" -#import "Classes/MROrigin.h" -#import "Classes/MRPlaybackQueue.h" -#import "Classes/MRPlaybackQueueRequest.h" -#import "Classes/MRPlayer.h" -#import "Classes/MRPlayerPath.h" -#import "Constants.h" -#import "Enums.h" -#import "Functions.h" +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import FOUNDATION_EXPORT double MediaRemoteVersionNumber; diff --git a/Sources/PrivateMediaRemote/Classes/_MRColorProtobuf.h b/Sources/PrivateMediaRemote/_MRColorProtobuf.h similarity index 94% rename from Sources/PrivateMediaRemote/Classes/_MRColorProtobuf.h rename to Sources/PrivateMediaRemote/_MRColorProtobuf.h index 0b4e12e..d842eed 100644 --- a/Sources/PrivateMediaRemote/Classes/_MRColorProtobuf.h +++ b/Sources/PrivateMediaRemote/_MRColorProtobuf.h @@ -29,6 +29,8 @@ - (unsigned long long)hash; - (id)description; - (void)mergeFrom:(id)arg1; +- (void)writeTo:(id)arg1; +- (BOOL)readFrom:(id)arg1; - (void)copyTo:(id)arg1; @end diff --git a/Sources/PrivateMediaRemote/Classes/_MRNowPlayingClientProtobuf.h b/Sources/PrivateMediaRemote/_MRNowPlayingClientProtobuf.h similarity index 97% rename from Sources/PrivateMediaRemote/Classes/_MRNowPlayingClientProtobuf.h rename to Sources/PrivateMediaRemote/_MRNowPlayingClientProtobuf.h index 8b4c926..59015bf 100644 --- a/Sources/PrivateMediaRemote/Classes/_MRNowPlayingClientProtobuf.h +++ b/Sources/PrivateMediaRemote/_MRNowPlayingClientProtobuf.h @@ -3,7 +3,7 @@ #include -#include "_MRColorProtobuf.h" +#include @interface _MRNowPlayingClientProtobuf : PBCodable { NSString *_bundleIdentifier; diff --git a/Tests/Common.h b/Tests/Common.h index bc1e8e4..6b0d827 100644 --- a/Tests/Common.h +++ b/Tests/Common.h @@ -6,8 +6,8 @@ @import PrivateMediaRemote; #include "SetUp.h" -#include "GetClass.h" #include "Identifier.h" +#include "GetClass.h" #include "Interface.h" #include "TearDown.h" #include "TestClasses.h" diff --git a/Tests/GetClass.h b/Tests/GetClass.h index 3f24b21..b67764a 100644 --- a/Tests/GetClass.h +++ b/Tests/GetClass.h @@ -9,4 +9,8 @@ #define GetUnlinkableClass(CLASS) objc_getClass(#CLASS) +BOOL i(classNameIs)(NSObject *object, NSString *string) { + return [NSStringFromClass(object.class) isEqualToString:string]; +} + #endif /* GetClass_h */ diff --git a/Tests/Identifier.h b/Tests/Identifier.h index 792ea24..585e732 100644 --- a/Tests/Identifier.h +++ b/Tests/Identifier.h @@ -3,8 +3,10 @@ #ifdef LINKED_TESTS #define Identifier(IDENTIFIER) LINKED_##IDENTIFIER +#define i(IDENTIFIER) LINKED_##IDENTIFIER #elif defined(UNLINKED_TESTS) #define Identifier(IDENTIFIER) UNLINKED_##IDENTIFIER +#define i(IDENTIFIER) UNLINKED_##IDENTIFIER #endif #endif /* Identifier_h */ diff --git a/Tests/TestClasses.h b/Tests/TestClasses.h index 8b5f958..57da38b 100644 --- a/Tests/TestClasses.h +++ b/Tests/TestClasses.h @@ -2,32 +2,51 @@ #define TestClasses_h BOOL Identifier(isClassDefined)(Class classInstance, NSString *classString) { - return [NSStringFromClass(((NSObject *)[classInstance new]).class) isEqualToString:classString]; + return i(classNameIs)([classInstance new], classString); } #define IsClassDefined(CLASS) Identifier(isClassDefined)(GetClass(CLASS), @#CLASS) #define IsUnlinkableClassDefined(CLASS) Identifier(isClassDefined)(GetUnlinkableClass(CLASS), @#CLASS) #define TestClass(CLASS) XCTAssertTrue(IsClassDefined(CLASS)) +#define TestClassUnavailable(CLASS) XCTAssertNil(objc_getClass(#CLASS)) #define TestUnlinkableClass(CLASS) XCTAssertTrue(IsUnlinkableClassDefined(CLASS)) +void Identifier(testClasses)(void); void Identifier(testClasses)() { +#if __is_target_os(iOS) || __is_target_os(tvOS) || __is_target_os(watchOS) + TestUnlinkableClass(_MRColorProtobuf); + TestUnlinkableClass(_MRNowPlayingClientProtobuf); + TestUnlinkableClass(MRContentItem); + TestUnlinkableClass(MRContentItemMetadata); +#else TestClass(_MRColorProtobuf); TestClass(_MRNowPlayingClientProtobuf); TestClass(MRContentItem); TestClass(MRContentItemMetadata); +#endif - if (@available(macOS 10.15, *)) { + + if (@available(iOS 14, tvOS 14, watchOS 7, macOS 10.15, *)) { TestClass(MRClient); TestClass(MRArtwork); TestClass(MROrigin); TestClass(MRPlaybackQueueRequest); TestClass(MRPlayer); TestClass(MRPlayerPath); + } else { + TestClassUnavailable(MRClient); + TestClassUnavailable(MRArtwork); + TestClassUnavailable(MROrigin); + TestClassUnavailable(MRPlaybackQueueRequest); + TestClassUnavailable(MRPlayer); + TestClassUnavailable(MRPlayerPath); } - if (@available(macOS 11.0, *)) { + if (@available(iOS 15, tvOS 15, watchOS 8, macOS 11.0, *)) { TestClass(MRPlaybackQueue); + } else { + TestClassUnavailable(MRPlaybackQueue); } } diff --git a/Tests/TestFunctions.h b/Tests/TestFunctions.h index 55d0ac0..05af614 100644 --- a/Tests/TestFunctions.h +++ b/Tests/TestFunctions.h @@ -22,10 +22,10 @@ void Identifier(getNowPlayingClient)(Identifier(Tests) *self) { (*func)(dispatch_get_main_queue(), ^(id client) { XCTAssertNotNil(client, @"`client` is `nil` when calling `MRMediaRemoteGetNowPlayingClient`. Play some music for this test to pass."); - if (@available(macOS 10.15, *)) { - XCTAssertTrue([((NSObject *)client).className isEqualToString:@"MRClient"]); + if (@available(macOS 10.15, iOS 14, tvOS 14, watchOS 7, *)) { + XCTAssertTrue(i(classNameIs)(client, @"MRClient")); } else { - XCTAssertTrue([((NSObject *)client).className isEqualToString:@"_MRNowPlayingClientProtobuf"]); + XCTAssertTrue(i(classNameIs)(client, @"_MRNowPlayingClientProtobuf")); } [expectation fulfill]; @@ -48,10 +48,10 @@ void Identifier(requestNowPlayingPlaybackQueueForPlayerSync)(Identifier(Tests) * XCTAssertNotNil(queue, @"`queue` is `nil` when calling `MRMediaRemoteRequestNowPlayingPlaybackQueueForPlayerSync`. Play some music for this test to pass."); XCTAssertNil(error); - if (@available(macOS 11.0, *)) { - XCTAssertTrue([((NSObject *)queue).className isEqualToString:@"MRPlaybackQueue"]); + if (@available(iOS 15, tvOS 15, watchOS 8, macOS 11.0, *)) { + XCTAssertTrue(i(classNameIs)(queue, @"MRPlaybackQueue")); } else { - XCTAssertTrue([((NSObject *)queue).className isEqualToString:@"_MRPlaybackQueueProtobuf"]); + XCTAssertTrue(i(classNameIs)(queue, @"_MRPlaybackQueueProtobuf")); } [expectation fulfill]; diff --git a/Tests/TestSuperclasses.h b/Tests/TestSuperclasses.h index d100411..5a93d6b 100644 --- a/Tests/TestSuperclasses.h +++ b/Tests/TestSuperclasses.h @@ -11,7 +11,8 @@ BOOL Identifier(checkSuperclass)(Class classInstance, Class superclassInstance) #define TestSuperclass(CLASS, SUPERCLASS) XCTAssertTrue(CheckSuperclass(CLASS, SUPERCLASS)) #define TestUnlinkableSuperclass(CLASS, SUPERCLASS) XCTAssertTrue(CheckUnlinkableSuperclass(CLASS, SUPERCLASS)) -void Identifier(testSuperclasses)() { +void i(testSuperclasses)(void); +void i(testSuperclasses)() { TestUnlinkableSuperclass(_MRColorProtobuf, PBCodable); TestSuperclass(_MRNowPlayingClientProtobuf, PBCodable); } diff --git a/project.yml b/project.yml new file mode 100644 index 0000000..5b05ca2 --- /dev/null +++ b/project.yml @@ -0,0 +1,145 @@ +name: PrivateMediaRemote +projectReferences: + PrivateProtocolBuffer: + path: ProtocolBuffer/PrivateProtocolBuffer.xcodeproj +targetTemplates: + ios: + platform: iOS + deploymentTarget: "8.0" + tvos: + platform: tvOS + deploymentTarget: "9.0" + watchos: + platform: watchOS + deploymentTarget: "2.0" + macos: + platform: macOS + deploymentTarget: "10.12" + protocolbuffer: + type: framework + framework: + type: framework + dependencies: + - framework: MediaRemote.xcframework/${platform}/MediaRemote.framework + - target: PrivateProtocolBuffer/PrivateProtocolBuffer ${platform} + embed: false + sources: + - Sources + settings: + PRODUCT_BUNDLE_IDENTIFIER: private.mediaremote-${platform} + GENERATE_INFOPLIST_FILE: true + PRODUCT_MODULE_NAME: PrivateMediaRemote + PRODUCT_NAME: PrivateMediaRemote + testTargets: + - Linked tests ${platform} + - Unlinked tests ${platform} + tests: + type: bundle.unit-test + dependencies: + - target: PrivateMediaRemote ${platform} + embed: false + sources: + - path: Tests + excludes: + - Linked + - Unlinked + settings: + GENERATE_INFOPLIST_FILE: true + linked tests: + sources: + - Tests/Linked + dependencies: + - framework: MediaRemote.xcframework/${platform}/MediaRemote.framework + embed: false + - framework: ProtocolBuffer/ProtocolBuffer.xcframework/${platform}/ProtocolBuffer.framework + embed: false + settings: + PRODUCT_BUNDLE_IDENTIFIER: private.mediaremote-${platform}.linked-tests + GCC_PREPROCESSOR_DEFINITIONS: LINKED_TESTS + unlinked tests: + sources: + - Tests/Unlinked + settings: + PRODUCT_BUNDLE_IDENTIFIER: private.mediaremote-${platform}.unlinked-tests + GCC_PREPROCESSOR_DEFINITIONS: UNLINKED_TESTS +targets: + PrivateMediaRemote ios: + templates: + - ios + - framework + templateAttributes: + platform: ios + Linked tests ios: + templates: + - ios + - tests + - linked tests + templateAttributes: + platform: ios + Unlinked tests ios: + templates: + - ios + - tests + - unlinked tests + templateAttributes: + platform: ios + PrivateMediaRemote tvos: + templates: + - tvos + - framework + templateAttributes: + platform: tvos + Linked tests tvos: + templates: + - tvos + - tests + - linked tests + templateAttributes: + platform: tvos + Unlinked tests tvos: + templates: + - tvos + - tests + - unlinked tests + templateAttributes: + platform: tvos + PrivateMediaRemote watchos: + templates: + - watchos + - framework + templateAttributes: + platform: watchos + Linked tests watchos: + templates: + - watchos + - tests + - linked tests + templateAttributes: + platform: watchos + Unlinked tests watchos: + templates: + - watchos + - tests + - unlinked tests + templateAttributes: + platform: watchos + PrivateMediaRemote macos: + templates: + - macos + - framework + templateAttributes: + platform: macos + Linked tests macos: + templates: + - macos + - tests + - linked tests + templateAttributes: + platform: macos + Unlinked tests macos: + templates: + - macos + - tests + - unlinked tests + templateAttributes: + platform: macos