From 17bec2e2d7792a64609467921425e11362ff09c5 Mon Sep 17 00:00:00 2001 From: SanJiang Date: Tue, 12 Mar 2019 10:29:36 +0800 Subject: [PATCH] Update pods --- SJVideoPlayerProject/Podfile.lock | 154 ++-- .../SJVideoPlayerPreviewCollectionViewCell.h | 1 - .../SJVideoPlayer/SJVideoPlayerPreviewView.h | 1 - .../SJVideoPlayerPreviewCollectionViewCell.h | 1 - .../SJVideoPlayer/SJVideoPlayerPreviewView.h | 1 - .../Local Podspecs/SJVideoPlayer.podspec.json | 6 +- SJVideoPlayerProject/Pods/Manifest.lock | 154 ++-- .../Pods/Pods.xcodeproj/project.pbxproj | 639 ++++++++-------- .../Header/SJMediaPlaybackProtocol.h | 7 +- .../Header/SJPlayerGestureControlProtocol.h | 1 + .../Core/SJAVMediaPlayAsset.h | 28 +- .../Core/SJAVMediaPlayAsset.m | 141 ++-- .../SJAVMediaPlaybackController.m | 13 + .../SJBaseVideoPlayer/SJBaseVideoPlayer.h | 159 ++-- .../SJBaseVideoPlayer/SJBaseVideoPlayer.m | 722 +++++++++--------- .../Tool/SJPlayerGestureControl.m | 8 +- .../SJRouter/SJRouter/Core/SJRouteRequest.m | 17 +- .../Pods/SJRouter/SJRouter/SJRouter.m | 111 +-- .../UserInterfaceState.xcuserstate | Bin 637344 -> 637035 bytes 19 files changed, 1121 insertions(+), 1043 deletions(-) delete mode 120000 SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h delete mode 120000 SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewView.h delete mode 120000 SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h delete mode 120000 SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewView.h diff --git a/SJVideoPlayerProject/Podfile.lock b/SJVideoPlayerProject/Podfile.lock index cdd2575ca..96bdcc56d 100644 --- a/SJVideoPlayerProject/Podfile.lock +++ b/SJVideoPlayerProject/Podfile.lock @@ -2,65 +2,65 @@ PODS: - Masonry (1.1.0) - Reachability (3.2) - SJAttributesFactory (2.0.5) - - SJBaseVideoPlayer (2.1.6): + - SJBaseVideoPlayer (2.2.0): - Masonry - Reachability - - SJBaseVideoPlayer/Header (= 2.1.6) - - SJBaseVideoPlayer/Model (= 2.1.6) - - SJBaseVideoPlayer/SJAVMediaPlaybackController (= 2.1.6) - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (= 2.1.6) - - SJBaseVideoPlayer/SJPrompt (= 2.1.6) - - SJBaseVideoPlayer/SJRotationManager (= 2.1.6) - - SJBaseVideoPlayer/Tool (= 2.1.6) + - SJBaseVideoPlayer/Header (= 2.2.0) + - SJBaseVideoPlayer/Model (= 2.2.0) + - SJBaseVideoPlayer/SJAVMediaPlaybackController (= 2.2.0) + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (= 2.2.0) + - SJBaseVideoPlayer/SJPrompt (= 2.2.0) + - SJBaseVideoPlayer/SJRotationManager (= 2.2.0) + - SJBaseVideoPlayer/Tool (= 2.2.0) - SJObserverHelper - - SJBaseVideoPlayer/Header (2.1.6): + - SJBaseVideoPlayer/Header (2.2.0): - Masonry - Reachability - SJObserverHelper - - SJBaseVideoPlayer/Model (2.1.6): + - SJBaseVideoPlayer/Model (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJObserverHelper - - SJBaseVideoPlayer/SJAVMediaPlaybackController (2.1.6): + - SJBaseVideoPlayer/SJAVMediaPlaybackController (2.2.0): - Masonry - Reachability - - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (= 2.1.6) + - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (= 2.2.0) - SJBaseVideoPlayer/Tool - SJObserverHelper - - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (2.1.6): + - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Tool - SJObserverHelper - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (2.1.6): + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (= 2.1.6) - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (= 2.1.6) + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (= 2.2.0) + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (= 2.2.0) - SJObserverHelper - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (2.1.6): + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader - SJObserverHelper - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (2.1.6): + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJObserverHelper - - SJBaseVideoPlayer/SJPrompt (2.1.6): + - SJBaseVideoPlayer/SJPrompt (2.2.0): - Masonry - Reachability - SJObserverHelper - - SJBaseVideoPlayer/SJRotationManager (2.1.6): + - SJBaseVideoPlayer/SJRotationManager (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJObserverHelper - - SJBaseVideoPlayer/Tool (2.1.6): + - SJBaseVideoPlayer/Tool (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header @@ -71,128 +71,128 @@ PODS: - SJPlaybackListController (0.0.4): - SJPlaybackListController/Core (= 0.0.4) - SJPlaybackListController/Core (0.0.4) - - SJRouter (0.0.9): - - SJRouter/Core (= 0.0.9) - - SJRouter/Core (0.0.9) + - SJRouter (0.0.10): + - SJRouter/Core (= 0.0.10) + - SJRouter/Core (0.0.10) - SJScrollEntriesView (1.1.0): - Masonry - - SJVideoPlayer (2.4.3): + - SJVideoPlayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/Adapters (= 2.4.3) - - SJVideoPlayer/Common (= 2.4.3) - - SJVideoPlayer/Settings (= 2.4.3) - - SJVideoPlayer/SJEdgeControlLayer (= 2.4.3) - - SJVideoPlayer/SJFilmEditingControlLayer (= 2.4.3) - - SJVideoPlayer/SJLoadFailedControlLayer (= 2.4.3) - - SJVideoPlayer/SJLoadingView (= 2.4.3) - - SJVideoPlayer/SJMoreSettingControlLayer (= 2.4.3) - - SJVideoPlayer/SJNotReachableControlLayer (= 2.4.3) - - SJVideoPlayer/SJProgressSlider (= 2.4.3) - - SJVideoPlayer/Switcher (= 2.4.3) - - SJVideoPlayer/Adapters (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/Adapters (= 2.4.4) + - SJVideoPlayer/Common (= 2.4.4) + - SJVideoPlayer/Settings (= 2.4.4) + - SJVideoPlayer/SJEdgeControlLayer (= 2.4.4) + - SJVideoPlayer/SJFilmEditingControlLayer (= 2.4.4) + - SJVideoPlayer/SJLoadFailedControlLayer (= 2.4.4) + - SJVideoPlayer/SJLoadingView (= 2.4.4) + - SJVideoPlayer/SJMoreSettingControlLayer (= 2.4.4) + - SJVideoPlayer/SJNotReachableControlLayer (= 2.4.4) + - SJVideoPlayer/SJProgressSlider (= 2.4.4) + - SJVideoPlayer/Switcher (= 2.4.4) + - SJVideoPlayer/Adapters (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Common - - SJVideoPlayer/Common (2.4.3): + - SJVideoPlayer/Common (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/Settings (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/Settings (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader - - SJVideoPlayer/SJEdgeControlLayer (2.4.3): + - SJVideoPlayer/SJEdgeControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/Common - - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (= 2.4.3) - - SJVideoPlayer/SJEdgeControlLayer/View (= 2.4.3) + - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (= 2.4.4) + - SJVideoPlayer/SJEdgeControlLayer/View (= 2.4.4) - SJVideoPlayer/SJLoadingView - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (2.4.3): + - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/Common - SJVideoPlayer/SJLoadingView - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJEdgeControlLayer/View (2.4.3): + - SJVideoPlayer/SJEdgeControlLayer/View (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/Common - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader - SJVideoPlayer/SJLoadingView - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJFilmEditingControlLayer (2.4.3): + - SJVideoPlayer/SJFilmEditingControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - - SJVideoPlayer/SJFilmEditingControlLayer/Core (= 2.4.3) - - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (= 2.4.3) + - SJVideoPlayer/SJFilmEditingControlLayer/Core (= 2.4.4) + - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (= 2.4.4) - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJFilmEditingControlLayer/Core (2.4.3): + - SJVideoPlayer/SJFilmEditingControlLayer/Core (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (2.4.3): + - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJLoadFailedControlLayer (2.4.3): + - SJVideoPlayer/SJLoadFailedControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJNotReachableControlLayer - - SJVideoPlayer/SJLoadingView (2.4.3): + - SJVideoPlayer/SJLoadingView (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/SJMoreSettingControlLayer (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/SJMoreSettingControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer - - SJVideoPlayer/SJMoreSettingControlLayer/Core (= 2.4.3) - - SJVideoPlayer/SJMoreSettingControlLayer/Core (2.4.3): + - SJVideoPlayer/SJMoreSettingControlLayer/Core (= 2.4.4) + - SJVideoPlayer/SJMoreSettingControlLayer/Core (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer - - SJVideoPlayer/SJNotReachableControlLayer (2.4.3): + - SJVideoPlayer/SJNotReachableControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer - - SJVideoPlayer/SJProgressSlider (2.4.3): + - SJVideoPlayer/SJProgressSlider (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/Switcher (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/Switcher (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - YYText (1.0.7) DEPENDENCIES: @@ -228,13 +228,13 @@ SPEC CHECKSUMS: Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 SJAttributesFactory: d5b670fd0930928ac1c6fb0b06653f92fefd640c - SJBaseVideoPlayer: 85d042750c84bc115910e54313bd615164681b62 + SJBaseVideoPlayer: 253b1abb43822928d5abe2f04fa70b57c3c0572b SJFullscreenPopGesture: 94db6f970d864d53161d819916aed3f30b6a1442 SJObserverHelper: baf589280961aeda14acb812ac68f289b753027f SJPlaybackListController: bb150965596f46cc5542b37c05d8401601db4022 - SJRouter: 83d99661639b4be9e937e6167c830f9f8283f93f + SJRouter: e9a0246c2f1aaf6511cf15b2a67788246c08100c SJScrollEntriesView: 2388fec9dbb6ab639f8966de036394eeb753617d - SJVideoPlayer: 07880a152e0a1120da974d14265cf7ab217abb9e + SJVideoPlayer: c81b7074edd0e073ccfedd069eb67ac1121ebe53 YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 PODFILE CHECKSUM: 749a590b7694ec430a2273354db28d292a8d8a95 diff --git a/SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h b/SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h deleted file mode 120000 index efd1a9b32..000000000 --- a/SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerPreviewCollectionViewCell.h \ No newline at end of file diff --git a/SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewView.h b/SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewView.h deleted file mode 120000 index d91d53b8c..000000000 --- a/SJVideoPlayerProject/Pods/Headers/Private/SJVideoPlayer/SJVideoPlayerPreviewView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerPreviewView.h \ No newline at end of file diff --git a/SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h b/SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h deleted file mode 120000 index efd1a9b32..000000000 --- a/SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerPreviewCollectionViewCell.h \ No newline at end of file diff --git a/SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewView.h b/SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewView.h deleted file mode 120000 index d91d53b8c..000000000 --- a/SJVideoPlayerProject/Pods/Headers/Public/SJVideoPlayer/SJVideoPlayerPreviewView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerPreviewView.h \ No newline at end of file diff --git a/SJVideoPlayerProject/Pods/Local Podspecs/SJVideoPlayer.podspec.json b/SJVideoPlayerProject/Pods/Local Podspecs/SJVideoPlayer.podspec.json index a08dc7a67..748a3e72d 100644 --- a/SJVideoPlayerProject/Pods/Local Podspecs/SJVideoPlayer.podspec.json +++ b/SJVideoPlayerProject/Pods/Local Podspecs/SJVideoPlayer.podspec.json @@ -1,6 +1,6 @@ { "name": "SJVideoPlayer", - "version": "2.4.3", + "version": "2.4.4", "summary": "video player.", "description": "https://github.com/changsanjiang/SJVideoPlayer/blob/master/README.md", "homepage": "https://github.com/changsanjiang/SJVideoPlayer", @@ -16,7 +16,7 @@ }, "source": { "git": "https://github.com/changsanjiang/SJVideoPlayer.git", - "tag": "v2.4.3" + "tag": "v2.4.4" }, "requires_arc": true, "dependencies": { @@ -24,7 +24,7 @@ ], "SJBaseVideoPlayer": [ - "2.1.6" + ">= 2.2.0" ], "SJAttributesFactory": [ diff --git a/SJVideoPlayerProject/Pods/Manifest.lock b/SJVideoPlayerProject/Pods/Manifest.lock index cdd2575ca..96bdcc56d 100644 --- a/SJVideoPlayerProject/Pods/Manifest.lock +++ b/SJVideoPlayerProject/Pods/Manifest.lock @@ -2,65 +2,65 @@ PODS: - Masonry (1.1.0) - Reachability (3.2) - SJAttributesFactory (2.0.5) - - SJBaseVideoPlayer (2.1.6): + - SJBaseVideoPlayer (2.2.0): - Masonry - Reachability - - SJBaseVideoPlayer/Header (= 2.1.6) - - SJBaseVideoPlayer/Model (= 2.1.6) - - SJBaseVideoPlayer/SJAVMediaPlaybackController (= 2.1.6) - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (= 2.1.6) - - SJBaseVideoPlayer/SJPrompt (= 2.1.6) - - SJBaseVideoPlayer/SJRotationManager (= 2.1.6) - - SJBaseVideoPlayer/Tool (= 2.1.6) + - SJBaseVideoPlayer/Header (= 2.2.0) + - SJBaseVideoPlayer/Model (= 2.2.0) + - SJBaseVideoPlayer/SJAVMediaPlaybackController (= 2.2.0) + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (= 2.2.0) + - SJBaseVideoPlayer/SJPrompt (= 2.2.0) + - SJBaseVideoPlayer/SJRotationManager (= 2.2.0) + - SJBaseVideoPlayer/Tool (= 2.2.0) - SJObserverHelper - - SJBaseVideoPlayer/Header (2.1.6): + - SJBaseVideoPlayer/Header (2.2.0): - Masonry - Reachability - SJObserverHelper - - SJBaseVideoPlayer/Model (2.1.6): + - SJBaseVideoPlayer/Model (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJObserverHelper - - SJBaseVideoPlayer/SJAVMediaPlaybackController (2.1.6): + - SJBaseVideoPlayer/SJAVMediaPlaybackController (2.2.0): - Masonry - Reachability - - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (= 2.1.6) + - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (= 2.2.0) - SJBaseVideoPlayer/Tool - SJObserverHelper - - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (2.1.6): + - SJBaseVideoPlayer/SJAVMediaPlaybackController/Core (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Tool - SJObserverHelper - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (2.1.6): + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (= 2.1.6) - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (= 2.1.6) + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (= 2.2.0) + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (= 2.2.0) - SJObserverHelper - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (2.1.6): + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader - SJObserverHelper - - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (2.1.6): + - SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJObserverHelper - - SJBaseVideoPlayer/SJPrompt (2.1.6): + - SJBaseVideoPlayer/SJPrompt (2.2.0): - Masonry - Reachability - SJObserverHelper - - SJBaseVideoPlayer/SJRotationManager (2.1.6): + - SJBaseVideoPlayer/SJRotationManager (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header - SJObserverHelper - - SJBaseVideoPlayer/Tool (2.1.6): + - SJBaseVideoPlayer/Tool (2.2.0): - Masonry - Reachability - SJBaseVideoPlayer/Header @@ -71,128 +71,128 @@ PODS: - SJPlaybackListController (0.0.4): - SJPlaybackListController/Core (= 0.0.4) - SJPlaybackListController/Core (0.0.4) - - SJRouter (0.0.9): - - SJRouter/Core (= 0.0.9) - - SJRouter/Core (0.0.9) + - SJRouter (0.0.10): + - SJRouter/Core (= 0.0.10) + - SJRouter/Core (0.0.10) - SJScrollEntriesView (1.1.0): - Masonry - - SJVideoPlayer (2.4.3): + - SJVideoPlayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/Adapters (= 2.4.3) - - SJVideoPlayer/Common (= 2.4.3) - - SJVideoPlayer/Settings (= 2.4.3) - - SJVideoPlayer/SJEdgeControlLayer (= 2.4.3) - - SJVideoPlayer/SJFilmEditingControlLayer (= 2.4.3) - - SJVideoPlayer/SJLoadFailedControlLayer (= 2.4.3) - - SJVideoPlayer/SJLoadingView (= 2.4.3) - - SJVideoPlayer/SJMoreSettingControlLayer (= 2.4.3) - - SJVideoPlayer/SJNotReachableControlLayer (= 2.4.3) - - SJVideoPlayer/SJProgressSlider (= 2.4.3) - - SJVideoPlayer/Switcher (= 2.4.3) - - SJVideoPlayer/Adapters (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/Adapters (= 2.4.4) + - SJVideoPlayer/Common (= 2.4.4) + - SJVideoPlayer/Settings (= 2.4.4) + - SJVideoPlayer/SJEdgeControlLayer (= 2.4.4) + - SJVideoPlayer/SJFilmEditingControlLayer (= 2.4.4) + - SJVideoPlayer/SJLoadFailedControlLayer (= 2.4.4) + - SJVideoPlayer/SJLoadingView (= 2.4.4) + - SJVideoPlayer/SJMoreSettingControlLayer (= 2.4.4) + - SJVideoPlayer/SJNotReachableControlLayer (= 2.4.4) + - SJVideoPlayer/SJProgressSlider (= 2.4.4) + - SJVideoPlayer/Switcher (= 2.4.4) + - SJVideoPlayer/Adapters (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Common - - SJVideoPlayer/Common (2.4.3): + - SJVideoPlayer/Common (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/Settings (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/Settings (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader - - SJVideoPlayer/SJEdgeControlLayer (2.4.3): + - SJVideoPlayer/SJEdgeControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/Common - - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (= 2.4.3) - - SJVideoPlayer/SJEdgeControlLayer/View (= 2.4.3) + - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (= 2.4.4) + - SJVideoPlayer/SJEdgeControlLayer/View (= 2.4.4) - SJVideoPlayer/SJLoadingView - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (2.4.3): + - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/Common - SJVideoPlayer/SJLoadingView - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJEdgeControlLayer/View (2.4.3): + - SJVideoPlayer/SJEdgeControlLayer/View (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/Common - SJVideoPlayer/SJEdgeControlLayer/ResourceLoader - SJVideoPlayer/SJLoadingView - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJFilmEditingControlLayer (2.4.3): + - SJVideoPlayer/SJFilmEditingControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - - SJVideoPlayer/SJFilmEditingControlLayer/Core (= 2.4.3) - - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (= 2.4.3) + - SJVideoPlayer/SJFilmEditingControlLayer/Core (= 2.4.4) + - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (= 2.4.4) - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJFilmEditingControlLayer/Core (2.4.3): + - SJVideoPlayer/SJFilmEditingControlLayer/Core (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (2.4.3): + - SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/Adapters - SJVideoPlayer/SJProgressSlider - SJVideoPlayer/Switcher - - SJVideoPlayer/SJLoadFailedControlLayer (2.4.3): + - SJVideoPlayer/SJLoadFailedControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJNotReachableControlLayer - - SJVideoPlayer/SJLoadingView (2.4.3): + - SJVideoPlayer/SJLoadingView (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/SJMoreSettingControlLayer (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/SJMoreSettingControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer - - SJVideoPlayer/SJMoreSettingControlLayer/Core (= 2.4.3) - - SJVideoPlayer/SJMoreSettingControlLayer/Core (2.4.3): + - SJVideoPlayer/SJMoreSettingControlLayer/Core (= 2.4.4) + - SJVideoPlayer/SJMoreSettingControlLayer/Core (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer - - SJVideoPlayer/SJNotReachableControlLayer (2.4.3): + - SJVideoPlayer/SJNotReachableControlLayer (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - SJVideoPlayer/SJEdgeControlLayer - - SJVideoPlayer/SJProgressSlider (2.4.3): + - SJVideoPlayer/SJProgressSlider (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) - - SJVideoPlayer/Switcher (2.4.3): + - SJBaseVideoPlayer (>= 2.2.0) + - SJVideoPlayer/Switcher (2.4.4): - Masonry - SJAttributesFactory - - SJBaseVideoPlayer (= 2.1.6) + - SJBaseVideoPlayer (>= 2.2.0) - YYText (1.0.7) DEPENDENCIES: @@ -228,13 +228,13 @@ SPEC CHECKSUMS: Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 SJAttributesFactory: d5b670fd0930928ac1c6fb0b06653f92fefd640c - SJBaseVideoPlayer: 85d042750c84bc115910e54313bd615164681b62 + SJBaseVideoPlayer: 253b1abb43822928d5abe2f04fa70b57c3c0572b SJFullscreenPopGesture: 94db6f970d864d53161d819916aed3f30b6a1442 SJObserverHelper: baf589280961aeda14acb812ac68f289b753027f SJPlaybackListController: bb150965596f46cc5542b37c05d8401601db4022 - SJRouter: 83d99661639b4be9e937e6167c830f9f8283f93f + SJRouter: e9a0246c2f1aaf6511cf15b2a67788246c08100c SJScrollEntriesView: 2388fec9dbb6ab639f8966de036394eeb753617d - SJVideoPlayer: 07880a152e0a1120da974d14265cf7ab217abb9e + SJVideoPlayer: c81b7074edd0e073ccfedd069eb67ac1121ebe53 YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 PODFILE CHECKSUM: 749a590b7694ec430a2273354db28d292a8d8a95 diff --git a/SJVideoPlayerProject/Pods/Pods.xcodeproj/project.pbxproj b/SJVideoPlayerProject/Pods/Pods.xcodeproj/project.pbxproj index b10cfb467..b2d600343 100644 --- a/SJVideoPlayerProject/Pods/Pods.xcodeproj/project.pbxproj +++ b/SJVideoPlayerProject/Pods/Pods.xcodeproj/project.pbxproj @@ -3,81 +3,88 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 50; objects = { /* Begin PBXBuildFile section */ - 001D726B65BDD51B79D7C2E604AD905D /* SJFilmEditingButtonContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB48F6BB1FD69EA483D6F0670E98DD26 /* SJFilmEditingButtonContainerView.m */; }; - 0088A796550A965E1E8D640F235488F2 /* SJFilmEditingInGIFRecordingsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 134D5D070F230F7533EB10D00D4DEE35 /* SJFilmEditingInGIFRecordingsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 022C52E24EB95D66A7498FA7C007BA16 /* SJEdgeControlLayerAdapters.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B499ED5447180402A007A572624ABB1 /* SJEdgeControlLayerAdapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02638EE973E3328FF5BE57BD5794500A /* SJFilmEditingControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E640FB8E5A5BF153D7E2E5AA15CEB291 /* SJFilmEditingControlLayer.m */; }; 02C08C1670DEDE53105305010C839AF5 /* Reachability-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C7180C3CEA276000AA2120E406975E86 /* Reachability-dummy.m */; }; + 0573A37770F4990123C90B3A525F100A /* SJEdgeControlLayerAdapters.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B499ED5447180402A007A572624ABB1 /* SJEdgeControlLayerAdapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05776A1163E0800D8B6D1217C9D3874C /* SJEdgeControlLayerItemAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E2CA68795732248C13E9B4615AF8E1 /* SJEdgeControlLayerItemAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06164B1318F4B9DF62479FF88633184C /* SJVideoPlayerPreviewInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 71351FE99B8B7DC62353E5310E03DA4B /* SJVideoPlayerPreviewInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06A3CAE59CE6261C186FA9740D2ACE7B /* SJPlayerGestureControlProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ADA10863FC5896D5B276C0EEFDB8050 /* SJPlayerGestureControlProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06A4624C0490881FD7962E6F2768469F /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C44A2DD4E7876424D419B2F776D16E /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06A6F156ABB5B5B983325C41195CF527 /* SJMoreSettingControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 744C2E42ACACD4AD3030565F5C4A2B3F /* SJMoreSettingControlLayer.m */; }; + 0724F2AFC8C492C0BF51D0E60A47CC22 /* SJFilmEditingGenerateResultControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 89980AEF3BF70FEE48817D6F605EBD74 /* SJFilmEditingGenerateResultControlLayer.m */; }; 07308E262C82808292351EF2EA6F601F /* YYText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 750CB2E43E82DA9CE31E552C4BC38E61 /* YYText-dummy.m */; }; 075C2E2A49C4D08FD8F1E00FECDD5540 /* UINavigationController+SJVideoPlayerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = A663F26445E61C9E8AFDA903BD6E2F8C /* UINavigationController+SJVideoPlayerAdd.m */; }; + 082CDB74DD62F9E72231FBE973919BA3 /* SJFilmEditingSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EE0116A715BA59B910A1042BC137DA9 /* SJFilmEditingSettings.m */; }; 0A08A0838043B46E9238F7048C6E5B8B /* SJControlLayerAppearStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B8BDDE9D5B0D308551983E30DB7A2D9 /* SJControlLayerAppearStateManager.m */; }; - 0C5F97F71AE10C3FCBA6B9B32A662A95 /* SJVideoPlayerAnimationHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = CCA29388334CF0B8832BAC5FDF4D0F41 /* SJVideoPlayerAnimationHeader.m */; }; - 0D074B7F671361D1B928F458AF8FA790 /* SJButtonProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D239A9A911C9B5D4B64926A2DB1AF87F /* SJButtonProgressSlider.m */; }; + 0BA26C5CD18FDA6E3FAF922C58C857DF /* SJVideoPlayerURLAsset+SJControlAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E6C1DF53C46E8B29E979A9479B3826 /* SJVideoPlayerURLAsset+SJControlAdd.m */; }; + 0BACE4416FAF0E8FC7A87EBFFDD1F9B2 /* SJLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0998D6DA24C941E82C030A46D2A55B6C /* SJLoadingView.m */; }; 0D5AFA7015436C88EB126C402E95883A /* NSTimer+SJAssetAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F8C8642551A238383CC8138C0159AFE /* NSTimer+SJAssetAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E49EFF6EBF623C5C8D957A1AFE6E943 /* SJCommonProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A1E031A648C22F0637EF381ECDCC4C /* SJCommonProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0E64DB77CD026AECBDFB2F4E0210CEED /* NSAttributedString+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = 09C2904A2BEB7D3F2D6BB75B8CE0046E /* NSAttributedString+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0E8D2B9CA1E13D84FBCFA3563A34F701 /* SJControlLayerCarrier.m in Sources */ = {isa = PBXBuildFile; fileRef = C1C8AB52210E36EA7D6FC0484C2F2C00 /* SJControlLayerCarrier.m */; }; 0F1CEF2B08D18B900A16F3249C96DBEF /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0487CA846AFF95EC52CCBEE5DBC107 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F35071023ED5F46ADC5A354C7A2925E /* SJVideoPlayerFilmEditingCommonHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5973BD3085F80C5B6660CD085129A333 /* SJVideoPlayerFilmEditingCommonHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0F995C227C2F402B0B512C545C84B255 /* YYTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5D66937F38E668E3D2B187D147DF936 /* YYTextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0FD64C7695CF70B90241118C4B55C14D /* UIView+SJVideoPlayerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DD1457665743F7928E68AA630DDB941 /* UIView+SJVideoPlayerAdd.m */; }; - 1042A991F981A326D58EDBFB7C86B154 /* SJFilmEditingInGIFRecordingsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AAB875B6D6EBE942F080819B9C24122 /* SJFilmEditingInGIFRecordingsControlLayer.m */; }; - 1267B1DB59D6786E857C290D3F2E8DDD /* SJFilmEditingInVideoRecordingsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CA4DE5DEB4AF55DACC3BB636E3A23D1 /* SJFilmEditingInVideoRecordingsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12C852DFA25B14ED389A22980C844B95 /* UIView+SJControlAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CD43CEA7E0E9F8B5AE4D54256D3C337 /* UIView+SJControlAdd.m */; }; + 11CE9126A75E11D8B215A8C4292AFB7A /* SJFilmEditingResultShareItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ECB45C754C38CA04B5370DD07FC0583 /* SJFilmEditingResultShareItem.m */; }; + 122079C58671031665D964C0AA646531 /* SJFilmEditingLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FF95E42EABFB5549A748D2AE515FCA /* SJFilmEditingLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1336CACFA58DC2CFB4A4A62C2CBE11CA /* SJAVMediaPlayAssetSwitcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 263673952AC9F29478CE512F1610F832 /* SJAVMediaPlayAssetSwitcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1360103CCF54CC7F3FE55ACB7944B471 /* UINavigationController+SJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = E82AF166C9500139D884A396CD2530D2 /* UINavigationController+SJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13F8F160368880ECFA96E07938841568 /* SJVideoPlayerFilmEditingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = B6EB0192A2567818CCE5EE9509176D1E /* SJVideoPlayerFilmEditingParameters.m */; }; 147370B40CE853ADCC91F9C81FF5E5FA /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B24B729A2D89B73702A8D956EB823080 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14D04D76B69FE0B940223E5FFEC59A95 /* SJVideoPlayerMoreSettingsFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1452FDD91C94BC4826DC625CF8E804C2 /* SJVideoPlayerMoreSettingsFooterView.m */; }; + 155E341A32529F72CCF27A7332C43F0C /* SJVideoPlayerMoreSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E8B0F33D7E3E47398BE5787D2F880F /* SJVideoPlayerMoreSetting.m */; }; + 15B73B2F456BF8991187690CDCEA8D7A /* SJEdgeControlLayerSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = D41DA791EFBF0D5A0FE7623C18CA4895 /* SJEdgeControlLayerSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1636C283F7DB34411099B36D31918BF3 /* NSParagraphStyle+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = B0787C13C144B40E7EF94F6C2EAB78B6 /* NSParagraphStyle+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 163A8707D06E1C373CED85962FFAEA38 /* SJVideoPlayerSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F398675CD735F1A60D3FCAD899F0B0F /* SJVideoPlayerSettings.m */; }; + 1640737C119E4CF3C01C16179F4D9D00 /* SJMoreSettingControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BB033CD0DEA7CEDB9CE4B6FACCB8F155 /* SJMoreSettingControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16C6C2C06A4A07549E6A0E9FE789CF90 /* SJPlaybackListController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FACAB2E095811AE761ECA56F4A4753 /* SJPlaybackListController.m */; }; - 17CE6303669560481FD8E3332D92733C /* SJVideoPlayerMoreSettingSecondaryColCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 106F0C53E2F06446CC91321DC4DB949F /* SJVideoPlayerMoreSettingSecondaryColCell.m */; }; + 17A24564994B2175F60F4FCFD8665B32 /* SJFilmEditingInGIFRecordingsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 134D5D070F230F7533EB10D00D4DEE35 /* SJFilmEditingInGIFRecordingsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 18C065759418BED6B3B4DC5C5DFB76F1 /* YYLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = FA5547013CA303054540BA9FB4AC4D84 /* YYLabel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 19C744FF71C6F206821A9B5191A1F3E2 /* SJEdgeControlButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA5E368E64CB0A8C6A90D70E7D9A477 /* SJEdgeControlButtonItem.m */; }; 1A5AFB35F00E622F0FCC53E1CC3475DA /* NSObject+SJObserverHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5CDB77AF770D14824AFA2869EAE368 /* NSObject+SJObserverHelper.m */; }; - 1C8F90B8085E03206452182C98792014 /* SJVideoPlayerMoreSettingsSlidersView.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CC997372EFE4DD71845598B376C8A3 /* SJVideoPlayerMoreSettingsSlidersView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1CF717F40FE51BBE3C40D6BE29AE8C95 /* SJEdgeControlLayerLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = E19F0AC84D52201943222EB89C440509 /* SJEdgeControlLayerLoader.m */; }; 1D12FE6ABBFFDECF65CA15759AD0E411 /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E4564FE3D9C97A382A1F14E41ACFCC5 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F1561561B512452EA23CF15D3258664 /* SJLoadFailedControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C8F607A4601EC184F0AA2E6908D0CA /* SJLoadFailedControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 202EFD3BE1159EBFC730E0DC7258C121 /* SJFilmEditingSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EE0116A715BA59B910A1042BC137DA9 /* SJFilmEditingSettings.m */; }; - 23194E77E44F0E14BA9EF19E8DE7714E /* SJFilmEditingGenerateResultControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 89980AEF3BF70FEE48817D6F605EBD74 /* SJFilmEditingGenerateResultControlLayer.m */; }; + 1F8CFF7430FE110AF4A04FF145572953 /* SJVideoPlayerMoreSettingsSlidersView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3808E4199FEC35B6D8C800FF9D1AFC79 /* SJVideoPlayerMoreSettingsSlidersView.m */; }; + 21E599F5DBAED63495923F12A9A5492E /* SJEdgeControlLayerSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 0567B884CE315C5D0E5380318795F884 /* SJEdgeControlLayerSettings.m */; }; + 227E58C232406B5F16E61AA97D874124 /* SJFilmEditingResultShareItemsContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FB7851A7CC1AF3068242A92DB4DBF61 /* SJFilmEditingResultShareItemsContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 245C3C2201F121E873D9F09F0844C97B /* UIView+YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = E4C48A8DB956AD8802874666145549CD /* UIView+YYText.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 247066F92317E075B46F274F8F37AFD4 /* SJControlLayerSwitcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E51A50D611F3F862EA347677982B7D /* SJControlLayerSwitcher.m */; }; 24F67F67B66D71384E9B66CF81AF84B3 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF46BF2DD76607158968FF594813F1F /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25C333D28427F52994E7036FE2AB2690 /* SJFitOnScreenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 17647E4940967D8CBFDA87DA469F7A3F /* SJFitOnScreenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 261D38753FC1D8C3CF942492FE617356 /* SJFilmEditingVideoCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9544B4BA0D5411A5443407AF3D14E61 /* SJFilmEditingVideoCountDownView.m */; }; 280BD19D2A7EFF59AA357AE8BEC9B616 /* SJVideoPlayerPresentView.h in Headers */ = {isa = PBXBuildFile; fileRef = EF6E29FBC9C62A32AAA654D95706DAFF /* SJVideoPlayerPresentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 285FF57F0035FBC4D22163BF88CD192B /* UITabBarController+SJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AB00E0DA09170A8C06A6D46DFAD2FF /* UITabBarController+SJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; 29214D8D2E69809E66F0C8A98A36BCCE /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CFD0AB437C7A810F34283DA71F723FF /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 293A79CB92AB12E73B14EE53BCCB9936 /* YYTextMagnifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D4435FE47EE8ED703742F7BC8DF4B3CB /* YYTextMagnifier.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2A8FEAE41FFFB431B84038ED6F6FE84F /* SJFilmEditingButtonContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB48F6BB1FD69EA483D6F0670E98DD26 /* SJFilmEditingButtonContainerView.m */; }; + 2B781FBCAE1EE1ED038429037AF4B487 /* SJVideoPlayerControlMaskView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40BCFB28985D4520E610E752C85D63DE /* SJVideoPlayerControlMaskView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2BB5B5B16FD8C5D15125A98814D36ADC /* SJFullscreenPopGesture-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BF9A9D904686319967A9B443202FB13B /* SJFullscreenPopGesture-dummy.m */; }; - 2E75F25F75ACACBDD4FB8F421A0695D9 /* SJFilmEditingLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C5A84A8C8BDFD9970E6B4389EFC41F06 /* SJFilmEditingLoader.m */; }; 2EA1111E6F48BEDA814733B8C6B17776 /* YYTextAsyncLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C304D7B6EBC88F29F6249D567498105D /* YYTextAsyncLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F7F45ADFAE407F0FCC0BE19006E8DFF /* SJVideoPlayerMoreSettingsSecondaryHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 29F0588EFACE80F0C1B8B7B48A1AE153 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3025D2991E8DF1041D6ADAA49A63A5CE /* SJSnapshotRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B3C1E241F833492793903A8BD655FBB /* SJSnapshotRecorder.m */; }; 308A79218569EA26BDB0092A39F11AAC /* YYTextArchiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 34563D32EE7A22F54CF440D169D078C7 /* YYTextArchiver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3130BC1F1C747D3EDD95F5D414CDDE0B /* SJBaseVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 16EAE088682AD891A426DA00ED2A797A /* SJBaseVideoPlayer.m */; }; 31D63A5DE0C49C91AEFC42202DE4D38A /* SJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = DDD0C729ED94C145313202E01C61A638 /* SJReachability.m */; }; 32D85C665C99E46DDC3260C9FD9FC521 /* SJDeviceVolumeAndBrightnessManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B0CA6EC56F04D0E809AE8D87E0038B9 /* SJDeviceVolumeAndBrightnessManager.m */; }; - 33FB9AEE1D00EA52AF5383287E493E3E /* SJVideoPlayerFilmEditingParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = E6F7F5B1E69D5D3A2E7791FFA6CF474B /* SJVideoPlayerFilmEditingParameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33668BF6AB7366D04DC4480DDFD667BF /* SJFilmEditingVideoCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9544B4BA0D5411A5443407AF3D14E61 /* SJFilmEditingVideoCountDownView.m */; }; + 34171179F946D4DF3825CD81CCDDB2CC /* SJButtonItemCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F0D68A462CB579B75E6A9F597C85803 /* SJButtonItemCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 341C57BF0E255BB93D8CB9BA2045DD6F /* SJCommonProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5A25844C68C5CFDC5E1E6B3D580CB4 /* SJCommonProgressSlider.m */; }; 3444CE7E7BCCABCD3139601071E196BD /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 027284AEE7B6F1C5187404DFCE393DE6 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 346A6CCA2612ED2B0444DCCCE67D17C3 /* SJFilmEditingGIFCountDownView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E4BC25BF66373B6292559957E61C135 /* SJFilmEditingGIFCountDownView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 350ED4953C6E1552CEA0983A2DB6CE65 /* SJFilmEditingInVideoRecordingsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CA4DE5DEB4AF55DACC3BB636E3A23D1 /* SJFilmEditingInVideoRecordingsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 351C02985B207DE9D89F53CE8508087D /* SJRouter.h in Headers */ = {isa = PBXBuildFile; fileRef = B93503B57F95B8F6A587AC17EF850B71 /* SJRouter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3604E5F5BFC3182446D9E3B5322D6A11 /* SJPromptConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 32880696021F92F024C6267342EB0AEA /* SJPromptConfig.m */; }; + 366C5D489DEFC6D990F21F25EE9935D0 /* SJEdgeControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 21E98900AEFBFBDAA0557B5A169A6C71 /* SJEdgeControlLayer.m */; }; 368B591AC704518081D1613CCA83BA71 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEDA52823D83EEBB7C88EA0101F4539 /* MASConstraintMaker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3698A6464847DACCC91E78FC6DB7DB65 /* YYTextAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 9777CFF168DEA40479284EAF0A818AD3 /* YYTextAttribute.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B116F73D3F74FB3385D6CA89CA81AEF /* SJVideoPlayerFilmEditingConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F06D3A6D41A494E114D59E0E050D990 /* SJVideoPlayerFilmEditingConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3B8D62D7D6EA31DD01F4D234D50A5E1F /* SJRotationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BF73127BEE6B9106E46C911C4B01299D /* SJRotationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C9B5EE61863B9D264BAE9758C1B6CA2 /* SJNotReachableControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D852BED10D18C82B05B185B696572F /* SJNotReachableControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3CA202D6100497639F1A3DAE10D67934 /* SJVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2121A38027ABD0BC37670FB5995CFA66 /* SJVideoPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CB39956CABAB86995FB9508E3581479 /* SJVideoPlayerFilmEditingConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C1DFC33067CA6311657D17948FD7B0 /* SJVideoPlayerFilmEditingConfig.m */; }; 3CCB9D567E53744467CBE69301FF45BA /* SJScreenshotTransitionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 887599119771CDD0C4F5F1AC2B18B7FB /* SJScreenshotTransitionMode.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3E982F552CA41284287D2BB5D376F186 /* YYTextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = 500EF476BD864391DADB859535FE102D /* YYTextInput.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3EB4781492209BA0F65D2C21866C79DF /* SJVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B58A94043B5119615A8CAA219308273 /* SJVideoPlayer.m */; }; - 3FB05026F146179459C8048E80A1C061 /* SJVideoPlayerMoreSettingsView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5408F0BA4BBA68FEB1B883F3B3C4CD6A /* SJVideoPlayerMoreSettingsView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3FDC57686512094CEED573858196B604 /* SJLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 89AE34871F46BEE587E04D5A5DF7C53F /* SJLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3FE31457C546B49AF39CA12235E99492 /* SJNotReachableControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B909600C5207B959ADC0E9079004DF54 /* SJNotReachableControlLayer.m */; }; 3FFF86920C54EEC16A18CE270EAC709A /* SJBorderLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = E6DAA5747EFD1F39CB323A35BABAA789 /* SJBorderLineView.m */; }; + 4077CC684FE7B02EA5EA6223DE0B2227 /* SJVideoPlayerMoreSettingSecondaryView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E3FDFA4B4AF72E033F86CC60DBF7A5A /* SJVideoPlayerMoreSettingSecondaryView.m */; }; 4088027F2B539CA963EBBFD8527878EC /* YYTextDebugOption.m in Sources */ = {isa = PBXBuildFile; fileRef = F16B0D9F3886826257178FE0F487F338 /* YYTextDebugOption.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4089CBD08EF7F7362D95DF412E4F5995 /* SJVideoPlayerFilmEditingConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F06D3A6D41A494E114D59E0E050D990 /* SJVideoPlayerFilmEditingConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 414856C5F89153962D4AC41647EA510E /* YYTextRunDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 63BBF7D46CEF9806EBB8FA75DBBF6186 /* YYTextRunDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; 41526930881701DB7388E5CBACF22371 /* YYTextWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 77463BB637D308D5619472C0827891F2 /* YYTextWeakProxy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 42597F32DD1D25F4C9607FC3B14D6EBA /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = F30E2793871A017941B695015BD47C02 /* MASViewConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -85,161 +92,161 @@ 4327B5C7544452B54BD7127EB0219C0A /* YYTextAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FDCE949453B70046267768A6DCC70C2 /* YYTextAttribute.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 438FAF17412EA011B66B9F451AC70C20 /* YYTextDebugOption.h in Headers */ = {isa = PBXBuildFile; fileRef = AC64DFF813BE85028F4A644FAC9F27F2 /* YYTextDebugOption.h */; settings = {ATTRIBUTES = (Project, ); }; }; 46273B549BC8A633D54F520C7B96E0FC /* SJVideoPlayerURLAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 4809B63EDEC8A321EB36756CAB31C2D6 /* SJVideoPlayerURLAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46C46DE602FED7AA70E13BF9E91B2471 /* SJVideoPlayerURLAsset+SJControlAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F860A72DEB140D3F4AED0189C2B0CF /* SJVideoPlayerURLAsset+SJControlAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; 473BCF8BEF58FDD1F0FCC4B3E76576C3 /* SJMediaPlaybackProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ABB3B3F3C90373848A8866A9C68ECFD /* SJMediaPlaybackProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47FB8DFFACB4452DA9026185EF2F4C74 /* SJFilmEditingStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E186CB9C684EFFFDB37AA9450FA6EF /* SJFilmEditingStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4862394844E80B552D73DBBAC512520E /* SJVideoPlayerAnimationHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 373520123A54C801553CDFE0843FE7E8 /* SJVideoPlayerAnimationHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 48AE12649C4A8A04648161F1415DA831 /* YYTextKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B552D164F7DA2B7DEF67A5278DABDE3 /* YYTextKeyboardManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 492FAA09D85272E3E35378885794AD65 /* SJFilmEditingCommonViewLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 55D900FE91E5AE24072AA97E3877B66C /* SJFilmEditingCommonViewLayer.m */; }; 49FA4093FB7CD23670E8B14E52248AC9 /* SJAVMediaPresentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3C01EEF27B3D7DDAB078B3D34A2736 /* SJAVMediaPresentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4AC3103969AFD74BAA55EE7112471467 /* SJDeviceVolumeAndBrightnessManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 853F88F40C2DA2E1E31B7567BE0314A9 /* SJDeviceVolumeAndBrightnessManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4B9EF784CACE4EE51B89BD4F84D1CC11 /* SJPlayerAutoplayConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D328E75740645E6A61EFB6CDCDB58EB /* SJPlayerAutoplayConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C5B1C38042B17D4949A49EC7F07F2A2 /* SJNotReachableControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D852BED10D18C82B05B185B696572F /* SJNotReachableControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4CD0196277C8623D4A171B51F051F12F /* SJRotationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B493CFB736F082505F93E5ED1D8A20D7 /* SJRotationManager.m */; }; 4E3051DB632157E6DC111BDF69749D9C /* SJRouteRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 4602D7800066CAE551712FCD167BC612 /* SJRouteRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E4073772EC0F22EA37C6EA376971076 /* SJFilmEditingSaveResultToAlbumHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F33B6503DCE8363BF68EF43F76FE9E8 /* SJFilmEditingSaveResultToAlbumHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4F2AC44C99564C5674B0C2A4E9BABEA6 /* SJModalViewControlllerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CB03BB4BE97C774AAE71AA0B6F895A8 /* SJModalViewControlllerManager.m */; }; 4F52A8DB9DB0AA3D7813E40E0EEC5DC5 /* SJObserverHelper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D1772DEB466160389AD5D9ED1CDF1D12 /* SJObserverHelper-dummy.m */; }; - 51BD921A3E68EC1E827255C35584920D /* SJFilmEditingBackButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C6CDADB5EA27AB9B3F0E1DC2B8103998 /* SJFilmEditingBackButton.m */; }; + 50EA9C4954F125DB477B0C07EE133AC8 /* SJVideoPlayerMoreSettingSecondaryColCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 106F0C53E2F06446CC91321DC4DB949F /* SJVideoPlayerMoreSettingSecondaryColCell.m */; }; 52AE2B1608C8E1F26E141FC56F53EC57 /* SJAttributesFactory-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FFC2DDDCBBD49D4D45180CB0EE3C3DC /* SJAttributesFactory-dummy.m */; }; + 52BA1756EC36FF00AAC9420D47858730 /* SJVideoPlayerMoreSettingsColCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE86D7588AAAD6D4AAF0F8B945BABFD /* SJVideoPlayerMoreSettingsColCell.m */; }; 52E2830B4654AC7B32F00CE2CD88FC78 /* YYTextKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C27401E5D66583B1D90DCAC9F5CD78 /* YYTextKeyboardManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 530F0A05EE584D604D7703D8EFDDAE8A /* UIView+SJVideoPlayerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2658BBFBC5892F6CE60A16330D74BAD2 /* UIView+SJVideoPlayerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; 536B9FDB0EE340F1DDD0B8C325437FC8 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD596B9FC2C6AC710EC7087C1DD467C /* Reachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; 53C1C4F05EECF2A6E877F6E730994970 /* YYTextArchiver.m in Sources */ = {isa = PBXBuildFile; fileRef = 93BA93E6B978A0BF6B715F98DCF1AC07 /* YYTextArchiver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 53DF0DD1A1A06F1ADD05E5D8DF7E056B /* SJCommonProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A1E031A648C22F0637EF381ECDCC4C /* SJCommonProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54676B72A909F38BCB61817113A1FA1E /* SJFilmEditingCommonViewLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 55D900FE91E5AE24072AA97E3877B66C /* SJFilmEditingCommonViewLayer.m */; }; - 562408ADFF426D6DD058B3D45A3D8877 /* SJControlLayerCarrier.h in Headers */ = {isa = PBXBuildFile; fileRef = 495041A8438E1EAD1FAC570B8B4C82B9 /* SJControlLayerCarrier.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55131929436DACBD5CAC2C0F74802A17 /* SJFilmEditingResultShareItemsContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AEF54ACD1E98323114E10E1866ACFA65 /* SJFilmEditingResultShareItemsContainerView.m */; }; 562E1863633A7DB87B842959D431C8A1 /* SJModalViewControlllerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 29460341F371B59DF0A3D77E1BE27F69 /* SJModalViewControlllerManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 569CC1E71ACA63F98EFAF06095E66A95 /* SJFilmEditingResultShareItemsContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AEF54ACD1E98323114E10E1866ACFA65 /* SJFilmEditingResultShareItemsContainerView.m */; }; 57FF8272B46144B9E4E955CE6786DC74 /* YYTextUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D51CC9F361B44C5832AFD64B00221EE /* YYTextUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 583E79B5FFA0115981CD9747592CEE0E /* SJFilmEditingButtonContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA6D1DAD2ABDBA1DB59914B577F1678 /* SJFilmEditingButtonContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 598F2FDC98076A33A8BF63F9226EC9F0 /* SJNetworkStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6330EF2D90C5E5EE6955280F53998A /* SJNetworkStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A4D573CDBF5BCA78183B58474FC6A56 /* SJFilmEditingInGIFRecordingsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AAB875B6D6EBE942F080819B9C24122 /* SJFilmEditingInGIFRecordingsControlLayer.m */; }; + 5A5A4AF2A4DBF6187D8089952E517A02 /* SJVideoPlayerMoreSetting+Exe.h in Headers */ = {isa = PBXBuildFile; fileRef = D20C31D0E2504E6CE3ABB47215311FA2 /* SJVideoPlayerMoreSetting+Exe.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5A9EB47CC15324006177FF14B667E212 /* SJIsAppeared.m in Sources */ = {isa = PBXBuildFile; fileRef = 125F3590DE1A6FD17A243571C6B86721 /* SJIsAppeared.m */; }; 5AE5E58018A891E2A5E6C8392169B565 /* SJFlipTransitionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD59B376FB596E7F9C8FCA6C27175273 /* SJFlipTransitionManager.m */; }; - 5B6B9881A2A5D3CDBE8AF61D7F900F40 /* SJButtonProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = AFAA3B8DDC9D0E6A7F6EAC8E40D31C36 /* SJButtonProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B66A666B1F709F317B6021C97D1D035 /* SJEdgeControlButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA5E368E64CB0A8C6A90D70E7D9A477 /* SJEdgeControlButtonItem.m */; }; 5C3F7F1DA8A7BA3AF17933A0F66BBFB7 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C16283AF9D9394CF15BEDFFA3046971 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m */; }; + 5C6A34BBE8E0EC884295692CFB3FE405 /* SJFilmEditingCommonViewLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BE83DEB78C32535F51E6195895454683 /* SJFilmEditingCommonViewLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CA3ECA2FEED445BA2CE50B9443F4835 /* SJVideoPlayerAnimationHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 373520123A54C801553CDFE0843FE7E8 /* SJVideoPlayerAnimationHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5CF956E0EB7C2A71BC4470E33F0F3ABF /* SJPlayerGestureControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A31359099EDEABEE0A843C43ED2026C /* SJPlayerGestureControl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D68FBB6791FF7CF4AC9F09CCDB0BDFD /* SJFilmEditingGIFCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4A61B8B19D1AAF7B5ADA04AD3727A04 /* SJFilmEditingGIFCountDownView.m */; }; + 5D1934EE08419B2FB7E85C6077CCF0A2 /* SJVideoPlayerMoreSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 13594DDBEBCD6BE06EB95E75CD69FE7D /* SJVideoPlayerMoreSetting.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5E44F7CFDA34CB0B1F1A65A19641AC7D /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FB9A5DA4AA8405660DA95D117E398B3 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5EA179AF66373C86365D780A06877929 /* SJFilmEditingSaveResultToAlbumHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4537B114BC7818A7DA6CAF4E881E7C27 /* SJFilmEditingSaveResultToAlbumHandler.m */; }; - 5F64B4D783A434CD426511FC6B27ECC7 /* SJProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E82ECB8BD5381F99BF1091B7CEABC1 /* SJProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F941219CF18B41A854C3B6D575DEF78 /* SJFilmEditingGenerateResultControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E66D682ADB9FD976E096D44638708EEF /* SJFilmEditingGenerateResultControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FD3FBB286823C395DD2400F47BFC976 /* SJVideoPlayerDraggingProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DEC99C43EF4C5EA6ED4F5CAA42C7035 /* SJVideoPlayerDraggingProgressView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F5FE527BBD97E9043700A3BF815A8BA /* SJFilmEditingResultShareItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E6CE97E8A320D21D916D428CB2D7FE4F /* SJFilmEditingResultShareItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6080B014613D93501700DDD7D396F465 /* SJPlaybackListController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FBC9567315D01A68482B0C74D570EF2 /* SJPlaybackListController-dummy.m */; }; - 608EE96C06A1EBDFC6435CB5B4E40894 /* UIView+SJControlAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 83EEAF6D3C3F0AF406DA3BCF2F559DA2 /* UIView+SJControlAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62C9E13EB29EC65040BD4D85A887953D /* SJLightweightTopItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 05832C37EA30D38B854477DE27EDB072 /* SJLightweightTopItem.m */; }; + 6191EAED1023EDB1D411B93CF18001A3 /* SJFilmEditingInVideoRecordingsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = CBBF1C4D99EB51F583850728AECBC17F /* SJFilmEditingInVideoRecordingsControlLayer.m */; }; + 62AA45429183F3790F7F235D0A5CE69B /* SJVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2121A38027ABD0BC37670FB5995CFA66 /* SJVideoPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62C876C3A2B517BE8C198C0864CEB8FF /* SJMoreSettingsSlidersViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = DDFCEFEE44D4C93A838CDC0D94029198 /* SJMoreSettingsSlidersViewModel.m */; }; 62ED0D1B1D2D5EF2225776A9C2BAF4DA /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = E784E6EBAFF2306ECA66CDAB96B45C28 /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Project, ); }; }; 631EE8765DAD3C2F3113D4596400BE4F /* YYTextEffectWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 9473556847F723119DD71ED22F5AA5EE /* YYTextEffectWindow.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 636DC798A7658D12950A80F0083B27AC /* SJPromptConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = B4926BFF6809B26E3FF48F346A308E95 /* SJPromptConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63842A47FB1471FBF5B0E0D16ADEB847 /* SJFilmEditingVideoCountDownView.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB358C1D290B51A9DFCA79234EC37E4 /* SJFilmEditingVideoCountDownView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 646746BD11005E7B364AD4249FA6C9DB /* SJFitOnScreenManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 21770077169353FACB8405AAFAD2BDB5 /* SJFitOnScreenManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64AA4C014D8F9916FA809FEE25E12AD7 /* SJButtonProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = AFAA3B8DDC9D0E6A7F6EAC8E40D31C36 /* SJButtonProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; 65337A3C785097A7A6D5051D71493C9F /* SJPrompt.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DC8957007686EB0067E65A948F654E1 /* SJPrompt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 66C3FD438EF4B4F5A7C79F51AB7127C5 /* SJBaseVideoPlayer+PlayStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = D2438C3F4C551CE259D6A61F24AC6088 /* SJBaseVideoPlayer+PlayStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; 66DF013E071CC0716F1C4DA687AE884A /* SJDeviceVolumeAndBrightnessManagerResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = A7505F5993F2A264EC60F41ABEBC9172 /* SJDeviceVolumeAndBrightnessManagerResourceLoader.m */; }; - 6737F18D99B8CE6AFBADF20A15EC2DB6 /* SJProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 620AADFC4E58111446790C037FCB9A6E /* SJProgressSlider.m */; }; - 67F3FD5537461560EA1A8CAC3266B6F9 /* SJFilmEditingResultShareItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ECB45C754C38CA04B5370DD07FC0583 /* SJFilmEditingResultShareItem.m */; }; + 6930F14C54497F7A35C32D5D82A77B6F /* SJLightweightTopItem.h in Headers */ = {isa = PBXBuildFile; fileRef = A0DBFC30AEE57B762037F9BF20E54ECC /* SJLightweightTopItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A6553690D662F0F54393709F881B7C6 /* SJProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E82ECB8BD5381F99BF1091B7CEABC1 /* SJProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A732B084C8E27907B67C2FB4B80E1A2 /* SJVideoPlayerFilmEditingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = B6EB0192A2567818CCE5EE9509176D1E /* SJVideoPlayerFilmEditingParameters.m */; }; 6B7357D8151DA5C7542D2FAC29F5933A /* SJPlayModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D74CE6A2A08775FA01356959B9A0A74 /* SJPlayModel.m */; }; + 6B79B36F8B9EEAED36BB0F6058588E30 /* SJFilmEditingStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 37E186CB9C684EFFFDB37AA9450FA6EF /* SJFilmEditingStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6C5197053ABEFABA3719648F8D7B0BC1 /* SJScrollEntriesView.h in Headers */ = {isa = PBXBuildFile; fileRef = A635803C74E9774405642AF7B2C3FDF5 /* SJScrollEntriesView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6CC05329993EF0C9D5F645F4371519F3 /* UIPasteboard+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = B9ADC46A1753629CB23D44C8FC4B7DB8 /* UIPasteboard+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6CDBF050AC3B0ABEE7438F5D46111A9E /* YYTextMagnifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 3524E358FD4E9454355B4397990ECC67 /* YYTextMagnifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6DE40DE0D89ADB63DCE9C4E68EF9C001 /* SJFilmEditingGIFCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4A61B8B19D1AAF7B5ADA04AD3727A04 /* SJFilmEditingGIFCountDownView.m */; }; 6E8C9F671E8E1A5DB202AC85B3270E38 /* SJDeviceVolumeAndBrightnessManagerResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = A4B456B12A8CE7A603B8033D4781F180 /* SJDeviceVolumeAndBrightnessManagerResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E9EBE44EEBB22307D47E8ADF2EC598A /* UIView+SJAnimationAdded.h in Headers */ = {isa = PBXBuildFile; fileRef = F40F05E5D54B8C8AE445F59AE9B22F19 /* UIView+SJAnimationAdded.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6F56E0920C5CC42F5BDE1F8EF87C461C /* YYTextUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = FB42C223261B3C84E1D28BCF299A6677 /* YYTextUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6F6C4D98DD4DACCA068AB4386C0C0BF8 /* SJFlipTransitionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 658ABFEED4BB4ADEB2CE58A17A182034 /* SJFlipTransitionManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FF3D853727F0F02EC8BD7811AB50F22 /* SJControlLayerSwitcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E51A50D611F3F862EA347677982B7D /* SJControlLayerSwitcher.m */; }; 700798448D163DEDC5F496A7861D158A /* SJVideoPlayerRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A065544A0FBEB54ACE30867CFE95AC9 /* SJVideoPlayerRegistrar.m */; }; - 70B5F46F4856A9C1D02D9CCCE7BD8D68 /* SJVideoPlayerControlMaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = E6C8B52460C7BA520CA758D2A21B6685 /* SJVideoPlayerControlMaskView.m */; }; 71138B7F5F6F75065259DCA99D4420EB /* SJAVMediaPresentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 72154112B5AA581BED63E8310AFD1429 /* SJAVMediaPresentView.m */; }; - 73395E6D3EDF24C949714EDBAE338CBE /* SJFilmEditingCommonViewLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BE83DEB78C32535F51E6195895454683 /* SJFilmEditingCommonViewLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72F3CB34F34BCBF9A97436CB754FAC6B /* SJVideoPlayerMoreSettingsColCell.h in Headers */ = {isa = PBXBuildFile; fileRef = FC56B96DC38B2AE5886363E05A8E3623 /* SJVideoPlayerMoreSettingsColCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7309624A7D7F96375FB4F98D72A84EE1 /* SJVideoPlayerSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF17FD994498C42A3E2188C55979876 /* SJVideoPlayerSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; 735FF1EEED078357CB967A521D69BAA3 /* SJBorderLineView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B4E3BC54CBA793709755D054694CE69 /* SJBorderLineView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73C64A021C1DC76534F380C9BFB94E6A /* SJEdgeControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = B43150A1AE82BD41B430C4BC63AE8B02 /* SJEdgeControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 74879EC9AB5AFBBDFB80DCA9D0AF17C1 /* UITabBarController+SJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = CFE43DE932C3382354ABF90E14867B9A /* UITabBarController+SJExtension.m */; }; + 74C25D9C1B57FD744237C5A34F4DEB0E /* SJEdgeControlLayerLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 689AD61D5A75850B566CCB0E252318E7 /* SJEdgeControlLayerLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 76A3FE5A03006CFAC2354A3BDD11708A /* UIView+YYText.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA6F9466A2D4059C780437F83EA62D7 /* UIView+YYText.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 77056DF86AF887824AB8089E2F083A84 /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DA807A1341B16CA8CC5B6B8D1E82D63 /* MASViewAttribute.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 77608496114FAAC0448101977682BF1E /* YYTextTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 964F3A9D109A2579FB42A6E7499650AD /* YYTextTransaction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 77782F44BE6C51EDF14AD39F0C2CB2CE /* SJVideoPlayerURLAsset+SJControlAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F860A72DEB140D3F4AED0189C2B0CF /* SJVideoPlayerURLAsset+SJControlAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; 77DD50BD51DBB726E44892A0A5C0D331 /* UIViewController+SJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 79C0047B2CE9DBB167136BF66929487B /* UIViewController+SJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 787291943860557B2BC57CFCC02AA237 /* SJFilmEditingSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = C6370DEC2909F2AC9B3C51F9F0C5147C /* SJFilmEditingSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; 789F5720586B04EA466CF2960EDBDA02 /* SJAVMediaPlayAsset+SJAVMediaPlaybackControllerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A9A41E6B99564EFE8BE7E8E0D33AFF /* SJAVMediaPlayAsset+SJAVMediaPlaybackControllerAdd.m */; }; - 78B99F7EC5F7C1ED131A8CA293A6A77C /* SJVideoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA9C04D822B5D36D06ACE5F10BA7EFEA /* SJVideoPlayer-dummy.m */; }; 78FEA4868285D782C8CC333B31673FCD /* YYTextContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD9CF4183E1FC95B9B03FE820C9FFD9 /* YYTextContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7978DD479CF359F627FF298B296A9DEC /* SJAVMediaPlayAssetSwitcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 498D97314B59A2DAE467988B9F0E1A2C /* SJAVMediaPlayAssetSwitcher.m */; }; + 7A5396E1AFA2E90A8F5643A1F97316FB /* SJVideoPlayerDraggingProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 62154A7DF97710AB978D6424BD4B5F91 /* SJVideoPlayerDraggingProgressView.m */; }; + 7B1A266B8C906D1B3702ACFEB3B26145 /* SJVideoPlayerFilmEditingCommonHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5973BD3085F80C5B6660CD085129A333 /* SJVideoPlayerFilmEditingCommonHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B73895B0A9776F97E1D9874E6952940 /* SJFilmEditingBackButton.m in Sources */ = {isa = PBXBuildFile; fileRef = C6CDADB5EA27AB9B3F0E1DC2B8103998 /* SJFilmEditingBackButton.m */; }; 7BDFDA0F6E008C2D5AEFAB6D5EB0F627 /* NSParagraphStyle+YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = B805D03D6425FC73DB465FA6318F39DE /* NSParagraphStyle+YYText.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BEB9D394AC33DB7F2B4D927AB428C5B /* SJVideoPlayerMoreSettingsView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BAC50D907042E3F64B2DE6B8E6765E /* SJVideoPlayerMoreSettingsView.m */; }; 7C31AFA9C95568E16B6911B670754372 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 354FE2518D31192359217C92761B8E29 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C4E15D43480B896388008D3F3D09424 /* SJRouteRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D94F771E7B1235C6476551DBE1F0D9 /* SJRouteRequest.m */; }; 7C550B52BA17D1B0C00A23C0F3BB1461 /* SJBaseVideoPlayer+PlayStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 2516087EB20893DB3A5A61B91A3E26F4 /* SJBaseVideoPlayer+PlayStatus.m */; }; + 7CB22A0DFAC8804340C80E29E4614404 /* UIView+SJAnimationAdded.m in Sources */ = {isa = PBXBuildFile; fileRef = 0394EEAC004856DE60CBA676B93673B2 /* UIView+SJAnimationAdded.m */; }; 7D0088439093875D1358BEC66F4AC264 /* Pods-SJVideoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EFD29BA4644D607FBCDFD620B29B43E /* Pods-SJVideoPlayer-dummy.m */; }; 7D11314B458C8C50FF6B7055589F3721 /* UIScrollView+ListViewAutoplaySJAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = D83A1441FBEE20E3017B9FD69256CD91 /* UIScrollView+ListViewAutoplaySJAdd.m */; }; - 7D1C3C8FA55AD43E80A4A9D0675F4618 /* SJEdgeControlLayerSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = F4AB0037A1AF5E7A1D99F0AEA85FFF04 /* SJEdgeControlLayerSettings.m */; }; - 7D44A615EDC950924DC9AC1D4F408102 /* UIView+SJAnimationAdded.m in Sources */ = {isa = PBXBuildFile; fileRef = 0394EEAC004856DE60CBA676B93673B2 /* UIView+SJAnimationAdded.m */; }; 7E6B8FB1A649D0877EF78E11F89DF64E /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 420FBDA2EAF4755B9F0DCB5D9C198417 /* ViewController+MASAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81A0E65AEBE6A139097BB22321A14C2B /* SJFilmEditingInVideoRecordingsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = CBBF1C4D99EB51F583850728AECBC17F /* SJFilmEditingInVideoRecordingsControlLayer.m */; }; + 7F18FDFD1BA3EFE8899260505FF0FAA6 /* SJFilmEditingGIFCountDownView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E4BC25BF66373B6292559957E61C135 /* SJFilmEditingGIFCountDownView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 812A0568E550226288316E15B7E6F42C /* SJFilmEditingLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C5A84A8C8BDFD9970E6B4389EFC41F06 /* SJFilmEditingLoader.m */; }; + 816691C2143DECEF89CE66401A67CA30 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E0A951248CE44A3697664FBE84DA5C7 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.m */; }; 834D1BB9656D3E64B2AF8C0E0119A37F /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB46F5386314C455211EFB8E32E4081 /* MASConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83710D9CE50BDD85DF42CFE18F2C302A /* UIView+SJVideoPlayerSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 1944479D825C109CCD4E09311DED7122 /* UIView+SJVideoPlayerSetting.m */; }; + 84F2291FE2274609FEC79B72AF3E6219 /* SJButtonProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D239A9A911C9B5D4B64926A2DB1AF87F /* SJButtonProgressSlider.m */; }; + 85DB45B8FD52158F756A695CA7F43A50 /* SJVideoPlayerDraggingProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1281A97246FC4564CEFF6B8DE25B611B /* SJVideoPlayerDraggingProgressView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 85E456A12705A8E7517E99118DA9ACE8 /* SJVideoPlayerState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B43DB7C37E6DC01AAE0DAD56D8FFCBF /* SJVideoPlayerState.h */; settings = {ATTRIBUTES = (Project, ); }; }; 860DC6ED69D7A006339CFDBBE539BC69 /* YYTextRubyAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D56F11EA7904AECDABAB0044BBDB3D /* YYTextRubyAnnotation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 878F7E66FE5C0809BE7D3ACECF9A8039 /* SJVideoPlayerMoreSettingsSlidersView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3808E4199FEC35B6D8C800FF9D1AFC79 /* SJVideoPlayerMoreSettingsSlidersView.m */; }; - 8A7021DC5B53BBBEA6C7C6067312AFB2 /* SJVideoPlayerSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F398675CD735F1A60D3FCAD899F0B0F /* SJVideoPlayerSettings.m */; }; - 8C1077CD2B10CFA383FC843C3517C13C /* SJVideoPlayerFilmEditingConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C1DFC33067CA6311657D17948FD7B0 /* SJVideoPlayerFilmEditingConfig.m */; }; + 86D5C2C416AEF841EA92582DD8562634 /* SJLoadFailedControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = EA3886A0261D00AFD2D49F72C1FC38BA /* SJLoadFailedControlLayer.m */; }; 8E224CE9873DAAB6B6890F1A19FDA73B /* SJScrollEntriesView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 694D460BCFE56A86E8E770635E3D5A75 /* SJScrollEntriesView-dummy.m */; }; - 8E524C432D7CDAE963DC631080B0A764 /* SJFilmEditingBackButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7E847D04D00DEE51CC6051129622F5 /* SJFilmEditingBackButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8EA98CF84C982D6D5865B1EAE58BD5CB /* SJControlLayerCarrier.m in Sources */ = {isa = PBXBuildFile; fileRef = C1C8AB52210E36EA7D6FC0484C2F2C00 /* SJControlLayerCarrier.m */; }; - 8EE0631C8775AAB6DEFAB366D2C3A5C2 /* SJEdgeControlLayerAdapters.m in Sources */ = {isa = PBXBuildFile; fileRef = D4267DC5981CEE1A575A1DE8679BA4F1 /* SJEdgeControlLayerAdapters.m */; }; 912FB0CBA573FE778B8C269FAB39756F /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F1B777257E31B088BAAAD40B93D01310 /* Masonry-dummy.m */; }; - 913E755BD3F661D2E1C1D6C2D4D9D63B /* SJFilmEditingControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF3F5B70010DF080BC2E105B21DF191 /* SJFilmEditingControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92C14F6D42EC19EAAD5C695325ED0A36 /* SJButtonItemCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9996561675C017106F0D8B3AC5A685EA /* SJButtonItemCollectionViewCell.m */; }; 947C08BD6B2B03D8FAABA98E1EB78A4E /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB7386CEEAEA6A96B1EFF52EAE02D11 /* View+MASAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 94FB4C4DD7D15A00F2E11B8C7ADFFE32 /* SJPlayModelPropertiesObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = C87F4DCADBEB0FFCDF0116582247608A /* SJPlayModelPropertiesObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 950116BFFFB891FCD89BF2DEC4A0FFBE /* SJVideoPlayerMoreSetting+Exe.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0744E556F0F935F398FB57ED50D5B7 /* SJVideoPlayerMoreSetting+Exe.m */; }; + 950D552E82F3A45597E291631CA5D656 /* SJFilmEditingBackButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B7E847D04D00DEE51CC6051129622F5 /* SJFilmEditingBackButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9520FE152C1377CFBBB4C2F648E3DE3D /* SJPlaybackListController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92EE3DA482A1D69844928F3E68F0F9 /* SJPlaybackListController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 95D89C53321BCB57F9925AF28DE64DAD /* YYTextContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2936209E1CD15F1EDC4CD7582F43AA73 /* YYTextContainerView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 96043A07203F45EACA6E1ED03BB9F181 /* SJLoadFailedControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C8F607A4601EC184F0AA2E6908D0CA /* SJLoadFailedControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9626FD0BC5C146A11DA73795B7034C30 /* SJPlayerAutoplayConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 02E1F33E76B375380604FE765080C935 /* SJPlayerAutoplayConfig.m */; }; - 96275C4B90A380CDCFB7428435B4E4C2 /* SJEdgeControlButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D25B2C63614A0B34B82CF8C0490ADF /* SJEdgeControlButtonItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 96DB2AB39DFEB82319EF630730FDE4FD /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9857D136AFAE2473B2C09B5FE22D1888 /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9742267DC662AD199D4D810BC3DAA921 /* SJVideoPlayerMoreSettingSecondaryView.h in Headers */ = {isa = PBXBuildFile; fileRef = 587D4B4C24D34C959454AB7CF6D6E4F2 /* SJVideoPlayerMoreSettingSecondaryView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99527CC66418BAB8A1F005F879D474A8 /* SJVideoPlayerFilmEditingGeneratedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8400693EACE08716638C35A622F976 /* SJVideoPlayerFilmEditingGeneratedResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A533E0C47357767AC050B75BB4308A8 /* SJLoadFailedControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = EA3886A0261D00AFD2D49F72C1FC38BA /* SJLoadFailedControlLayer.m */; }; - 9A6C79359EE62BB0CC9CAB9CF5075BC3 /* SJVideoPlayerFilmEditingGeneratedResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E2FF80FFB5D492F7D9150899DE56483B /* SJVideoPlayerFilmEditingGeneratedResult.m */; }; + 9A693B9E261E7E7C3F3DDA1CD790B026 /* UIView+SJAnimationAdded.h in Headers */ = {isa = PBXBuildFile; fileRef = F40F05E5D54B8C8AE445F59AE9B22F19 /* UIView+SJAnimationAdded.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9A73584377BFBF9895FC328E3978668B /* SJRouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D7EA3C4EFEADEC3AD3F111973D921D /* SJRouter.m */; }; - 9B1D067F278B338341CD242EAA617CF7 /* SJFilmEditingResultShareItemsContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FB7851A7CC1AF3068242A92DB4DBF61 /* SJFilmEditingResultShareItemsContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A77826151219199E408D814935DDA2B /* SJVideoPlayerFilmEditingGeneratedResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E2FF80FFB5D492F7D9150899DE56483B /* SJVideoPlayerFilmEditingGeneratedResult.m */; }; 9CA3A7F681E7E66CC4B790BA8F655230 /* SJVCRotationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 091D2A2106F713800889D85776761443 /* SJVCRotationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9CB505EDB28EEEE38C85EE0E5D785545 /* SJFitOnScreenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF264C8DFAB7D4A9C9AD8DDE6640DD0 /* SJFitOnScreenManager.m */; }; + 9DBD4419025C67D36EA8606620847B93 /* SJVideoPlayerMoreSettingSecondary.h in Headers */ = {isa = PBXBuildFile; fileRef = A49D18B8333F50ACD556B973C0203659 /* SJVideoPlayerMoreSettingSecondary.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9EAAE62C0A422F1AF8D9632A4C299918 /* SJScrollEntriesViewUserProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FE31773098CA458346E1E6E08A587CE3 /* SJScrollEntriesViewUserProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A01DEB989F99FB40414756F9AB799D15 /* SJVideoPlayerMoreSettingSecondaryColCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7836A9AB0A4A1F3CE3DC8D3A54BB5EDC /* SJVideoPlayerMoreSettingSecondaryColCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F444791636A798F51D09C21AB9B914C /* SJEdgeControlLayerAdapters.m in Sources */ = {isa = PBXBuildFile; fileRef = D4267DC5981CEE1A575A1DE8679BA4F1 /* SJEdgeControlLayerAdapters.m */; }; + 9F85355F44EF6406454B0B2F03859314 /* SJVideoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA9C04D822B5D36D06ACE5F10BA7EFEA /* SJVideoPlayer-dummy.m */; }; + A0A805E9B030B8E1B36D8287CF953EF9 /* SJFilmEditingControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF3F5B70010DF080BC2E105B21DF191 /* SJFilmEditingControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; A1DC1B1F10C4679D3F654DE8D3F37EA2 /* SJAttributeWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = DF253481C1118AC07422D1FC8AE0852F /* SJAttributeWorker.h */; settings = {ATTRIBUTES = (Project, ); }; }; A2350EA45A8687CC7F92110503B606B2 /* SJAVMediaPlayAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A6AE42A90C39AE984139217C0DF6444 /* SJAVMediaPlayAsset.m */; }; + A27EF76A7044F82CE59538A32CF2AED2 /* UIView+SJControlAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 83EEAF6D3C3F0AF406DA3BCF2F559DA2 /* UIView+SJControlAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; A2985CB0D8B5AE7E284F5A5009F248AF /* SJAttributeWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF2B403FC332ECA8C1C4EDC5CF33CFD /* SJAttributeWorker.m */; }; - A3D22B92EE4F28922155D79E419CECA4 /* SJVideoPlayerMoreSettingSecondary.m in Sources */ = {isa = PBXBuildFile; fileRef = CA164F5F5E2758A29ACCCB3B6F08BB79 /* SJVideoPlayerMoreSettingSecondary.m */; }; - A4726300D63B2B8AA2663748E4533FF1 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 29F0588EFACE80F0C1B8B7B48A1AE153 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4945910ECC92EC2CA1686312F930E38 /* SJMoreSettingControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 744C2E42ACACD4AD3030565F5C4A2B3F /* SJMoreSettingControlLayer.m */; }; - A4B6775D9C38FEF3042083A43640AE71 /* SJVideoPlayerURLAsset+SJControlAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E6C1DF53C46E8B29E979A9479B3826 /* SJVideoPlayerURLAsset+SJControlAdd.m */; }; - A57355B162F4AF78811374975D184741 /* SJVideoPlayerMoreSettingsColCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE86D7588AAAD6D4AAF0F8B945BABFD /* SJVideoPlayerMoreSettingsColCell.m */; }; + A4A100A2A2D0DDEBA183B366FB1D5BCE /* SJVideoPlayerAnimationHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = CCA29388334CF0B8832BAC5FDF4D0F41 /* SJVideoPlayerAnimationHeader.m */; }; A59EF9E29A5E4FE07B9DB5EE9C674322 /* SJRotationManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 409F1453F73E93933FF674A5954658BD /* SJRotationManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; A5B2EFF70A376BD26ED66E66C2A4DDF4 /* YYTextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AD03B168EBF00711AE2C6C31DAC936C /* YYTextLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A68BE539D544A6BEEB35D7DA99A7239E /* SJEdgeControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F2BF99FBF05485EC76832465224DEF75 /* SJEdgeControlLayer.m */; }; A6ED70E8470EBB10473303B2E268D9F9 /* SJVideoPlayerRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = 0540F109B8FDF4D49F9EA0B4AEAA5030 /* SJVideoPlayerRegistrar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7665EEB944D70ABFC08D560CEDF713B /* SJVideoPlayerMoreSettingsView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BAC50D907042E3F64B2DE6B8E6765E /* SJVideoPlayerMoreSettingsView.m */; }; A7D5C5ECB318A52BF93CBC6B76C02C47 /* SJBaseVideoPlayerStatistics.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C41186BB26D68249C6A881074652330 /* SJBaseVideoPlayerStatistics.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8393D6C9C21D99623B376E57C43CD4C /* SJVideoPlayerFilmEditingParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = E6F7F5B1E69D5D3A2E7791FFA6CF474B /* SJVideoPlayerFilmEditingParameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A86AAA870B951AA5DBD6E0544ED6DAE5 /* SJVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B58A94043B5119615A8CAA219308273 /* SJVideoPlayer.m */; }; + AA619AA962526ACF2BE5CF8653866EC1 /* SJMoreSettingsSlidersViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 574DE7097DF28F6E3BBAD1A987775904 /* SJMoreSettingsSlidersViewModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; AB2DC168B2193B5D52427F025E24C491 /* YYTextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F2BC2A87617A87AC9E8A12E01EFA792 /* YYTextSelectionView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ABEB03D7FCF514DC94C12F21D46CD55C /* YYTextSelectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = F8DB4C6E017B5F36F9AB97AF751D388A /* YYTextSelectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; AC87E8C2A4473C7403B3161DDCFC04F5 /* SJPlaybackListControllerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 4610D7B32F5989238440215B26B057A0 /* SJPlaybackListControllerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE610C533D882B2F6522BF31D423949A /* SJControlLayerSwitcher.h in Headers */ = {isa = PBXBuildFile; fileRef = EF86300A14671B9DF382FE53842ABB73 /* SJControlLayerSwitcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE6E478DFBDD56CCD6ECA424F5910E30 /* SJVideoPlayerDraggingProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 15AAC00B964A32A65649EEF39D5060A1 /* SJVideoPlayerDraggingProgressView.m */; }; + AD61FDED33EBF1959809DF83BB3DA739 /* SJFilmEditingVideoCountDownView.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB358C1D290B51A9DFCA79234EC37E4 /* SJFilmEditingVideoCountDownView.h */; settings = {ATTRIBUTES = (Project, ); }; }; AE8AFDE1DCDC5AAC40D1F794E2908783 /* SJTimerControl.m in Sources */ = {isa = PBXBuildFile; fileRef = B7CED61E88E00A33A0ABF56FF435166B /* SJTimerControl.m */; }; AF2AD56C3740117248DC356F86EB531B /* SJTimerControl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1C9F19AD6820190C190BA553BC7CAD /* SJTimerControl.h */; settings = {ATTRIBUTES = (Project, ); }; }; AFAA959C07E35BC68F448ED2CAF80DB8 /* YYTextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4EBB83F7784908F8A0F1C3BD60C1B3 /* YYTextLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; B03802A33B781D47E686DBA84CA93F98 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 384322CEE84A56A74F13B8EC1559E752 /* MASLayoutConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B07E09027F65B764E55114FBB60F8340 /* UIViewController+SJVideoPlayerAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E7C868D29A6BBB4AC99552C3749CD54 /* UIViewController+SJVideoPlayerAdd.m */; }; B0D8826E493D408B5642B97DDC0DE69F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 3684C5449AD74BCAC9E2B363F4952514 /* MASCompositeConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B2DFDB2A7930C63A77F7080614E2080B /* SJVideoPlayerControlMaskView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40BCFB28985D4520E610E752C85D63DE /* SJVideoPlayerControlMaskView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3243F78E2454A19075807685812A330 /* SJFilmEditingSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = C6370DEC2909F2AC9B3C51F9F0C5147C /* SJFilmEditingSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2417642C2BA10DA667970650EC418AC /* SJFilmEditingControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E640FB8E5A5BF153D7E2E5AA15CEB291 /* SJFilmEditingControlLayer.m */; }; + B3825D73074CD1285C5793B8886BE4FB /* SJEdgeControlLayerLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CF9C5B05452339B3E3E00C03706C7CB /* SJEdgeControlLayerLoader.m */; }; B42A3ABFE80FC004ACDFF4F0E6CE8589 /* YYTextRunDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ECA73F12AADC2F93E730991C0BB7ABE /* YYTextRunDelegate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B46F8FD57EBA96AB851F8A01228D727C /* SJModalViewControlllerManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 0496D08A364B9A0B0F65641EEEB21166 /* SJModalViewControlllerManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; B4A15C1A32E7CF49F24C3491F534DD29 /* SJVideoPlayerControlLayerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = DB2A0D0C3856CAB451ACFDFEBF6B8804 /* SJVideoPlayerControlLayerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; B5B34C7A945476C9308DE13613D32CDE /* SJBaseVideoPlayerStatisticsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 285F35E97F0D89DE39D8551CC77F756D /* SJBaseVideoPlayerStatisticsProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; B5CDDD7A1DE02FE35821E562BCE88C25 /* SJAttributesFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = BED47C6BAB63B65D8F0EB9EFD1DA6FF9 /* SJAttributesFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B69EA04B7E045A8F5B3A3AB4E1572512 /* SJControlLayerCarrier.h in Headers */ = {isa = PBXBuildFile; fileRef = 495041A8438E1EAD1FAC570B8B4C82B9 /* SJControlLayerCarrier.h */; settings = {ATTRIBUTES = (Project, ); }; }; B7517CFC17EEDA0BBD0BB904032027CB /* SJBaseVideoPlayerStatistics.m in Sources */ = {isa = PBXBuildFile; fileRef = 5742F53F05BDB4B7BAC6621CDBCE0B10 /* SJBaseVideoPlayerStatistics.m */; }; B7FCEE9D3416B9F87D428FC4625968BC /* SJControlLayerAppearStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E0101EC79E8479A0A23392E55C7C3F /* SJControlLayerAppearStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8C9B8BC1ADDAB38DC85802E4AFBD0BF /* SJAVMediaPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88117486AD9290F8B55A8BF9424A3A58 /* SJAVMediaPlaybackController.m */; }; B987F069270F81456C702DF0C9D6A298 /* YYTextWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = C6B2D94B4EAD25AE8CF5206383CC83CD /* YYTextWeakProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9CE1C110BD2707E5F42E2ADDB16B439 /* SJMoreSettingsSlidersViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = DDFCEFEE44D4C93A838CDC0D94029198 /* SJMoreSettingsSlidersViewModel.m */; }; BA0EBDAC81048E743E39D4C20D6042B2 /* SJAVMediaPlayAssetProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 262BAF1E2331B98F1FC5D4869AFE2B56 /* SJAVMediaPlayAssetProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; BB2EC14F9880F5AAF188471E4DFDA7B6 /* SJDeviceBrightnessView.h in Headers */ = {isa = PBXBuildFile; fileRef = D7CDE278880065762F356A474FE207A4 /* SJDeviceBrightnessView.h */; settings = {ATTRIBUTES = (Project, ); }; }; BEB243C9AF70F0D0C2909481A47256BF /* SJFlipTransitionManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A03FFAD1C84BBF6A324057E469E4E1D /* SJFlipTransitionManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BF7CEB376BBF53381177BB090B5D0C99 /* UIView+SJControlAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CD43CEA7E0E9F8B5AE4D54256D3C337 /* UIView+SJControlAdd.m */; }; BFD93E2DFAFCE63EE5751D9B35BDA458 /* YYTextEffectWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF40ECED88B573107AAB7E7DD759425 /* YYTextEffectWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFEF8EFBEFCBD43F381B60602A32E58C /* YYTextAsyncLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = FE8E75DD583D7A6FFC5F618A1FF8143E /* YYTextAsyncLayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C1C295BCD795C2B6044DB474583804B1 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 026D4194DEF06DDBAF30911627CF4C55 /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -247,9 +254,9 @@ C3E4CCC16B05838E093C4DB013DB0650 /* SJBaseVideoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AB94DDB773D40E8CB51EBEAC19DB1AC /* SJBaseVideoPlayer-dummy.m */; }; C41DA60A04F4467EE19D9168903DC0AB /* YYTextRubyAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 61A680D661F0BE5739DEAD1E7BC7A461 /* YYTextRubyAnnotation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C4C3A8A337127E46781EE4C27C7E0BA8 /* SJPlayerBufferStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A9585D1DAA62D29A8398828BCDE5C5C /* SJPlayerBufferStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C58E6E488617718B2D3F32073C9A6108 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E0A951248CE44A3697664FBE84DA5C7 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.m */; }; C7141F4F58458F0CDD31F9F7FC056855 /* SJAttributesRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 84AF8D8DB946F326DEA5C02E8A37D630 /* SJAttributesRecorder.m */; }; C7259D8E5FDC81CAA07561B327B06040 /* SJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = BA97F1D78F75D468F6FD5CFF4F0E8C2A /* SJReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7666EAD1CB7A033AB3D5013F7553F95 /* SJFilmEditingGenerateResultControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E66D682ADB9FD976E096D44638708EEF /* SJFilmEditingGenerateResultControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; C7AC0A7E19A51E937E298C259F7F9B0C /* SJAVMediaPlayAsset+SJAVMediaPlaybackControllerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB27B917BC8FC3B76D02ECA01132324 /* SJAVMediaPlayAsset+SJAVMediaPlaybackControllerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; C7AC29F56D5F471248BBA0A724CDF3C7 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9311DD33978B27FCB87C3C43135BFA /* Masonry.h */; settings = {ATTRIBUTES = (Project, ); }; }; C82A4670640BA39A3671DE3572601A69 /* YYTextLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F256D9A1161489ABD4D0C01E87B23D3 /* YYTextLine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -260,71 +267,64 @@ CA23AD75D031BCCEB1147870E8099B1D /* SJBaseVideoPlayerAutoRefreshContext.h in Headers */ = {isa = PBXBuildFile; fileRef = C0917B6E79537498B4A2B79E0B983FD8 /* SJBaseVideoPlayerAutoRefreshContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; CA8E1D3CC9FC3037DCA2BEC30842C16E /* YYTextParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D16B8FCEA233C39BD044D1A106E53668 /* YYTextParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CAB5F0B93F0A6684D17EFFA75F3192C8 /* SJScrollEntriesView.m in Sources */ = {isa = PBXBuildFile; fileRef = 62413652FC8F88A58B1A542A9D0F6105 /* SJScrollEntriesView.m */; }; + CC5F7305CA8E87EFEDC6CD78ECE00119 /* SJProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 620AADFC4E58111446790C037FCB9A6E /* SJProgressSlider.m */; }; CCC7E5B002BA36077FA720FFEB4E5D08 /* SJAVMediaPlayAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C7B8B2DE14994E96A4A7602F0D329C1 /* SJAVMediaPlayAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; CDBE0199948BCBC907DC54375A113377 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FF57BC563DA7D0B10B071EB75283660 /* Reachability.m */; }; - D1D3FDEDBB5EFF731474479A6C6D2D49 /* SJEdgeControlLayerItemAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = E32B16FE3E8697F7E8D25BB78ADB9FFD /* SJEdgeControlLayerItemAdapter.m */; }; - D1DE86EC11AD020D26D06CCE7967ED1E /* SJEdgeControlLayerSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = FC74E50F5992479E25FE69C792D28769 /* SJEdgeControlLayerSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; D225C0A6F2657F43573CFBCDF8FB5D61 /* YYTextLine.h in Headers */ = {isa = PBXBuildFile; fileRef = C8F1CE2DAC46697AAA8A48C697EA6F8E /* YYTextLine.h */; settings = {ATTRIBUTES = (Project, ); }; }; D281A6B5BCDA6F5FE1E6D9A5935E8B27 /* UINavigationController+SJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BF99719D25902FAA172FCE9528F3A8A /* UINavigationController+SJExtension.m */; }; - D2BC3A66188635074398D1BDBD8C55A7 /* SJVideoPlayerMoreSettingsFooterView.h in Headers */ = {isa = PBXBuildFile; fileRef = F099CB9F592FC9892BFF5CA59E760F8C /* SJVideoPlayerMoreSettingsFooterView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2A72B439400807ED9010A43A6EA3D90 /* SJVideoPlayerMoreSettingsSlidersView.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CC997372EFE4DD71845598B376C8A3 /* SJVideoPlayerMoreSettingsSlidersView.h */; settings = {ATTRIBUTES = (Project, ); }; }; D2EC30D8EE930DB521747D713336B003 /* SJIsAppeared.h in Headers */ = {isa = PBXBuildFile; fileRef = 03CB7DFC504606E0F9AE7AAD45E4C69F /* SJIsAppeared.h */; settings = {ATTRIBUTES = (Project, ); }; }; D567580778140FD4738E2A70F348C60B /* SJPlaybackListControllerObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 241B5030032B33C73C83D6C1DC153FF4 /* SJPlaybackListControllerObserver.m */; }; D57A099EA8E318997925D5FA64D5F205 /* SJPlayerGestureControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 93A994BF44EF6BECE86C403166EB21C9 /* SJPlayerGestureControl.m */; }; D5E17DE38F7BC50449A25FFE4D49E4EC /* YYTextInput.h in Headers */ = {isa = PBXBuildFile; fileRef = B791AD4CFD61A95288B8FA015514A91A /* YYTextInput.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5E78AD1B5EA4A31C7D8518AE20734F9 /* SJVideoPlayerMoreSettingsFooterView.h in Headers */ = {isa = PBXBuildFile; fileRef = F099CB9F592FC9892BFF5CA59E760F8C /* SJVideoPlayerMoreSettingsFooterView.h */; settings = {ATTRIBUTES = (Project, ); }; }; D5EE6ACFB9C952D06722D5868F76E8E6 /* NSObject+SJObserverHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 603A6F68437973141A7F1F4278514839 /* NSObject+SJObserverHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; D67482AC41E389E0D6CCEF87118DE413 /* SJVCRotationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9991DDBD36DE1EDDC763AD8EEB563854 /* SJVCRotationManager.m */; }; - D8F2F54AC5A695F67DB8B7B2198CEEFD /* SJVideoPlayerMoreSettingsColCell.h in Headers */ = {isa = PBXBuildFile; fileRef = FC56B96DC38B2AE5886363E05A8E3623 /* SJVideoPlayerMoreSettingsColCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; D91DE443F49F70093450DAA5739B0284 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F94442EDDB693E532229FE26AC787FD /* NSLayoutConstraint+MASDebugAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D96B171320DDF092AA847C91D5C908BE /* SJAVMediaModelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 82DCA7E3AB20F7A6AC3CF685EC09E33E /* SJAVMediaModelProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9A5E9ECADCEBC1189A4DFD075092037 /* SJVideoPlayerMoreSettingSecondaryView.h in Headers */ = {isa = PBXBuildFile; fileRef = 587D4B4C24D34C959454AB7CF6D6E4F2 /* SJVideoPlayerMoreSettingSecondaryView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9B33C4BE934517B4F7D08C7DDDE49F5 /* SJLightweightTopItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 01301EEAA775A88823929EE3F3EAFBBC /* SJLightweightTopItem.m */; }; + D9C7A396C6FA031FA5D334EFF8E2A376 /* SJFilmEditingSaveResultToAlbumHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F33B6503DCE8363BF68EF43F76FE9E8 /* SJFilmEditingSaveResultToAlbumHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB07417803DEB35D4FDD2DC2209C3D30 /* SJEdgeControlLayerItemAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = E32B16FE3E8697F7E8D25BB78ADB9FFD /* SJEdgeControlLayerItemAdapter.m */; }; DB831E7F10C00329F60B7F69400FC3A6 /* UIViewController+SJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B44568643CD5371758F7B2DABC0D810E /* UIViewController+SJExtension.m */; }; + DC98F4ECFD9D6BA9468B7BC3EF898773 /* SJVideoPlayerFilmEditingGeneratedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8400693EACE08716638C35A622F976 /* SJVideoPlayerFilmEditingGeneratedResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD148CE2FD70AE4CFC311348B743E1B4 /* UIView+SJVideoPlayerSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 93567E5D8C74D2BD4A804580FD94CBD2 /* UIView+SJVideoPlayerSetting.m */; }; DE7E5865446EA86E7D170CE54F4444EF /* SJAttributesRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = BA456920E292F85EF4A38664066494CE /* SJAttributesRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E09215A2FF255A4ED7711C35BC82EBF9 /* SJVideoPlayerMoreSettingSecondaryView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E3FDFA4B4AF72E033F86CC60DBF7A5A /* SJVideoPlayerMoreSettingSecondaryView.m */; }; - E1337FA4D38F810995D6CEEA9F9244C4 /* SJVideoPlayerMoreSetting+Exe.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0744E556F0F935F398FB57ED50D5B7 /* SJVideoPlayerMoreSetting+Exe.m */; }; - E14D5BCAA1B1E5758C64D263422147EF /* UIView+SJVideoPlayerSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 992BB84899FD95BD5183DAA644C7896E /* UIView+SJVideoPlayerSetting.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E216B1B4FF79BFB703947840F8FBDE91 /* SJFilmEditingResultShareItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E6CE97E8A320D21D916D428CB2D7FE4F /* SJFilmEditingResultShareItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E066CAAA0F6D7A1D0934545AC4F5FCA5 /* SJControlLayerSwitcher.h in Headers */ = {isa = PBXBuildFile; fileRef = EF86300A14671B9DF382FE53842ABB73 /* SJControlLayerSwitcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0E99520D8799FF668FF3AA776FF8CFD /* SJVideoPlayerMoreSettingsView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5408F0BA4BBA68FEB1B883F3B3C4CD6A /* SJVideoPlayerMoreSettingsView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E39C30048BC3CF5DE11E78999BCDAD69 /* SJEdgeControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F4BF490B0E4DE228CD91A0EA79C2DA /* SJEdgeControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; E3D54BA7D1F4531F879806E516B9E873 /* SJRouter-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F56D386E4CC9ADDB65E0B72C02AEC2B8 /* SJRouter-dummy.m */; }; E40EC0C06A120731543044C0B17535CA /* SJDeviceVolumeAndBrightnessManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B5592E4C282681B1A9391E4E9BDF59E9 /* SJDeviceVolumeAndBrightnessManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5E78338AE1F30C8C205748598D54611 /* SJVideoPlayerMoreSetting.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E8B0F33D7E3E47398BE5787D2F880F /* SJVideoPlayerMoreSetting.m */; }; E5FAF8D256131FC63D52C62BEDE0DDDA /* YYTextTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = F322855AB2B818A29C8EA020EBD80EF8 /* YYTextTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6A17052EE1FBB66A0EADF4ECD937E58 /* SJVideoPlayerMoreSettingsFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1452FDD91C94BC4826DC625CF8E804C2 /* SJVideoPlayerMoreSettingsFooterView.m */; }; E7E126117726A614B586A2D49E7EA4BF /* SJPlayModelPropertiesObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D9705C4BFF0115C5A233F5DA9D62FA8 /* SJPlayModelPropertiesObserver.m */; }; - E8156CD16ADC61AA3BDFCC464A7E98C9 /* SJEdgeControlLayerItemAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E2CA68795732248C13E9B4615AF8E1 /* SJEdgeControlLayerItemAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; E871464191AB3CF73248A77A15D78305 /* SJPlaybackListControllerObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7969705F387193A7AF50E20C51FF4247 /* SJPlaybackListControllerObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E880418AE367C47B63AB3E74CE44CD08 /* SJVideoPlayerMoreSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 13594DDBEBCD6BE06EB95E75CD69FE7D /* SJVideoPlayerMoreSetting.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8D153C14674F7417334D24456F0E7B2 /* SJFilmEditingButtonContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA6D1DAD2ABDBA1DB59914B577F1678 /* SJFilmEditingButtonContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8F93904243197850215D3033B3B1649 /* SJMoreSettingControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BB033CD0DEA7CEDB9CE4B6FACCB8F155 /* SJMoreSettingControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; E94F68ABEAC53DD4556594E0EE4EAD57 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A961F14A3D3DCC4CDF9FDE2B2164B7 /* MASUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; E9AB962EBE736F0A10509A073A775BA4 /* SJBaseVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DBD1C6F027184C7C24A2228D2CACD01 /* SJBaseVideoPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA318355CB3D556B28D42501820E7282 /* SJCommonProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5A25844C68C5CFDC5E1E6B3D580CB4 /* SJCommonProgressSlider.m */; }; EB413E2E383F83A017A8FA1514B0FDA2 /* UIViewController+SJVideoPlayerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 71114DBAF00D866FB157D1882ED91BDD /* UIViewController+SJVideoPlayerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC531186B39657B6EEE0A1362BB26560 /* NSTimer+SJAssetAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 471F11B2824BD7DBDFCC811E255891F4 /* NSTimer+SJAssetAdd.m */; }; ECEF7C8EE028E740AAE217E19DC3CB55 /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D7839182B6188A3A38B860334C1C17D /* MASConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EDB617337A5033BD6F05CA5EC15FA56D /* UIScrollView+ListViewAutoplaySJAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C89B1D4CD28B0B09F6CB47741FF6EE /* UIScrollView+ListViewAutoplaySJAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE058C70F9B0064430807AF1D95821E5 /* SJLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0998D6DA24C941E82C030A46D2A55B6C /* SJLoadingView.m */; }; EE1E499EE1E53FF34E1019A2F27036D1 /* NSAttributedString+YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = 8043EE6A4B39A602057E3E09D40F8F86 /* NSAttributedString+YYText.h */; settings = {ATTRIBUTES = (Project, ); }; }; EE271268C62F5A21B7222AA3DD8AA908 /* SJRouteHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6B24371700A30D65C3BE74C5623266 /* SJRouteHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE4D8D3B6EB6628B44CEA06745DF8A93 /* SJVideoPlayerMoreSettingSecondary.m in Sources */ = {isa = PBXBuildFile; fileRef = CA164F5F5E2758A29ACCCB3B6F08BB79 /* SJVideoPlayerMoreSettingSecondary.m */; }; EE70EBE5221FE5B3C603531DA83B896A /* SJControlLayerAppearManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD990C27F2F5F15AB21525B3C848E0D /* SJControlLayerAppearManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; EF78691D9E85BC2DBF2855774A424239 /* UINavigationController+SJVideoPlayerAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = D297C412A2573F69CE94AD0F863C7D31 /* UINavigationController+SJVideoPlayerAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFA62E0B0BD7DAFA7A1CCCEB7AFF02C8 /* SJVideoPlayerSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF17FD994498C42A3E2188C55979876 /* SJVideoPlayerSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFCA5EC63398A9B7B9ECC55077DFC996 /* SJNotReachableControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B909600C5207B959ADC0E9079004DF54 /* SJNotReachableControlLayer.m */; }; EFE8AA9D33F702BF6AD555C22D0E453E /* YYLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = B081A1A9B103EC2C68406AB46734F71C /* YYLabel.h */; settings = {ATTRIBUTES = (Project, ); }; }; F0223A4EEF0A05E2DBC75767471884A2 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 5298FF59BBB0E865A21313ECFCAB31AE /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F03B82E0F2DBFE828B20A66E19D6D8B9 /* SJLightweightTopItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 983974C3561C7B2DCF9B82CF1A112C4F /* SJLightweightTopItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; F1A8742A566F9D40BE27E140BC9421F8 /* UIPasteboard+YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = 0899B4A072B34113C5F5222D487860BC /* UIPasteboard+YYText.h */; settings = {ATTRIBUTES = (Project, ); }; }; F2087337A18B70A8F802D6DA5C4682E9 /* SJSnapshotRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E91CE9A9BE6E7DF27C501E1C328AC8 /* SJSnapshotRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; F2DC6C3704DE844A25DD9AFB5899C7CC /* YYText.h in Headers */ = {isa = PBXBuildFile; fileRef = C1838ECE55467555364F5E75C409E456 /* YYText.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F32846192FB389B71824E792C5E6CD3C /* SJButtonItemCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F0D68A462CB579B75E6A9F597C85803 /* SJButtonItemCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F4208B2DF3CA801B055E34D4D1D430E0 /* SJVideoPlayerMoreSettingSecondary.h in Headers */ = {isa = PBXBuildFile; fileRef = A49D18B8333F50ACD556B973C0203659 /* SJVideoPlayerMoreSettingSecondary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F4D6AC0633EBF721D2AF31C61B487982 /* SJEdgeControlLayerLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 79489A078AAC7F4195C5057E0D081BA0 /* SJEdgeControlLayerLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F2FD8728BF3E08ED966A0F8C12AD3719 /* SJVideoPlayerMoreSettingSecondaryColCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7836A9AB0A4A1F3CE3DC8D3A54BB5EDC /* SJVideoPlayerMoreSettingSecondaryColCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; F558B6152364A89F6665EFC9EA810B67 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D5720D2D161C1307929176B2BF9EDD0F /* NSArray+MASAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F5B69BCB3CD4D387A487BAEDA44B21E9 /* SJLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 89AE34871F46BEE587E04D5A5DF7C53F /* SJLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6F6FB3237C65A094EC871BFABE7D1D1 /* SJVideoPlayerMoreSetting+Exe.h in Headers */ = {isa = PBXBuildFile; fileRef = D20C31D0E2504E6CE3ABB47215311FA2 /* SJVideoPlayerMoreSetting+Exe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5A8BA9F906EB4071C349102B15F3E1D /* SJButtonItemCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9996561675C017106F0D8B3AC5A685EA /* SJButtonItemCollectionViewCell.m */; }; F77F461BB5254E0638B56C2EDE47A4A4 /* SJVideoPlayerURLAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = F593E3595A43BA610A2E0E3B26A1183A /* SJVideoPlayerURLAsset.m */; }; - FA1958944CCAF226DA85D8E59D35378F /* SJMoreSettingsSlidersViewModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 574DE7097DF28F6E3BBAD1A987775904 /* SJMoreSettingsSlidersViewModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7B591681CBF5EE8D8C4C4C1FCB825A5 /* SJEdgeControlButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D25B2C63614A0B34B82CF8C0490ADF /* SJEdgeControlButtonItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA6285915074AA2C62F770FFB7737FFF /* SJVideoPlayerPresentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EAAF2B1E3DAD2CF1D9E8A18BE12320A /* SJVideoPlayerPresentView.m */; }; - FA7137E10D8594AB9AA14BCECBEC7335 /* SJFilmEditingLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FF95E42EABFB5549A748D2AE515FCA /* SJFilmEditingLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB0767833DF93A32E5B7C9F37A548349 /* SJPrompt.m in Sources */ = {isa = PBXBuildFile; fileRef = D6777E6A5746C05B4C61E52C894445FB /* SJPrompt.m */; }; + FBBAFA4934D9AA29D8E7D5F46B8F9275 /* UIView+SJVideoPlayerSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 18408D79758D28A2DE86A627AAF1BE11 /* UIView+SJVideoPlayerSetting.h */; settings = {ATTRIBUTES = (Project, ); }; }; FC0AA1F25CDAE83250613C1DB773B477 /* SJAVMediaPlaybackController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BFFF8D5D3D4E2430B31D3CC20B90CFB /* SJAVMediaPlaybackController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC1FFFE3B6EA7B06095AD344249BA3B4 /* SJFilmEditingSaveResultToAlbumHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4537B114BC7818A7DA6CAF4E881E7C27 /* SJFilmEditingSaveResultToAlbumHandler.m */; }; + FFE1155BAAAC7EF5C39EE34E54BCCC1A /* SJVideoPlayerControlMaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = E6C8B52460C7BA520CA758D2A21B6685 /* SJVideoPlayerControlMaskView.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -458,16 +458,17 @@ /* Begin PBXFileReference section */ 00E8B0F33D7E3E47398BE5787D2F880F /* SJVideoPlayerMoreSetting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerMoreSetting.m; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSetting.m; sourceTree = ""; }; - 026BD9B6203CB6DBEDDC9177840D7C36 /* libSJBaseVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJBaseVideoPlayer.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 01301EEAA775A88823929EE3F3EAFBBC /* SJLightweightTopItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJLightweightTopItem.m; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJLightweightTopItem.m; sourceTree = ""; }; + 026BD9B6203CB6DBEDDC9177840D7C36 /* libSJBaseVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJBaseVideoPlayer.a; path = libSJBaseVideoPlayer.a; sourceTree = BUILT_PRODUCTS_DIR; }; 026D4194DEF06DDBAF30911627CF4C55 /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; 027284AEE7B6F1C5187404DFCE393DE6 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h"; path = "SJBaseVideoPlayer/SJAVMediaPlaybackController/SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h"; sourceTree = ""; }; 02E1F33E76B375380604FE765080C935 /* SJPlayerAutoplayConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlayerAutoplayConfig.m; path = SJBaseVideoPlayer/Model/SJPlayerAutoplayConfig.m; sourceTree = ""; }; - 03432D6E4F9DDEDEF5551885C922CEB4 /* libSJVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJVideoPlayer.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 03432D6E4F9DDEDEF5551885C922CEB4 /* libSJVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJVideoPlayer.a; path = libSJVideoPlayer.a; sourceTree = BUILT_PRODUCTS_DIR; }; 0394EEAC004856DE60CBA676B93673B2 /* UIView+SJAnimationAdded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SJAnimationAdded.m"; path = "SJVideoPlayer/Common/UIView+SJAnimationAdded.m"; sourceTree = ""; }; 03CB7DFC504606E0F9AE7AAD45E4C69F /* SJIsAppeared.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJIsAppeared.h; path = SJBaseVideoPlayer/Tool/SJIsAppeared.h; sourceTree = ""; }; 0496D08A364B9A0B0F65641EEEB21166 /* SJModalViewControlllerManagerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJModalViewControlllerManagerProtocol.h; path = SJBaseVideoPlayer/Header/SJModalViewControlllerManagerProtocol.h; sourceTree = ""; }; 0540F109B8FDF4D49F9EA0B4AEAA5030 /* SJVideoPlayerRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerRegistrar.h; path = SJBaseVideoPlayer/Tool/SJVideoPlayerRegistrar.h; sourceTree = ""; }; - 05832C37EA30D38B854477DE27EDB072 /* SJLightweightTopItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJLightweightTopItem.m; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJLightweightTopItem.m; sourceTree = ""; }; + 0567B884CE315C5D0E5380318795F884 /* SJEdgeControlLayerSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayerSettings.m; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerSettings.m; sourceTree = ""; }; 088A2C79CA64881C5CD9A59B14FA0FB8 /* SJVideoPlayer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJVideoPlayer.xcconfig; sourceTree = ""; }; 0899B4A072B34113C5F5222D487860BC /* UIPasteboard+YYText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPasteboard+YYText.h"; path = "YYText/Utility/UIPasteboard+YYText.h"; sourceTree = ""; }; 091D2A2106F713800889D85776761443 /* SJVCRotationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVCRotationManager.h; path = SJBaseVideoPlayer/SJRotationManager/SJVCRotationManager.h; sourceTree = ""; }; @@ -476,24 +477,26 @@ 0AF40ECED88B573107AAB7E7DD759425 /* YYTextEffectWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextEffectWindow.h; path = YYText/Component/YYTextEffectWindow.h; sourceTree = ""; }; 0C41186BB26D68249C6A881074652330 /* SJBaseVideoPlayerStatistics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseVideoPlayerStatistics.h; path = SJBaseVideoPlayer/Tool/SJBaseVideoPlayerStatistics.h; sourceTree = ""; }; 0CD43CEA7E0E9F8B5AE4D54256D3C337 /* UIView+SJControlAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SJControlAdd.m"; path = "SJVideoPlayer/Common/UIView+SJControlAdd.m"; sourceTree = ""; }; + 0CF9C5B05452339B3E3E00C03706C7CB /* SJEdgeControlLayerLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayerLoader.m; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerLoader.m; sourceTree = ""; }; 0D51CC9F361B44C5832AFD64B00221EE /* YYTextUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextUtilities.m; path = YYText/Utility/YYTextUtilities.m; sourceTree = ""; }; 0DC8957007686EB0067E65A948F654E1 /* SJPrompt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPrompt.h; path = SJBaseVideoPlayer/SJPrompt/SJPrompt.h; sourceTree = ""; }; 0E4BC25BF66373B6292559957E61C135 /* SJFilmEditingGIFCountDownView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFilmEditingGIFCountDownView.h; sourceTree = ""; }; 0F0D68A462CB579B75E6A9F597C85803 /* SJButtonItemCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJButtonItemCollectionViewCell.h; sourceTree = ""; }; 0FDCE949453B70046267768A6DCC70C2 /* YYTextAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextAttribute.m; path = YYText/String/YYTextAttribute.m; sourceTree = ""; }; + 106ABBD7C805163D7F4BC7E9D893EA61 /* SJEdgeControlLayer.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SJEdgeControlLayer.bundle; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayer.bundle; sourceTree = ""; }; 106F0C53E2F06446CC91321DC4DB949F /* SJVideoPlayerMoreSettingSecondaryColCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerMoreSettingSecondaryColCell.m; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingSecondaryColCell.m; sourceTree = ""; }; - 10D0703BBDBAAD7B8F121B28D642F0D6 /* LICENSE.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = ""; }; + 10D0703BBDBAAD7B8F121B28D642F0D6 /* LICENSE.md */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE.md; sourceTree = ""; }; 112C7D82D545B1674967A9FD7826A995 /* SJFilmEditing.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SJFilmEditing.bundle; path = SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader/SJFilmEditing.bundle; sourceTree = ""; }; 125F3590DE1A6FD17A243571C6B86721 /* SJIsAppeared.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJIsAppeared.m; path = SJBaseVideoPlayer/Tool/SJIsAppeared.m; sourceTree = ""; }; + 1281A97246FC4564CEFF6B8DE25B611B /* SJVideoPlayerDraggingProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerDraggingProgressView.h; path = SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerDraggingProgressView.h; sourceTree = ""; }; 134D5D070F230F7533EB10D00D4DEE35 /* SJFilmEditingInGIFRecordingsControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFilmEditingInGIFRecordingsControlLayer.h; sourceTree = ""; }; 13594DDBEBCD6BE06EB95E75CD69FE7D /* SJVideoPlayerMoreSetting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSetting.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSetting.h; sourceTree = ""; }; 1452FDD91C94BC4826DC625CF8E804C2 /* SJVideoPlayerMoreSettingsFooterView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerMoreSettingsFooterView.m; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingsFooterView.m; sourceTree = ""; }; - 15AAC00B964A32A65649EEF39D5060A1 /* SJVideoPlayerDraggingProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerDraggingProgressView.m; path = SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerDraggingProgressView.m; sourceTree = ""; }; 16E91CE9A9BE6E7DF27C501E1C328AC8 /* SJSnapshotRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSnapshotRecorder.h; path = SJFullscreenPopGesture/SJSnapshotRecorder.h; sourceTree = ""; }; 16EAE088682AD891A426DA00ED2A797A /* SJBaseVideoPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseVideoPlayer.m; path = SJBaseVideoPlayer/SJBaseVideoPlayer.m; sourceTree = ""; }; 17647E4940967D8CBFDA87DA469F7A3F /* SJFitOnScreenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFitOnScreenManager.h; path = SJBaseVideoPlayer/Tool/SJFitOnScreenManager.h; sourceTree = ""; }; + 18408D79758D28A2DE86A627AAF1BE11 /* UIView+SJVideoPlayerSetting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SJVideoPlayerSetting.h"; path = "SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/UIView+SJVideoPlayerSetting.h"; sourceTree = ""; }; 18AB00E0DA09170A8C06A6D46DFAD2FF /* UITabBarController+SJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBarController+SJExtension.h"; path = "SJBaseVideoPlayer/SJRotationManager/UITabBarController+SJExtension.h"; sourceTree = ""; }; - 1944479D825C109CCD4E09311DED7122 /* UIView+SJVideoPlayerSetting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SJVideoPlayerSetting.m"; path = "SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/UIView+SJVideoPlayerSetting.m"; sourceTree = ""; }; 1A7483A5881383DE132F9E381CF38AB6 /* SJRouter-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJRouter-prefix.pch"; sourceTree = ""; }; 1AA5E368E64CB0A8C6A90D70E7D9A477 /* SJEdgeControlButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJEdgeControlButtonItem.m; sourceTree = ""; }; 1BF99719D25902FAA172FCE9528F3A8A /* UINavigationController+SJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+SJExtension.m"; path = "SJBaseVideoPlayer/SJRotationManager/UINavigationController+SJExtension.m"; sourceTree = ""; }; @@ -509,6 +512,7 @@ 2121A38027ABD0BC37670FB5995CFA66 /* SJVideoPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayer.h; path = SJVideoPlayer/SJVideoPlayer.h; sourceTree = ""; }; 21770077169353FACB8405AAFAD2BDB5 /* SJFitOnScreenManagerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFitOnScreenManagerProtocol.h; path = SJBaseVideoPlayer/Header/SJFitOnScreenManagerProtocol.h; sourceTree = ""; }; 21E2CA68795732248C13E9B4615AF8E1 /* SJEdgeControlLayerItemAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlLayerItemAdapter.h; sourceTree = ""; }; + 21E98900AEFBFBDAA0557B5A169A6C71 /* SJEdgeControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayer.m; path = SJVideoPlayer/SJEdgeControlLayer/SJEdgeControlLayer.m; sourceTree = ""; }; 241B5030032B33C73C83D6C1DC153FF4 /* SJPlaybackListControllerObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackListControllerObserver.m; path = SJPlaybackListController/Core/SJPlaybackListControllerObserver.m; sourceTree = ""; }; 242DE15E85FFB532265B56A024A4C92C /* SJVideoPlayer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJVideoPlayer-prefix.pch"; sourceTree = ""; }; 2516087EB20893DB3A5A61B91A3E26F4 /* SJBaseVideoPlayer+PlayStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJBaseVideoPlayer+PlayStatus.m"; path = "SJBaseVideoPlayer/SJBaseVideoPlayer+PlayStatus.m"; sourceTree = ""; }; @@ -546,14 +550,13 @@ 36E82ECB8BD5381F99BF1091B7CEABC1 /* SJProgressSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJProgressSlider.h; path = SJVideoPlayer/SJProgressSlider/SJProgressSlider.h; sourceTree = ""; }; 373520123A54C801553CDFE0843FE7E8 /* SJVideoPlayerAnimationHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerAnimationHeader.h; path = SJVideoPlayer/Common/SJVideoPlayerAnimationHeader.h; sourceTree = ""; }; 37E186CB9C684EFFFDB37AA9450FA6EF /* SJFilmEditingStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFilmEditingStatus.h; sourceTree = ""; }; - 37E8728527FE1F25D6737FCBAB11BA9D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 37E8728527FE1F25D6737FCBAB11BA9D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 3808E4199FEC35B6D8C800FF9D1AFC79 /* SJVideoPlayerMoreSettingsSlidersView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerMoreSettingsSlidersView.m; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingsSlidersView.m; sourceTree = ""; }; 384322CEE84A56A74F13B8EC1559E752 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; 3A03FFAD1C84BBF6A324057E469E4E1D /* SJFlipTransitionManagerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFlipTransitionManagerProtocol.h; path = SJBaseVideoPlayer/Header/SJFlipTransitionManagerProtocol.h; sourceTree = ""; }; 3A4EBB83F7784908F8A0F1C3BD60C1B3 /* YYTextLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextLayout.h; path = YYText/Component/YYTextLayout.h; sourceTree = ""; }; 3B0CA6EC56F04D0E809AE8D87E0038B9 /* SJDeviceVolumeAndBrightnessManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJDeviceVolumeAndBrightnessManager.m; path = SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/SJDeviceVolumeAndBrightnessManager.m; sourceTree = ""; }; 3B499ED5447180402A007A572624ABB1 /* SJEdgeControlLayerAdapters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayerAdapters.h; path = SJVideoPlayer/Adapters/SJEdgeControlLayerAdapters.h; sourceTree = ""; }; - 3B4F321948F7FD085CC1AA48B94B8880 /* SJEdgeControlLayer.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SJEdgeControlLayer.bundle; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayer.bundle; sourceTree = ""; }; 3B552D164F7DA2B7DEF67A5278DABDE3 /* YYTextKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextKeyboardManager.m; path = YYText/Component/YYTextKeyboardManager.m; sourceTree = ""; }; 3CB03BB4BE97C774AAE71AA0B6F895A8 /* SJModalViewControlllerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJModalViewControlllerManager.m; path = SJBaseVideoPlayer/Tool/SJModalViewControlllerManager.m; sourceTree = ""; }; 3CD596B9FC2C6AC710EC7087C1DD467C /* Reachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; @@ -569,7 +572,7 @@ 420FBDA2EAF4755B9F0DCB5D9C198417 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; 42E4598FC56CD8AE686CFE45F047423E /* SJPlayModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlayModel.h; path = SJBaseVideoPlayer/Model/SJPlayModel.h; sourceTree = ""; }; 42FACAB2E095811AE761ECA56F4A4753 /* SJPlaybackListController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackListController.m; path = SJPlaybackListController/SJPlaybackListController.m; sourceTree = ""; }; - 44CE57A076AAB6B116A6A5F83A81AC1C /* libSJFullscreenPopGesture.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJFullscreenPopGesture.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 44CE57A076AAB6B116A6A5F83A81AC1C /* libSJFullscreenPopGesture.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJFullscreenPopGesture.a; path = libSJFullscreenPopGesture.a; sourceTree = BUILT_PRODUCTS_DIR; }; 4537B114BC7818A7DA6CAF4E881E7C27 /* SJFilmEditingSaveResultToAlbumHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJFilmEditingSaveResultToAlbumHandler.m; sourceTree = ""; }; 4602D7800066CAE551712FCD167BC612 /* SJRouteRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRouteRequest.h; path = SJRouter/Core/SJRouteRequest.h; sourceTree = ""; }; 4610D7B32F5989238440215B26B057A0 /* SJPlaybackListControllerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackListControllerProtocol.h; path = SJPlaybackListController/Core/SJPlaybackListControllerProtocol.h; sourceTree = ""; }; @@ -581,7 +584,7 @@ 4ABB3B3F3C90373848A8866A9C68ECFD /* SJMediaPlaybackProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJMediaPlaybackProtocol.h; path = SJBaseVideoPlayer/Header/SJMediaPlaybackProtocol.h; sourceTree = ""; }; 4BC46614D8611FB5DA748C8F06B4C826 /* SJScrollEntriesView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJScrollEntriesView-prefix.pch"; sourceTree = ""; }; 4BF17FD994498C42A3E2188C55979876 /* SJVideoPlayerSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerSettings.h; path = SJVideoPlayer/Settings/SJVideoPlayerSettings.h; sourceTree = ""; }; - 4D754BF0B6E5CEB900C827E2D7650888 /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 4D754BF0B6E5CEB900C827E2D7650888 /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMasonry.a; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; }; 4DA807A1341B16CA8CC5B6B8D1E82D63 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; 4FA31BE7CFBB096FA3EF71EF68CB8B62 /* Reachability.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Reachability.xcconfig; sourceTree = ""; }; 4FB7851A7CC1AF3068242A92DB4DBF61 /* SJFilmEditingResultShareItemsContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFilmEditingResultShareItemsContainerView.h; sourceTree = ""; }; @@ -597,7 +600,7 @@ 57C89B1D4CD28B0B09F6CB47741FF6EE /* UIScrollView+ListViewAutoplaySJAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+ListViewAutoplaySJAdd.h"; path = "SJBaseVideoPlayer/UIScrollView+ListViewAutoplaySJAdd.h"; sourceTree = ""; }; 587D4B4C24D34C959454AB7CF6D6E4F2 /* SJVideoPlayerMoreSettingSecondaryView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSettingSecondaryView.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingSecondaryView.h; sourceTree = ""; }; 5973BD3085F80C5B6660CD085129A333 /* SJVideoPlayerFilmEditingCommonHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerFilmEditingCommonHeader.h; sourceTree = ""; }; - 5A3A8AC586324AF4225B5E222E67D256 /* libYYText.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libYYText.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A3A8AC586324AF4225B5E222E67D256 /* libYYText.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libYYText.a; path = libYYText.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5AB94DDB773D40E8CB51EBEAC19DB1AC /* SJBaseVideoPlayer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJBaseVideoPlayer-dummy.m"; sourceTree = ""; }; 5ADA10863FC5896D5B276C0EEFDB8050 /* SJPlayerGestureControlProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlayerGestureControlProtocol.h; path = SJBaseVideoPlayer/Header/SJPlayerGestureControlProtocol.h; sourceTree = ""; }; 5B3C1E241F833492793903A8BD655FBB /* SJSnapshotRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSnapshotRecorder.m; path = SJFullscreenPopGesture/SJSnapshotRecorder.m; sourceTree = ""; }; @@ -611,12 +614,14 @@ 61D852BED10D18C82B05B185B696572F /* SJNotReachableControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJNotReachableControlLayer.h; path = SJVideoPlayer/SJNotReachableControlLayer/SJNotReachableControlLayer.h; sourceTree = ""; }; 6203D860D256FE75D3F361E9F86DA087 /* SJDeviceBrightnessView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJDeviceBrightnessView.m; path = SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/Core/SJDeviceBrightnessView.m; sourceTree = ""; }; 620AADFC4E58111446790C037FCB9A6E /* SJProgressSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJProgressSlider.m; path = SJVideoPlayer/SJProgressSlider/SJProgressSlider.m; sourceTree = ""; }; + 62154A7DF97710AB978D6424BD4B5F91 /* SJVideoPlayerDraggingProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerDraggingProgressView.m; path = SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerDraggingProgressView.m; sourceTree = ""; }; 62413652FC8F88A58B1A542A9D0F6105 /* SJScrollEntriesView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJScrollEntriesView.m; path = SJScrollEntriesView/SJScrollEntriesView.m; sourceTree = ""; }; 62C1DFC33067CA6311657D17948FD7B0 /* SJVideoPlayerFilmEditingConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerFilmEditingConfig.m; sourceTree = ""; }; 63BBF7D46CEF9806EBB8FA75DBBF6186 /* YYTextRunDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextRunDelegate.h; path = YYText/String/YYTextRunDelegate.h; sourceTree = ""; }; 658ABFEED4BB4ADEB2CE58A17A182034 /* SJFlipTransitionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFlipTransitionManager.h; path = SJBaseVideoPlayer/Tool/SJFlipTransitionManager.h; sourceTree = ""; }; 65D7EA3C4EFEADEC3AD3F111973D921D /* SJRouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRouter.m; path = SJRouter/SJRouter.m; sourceTree = ""; }; 66D25B2C63614A0B34B82CF8C0490ADF /* SJEdgeControlButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlButtonItem.h; sourceTree = ""; }; + 689AD61D5A75850B566CCB0E252318E7 /* SJEdgeControlLayerLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayerLoader.h; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerLoader.h; sourceTree = ""; }; 68FE9CDBEC868F3D93CEE79736A5186E /* Pods-SJVideoPlayer-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SJVideoPlayer-acknowledgements.markdown"; sourceTree = ""; }; 694D460BCFE56A86E8E770635E3D5A75 /* SJScrollEntriesView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJScrollEntriesView-dummy.m"; sourceTree = ""; }; 6AD03B168EBF00711AE2C6C31DAC936C /* YYTextLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextLayout.m; path = YYText/Component/YYTextLayout.m; sourceTree = ""; }; @@ -627,7 +632,7 @@ 6E4564FE3D9C97A382A1F14E41ACFCC5 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; 6EE0116A715BA59B910A1042BC137DA9 /* SJFilmEditingSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJFilmEditingSettings.m; path = SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader/SJFilmEditingSettings.m; sourceTree = ""; }; 6F256D9A1161489ABD4D0C01E87B23D3 /* YYTextLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextLine.m; path = YYText/Component/YYTextLine.m; sourceTree = ""; }; - 6F62A19C12F3A2C7FB30EE95CDE2829E /* libSJPlaybackListController.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJPlaybackListController.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F62A19C12F3A2C7FB30EE95CDE2829E /* libSJPlaybackListController.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJPlaybackListController.a; path = libSJPlaybackListController.a; sourceTree = BUILT_PRODUCTS_DIR; }; 71114DBAF00D866FB157D1882ED91BDD /* UIViewController+SJVideoPlayerAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+SJVideoPlayerAdd.h"; path = "SJFullscreenPopGesture/UIViewController+SJVideoPlayerAdd.h"; sourceTree = ""; }; 71351FE99B8B7DC62353E5310E03DA4B /* SJVideoPlayerPreviewInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerPreviewInfo.h; path = SJBaseVideoPlayer/Header/SJVideoPlayerPreviewInfo.h; sourceTree = ""; }; 72154112B5AA581BED63E8310AFD1429 /* SJAVMediaPresentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVMediaPresentView.m; path = SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPresentView.m; sourceTree = ""; }; @@ -638,7 +643,6 @@ 77463BB637D308D5619472C0827891F2 /* YYTextWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextWeakProxy.m; path = YYText/Utility/YYTextWeakProxy.m; sourceTree = ""; }; 780580B552D8BE655C62AA16ACBF4B8A /* SJAttributesFactory.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJAttributesFactory.xcconfig; sourceTree = ""; }; 7836A9AB0A4A1F3CE3DC8D3A54BB5EDC /* SJVideoPlayerMoreSettingSecondaryColCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSettingSecondaryColCell.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingSecondaryColCell.h; sourceTree = ""; }; - 79489A078AAC7F4195C5057E0D081BA0 /* SJEdgeControlLayerLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayerLoader.h; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerLoader.h; sourceTree = ""; }; 7969705F387193A7AF50E20C51FF4247 /* SJPlaybackListControllerObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackListControllerObserver.h; path = SJPlaybackListController/Core/SJPlaybackListControllerObserver.h; sourceTree = ""; }; 79C0047B2CE9DBB167136BF66929487B /* UIViewController+SJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+SJExtension.h"; path = "SJBaseVideoPlayer/SJRotationManager/UIViewController+SJExtension.h"; sourceTree = ""; }; 7B58A94043B5119615A8CAA219308273 /* SJVideoPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayer.m; path = SJVideoPlayer/SJVideoPlayer.m; sourceTree = ""; }; @@ -657,6 +661,7 @@ 84D56F11EA7904AECDABAB0044BBDB3D /* YYTextRubyAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextRubyAnnotation.h; path = YYText/String/YYTextRubyAnnotation.h; sourceTree = ""; }; 853F88F40C2DA2E1E31B7567BE0314A9 /* SJDeviceVolumeAndBrightnessManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJDeviceVolumeAndBrightnessManager.h; path = SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/SJDeviceVolumeAndBrightnessManager.h; sourceTree = ""; }; 87D94F771E7B1235C6476551DBE1F0D9 /* SJRouteRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRouteRequest.m; path = SJRouter/Core/SJRouteRequest.m; sourceTree = ""; }; + 87F4BF490B0E4DE228CD91A0EA79C2DA /* SJEdgeControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayer.h; path = SJVideoPlayer/SJEdgeControlLayer/SJEdgeControlLayer.h; sourceTree = ""; }; 88117486AD9290F8B55A8BF9424A3A58 /* SJAVMediaPlaybackController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVMediaPlaybackController.m; path = SJBaseVideoPlayer/SJAVMediaPlaybackController/SJAVMediaPlaybackController.m; sourceTree = ""; }; 887599119771CDD0C4F5F1AC2B18B7FB /* SJScreenshotTransitionMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJScreenshotTransitionMode.h; path = SJFullscreenPopGesture/SJScreenshotTransitionMode.h; sourceTree = ""; }; 89980AEF3BF70FEE48817D6F605EBD74 /* SJFilmEditingGenerateResultControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJFilmEditingGenerateResultControlLayer.m; sourceTree = ""; }; @@ -667,24 +672,23 @@ 8AF46BF2DD76607158968FF594813F1F /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; 8B43DB7C37E6DC01AAE0DAD56D8FFCBF /* SJVideoPlayerState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerState.h; path = SJBaseVideoPlayer/Header/SJVideoPlayerState.h; sourceTree = ""; }; 8B8BDDE9D5B0D308551983E30DB7A2D9 /* SJControlLayerAppearStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJControlLayerAppearStateManager.m; path = SJBaseVideoPlayer/Tool/SJControlLayerAppearStateManager.m; sourceTree = ""; }; - 8DEC99C43EF4C5EA6ED4F5CAA42C7035 /* SJVideoPlayerDraggingProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerDraggingProgressView.h; path = SJVideoPlayer/SJEdgeControlLayer/View/SJVideoPlayerDraggingProgressView.h; sourceTree = ""; }; 8E8400693EACE08716638C35A622F976 /* SJVideoPlayerFilmEditingGeneratedResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerFilmEditingGeneratedResult.h; sourceTree = ""; }; 8F06D3A6D41A494E114D59E0E050D990 /* SJVideoPlayerFilmEditingConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerFilmEditingConfig.h; sourceTree = ""; }; - 8F0C75220DE79D59BF43CEAB43E4175F /* SJVideoPlayer.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = SJVideoPlayer.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 8F0C75220DE79D59BF43CEAB43E4175F /* SJVideoPlayer.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SJVideoPlayer.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93567E5D8C74D2BD4A804580FD94CBD2 /* UIView+SJVideoPlayerSetting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SJVideoPlayerSetting.m"; path = "SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/UIView+SJVideoPlayerSetting.m"; sourceTree = ""; }; 93A994BF44EF6BECE86C403166EB21C9 /* SJPlayerGestureControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlayerGestureControl.m; path = SJBaseVideoPlayer/Tool/SJPlayerGestureControl.m; sourceTree = ""; }; 93BA93E6B978A0BF6B715F98DCF1AC07 /* YYTextArchiver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextArchiver.m; path = YYText/String/YYTextArchiver.m; sourceTree = ""; }; 9473556847F723119DD71ED22F5AA5EE /* YYTextEffectWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextEffectWindow.m; path = YYText/Component/YYTextEffectWindow.m; sourceTree = ""; }; 964F3A9D109A2579FB42A6E7499650AD /* YYTextTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextTransaction.m; path = YYText/Utility/YYTextTransaction.m; sourceTree = ""; }; 9777CFF168DEA40479284EAF0A818AD3 /* YYTextAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextAttribute.h; path = YYText/String/YYTextAttribute.h; sourceTree = ""; }; - 983974C3561C7B2DCF9B82CF1A112C4F /* SJLightweightTopItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJLightweightTopItem.h; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJLightweightTopItem.h; sourceTree = ""; }; 9857D136AFAE2473B2C09B5FE22D1888 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; - 992BB84899FD95BD5183DAA644C7896E /* UIView+SJVideoPlayerSetting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SJVideoPlayerSetting.h"; path = "SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/UIView+SJVideoPlayerSetting.h"; sourceTree = ""; }; 9991DDBD36DE1EDDC763AD8EEB563854 /* SJVCRotationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVCRotationManager.m; path = SJBaseVideoPlayer/SJRotationManager/SJVCRotationManager.m; sourceTree = ""; }; 9996561675C017106F0D8B3AC5A685EA /* SJButtonItemCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJButtonItemCollectionViewCell.m; sourceTree = ""; }; - 9BCDD805D969301EA50EC8B8E7ECA4A3 /* libPods-SJVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SJVideoPlayer.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BCDD805D969301EA50EC8B8E7ECA4A3 /* libPods-SJVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-SJVideoPlayer.a"; path = "libPods-SJVideoPlayer.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 9BFFF8D5D3D4E2430B31D3CC20B90CFB /* SJAVMediaPlaybackController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAVMediaPlaybackController.h; path = SJBaseVideoPlayer/SJAVMediaPlaybackController/SJAVMediaPlaybackController.h; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; A0A5103595DB3931FFD4B0F7219E6152 /* SJBaseVideoPlayer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJBaseVideoPlayer-prefix.pch"; sourceTree = ""; }; + A0DBFC30AEE57B762037F9BF20E54ECC /* SJLightweightTopItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJLightweightTopItem.h; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJLightweightTopItem.h; sourceTree = ""; }; A49D18B8333F50ACD556B973C0203659 /* SJVideoPlayerMoreSettingSecondary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSettingSecondary.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingSecondary.h; sourceTree = ""; }; A4B456B12A8CE7A603B8033D4781F180 /* SJDeviceVolumeAndBrightnessManagerResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJDeviceVolumeAndBrightnessManagerResourceLoader.h; path = SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader/SJDeviceVolumeAndBrightnessManagerResourceLoader.h; sourceTree = ""; }; A635803C74E9774405642AF7B2C3FDF5 /* SJScrollEntriesView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJScrollEntriesView.h; path = SJScrollEntriesView/SJScrollEntriesView.h; sourceTree = ""; }; @@ -699,15 +703,14 @@ AE27038A82F8CE93E01BD9C603BE2D1D /* Pods-SJVideoPlayer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SJVideoPlayer.release.xcconfig"; sourceTree = ""; }; AEB8A6E38A8C88BE0FC9914EC777D890 /* YYText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYText-prefix.pch"; sourceTree = ""; }; AEF54ACD1E98323114E10E1866ACFA65 /* SJFilmEditingResultShareItemsContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJFilmEditingResultShareItemsContainerView.m; sourceTree = ""; }; - AF46EAB6BFCE5A13124AEE9BBD5DDBA6 /* libReachability.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReachability.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AF46EAB6BFCE5A13124AEE9BBD5DDBA6 /* libReachability.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libReachability.a; path = libReachability.a; sourceTree = BUILT_PRODUCTS_DIR; }; AFAA3B8DDC9D0E6A7F6EAC8E40D31C36 /* SJButtonProgressSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJButtonProgressSlider.h; path = SJVideoPlayer/SJProgressSlider/SJButtonProgressSlider.h; sourceTree = ""; }; B0787C13C144B40E7EF94F6C2EAB78B6 /* NSParagraphStyle+YYText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSParagraphStyle+YYText.m"; path = "YYText/Utility/NSParagraphStyle+YYText.m"; sourceTree = ""; }; B081A1A9B103EC2C68406AB46734F71C /* YYLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYLabel.h; path = YYText/YYLabel.h; sourceTree = ""; }; B0CC997372EFE4DD71845598B376C8A3 /* SJVideoPlayerMoreSettingsSlidersView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSettingsSlidersView.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingsSlidersView.h; sourceTree = ""; }; B24B729A2D89B73702A8D956EB823080 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; - B28A837B32705E635E74F606EE89EB9E /* libSJObserverHelper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJObserverHelper.a; sourceTree = BUILT_PRODUCTS_DIR; }; + B28A837B32705E635E74F606EE89EB9E /* libSJObserverHelper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJObserverHelper.a; path = libSJObserverHelper.a; sourceTree = BUILT_PRODUCTS_DIR; }; B2C27401E5D66583B1D90DCAC9F5CD78 /* YYTextKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextKeyboardManager.h; path = YYText/Component/YYTextKeyboardManager.h; sourceTree = ""; }; - B43150A1AE82BD41B430C4BC63AE8B02 /* SJEdgeControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayer.h; path = SJVideoPlayer/SJEdgeControlLayer/SJEdgeControlLayer.h; sourceTree = ""; }; B44568643CD5371758F7B2DABC0D810E /* UIViewController+SJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+SJExtension.m"; path = "SJBaseVideoPlayer/SJRotationManager/UIViewController+SJExtension.m"; sourceTree = ""; }; B4926BFF6809B26E3FF48F346A308E95 /* SJPromptConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPromptConfig.h; path = SJBaseVideoPlayer/SJPrompt/SJPromptConfig.h; sourceTree = ""; }; B493CFB736F082505F93E5ED1D8A20D7 /* SJRotationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRotationManager.m; path = SJBaseVideoPlayer/SJRotationManager/SJRotationManager.m; sourceTree = ""; }; @@ -726,7 +729,7 @@ BAA9DF127947F0876476AEC91BE152FF /* SJFullscreenPopGesture.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJFullscreenPopGesture.xcconfig; sourceTree = ""; }; BB033CD0DEA7CEDB9CE4B6FACCB8F155 /* SJMoreSettingControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJMoreSettingControlLayer.h; path = SJVideoPlayer/SJMoreSettingControlLayer/SJMoreSettingControlLayer.h; sourceTree = ""; }; BC9311DD33978B27FCB87C3C43135BFA /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; - BDAB0D0D8DA96F53E7D114175B5948CD /* libSJScrollEntriesView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJScrollEntriesView.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BDAB0D0D8DA96F53E7D114175B5948CD /* libSJScrollEntriesView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJScrollEntriesView.a; path = libSJScrollEntriesView.a; sourceTree = BUILT_PRODUCTS_DIR; }; BE5A25844C68C5CFDC5E1E6B3D580CB4 /* SJCommonProgressSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJCommonProgressSlider.m; path = SJVideoPlayer/SJProgressSlider/SJCommonProgressSlider.m; sourceTree = ""; }; BE83DEB78C32535F51E6195895454683 /* SJFilmEditingCommonViewLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFilmEditingCommonViewLayer.h; sourceTree = ""; }; BED47C6BAB63B65D8F0EB9EFD1DA6FF9 /* SJAttributesFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAttributesFactory.h; path = SJAttributesFactory/SJAttributesFactory.h; sourceTree = ""; }; @@ -737,7 +740,7 @@ C1838ECE55467555364F5E75C409E456 /* YYText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYText.h; path = YYText/YYText.h; sourceTree = ""; }; C1C8AB52210E36EA7D6FC0484C2F2C00 /* SJControlLayerCarrier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJControlLayerCarrier.m; sourceTree = ""; }; C304D7B6EBC88F29F6249D567498105D /* YYTextAsyncLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextAsyncLayer.h; path = YYText/Utility/YYTextAsyncLayer.h; sourceTree = ""; }; - C44CE688B908C79E25D189814FA35DA7 /* libSJRouter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJRouter.a; sourceTree = BUILT_PRODUCTS_DIR; }; + C44CE688B908C79E25D189814FA35DA7 /* libSJRouter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJRouter.a; path = libSJRouter.a; sourceTree = BUILT_PRODUCTS_DIR; }; C5A84A8C8BDFD9970E6B4389EFC41F06 /* SJFilmEditingLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJFilmEditingLoader.m; path = SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader/SJFilmEditingLoader.m; sourceTree = ""; }; C5D66937F38E668E3D2B187D147DF936 /* YYTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextView.m; path = YYText/YYTextView.m; sourceTree = ""; }; C6370DEC2909F2AC9B3C51F9F0C5147C /* SJFilmEditingSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFilmEditingSettings.h; path = SJVideoPlayer/SJFilmEditingControlLayer/ResourceLoader/SJFilmEditingSettings.h; sourceTree = ""; }; @@ -759,6 +762,7 @@ D239A9A911C9B5D4B64926A2DB1AF87F /* SJButtonProgressSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJButtonProgressSlider.m; path = SJVideoPlayer/SJProgressSlider/SJButtonProgressSlider.m; sourceTree = ""; }; D2438C3F4C551CE259D6A61F24AC6088 /* SJBaseVideoPlayer+PlayStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJBaseVideoPlayer+PlayStatus.h"; path = "SJBaseVideoPlayer/SJBaseVideoPlayer+PlayStatus.h"; sourceTree = ""; }; D297C412A2573F69CE94AD0F863C7D31 /* UINavigationController+SJVideoPlayerAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+SJVideoPlayerAdd.h"; path = "SJFullscreenPopGesture/UINavigationController+SJVideoPlayerAdd.h"; sourceTree = ""; }; + D41DA791EFBF0D5A0FE7623C18CA4895 /* SJEdgeControlLayerSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayerSettings.h; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerSettings.h; sourceTree = ""; }; D4267DC5981CEE1A575A1DE8679BA4F1 /* SJEdgeControlLayerAdapters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayerAdapters.m; path = SJVideoPlayer/Adapters/SJEdgeControlLayerAdapters.m; sourceTree = ""; }; D4435FE47EE8ED703742F7BC8DF4B3CB /* YYTextMagnifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextMagnifier.m; path = YYText/Component/YYTextMagnifier.m; sourceTree = ""; }; D51E7C4D5F9F91E81684933ABC43B4A1 /* Pods-SJVideoPlayer-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SJVideoPlayer-acknowledgements.plist"; sourceTree = ""; }; @@ -777,7 +781,6 @@ DEB700EE7C249FAF8C59DFB59C8EA6F1 /* SJDeviceVolumeAndBrightnessManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SJDeviceVolumeAndBrightnessManager.bundle; path = SJBaseVideoPlayer/SJDeviceVolumeAndBrightnessManager/ResourceLoader/SJDeviceVolumeAndBrightnessManager.bundle; sourceTree = ""; }; DF253481C1118AC07422D1FC8AE0852F /* SJAttributeWorker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAttributeWorker.h; path = SJAttributesFactory/SJAttributeWorker.h; sourceTree = ""; }; DFB358C1D290B51A9DFCA79234EC37E4 /* SJFilmEditingVideoCountDownView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFilmEditingVideoCountDownView.h; sourceTree = ""; }; - E19F0AC84D52201943222EB89C440509 /* SJEdgeControlLayerLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayerLoader.m; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerLoader.m; sourceTree = ""; }; E1BAC50D907042E3F64B2DE6B8E6765E /* SJVideoPlayerMoreSettingsView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerMoreSettingsView.m; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingsView.m; sourceTree = ""; }; E1BEE50FB29FA69F6C89A71189CBC5E1 /* SJPlaybackListController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJPlaybackListController-prefix.pch"; sourceTree = ""; }; E1E51A50D611F3F862EA347677982B7D /* SJControlLayerSwitcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJControlLayerSwitcher.m; path = SJVideoPlayer/Switcher/SJControlLayerSwitcher.m; sourceTree = ""; }; @@ -801,22 +804,19 @@ F099CB9F592FC9892BFF5CA59E760F8C /* SJVideoPlayerMoreSettingsFooterView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSettingsFooterView.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingsFooterView.h; sourceTree = ""; }; F16B0D9F3886826257178FE0F487F338 /* YYTextDebugOption.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextDebugOption.m; path = YYText/Component/YYTextDebugOption.m; sourceTree = ""; }; F1B777257E31B088BAAAD40B93D01310 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; - F2BF99FBF05485EC76832465224DEF75 /* SJEdgeControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayer.m; path = SJVideoPlayer/SJEdgeControlLayer/SJEdgeControlLayer.m; sourceTree = ""; }; F30E2793871A017941B695015BD47C02 /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; F322855AB2B818A29C8EA020EBD80EF8 /* YYTextTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextTransaction.h; path = YYText/Utility/YYTextTransaction.h; sourceTree = ""; }; F3A961F14A3D3DCC4CDF9FDE2B2164B7 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; F40F05E5D54B8C8AE445F59AE9B22F19 /* UIView+SJAnimationAdded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SJAnimationAdded.h"; path = "SJVideoPlayer/Common/UIView+SJAnimationAdded.h"; sourceTree = ""; }; F4A61B8B19D1AAF7B5ADA04AD3727A04 /* SJFilmEditingGIFCountDownView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJFilmEditingGIFCountDownView.m; sourceTree = ""; }; - F4AB0037A1AF5E7A1D99F0AEA85FFF04 /* SJEdgeControlLayerSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJEdgeControlLayerSettings.m; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerSettings.m; sourceTree = ""; }; F56D386E4CC9ADDB65E0B72C02AEC2B8 /* SJRouter-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJRouter-dummy.m"; sourceTree = ""; }; F593E3595A43BA610A2E0E3B26A1183A /* SJVideoPlayerURLAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerURLAsset.m; path = SJBaseVideoPlayer/Model/SJVideoPlayerURLAsset.m; sourceTree = ""; }; F8DB4C6E017B5F36F9AB97AF751D388A /* YYTextSelectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextSelectionView.h; path = YYText/Component/YYTextSelectionView.h; sourceTree = ""; }; FA5547013CA303054540BA9FB4AC4D84 /* YYLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYLabel.m; path = YYText/YYLabel.m; sourceTree = ""; }; FB42C223261B3C84E1D28BCF299A6677 /* YYTextUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYTextUtilities.h; path = YYText/Utility/YYTextUtilities.h; sourceTree = ""; }; FB7A562B48688E572F82283CB35A4C1A /* SJObserverHelper.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJObserverHelper.xcconfig; sourceTree = ""; }; - FC39B27A4B0B5DFDF71D5F4176D6AF13 /* libSJAttributesFactory.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSJAttributesFactory.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FC39B27A4B0B5DFDF71D5F4176D6AF13 /* libSJAttributesFactory.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJAttributesFactory.a; path = libSJAttributesFactory.a; sourceTree = BUILT_PRODUCTS_DIR; }; FC56B96DC38B2AE5886363E05A8E3623 /* SJVideoPlayerMoreSettingsColCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerMoreSettingsColCell.h; path = SJVideoPlayer/SJMoreSettingControlLayer/Core/SJVideoPlayerMoreSettingsColCell.h; sourceTree = ""; }; - FC74E50F5992479E25FE69C792D28769 /* SJEdgeControlLayerSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJEdgeControlLayerSettings.h; path = SJVideoPlayer/SJEdgeControlLayer/ResourceLoader/SJEdgeControlLayerSettings.h; sourceTree = ""; }; FE31773098CA458346E1E6E08A587CE3 /* SJScrollEntriesViewUserProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJScrollEntriesViewUserProtocol.h; path = SJScrollEntriesView/SJScrollEntriesViewUserProtocol.h; sourceTree = ""; }; FE8E75DD583D7A6FFC5F618A1FF8143E /* YYTextAsyncLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYTextAsyncLayer.m; path = YYText/Utility/YYTextAsyncLayer.m; sourceTree = ""; }; FFD990C27F2F5F15AB21525B3C848E0D /* SJControlLayerAppearManagerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJControlLayerAppearManagerProtocol.h; path = SJBaseVideoPlayer/Header/SJControlLayerAppearManagerProtocol.h; sourceTree = ""; }; @@ -995,6 +995,22 @@ name = SJNotReachableControlLayer; sourceTree = ""; }; + 19EB2D25AC9851D5E45EBC16A922E0CF /* ResourceLoader */ = { + isa = PBXGroup; + children = ( + 689AD61D5A75850B566CCB0E252318E7 /* SJEdgeControlLayerLoader.h */, + 0CF9C5B05452339B3E3E00C03706C7CB /* SJEdgeControlLayerLoader.m */, + D41DA791EFBF0D5A0FE7623C18CA4895 /* SJEdgeControlLayerSettings.h */, + 0567B884CE315C5D0E5380318795F884 /* SJEdgeControlLayerSettings.m */, + A0DBFC30AEE57B762037F9BF20E54ECC /* SJLightweightTopItem.h */, + 01301EEAA775A88823929EE3F3EAFBBC /* SJLightweightTopItem.m */, + 18408D79758D28A2DE86A627AAF1BE11 /* UIView+SJVideoPlayerSetting.h */, + 93567E5D8C74D2BD4A804580FD94CBD2 /* UIView+SJVideoPlayerSetting.m */, + 80B58979D3E087E9F6BA4F9B7EA1B1A6 /* Resources */, + ); + name = ResourceLoader; + sourceTree = ""; + }; 1C34FE6EBBCA0C0FA637F752F7AB5E45 /* SJMoreSettingControlLayer */ = { isa = PBXGroup; children = ( @@ -1042,15 +1058,6 @@ name = Pods; sourceTree = ""; }; - 2B7045AF6BBDA2FE96F0E0ECC99AE920 /* View */ = { - isa = PBXGroup; - children = ( - 8DEC99C43EF4C5EA6ED4F5CAA42C7035 /* SJVideoPlayerDraggingProgressView.h */, - 15AAC00B964A32A65649EEF39D5060A1 /* SJVideoPlayerDraggingProgressView.m */, - ); - name = View; - sourceTree = ""; - }; 2CCF6A9C005D54837A62546CAA0E475E /* Resources */ = { isa = PBXGroup; children = ( @@ -1059,22 +1066,6 @@ name = Resources; sourceTree = ""; }; - 30F298912AE78CD48287F0D330E35640 /* ResourceLoader */ = { - isa = PBXGroup; - children = ( - 79489A078AAC7F4195C5057E0D081BA0 /* SJEdgeControlLayerLoader.h */, - E19F0AC84D52201943222EB89C440509 /* SJEdgeControlLayerLoader.m */, - FC74E50F5992479E25FE69C792D28769 /* SJEdgeControlLayerSettings.h */, - F4AB0037A1AF5E7A1D99F0AEA85FFF04 /* SJEdgeControlLayerSettings.m */, - 983974C3561C7B2DCF9B82CF1A112C4F /* SJLightweightTopItem.h */, - 05832C37EA30D38B854477DE27EDB072 /* SJLightweightTopItem.m */, - 992BB84899FD95BD5183DAA644C7896E /* UIView+SJVideoPlayerSetting.h */, - 1944479D825C109CCD4E09311DED7122 /* UIView+SJVideoPlayerSetting.m */, - 936141644CAB846CFAE3D51B4694FC25 /* Resources */, - ); - name = ResourceLoader; - sourceTree = ""; - }; 36062B674279477A31DBCBB23DC67DCF /* Support Files */ = { isa = PBXGroup; children = ( @@ -1140,6 +1131,7 @@ 77463BB637D308D5619472C0827891F2 /* YYTextWeakProxy.m */, 36062B674279477A31DBCBB23DC67DCF /* Support Files */, ); + name = YYText; path = YYText; sourceTree = ""; }; @@ -1155,6 +1147,7 @@ 2E7C868D29A6BBB4AC99552C3749CD54 /* UIViewController+SJVideoPlayerAdd.m */, 01BEA7D9381DE1AE7111B094E0E3AA98 /* Support Files */, ); + name = SJFullscreenPopGesture; path = SJFullscreenPopGesture; sourceTree = ""; }; @@ -1273,6 +1266,7 @@ 4FF57BC563DA7D0B10B071EB75283660 /* Reachability.m */, D7CA91D83CAE66414B30346936DF1BB9 /* Support Files */, ); + name = Reachability; path = Reachability; sourceTree = ""; }; @@ -1305,6 +1299,7 @@ FE31773098CA458346E1E6E08A587CE3 /* SJScrollEntriesViewUserProtocol.h */, E21D350107F630A2BC7B3EE1D37467CB /* Support Files */, ); + name = SJScrollEntriesView; path = SJScrollEntriesView; sourceTree = ""; }; @@ -1316,6 +1311,7 @@ 147AB4757BF9E03342B7F74F2DDB3506 /* Core */, D5C342809A8D62324F82F961D9DF2337 /* Support Files */, ); + name = SJRouter; path = SJRouter; sourceTree = ""; }; @@ -1348,6 +1344,14 @@ name = SJLoadFailedControlLayer; sourceTree = ""; }; + 80B58979D3E087E9F6BA4F9B7EA1B1A6 /* Resources */ = { + isa = PBXGroup; + children = ( + 106ABBD7C805163D7F4BC7E9D893EA61 /* SJEdgeControlLayer.bundle */, + ); + name = Resources; + sourceTree = ""; + }; 83FEC95F265524BA70DA7F6C5CC20E30 /* Core */ = { isa = PBXGroup; children = ( @@ -1387,14 +1391,6 @@ name = Common; sourceTree = ""; }; - 936141644CAB846CFAE3D51B4694FC25 /* Resources */ = { - isa = PBXGroup; - children = ( - 3B4F321948F7FD085CC1AA48B94B8880 /* SJEdgeControlLayer.bundle */, - ); - name = Resources; - sourceTree = ""; - }; 93A61228E531E6437B9B95709CA6F68F /* ResourceLoader */ = { isa = PBXGroup; children = ( @@ -1450,6 +1446,7 @@ 1E5CDB77AF770D14824AFA2869EAE368 /* NSObject+SJObserverHelper.m */, 004A6F8478681856CD46E08F2C34494A /* Support Files */, ); + name = SJObserverHelper; path = SJObserverHelper; sourceTree = ""; }; @@ -1501,6 +1498,7 @@ DA7A6BA4F94537D124900427556AF89D /* Core */, 890B59D247EF0C45B8944F38306129EF /* Support Files */, ); + name = SJPlaybackListController; path = SJPlaybackListController; sourceTree = ""; }; @@ -1513,7 +1511,7 @@ 9239217D6CDF33EDEC24E368F4211628 /* Common */, D4F27B31D44F646C1E155160F9D84CC7 /* Pod */, 13E0AF69C6BD5EEB4B20EACF858BDCB1 /* Settings */, - E80B98F487B3910B67FF156B37C18342 /* SJEdgeControlLayer */, + DADEC917B15B7275A9ABA7717DBA96F6 /* SJEdgeControlLayer */, 523C50CFD5BE4C4D40005250BBC5D804 /* SJFilmEditingControlLayer */, 7FB2AC794578DD7E1D768FB0B8133936 /* SJLoadFailedControlLayer */, 61D5AC2F20F88882C90CB27E719141F0 /* SJLoadingView */, @@ -1551,6 +1549,7 @@ 1EF2B403FC332ECA8C1C4EDC5CF33CFD /* SJAttributeWorker.m */, E497402659353350EDD55978C787148D /* Support Files */, ); + name = SJAttributesFactory; path = SJAttributesFactory; sourceTree = ""; }; @@ -1596,6 +1595,7 @@ 420FBDA2EAF4755B9F0DCB5D9C198417 /* ViewController+MASAdditions.m */, 48BA807F2604FEC50DB27972FAD2C187 /* Support Files */, ); + name = Masonry; path = Masonry; sourceTree = ""; }; @@ -1644,6 +1644,15 @@ path = "../Target Support Files/SJRouter"; sourceTree = ""; }; + D79E38189A9B2F83E6C7D4F0A206122C /* View */ = { + isa = PBXGroup; + children = ( + 1281A97246FC4564CEFF6B8DE25B611B /* SJVideoPlayerDraggingProgressView.h */, + 62154A7DF97710AB978D6424BD4B5F91 /* SJVideoPlayerDraggingProgressView.m */, + ); + name = View; + sourceTree = ""; + }; D7CA91D83CAE66414B30346936DF1BB9 /* Support Files */ = { isa = PBXGroup; children = ( @@ -1673,6 +1682,17 @@ name = Core; sourceTree = ""; }; + DADEC917B15B7275A9ABA7717DBA96F6 /* SJEdgeControlLayer */ = { + isa = PBXGroup; + children = ( + 87F4BF490B0E4DE228CD91A0EA79C2DA /* SJEdgeControlLayer.h */, + 21E98900AEFBFBDAA0557B5A169A6C71 /* SJEdgeControlLayer.m */, + 19EB2D25AC9851D5E45EBC16A922E0CF /* ResourceLoader */, + D79E38189A9B2F83E6C7D4F0A206122C /* View */, + ); + name = SJEdgeControlLayer; + sourceTree = ""; + }; DBDB2C7C1E4773BE0402710CE4DDF7D0 /* Header */ = { isa = PBXGroup; children = ( @@ -1716,17 +1736,6 @@ path = "../Target Support Files/SJAttributesFactory"; sourceTree = ""; }; - E80B98F487B3910B67FF156B37C18342 /* SJEdgeControlLayer */ = { - isa = PBXGroup; - children = ( - B43150A1AE82BD41B430C4BC63AE8B02 /* SJEdgeControlLayer.h */, - F2BF99FBF05485EC76832465224DEF75 /* SJEdgeControlLayer.m */, - 30F298912AE78CD48287F0D330E35640 /* ResourceLoader */, - 2B7045AF6BBDA2FE96F0E0ECC99AE920 /* View */, - ); - name = SJEdgeControlLayer; - sourceTree = ""; - }; ED8A477E99A0300286FA6076BCF55487 /* SJBaseVideoPlayer */ = { isa = PBXGroup; children = ( @@ -1745,6 +1754,7 @@ 9D91C4D73804C436D3201F579DE5567A /* Support Files */, F689C0EB871B3B621449106FE703B180 /* Tool */, ); + name = SJBaseVideoPlayer; path = SJBaseVideoPlayer; sourceTree = ""; }; @@ -1839,6 +1849,69 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 20B77BBE6E6D51B223EBEE7D3E3424BD /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 34171179F946D4DF3825CD81CCDDB2CC /* SJButtonItemCollectionViewCell.h in Headers */, + 64AA4C014D8F9916FA809FEE25E12AD7 /* SJButtonProgressSlider.h in Headers */, + 0E49EFF6EBF623C5C8D957A1AFE6E943 /* SJCommonProgressSlider.h in Headers */, + B69EA04B7E045A8F5B3A3AB4E1572512 /* SJControlLayerCarrier.h in Headers */, + E066CAAA0F6D7A1D0934545AC4F5FCA5 /* SJControlLayerSwitcher.h in Headers */, + F7B591681CBF5EE8D8C4C4C1FCB825A5 /* SJEdgeControlButtonItem.h in Headers */, + E39C30048BC3CF5DE11E78999BCDAD69 /* SJEdgeControlLayer.h in Headers */, + 0573A37770F4990123C90B3A525F100A /* SJEdgeControlLayerAdapters.h in Headers */, + 05776A1163E0800D8B6D1217C9D3874C /* SJEdgeControlLayerItemAdapter.h in Headers */, + 74C25D9C1B57FD744237C5A34F4DEB0E /* SJEdgeControlLayerLoader.h in Headers */, + 15B73B2F456BF8991187690CDCEA8D7A /* SJEdgeControlLayerSettings.h in Headers */, + 950D552E82F3A45597E291631CA5D656 /* SJFilmEditingBackButton.h in Headers */, + 583E79B5FFA0115981CD9747592CEE0E /* SJFilmEditingButtonContainerView.h in Headers */, + 5C6A34BBE8E0EC884295692CFB3FE405 /* SJFilmEditingCommonViewLayer.h in Headers */, + A0A805E9B030B8E1B36D8287CF953EF9 /* SJFilmEditingControlLayer.h in Headers */, + C7666EAD1CB7A033AB3D5013F7553F95 /* SJFilmEditingGenerateResultControlLayer.h in Headers */, + 7F18FDFD1BA3EFE8899260505FF0FAA6 /* SJFilmEditingGIFCountDownView.h in Headers */, + 17A24564994B2175F60F4FCFD8665B32 /* SJFilmEditingInGIFRecordingsControlLayer.h in Headers */, + 350ED4953C6E1552CEA0983A2DB6CE65 /* SJFilmEditingInVideoRecordingsControlLayer.h in Headers */, + 122079C58671031665D964C0AA646531 /* SJFilmEditingLoader.h in Headers */, + 5F5FE527BBD97E9043700A3BF815A8BA /* SJFilmEditingResultShareItem.h in Headers */, + 227E58C232406B5F16E61AA97D874124 /* SJFilmEditingResultShareItemsContainerView.h in Headers */, + D9C7A396C6FA031FA5D334EFF8E2A376 /* SJFilmEditingSaveResultToAlbumHandler.h in Headers */, + 787291943860557B2BC57CFCC02AA237 /* SJFilmEditingSettings.h in Headers */, + 6B79B36F8B9EEAED36BB0F6058588E30 /* SJFilmEditingStatus.h in Headers */, + AD61FDED33EBF1959809DF83BB3DA739 /* SJFilmEditingVideoCountDownView.h in Headers */, + 6930F14C54497F7A35C32D5D82A77B6F /* SJLightweightTopItem.h in Headers */, + 96043A07203F45EACA6E1ED03BB9F181 /* SJLoadFailedControlLayer.h in Headers */, + 3FDC57686512094CEED573858196B604 /* SJLoadingView.h in Headers */, + 1640737C119E4CF3C01C16179F4D9D00 /* SJMoreSettingControlLayer.h in Headers */, + AA619AA962526ACF2BE5CF8653866EC1 /* SJMoreSettingsSlidersViewModel.h in Headers */, + 4C5B1C38042B17D4949A49EC7F07F2A2 /* SJNotReachableControlLayer.h in Headers */, + 6A6553690D662F0F54393709F881B7C6 /* SJProgressSlider.h in Headers */, + 62AA45429183F3790F7F235D0A5CE69B /* SJVideoPlayer.h in Headers */, + 5CA3ECA2FEED445BA2CE50B9443F4835 /* SJVideoPlayerAnimationHeader.h in Headers */, + 2B781FBCAE1EE1ED038429037AF4B487 /* SJVideoPlayerControlMaskView.h in Headers */, + 85DB45B8FD52158F756A695CA7F43A50 /* SJVideoPlayerDraggingProgressView.h in Headers */, + 7B1A266B8C906D1B3702ACFEB3B26145 /* SJVideoPlayerFilmEditingCommonHeader.h in Headers */, + 3B116F73D3F74FB3385D6CA89CA81AEF /* SJVideoPlayerFilmEditingConfig.h in Headers */, + DC98F4ECFD9D6BA9468B7BC3EF898773 /* SJVideoPlayerFilmEditingGeneratedResult.h in Headers */, + A8393D6C9C21D99623B376E57C43CD4C /* SJVideoPlayerFilmEditingParameters.h in Headers */, + 5A5A4AF2A4DBF6187D8089952E517A02 /* SJVideoPlayerMoreSetting+Exe.h in Headers */, + 5D1934EE08419B2FB7E85C6077CCF0A2 /* SJVideoPlayerMoreSetting.h in Headers */, + 72F3CB34F34BCBF9A97436CB754FAC6B /* SJVideoPlayerMoreSettingsColCell.h in Headers */, + 9DBD4419025C67D36EA8606620847B93 /* SJVideoPlayerMoreSettingSecondary.h in Headers */, + F2FD8728BF3E08ED966A0F8C12AD3719 /* SJVideoPlayerMoreSettingSecondaryColCell.h in Headers */, + D9A5E9ECADCEBC1189A4DFD075092037 /* SJVideoPlayerMoreSettingSecondaryView.h in Headers */, + D5E78AD1B5EA4A31C7D8518AE20734F9 /* SJVideoPlayerMoreSettingsFooterView.h in Headers */, + 2F7F45ADFAE407F0FCC0BE19006E8DFF /* SJVideoPlayerMoreSettingsSecondaryHeaderView.h in Headers */, + D2A72B439400807ED9010A43A6EA3D90 /* SJVideoPlayerMoreSettingsSlidersView.h in Headers */, + E0E99520D8799FF668FF3AA776FF8CFD /* SJVideoPlayerMoreSettingsView.h in Headers */, + 7309624A7D7F96375FB4F98D72A84EE1 /* SJVideoPlayerSettings.h in Headers */, + 46C46DE602FED7AA70E13BF9E91B2471 /* SJVideoPlayerURLAsset+SJControlAdd.h in Headers */, + 9A693B9E261E7E7C3F3DDA1CD790B026 /* UIView+SJAnimationAdded.h in Headers */, + A27EF76A7044F82CE59538A32CF2AED2 /* UIView+SJControlAdd.h in Headers */, + FBBAFA4934D9AA29D8E7D5F46B8F9275 /* UIView+SJVideoPlayerSetting.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 2E34BC7D812236BE8BED03DCCD6D9D9C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2019,69 +2092,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F85DC0A52BCCBF93A085CED3BD12F564 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F32846192FB389B71824E792C5E6CD3C /* SJButtonItemCollectionViewCell.h in Headers */, - 5B6B9881A2A5D3CDBE8AF61D7F900F40 /* SJButtonProgressSlider.h in Headers */, - 53DF0DD1A1A06F1ADD05E5D8DF7E056B /* SJCommonProgressSlider.h in Headers */, - 562408ADFF426D6DD058B3D45A3D8877 /* SJControlLayerCarrier.h in Headers */, - AE610C533D882B2F6522BF31D423949A /* SJControlLayerSwitcher.h in Headers */, - 96275C4B90A380CDCFB7428435B4E4C2 /* SJEdgeControlButtonItem.h in Headers */, - 73C64A021C1DC76534F380C9BFB94E6A /* SJEdgeControlLayer.h in Headers */, - 022C52E24EB95D66A7498FA7C007BA16 /* SJEdgeControlLayerAdapters.h in Headers */, - E8156CD16ADC61AA3BDFCC464A7E98C9 /* SJEdgeControlLayerItemAdapter.h in Headers */, - F4D6AC0633EBF721D2AF31C61B487982 /* SJEdgeControlLayerLoader.h in Headers */, - D1DE86EC11AD020D26D06CCE7967ED1E /* SJEdgeControlLayerSettings.h in Headers */, - 8E524C432D7CDAE963DC631080B0A764 /* SJFilmEditingBackButton.h in Headers */, - E8D153C14674F7417334D24456F0E7B2 /* SJFilmEditingButtonContainerView.h in Headers */, - 73395E6D3EDF24C949714EDBAE338CBE /* SJFilmEditingCommonViewLayer.h in Headers */, - 913E755BD3F661D2E1C1D6C2D4D9D63B /* SJFilmEditingControlLayer.h in Headers */, - 5F941219CF18B41A854C3B6D575DEF78 /* SJFilmEditingGenerateResultControlLayer.h in Headers */, - 346A6CCA2612ED2B0444DCCCE67D17C3 /* SJFilmEditingGIFCountDownView.h in Headers */, - 0088A796550A965E1E8D640F235488F2 /* SJFilmEditingInGIFRecordingsControlLayer.h in Headers */, - 1267B1DB59D6786E857C290D3F2E8DDD /* SJFilmEditingInVideoRecordingsControlLayer.h in Headers */, - FA7137E10D8594AB9AA14BCECBEC7335 /* SJFilmEditingLoader.h in Headers */, - E216B1B4FF79BFB703947840F8FBDE91 /* SJFilmEditingResultShareItem.h in Headers */, - 9B1D067F278B338341CD242EAA617CF7 /* SJFilmEditingResultShareItemsContainerView.h in Headers */, - 4E4073772EC0F22EA37C6EA376971076 /* SJFilmEditingSaveResultToAlbumHandler.h in Headers */, - B3243F78E2454A19075807685812A330 /* SJFilmEditingSettings.h in Headers */, - 47FB8DFFACB4452DA9026185EF2F4C74 /* SJFilmEditingStatus.h in Headers */, - 63842A47FB1471FBF5B0E0D16ADEB847 /* SJFilmEditingVideoCountDownView.h in Headers */, - F03B82E0F2DBFE828B20A66E19D6D8B9 /* SJLightweightTopItem.h in Headers */, - 1F1561561B512452EA23CF15D3258664 /* SJLoadFailedControlLayer.h in Headers */, - F5B69BCB3CD4D387A487BAEDA44B21E9 /* SJLoadingView.h in Headers */, - E8F93904243197850215D3033B3B1649 /* SJMoreSettingControlLayer.h in Headers */, - FA1958944CCAF226DA85D8E59D35378F /* SJMoreSettingsSlidersViewModel.h in Headers */, - 3C9B5EE61863B9D264BAE9758C1B6CA2 /* SJNotReachableControlLayer.h in Headers */, - 5F64B4D783A434CD426511FC6B27ECC7 /* SJProgressSlider.h in Headers */, - 3CA202D6100497639F1A3DAE10D67934 /* SJVideoPlayer.h in Headers */, - 4862394844E80B552D73DBBAC512520E /* SJVideoPlayerAnimationHeader.h in Headers */, - B2DFDB2A7930C63A77F7080614E2080B /* SJVideoPlayerControlMaskView.h in Headers */, - 5FD3FBB286823C395DD2400F47BFC976 /* SJVideoPlayerDraggingProgressView.h in Headers */, - 0F35071023ED5F46ADC5A354C7A2925E /* SJVideoPlayerFilmEditingCommonHeader.h in Headers */, - 4089CBD08EF7F7362D95DF412E4F5995 /* SJVideoPlayerFilmEditingConfig.h in Headers */, - 99527CC66418BAB8A1F005F879D474A8 /* SJVideoPlayerFilmEditingGeneratedResult.h in Headers */, - 33FB9AEE1D00EA52AF5383287E493E3E /* SJVideoPlayerFilmEditingParameters.h in Headers */, - F6F6FB3237C65A094EC871BFABE7D1D1 /* SJVideoPlayerMoreSetting+Exe.h in Headers */, - E880418AE367C47B63AB3E74CE44CD08 /* SJVideoPlayerMoreSetting.h in Headers */, - D8F2F54AC5A695F67DB8B7B2198CEEFD /* SJVideoPlayerMoreSettingsColCell.h in Headers */, - F4208B2DF3CA801B055E34D4D1D430E0 /* SJVideoPlayerMoreSettingSecondary.h in Headers */, - A01DEB989F99FB40414756F9AB799D15 /* SJVideoPlayerMoreSettingSecondaryColCell.h in Headers */, - 9742267DC662AD199D4D810BC3DAA921 /* SJVideoPlayerMoreSettingSecondaryView.h in Headers */, - D2BC3A66188635074398D1BDBD8C55A7 /* SJVideoPlayerMoreSettingsFooterView.h in Headers */, - A4726300D63B2B8AA2663748E4533FF1 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.h in Headers */, - 1C8F90B8085E03206452182C98792014 /* SJVideoPlayerMoreSettingsSlidersView.h in Headers */, - 3FB05026F146179459C8048E80A1C061 /* SJVideoPlayerMoreSettingsView.h in Headers */, - EFA62E0B0BD7DAFA7A1CCCEB7AFF02C8 /* SJVideoPlayerSettings.h in Headers */, - 77782F44BE6C51EDF14AD39F0C2CB2CE /* SJVideoPlayerURLAsset+SJControlAdd.h in Headers */, - 6E9EBE44EEBB22307D47E8ADF2EC598A /* UIView+SJAnimationAdded.h in Headers */, - 608EE96C06A1EBDFC6435CB5B4E40894 /* UIView+SJControlAdd.h in Headers */, - E14D5BCAA1B1E5758C64D263422147EF /* UIView+SJVideoPlayerSetting.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -2151,8 +2161,8 @@ isa = PBXNativeTarget; buildConfigurationList = D6486DEB58514389B352DE69DD94CA1D /* Build configuration list for PBXNativeTarget "SJVideoPlayer" */; buildPhases = ( - F85DC0A52BCCBF93A085CED3BD12F564 /* Headers */, - B891E4420077CE9B636C4251639365E9 /* Sources */, + 20B77BBE6E6D51B223EBEE7D3E3424BD /* Headers */, + 59B1153B0F3731A45CAA67CDE197A19A /* Sources */, E7DD9D9AF40E8EA6357FFDC96837FEE7 /* Frameworks */, ); buildRules = ( @@ -2392,6 +2402,68 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 59B1153B0F3731A45CAA67CDE197A19A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F5A8BA9F906EB4071C349102B15F3E1D /* SJButtonItemCollectionViewCell.m in Sources */, + 84F2291FE2274609FEC79B72AF3E6219 /* SJButtonProgressSlider.m in Sources */, + 341C57BF0E255BB93D8CB9BA2045DD6F /* SJCommonProgressSlider.m in Sources */, + 0E8D2B9CA1E13D84FBCFA3563A34F701 /* SJControlLayerCarrier.m in Sources */, + 247066F92317E075B46F274F8F37AFD4 /* SJControlLayerSwitcher.m in Sources */, + 5B66A666B1F709F317B6021C97D1D035 /* SJEdgeControlButtonItem.m in Sources */, + 366C5D489DEFC6D990F21F25EE9935D0 /* SJEdgeControlLayer.m in Sources */, + 9F444791636A798F51D09C21AB9B914C /* SJEdgeControlLayerAdapters.m in Sources */, + DB07417803DEB35D4FDD2DC2209C3D30 /* SJEdgeControlLayerItemAdapter.m in Sources */, + B3825D73074CD1285C5793B8886BE4FB /* SJEdgeControlLayerLoader.m in Sources */, + 21E599F5DBAED63495923F12A9A5492E /* SJEdgeControlLayerSettings.m in Sources */, + 7B73895B0A9776F97E1D9874E6952940 /* SJFilmEditingBackButton.m in Sources */, + 2A8FEAE41FFFB431B84038ED6F6FE84F /* SJFilmEditingButtonContainerView.m in Sources */, + 492FAA09D85272E3E35378885794AD65 /* SJFilmEditingCommonViewLayer.m in Sources */, + B2417642C2BA10DA667970650EC418AC /* SJFilmEditingControlLayer.m in Sources */, + 0724F2AFC8C492C0BF51D0E60A47CC22 /* SJFilmEditingGenerateResultControlLayer.m in Sources */, + 6DE40DE0D89ADB63DCE9C4E68EF9C001 /* SJFilmEditingGIFCountDownView.m in Sources */, + 5A4D573CDBF5BCA78183B58474FC6A56 /* SJFilmEditingInGIFRecordingsControlLayer.m in Sources */, + 6191EAED1023EDB1D411B93CF18001A3 /* SJFilmEditingInVideoRecordingsControlLayer.m in Sources */, + 812A0568E550226288316E15B7E6F42C /* SJFilmEditingLoader.m in Sources */, + 11CE9126A75E11D8B215A8C4292AFB7A /* SJFilmEditingResultShareItem.m in Sources */, + 55131929436DACBD5CAC2C0F74802A17 /* SJFilmEditingResultShareItemsContainerView.m in Sources */, + FC1FFFE3B6EA7B06095AD344249BA3B4 /* SJFilmEditingSaveResultToAlbumHandler.m in Sources */, + 082CDB74DD62F9E72231FBE973919BA3 /* SJFilmEditingSettings.m in Sources */, + 33668BF6AB7366D04DC4480DDFD667BF /* SJFilmEditingVideoCountDownView.m in Sources */, + D9B33C4BE934517B4F7D08C7DDDE49F5 /* SJLightweightTopItem.m in Sources */, + 86D5C2C416AEF841EA92582DD8562634 /* SJLoadFailedControlLayer.m in Sources */, + 0BACE4416FAF0E8FC7A87EBFFDD1F9B2 /* SJLoadingView.m in Sources */, + 06A6F156ABB5B5B983325C41195CF527 /* SJMoreSettingControlLayer.m in Sources */, + 62C876C3A2B517BE8C198C0864CEB8FF /* SJMoreSettingsSlidersViewModel.m in Sources */, + 3FE31457C546B49AF39CA12235E99492 /* SJNotReachableControlLayer.m in Sources */, + CC5F7305CA8E87EFEDC6CD78ECE00119 /* SJProgressSlider.m in Sources */, + 9F85355F44EF6406454B0B2F03859314 /* SJVideoPlayer-dummy.m in Sources */, + A86AAA870B951AA5DBD6E0544ED6DAE5 /* SJVideoPlayer.m in Sources */, + A4A100A2A2D0DDEBA183B366FB1D5BCE /* SJVideoPlayerAnimationHeader.m in Sources */, + FFE1155BAAAC7EF5C39EE34E54BCCC1A /* SJVideoPlayerControlMaskView.m in Sources */, + 7A5396E1AFA2E90A8F5643A1F97316FB /* SJVideoPlayerDraggingProgressView.m in Sources */, + 3CB39956CABAB86995FB9508E3581479 /* SJVideoPlayerFilmEditingConfig.m in Sources */, + 9A77826151219199E408D814935DDA2B /* SJVideoPlayerFilmEditingGeneratedResult.m in Sources */, + 6A732B084C8E27907B67C2FB4B80E1A2 /* SJVideoPlayerFilmEditingParameters.m in Sources */, + 950116BFFFB891FCD89BF2DEC4A0FFBE /* SJVideoPlayerMoreSetting+Exe.m in Sources */, + 155E341A32529F72CCF27A7332C43F0C /* SJVideoPlayerMoreSetting.m in Sources */, + 52BA1756EC36FF00AAC9420D47858730 /* SJVideoPlayerMoreSettingsColCell.m in Sources */, + EE4D8D3B6EB6628B44CEA06745DF8A93 /* SJVideoPlayerMoreSettingSecondary.m in Sources */, + 50EA9C4954F125DB477B0C07EE133AC8 /* SJVideoPlayerMoreSettingSecondaryColCell.m in Sources */, + 4077CC684FE7B02EA5EA6223DE0B2227 /* SJVideoPlayerMoreSettingSecondaryView.m in Sources */, + 14D04D76B69FE0B940223E5FFEC59A95 /* SJVideoPlayerMoreSettingsFooterView.m in Sources */, + 816691C2143DECEF89CE66401A67CA30 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.m in Sources */, + 1F8CFF7430FE110AF4A04FF145572953 /* SJVideoPlayerMoreSettingsSlidersView.m in Sources */, + A7665EEB944D70ABFC08D560CEDF713B /* SJVideoPlayerMoreSettingsView.m in Sources */, + 163A8707D06E1C373CED85962FFAEA38 /* SJVideoPlayerSettings.m in Sources */, + 0BA26C5CD18FDA6E3FAF922C58C857DF /* SJVideoPlayerURLAsset+SJControlAdd.m in Sources */, + 7CB22A0DFAC8804340C80E29E4614404 /* UIView+SJAnimationAdded.m in Sources */, + BF7CEB376BBF53381177BB090B5D0C99 /* UIView+SJControlAdd.m in Sources */, + DD148CE2FD70AE4CFC311348B743E1B4 /* UIView+SJVideoPlayerSetting.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5FB73BE500977CAA7F3DD168241CE7EE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2499,68 +2571,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B891E4420077CE9B636C4251639365E9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 92C14F6D42EC19EAAD5C695325ED0A36 /* SJButtonItemCollectionViewCell.m in Sources */, - 0D074B7F671361D1B928F458AF8FA790 /* SJButtonProgressSlider.m in Sources */, - EA318355CB3D556B28D42501820E7282 /* SJCommonProgressSlider.m in Sources */, - 8EA98CF84C982D6D5865B1EAE58BD5CB /* SJControlLayerCarrier.m in Sources */, - 6FF3D853727F0F02EC8BD7811AB50F22 /* SJControlLayerSwitcher.m in Sources */, - 19C744FF71C6F206821A9B5191A1F3E2 /* SJEdgeControlButtonItem.m in Sources */, - A68BE539D544A6BEEB35D7DA99A7239E /* SJEdgeControlLayer.m in Sources */, - 8EE0631C8775AAB6DEFAB366D2C3A5C2 /* SJEdgeControlLayerAdapters.m in Sources */, - D1D3FDEDBB5EFF731474479A6C6D2D49 /* SJEdgeControlLayerItemAdapter.m in Sources */, - 1CF717F40FE51BBE3C40D6BE29AE8C95 /* SJEdgeControlLayerLoader.m in Sources */, - 7D1C3C8FA55AD43E80A4A9D0675F4618 /* SJEdgeControlLayerSettings.m in Sources */, - 51BD921A3E68EC1E827255C35584920D /* SJFilmEditingBackButton.m in Sources */, - 001D726B65BDD51B79D7C2E604AD905D /* SJFilmEditingButtonContainerView.m in Sources */, - 54676B72A909F38BCB61817113A1FA1E /* SJFilmEditingCommonViewLayer.m in Sources */, - 02638EE973E3328FF5BE57BD5794500A /* SJFilmEditingControlLayer.m in Sources */, - 23194E77E44F0E14BA9EF19E8DE7714E /* SJFilmEditingGenerateResultControlLayer.m in Sources */, - 5D68FBB6791FF7CF4AC9F09CCDB0BDFD /* SJFilmEditingGIFCountDownView.m in Sources */, - 1042A991F981A326D58EDBFB7C86B154 /* SJFilmEditingInGIFRecordingsControlLayer.m in Sources */, - 81A0E65AEBE6A139097BB22321A14C2B /* SJFilmEditingInVideoRecordingsControlLayer.m in Sources */, - 2E75F25F75ACACBDD4FB8F421A0695D9 /* SJFilmEditingLoader.m in Sources */, - 67F3FD5537461560EA1A8CAC3266B6F9 /* SJFilmEditingResultShareItem.m in Sources */, - 569CC1E71ACA63F98EFAF06095E66A95 /* SJFilmEditingResultShareItemsContainerView.m in Sources */, - 5EA179AF66373C86365D780A06877929 /* SJFilmEditingSaveResultToAlbumHandler.m in Sources */, - 202EFD3BE1159EBFC730E0DC7258C121 /* SJFilmEditingSettings.m in Sources */, - 261D38753FC1D8C3CF942492FE617356 /* SJFilmEditingVideoCountDownView.m in Sources */, - 62C9E13EB29EC65040BD4D85A887953D /* SJLightweightTopItem.m in Sources */, - 9A533E0C47357767AC050B75BB4308A8 /* SJLoadFailedControlLayer.m in Sources */, - EE058C70F9B0064430807AF1D95821E5 /* SJLoadingView.m in Sources */, - A4945910ECC92EC2CA1686312F930E38 /* SJMoreSettingControlLayer.m in Sources */, - B9CE1C110BD2707E5F42E2ADDB16B439 /* SJMoreSettingsSlidersViewModel.m in Sources */, - EFCA5EC63398A9B7B9ECC55077DFC996 /* SJNotReachableControlLayer.m in Sources */, - 6737F18D99B8CE6AFBADF20A15EC2DB6 /* SJProgressSlider.m in Sources */, - 78B99F7EC5F7C1ED131A8CA293A6A77C /* SJVideoPlayer-dummy.m in Sources */, - 3EB4781492209BA0F65D2C21866C79DF /* SJVideoPlayer.m in Sources */, - 0C5F97F71AE10C3FCBA6B9B32A662A95 /* SJVideoPlayerAnimationHeader.m in Sources */, - 70B5F46F4856A9C1D02D9CCCE7BD8D68 /* SJVideoPlayerControlMaskView.m in Sources */, - AE6E478DFBDD56CCD6ECA424F5910E30 /* SJVideoPlayerDraggingProgressView.m in Sources */, - 8C1077CD2B10CFA383FC843C3517C13C /* SJVideoPlayerFilmEditingConfig.m in Sources */, - 9A6C79359EE62BB0CC9CAB9CF5075BC3 /* SJVideoPlayerFilmEditingGeneratedResult.m in Sources */, - 13F8F160368880ECFA96E07938841568 /* SJVideoPlayerFilmEditingParameters.m in Sources */, - E1337FA4D38F810995D6CEEA9F9244C4 /* SJVideoPlayerMoreSetting+Exe.m in Sources */, - E5E78338AE1F30C8C205748598D54611 /* SJVideoPlayerMoreSetting.m in Sources */, - A57355B162F4AF78811374975D184741 /* SJVideoPlayerMoreSettingsColCell.m in Sources */, - A3D22B92EE4F28922155D79E419CECA4 /* SJVideoPlayerMoreSettingSecondary.m in Sources */, - 17CE6303669560481FD8E3332D92733C /* SJVideoPlayerMoreSettingSecondaryColCell.m in Sources */, - E09215A2FF255A4ED7711C35BC82EBF9 /* SJVideoPlayerMoreSettingSecondaryView.m in Sources */, - E6A17052EE1FBB66A0EADF4ECD937E58 /* SJVideoPlayerMoreSettingsFooterView.m in Sources */, - C58E6E488617718B2D3F32073C9A6108 /* SJVideoPlayerMoreSettingsSecondaryHeaderView.m in Sources */, - 878F7E66FE5C0809BE7D3ACECF9A8039 /* SJVideoPlayerMoreSettingsSlidersView.m in Sources */, - 7BEB9D394AC33DB7F2B4D927AB428C5B /* SJVideoPlayerMoreSettingsView.m in Sources */, - 8A7021DC5B53BBBEA6C7C6067312AFB2 /* SJVideoPlayerSettings.m in Sources */, - A4B6775D9C38FEF3042083A43640AE71 /* SJVideoPlayerURLAsset+SJControlAdd.m in Sources */, - 7D44A615EDC950924DC9AC1D4F408102 /* UIView+SJAnimationAdded.m in Sources */, - 12C852DFA25B14ED389A22980C844B95 /* UIView+SJControlAdd.m in Sources */, - 83710D9CE50BDD85DF42CFE18F2C302A /* UIView+SJVideoPlayerSetting.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; EAAA724F7E0D3F5944D899222E482ACD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2795,7 +2805,8 @@ MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 4.2; SYMROOT = "${SRCROOT}/../build"; }; diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJMediaPlaybackProtocol.h b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJMediaPlaybackProtocol.h index 8f30af7fc..312bb9140 100755 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJMediaPlaybackProtocol.h +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJMediaPlaybackProtocol.h @@ -42,8 +42,10 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSTimeInterval currentTime; @property (nonatomic, readonly) NSTimeInterval duration; -@property (nonatomic, readonly) NSTimeInterval bufferLoadedTime; @property (nonatomic, readonly) SJPlayerBufferStatus bufferStatus; +@property (nonatomic, readonly) NSTimeInterval bufferLoadedTime; +@property (nonatomic, readonly) NSTimeInterval bufferWatingTime; +- (void)updateBufferStatus; @property (nonatomic, readonly) CGSize presentationSize; @property (nonatomic, readonly) BOOL isReadyForDisplay; @@ -107,14 +109,13 @@ NS_ASSUME_NONNULL_BEGIN - (void)playbackController:(id)controller prepareToPlayStatusDidChange:(SJMediaPlaybackPrepareStatus)prepareStatus; - (void)playbackController:(id)controller durationDidChange:(NSTimeInterval)duration; - - (void)playbackController:(id)controller currentTimeDidChange:(NSTimeInterval)currentTime; - (void)mediaDidPlayToEndForPlaybackController:(id)controller; - (void)playbackController:(id)controller bufferLoadedTimeDidChange:(NSTimeInterval)bufferLoadedTime; - - (void)playbackController:(id)controller bufferStatusDidChange:(SJPlayerBufferStatus)bufferStatus; +- (void)playbackController:(id)controller bufferWatingTimeDidChange:(NSTimeInterval)bufferWatingTime; - (void)playbackController:(id)controller presentationSizeDidChange:(CGSize)presentationSize; diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJPlayerGestureControlProtocol.h b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJPlayerGestureControlProtocol.h index a3a8dcc31..b7d132eff 100644 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJPlayerGestureControlProtocol.h +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Header/SJPlayerGestureControlProtocol.h @@ -52,6 +52,7 @@ typedef enum : NSUInteger { @protocol SJPlayerGestureControl - (instancetype)initWithTargetView:(__weak UIView *)view; +@property (nonatomic, weak, readonly, nullable) UIView *targetView; @property (nonatomic, copy, nullable) BOOL(^gestureRecognizerShouldTrigger)(id control, SJPlayerGestureType type, CGPoint location); @property (nonatomic, copy, nullable) void(^singleTapHandler)(id control, CGPoint location); @property (nonatomic, copy, nullable) void(^doubleTapHandler)(id control, CGPoint location); diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.h b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.h index dafbfbf7e..58e4ad87f 100755 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.h +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.h @@ -9,20 +9,38 @@ #import #import "SJAVMediaPlayAssetProtocol.h" #import "SJPlayerBufferStatus.h" - @protocol SJAVMediaPlayAssetPropertiesObserverDelegate; @class SJAVMediaPlayAssetPropertiesObserver; +UIKIT_EXTERN NSNotificationName const SJAVMediaDidPlayToEndTimeNotification; +UIKIT_EXTERN NSNotificationName const SJAVMediaPlaybackTimeDidChangeNotification; +UIKIT_EXTERN NSNotificationName const SJAVMediaPlaybackDurationDidChangeNotificationn; +UIKIT_EXTERN NSNotificationName const SJAVMediaBufferStatusDidChangeNotification; +UIKIT_EXTERN NSNotificationName const SJAVMediaBufferLoadedTimeRangesDidChangeNotification; +UIKIT_EXTERN NSNotificationName const SJAVMediaBufferWatingTimeDidChangeNotification; +UIKIT_EXTERN NSNotificationName const SJAVMediaPresentationSizeDidChangeNotification; +UIKIT_EXTERN NSNotificationName const SJAVMediaPlayerItemStatusDidChangeNotification; + + NS_ASSUME_NONNULL_BEGIN @interface SJAVMediaPlayAsset: NSObject - (instancetype)initWithURL:(NSURL *)URL; - (instancetype)initWithURL:(NSURL *)URL specifyStartTime:(NSTimeInterval)specifyStartTime; - (instancetype)initWithAVAsset:(__kindof AVAsset *)asset specifyStartTime:(NSTimeInterval)specifyStartTime; -@property (nonatomic, readonly) NSTimeInterval specifyStartTime; -@property (nonatomic, strong, readonly, nullable) NSURL *URL; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; + +@property (nonatomic, strong, readonly, nullable) NSURL *URL; +@property (nonatomic, readonly) NSTimeInterval specifyStartTime; +@property (nonatomic, readonly) CMTime duration; +@property (nonatomic, readonly) CMTime currentTime; +@property (nonatomic, readonly) SJPlayerBufferStatus bufferStatus; +@property (nonatomic, readonly) NSTimeInterval bufferWatingTime; +@property (nonatomic, readonly) CMTimeRange bufferLoadedTime; +@property (nonatomic, readonly) CGSize presentationSize; +@property (nonatomic, readonly) AVPlayerItemStatus playerItemStatus; +- (void)updateBufferStatus; @end @@ -33,7 +51,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, weak, nullable) id delegate; @property (nonatomic, readonly) AVPlayerItemStatus playerItemStatus; @property (nonatomic, readonly) SJPlayerBufferStatus bufferStatus; -@property (nonatomic, readonly) NSTimeInterval bufferLoadedTime; +@property (nonatomic, readonly) NSTimeInterval bufferLoadedTime; // 已缓冲到的时间 +@property (nonatomic, readonly) NSTimeInterval bufferWatingTime; // 如果状态为`Unplayable`, 则每等待`1`秒, 此属性的值将`+1`, 当缓冲状态为`Playable`后, 将会被置为 0 @property (nonatomic, readonly) NSTimeInterval currentTime; @property (nonatomic, readonly) CGSize presentationSize; @property (nonatomic, readonly) NSTimeInterval duration; @@ -48,6 +67,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer currentTimeDidChange:(NSTimeInterval)currentTime; - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer bufferLoadedTimeDidChange:(NSTimeInterval)bufferLoadedTime; - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer bufferStatusDidChange:(SJPlayerBufferStatus)bufferStatus; +- (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer bufferWatingTimeDidChange:(NSTimeInterval)bufferWatingTime; - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer presentationSizeDidChange:(CGSize)presentationSize; - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer playerItemStatusDidChange:(AVPlayerItemStatus)playerItemStatus; - (void)playDidToEndForObserver:(SJAVMediaPlayAssetPropertiesObserver *)observer; diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.m b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.m index 06c169d8e..238573032 100755 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.m +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/Core/SJAVMediaPlayAsset.m @@ -20,13 +20,14 @@ inline static bool isFloatZero(float value) { return fabsf(value) <= 0.00001f; } -static NSNotificationName const SJAVMediaPlayerItemDidPlayToEndTimeNotification = @"SJAVMediaPlayerItemDidPlayToEndTimeNotification"; -static NSNotificationName const SJAVMediaPlaybackTimeDidChangeNotification = @"SJAVMediaPlaybackTimeDidChangeNotification"; -static NSNotificationName const SJAVMediaPlaybackDurationDidChangeNotificationn = @"SJAVMediaPlaybackDurationDidChangeNotificationn"; -static NSNotificationName const SJAVMediaLoadedTimeRangesDidChangeNotification = @"SJAVMediaLoadedTimeRangesDidChangeNotification"; -static NSNotificationName const SJAVMediaPlaybackBufferStatusDidChangeNotification = @"SJAVMediaPlaybackBufferStatusDidChangeNotification"; -static NSNotificationName const SJAVMediakPresentationSizeDidChangeNotification = @"SJAVMediakPresentationSizeDidChangeNotification"; -static NSNotificationName const SJAVMediaPlayerItemStatusDidChangeNotification = @"SJAVMediaPlayerItemStatusDidChangeNotification"; +NSNotificationName const SJAVMediaDidPlayToEndTimeNotification = @"SJAVMediaDidPlayToEndTimeNotification"; +NSNotificationName const SJAVMediaPlaybackTimeDidChangeNotification = @"SJAVMediaPlaybackTimeDidChangeNotification"; +NSNotificationName const SJAVMediaPlaybackDurationDidChangeNotificationn = @"SJAVMediaPlaybackDurationDidChangeNotificationn"; +NSNotificationName const SJAVMediaBufferLoadedTimeRangesDidChangeNotification = @"SJAVMediaBufferLoadedTimeRangesDidChangeNotification"; +NSNotificationName const SJAVMediaBufferStatusDidChangeNotification = @"SJAVMediaBufferStatusDidChangeNotification"; +NSNotificationName const SJAVMediaBufferWatingTimeDidChangeNotification = @"SJAVMediaBufferWatingTimeDidChangeNotification"; +NSNotificationName const SJAVMediaPresentationSizeDidChangeNotification = @"SJAVMediaPresentationSizeDidChangeNotification"; +NSNotificationName const SJAVMediaPlayerItemStatusDidChangeNotification = @"SJAVMediaPlayerItemStatusDidChangeNotification"; @interface SJAVMediaPlayAsset() @property (nonatomic, strong, nullable) AVURLAsset *URLAsset; @@ -35,16 +36,17 @@ @interface SJAVMediaPlayAsset() @property (nonatomic) CMTime duration; @property (nonatomic) CMTime currentTime; -@property (nonatomic) CMTimeRange bufferLoadedTime; @property (nonatomic) SJPlayerBufferStatus bufferStatus; +@property (nonatomic) NSTimeInterval bufferWatingTime; +@property (nonatomic) CMTimeRange bufferLoadedTime; @property (nonatomic) CGSize presentationSize; @property (nonatomic) AVPlayerItemStatus playerItemStatus; @end @implementation SJAVMediaPlayAsset { - id _noteToken; id _currentTimeNoteToken; id _AVPLayerItemDidPlayToEndNoteToken; + NSTimer *_Nullable _watingTimer; } - (instancetype)initWithURL:(NSURL *)URL { @@ -75,7 +77,6 @@ - (instancetype)initWithAVAsset:(__kindof AVAsset *)asset specifyStartTime:(NSTi - (void)dealloc { if ( _currentTimeNoteToken ) [_player removeTimeObserver:_currentTimeNoteToken]; - if ( _noteToken ) [NSNotificationCenter.defaultCenter removeObserver:_noteToken]; if ( _AVPLayerItemDidPlayToEndNoteToken ) [NSNotificationCenter.defaultCenter removeObserver:_AVPLayerItemDidPlayToEndNoteToken]; #ifdef DEBUG NSLog(@"%d - %s", (int)__LINE__, __func__); @@ -104,8 +105,8 @@ - (void)_initializeAVPlayer { }); } -static NSString *kLoadedTimeRanges = @"loadedTimeRanges"; static NSString *kDuration = @"duration"; +static NSString *kLoadedTimeRanges = @"loadedTimeRanges"; static NSString *kPlaybackBufferEmpty = @"playbackBufferEmpty"; static NSString *kPresentationSize = @"presentationSize"; static NSString *kPlayerItemStatus = @"status"; @@ -135,7 +136,7 @@ - (void)_observeProperties { [NSNotificationCenter.defaultCenter addObserverForName:AVPlayerItemDidPlayToEndTimeNotification object:_playerItem queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { __strong typeof(_self) self = _self; if ( !self ) return ; - [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaPlayerItemDidPlayToEndTimeNotification object:self]; + [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaDidPlayToEndTimeNotification object:self]; }]; } @@ -147,7 +148,7 @@ - (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable i dispatch_async(dispatch_get_main_queue(), ^{ if ( context == &kLoadedTimeRanges ) { [self _updateBufferLoadedTime]; - [self _updateBufferStatus]; + [self updateBufferStatus]; } else if ( context == &kPlayerItemStatus ) { [self _updatePlayerItemStatus]; @@ -162,25 +163,25 @@ - (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable i [self _updatePresentationSize]; } else if ( context == &kPlaybackBufferEmpty ) { - [self _updateBufferStatus]; + [self updateBufferStatus]; #ifdef SJ_MAC //printf("\n:--<%p>.kPlaybackBufferEmpty %d \n", self, _playerItem.isPlaybackBufferEmpty); #endif } else if ( context == &kPlaybackBufferFull ) { - [self _updateBufferStatus]; + [self updateBufferStatus]; #ifdef SJ_MAC //printf("\n:--<%p>.kPlaybackBufferFull %d \n", self, _playerItem.isPlaybackBufferFull); #endif } else if ( context == &kPlaybackLikelyToKeeyUp ) { - [self _updateBufferStatus]; + [self updateBufferStatus]; #ifdef SJ_MAC //printf("\n:--<%p>.kPlaybackLikelyToKeeyUp %d \n", self, _playerItem.isPlaybackLikelyToKeepUp); #endif } else if ( context == &kRate ) { - [self _updateBufferStatus]; + [self updateBufferStatus]; #ifdef SJ_MAC //printf("\n:--<%p>.kRate %lf \n", self, [change[NSKeyValueChangeNewKey] doubleValue]); @@ -210,11 +211,11 @@ - (void)_updateBufferLoadedTime { Boolean result = CMTimeRangeEqual(_bufferLoadedTime, range); if ( false == result ) { _bufferLoadedTime = range; - [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaLoadedTimeRangesDidChangeNotification object:self]; + [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaBufferLoadedTimeRangesDidChangeNotification object:self]; } } -- (void)_updateBufferStatus { +- (void)updateBufferStatus { SJPlayerBufferStatus status = SJPlayerBufferStatusUnknown; float rate = self.player.rate; if ( self.playerItem.status == AVPlayerItemStatusReadyToPlay ) { @@ -238,7 +239,7 @@ - (void)_updateBufferStatus { if ( status != self.bufferStatus || ( status == SJPlayerBufferStatusPlayable && isFloatZero(rate)) ) { self.bufferStatus = status; - [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaPlaybackBufferStatusDidChangeNotification object:self]; + [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaBufferStatusDidChangeNotification object:self]; } } @@ -246,7 +247,7 @@ - (void)_updatePresentationSize { CGSize size = _playerItem.presentationSize; if ( !CGSizeEqualToSize(_presentationSize, size) ) { _presentationSize = size; - [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediakPresentationSizeDidChangeNotification object:self]; + [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaPresentationSizeDidChangeNotification object:self]; } } @@ -257,6 +258,41 @@ - (void)_updatePlayerItemStatus { [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaPlayerItemStatusDidChangeNotification object:self]; } } + +#pragma mark - +- (void)setBufferStatus:(SJPlayerBufferStatus)bufferStatus { + if ( bufferStatus == _bufferStatus ) return; + _bufferStatus = bufferStatus; + switch ( bufferStatus ) { + case SJPlayerBufferStatusUnknown: break; + case SJPlayerBufferStatusUnplayable: { + [_watingTimer invalidate]; + __weak typeof(self) _self = self; + _watingTimer = [NSTimer assetAdd_timerWithTimeInterval:1 block:^(NSTimer *timer) { + __strong typeof(_self) self = _self; + if ( !self ) { + [timer invalidate]; + return ; + } + self.bufferWatingTime += timer.timeInterval; + } repeats:YES]; + [_watingTimer assetAdd_fire]; + [NSRunLoop.mainRunLoop addTimer:_watingTimer forMode:NSRunLoopCommonModes]; + } + break; + case SJPlayerBufferStatusPlayable: { + [_watingTimer invalidate]; + self.bufferWatingTime = 0; + } + break; + } +} + +- (void)setBufferWatingTime:(NSTimeInterval)bufferWatingTime { + if ( bufferWatingTime == _bufferWatingTime ) return; + _bufferWatingTime = bufferWatingTime; + [NSNotificationCenter.defaultCenter postNotificationName:SJAVMediaBufferWatingTimeDidChangeNotification object:self]; +} @end @@ -282,87 +318,54 @@ - (instancetype)initWithPlayerAsset:(SJAVMediaPlayAsset *)playerAsset { if ( !self ) return nil; _playerAsset = playerAsset; - __weak typeof(self) _self = self; - _playerItemDidPlayToEndTimeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediaPlayerItemDidPlayToEndTimeNotification object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaDidPlayToEndTimeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(playDidToEndForObserver:)] ) { [self.delegate playDidToEndForObserver:self]; } }]; - _playbackTimeDidChangeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediaPlaybackTimeDidChangeNotification object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaPlaybackTimeDidChangeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(observer:currentTimeDidChange:)] ) { [self.delegate observer:self currentTimeDidChange:self.currentTime]; } }]; - _durationDidChangeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediaPlaybackDurationDidChangeNotificationn object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaPlaybackDurationDidChangeNotificationn target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(observer:durationDidChange:)] ) { [self.delegate observer:self durationDidChange:self.duration]; } }]; - _loadedTimeRangesDidChangeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediaLoadedTimeRangesDidChangeNotification object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaBufferLoadedTimeRangesDidChangeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(observer:bufferLoadedTimeDidChange:)] ) { [self.delegate observer:self bufferLoadedTimeDidChange:self.bufferLoadedTime]; } }]; - _bufferStatusDidChangeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediaPlaybackBufferStatusDidChangeNotification object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaBufferStatusDidChangeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(observer:bufferStatusDidChange:)] ) { [self.delegate observer:self bufferStatusDidChange:self.bufferStatus]; } }]; - _presentationSizeDidChangeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediakPresentationSizeDidChangeNotification object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaPresentationSizeDidChangeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(observer:presentationSizeDidChange:)] ) { [self.delegate observer:self presentationSizeDidChange:self.presentationSize]; } }]; - _playerItemStatusDidChangeNoteToken = [NSNotificationCenter.defaultCenter addObserverForName:SJAVMediaPlayerItemStatusDidChangeNotification object:playerAsset queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { - __strong typeof(_self) self = _self; - if ( !self ) return ; + [self sj_observeWithNotification:SJAVMediaPlayerItemStatusDidChangeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { if ( [self.delegate respondsToSelector:@selector(observer:playerItemStatusDidChange:)] ) { [self.delegate observer:self playerItemStatusDidChange:self.playerItemStatus]; } }]; - - return self; -} - -- (void)dealloc { - if ( _playerItemDidPlayToEndTimeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_playerItemDidPlayToEndTimeNoteToken]; - if ( _playbackTimeDidChangeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_playbackTimeDidChangeNoteToken]; - - if ( _durationDidChangeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_durationDidChangeNoteToken]; - - if ( _loadedTimeRangesDidChangeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_loadedTimeRangesDidChangeNoteToken]; - - if ( _bufferStatusDidChangeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_bufferStatusDidChangeNoteToken]; - - if ( _presentationSizeDidChangeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_presentationSizeDidChangeNoteToken]; - - if ( _playerItemStatusDidChangeNoteToken ) - [NSNotificationCenter.defaultCenter removeObserver:_playerItemStatusDidChangeNoteToken]; + [self sj_observeWithNotification:SJAVMediaBufferWatingTimeDidChangeNotification target:playerAsset usingBlock:^(SJAVMediaPlayAssetPropertiesObserver *_Nonnull self, NSNotification * _Nonnull note) { + if ( [self.delegate respondsToSelector:@selector(observer:bufferWatingTimeDidChange:)] ) { + [self.delegate observer:self bufferWatingTimeDidChange:self.bufferWatingTime]; + } + }]; + return self; } - (AVPlayerItemStatus)playerItemStatus { @@ -389,6 +392,10 @@ - (NSTimeInterval)duration { - (CGSize)presentationSize { return _playerAsset.presentationSize; } + +- (NSTimeInterval)bufferWatingTime { + return _playerAsset.bufferWatingTime; +} @end NS_ASSUME_NONNULL_END diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/SJAVMediaPlaybackController.m b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/SJAVMediaPlaybackController.m index 7b2c4d907..3b7a3b6c3 100755 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/SJAVMediaPlaybackController.m +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJAVMediaPlaybackController/SJAVMediaPlaybackController.m @@ -233,6 +233,11 @@ - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer bufferLoadedTi - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer bufferStatusDidChange:(SJPlayerBufferStatus)bufferStatus { [self _updateBufferStatusIfNeeded]; } +- (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer bufferWatingTimeDidChange:(NSTimeInterval)bufferWatingTime { + if ( [self.delegate respondsToSelector:@selector(playbackController:bufferWatingTimeDidChange:)] ) { + [self.delegate playbackController:self bufferWatingTimeDidChange:bufferWatingTime]; + } +} - (void)observer:(SJAVMediaPlayAssetPropertiesObserver *)observer presentationSizeDidChange:(CGSize)presentationSize { [self _updatePresentationSizeIfNeeded]; } @@ -487,5 +492,13 @@ - (void)generateGIFWithBeginTime:(NSTimeInterval)beginTime duration:(NSTimeInter if ( failure ) failure(self, error); }]; } + +- (NSTimeInterval)bufferWatingTime { + return _playAsset.bufferWatingTime; +} + +- (void)updateBufferStatus { + [_playAsset updateBufferStatus]; +} @end NS_ASSUME_NONNULL_END diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h index ec95924b9..4052fb2f8 100755 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h @@ -46,59 +46,27 @@ NS_ASSUME_NONNULL_BEGIN @interface SJBaseVideoPlayer : NSObject - ++ (NSString *)version; + (instancetype)player; - - (instancetype)init; -@property (nonatomic, strong, readonly) UIView *view; - -/** - This is a data source object for the control layer. - It must implement the methods defined in the SJVideoPlayerControlLayerDataSource protocol. - The data source is not retained. - - 这个是关于控制层的数据源对象, 它必须实现 SJVideoPlayerControlLayerDataSource 协议里面定义的方法. - - weak. readwrite. - */ -@property (nonatomic, weak, nullable) id controlLayerDataSource; - -/** - This is about the delegate object of the control layer. - Some interactive events of the player will call the method defined in SJVideoPlayerControlLayerDelegate. - The delegate is not retained. - - 这个是关于控制层的代理对象, 播放器的一些交互事件会调用定义在 SJVideoPlayerControlLayerDelegate 中的方法. - - weak. readwrite. - */ -@property (nonatomic, weak, nullable) id controlLayerDelegate; - -/** - The error when the video play failed, you can view the error details through this error. - 播放失败时的错误, 你可以通过这个error来查看报错详情. - - readonly. - */ -@property (nonatomic, strong, readonly, nullable) NSError *error; +// - View - -/** - default is `AVLayerVideoGravityResizeAspect`. - - readwrite. - */ +@property (nonatomic, strong, readonly) UIView *view; @property (nonatomic, strong, null_resettable) AVLayerVideoGravity videoGravity; - - -+ (NSString *)version; - - (nullable __kindof UIViewController *)atViewController; +// - Control Layer Delegate - + +@property (nonatomic, weak, nullable) id controlLayerDataSource; +@property (nonatomic, weak, nullable) id controlLayerDelegate; @end @interface SJBaseVideoPlayer (Placeholder) + +// - Placeholder - + /// 初始化资源时, 可能会短暂黑屏, 建议设置一下占位图 @property (nonatomic, strong, readonly) UIImageView *placeholderImageView; @@ -127,24 +95,21 @@ NS_ASSUME_NONNULL_BEGIN @interface SJBaseVideoPlayer (Time) -/// 播放的进度 -@property (nonatomic, readonly) float progress; -/// 缓冲的进度 -@property (nonatomic, readonly) float bufferProgress; +// - Time - -/// 当前的时间 -@property (nonatomic, strong, readonly) NSString *currentTimeStr; @property (nonatomic, readonly) NSTimeInterval currentTime; - -/// 全部的时间 -@property (nonatomic, strong, readonly) NSString *totalTimeStr; @property (nonatomic, readonly) NSTimeInterval totalTime; +@property (nonatomic, strong, readonly) NSString *currentTimeStr; +@property (nonatomic, strong, readonly) NSString *totalTimeStr; -/// 播放时间改变的回调 @property (nonatomic, copy, nullable) void(^playTimeDidChangeExeBlok)(__kindof SJBaseVideoPlayer *videoPlayer); -/// 播放完毕的回调 @property (nonatomic, copy, nullable) void(^playDidToEndExeBlock)(__kindof SJBaseVideoPlayer *player); +// - Progress - + +@property (nonatomic, readonly) float progress; +@property (nonatomic, readonly) float bufferProgress; + - (NSString *)timeStringWithSeconds:(NSInteger)secs; // format: 00:00:00 @end @@ -157,94 +122,116 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong, null_resettable) id playbackController; + +// - Asset - + /// 资源 /// - 播放一个资源 /// - 使用URL及相关的视图信息进行初始化 @property (nonatomic, strong, nullable) SJVideoPlayerURLAsset *URLAsset; - -/// URLAsset资源dealloc时的回调 +/// asset`dealloc`时的回调 /// - 可以在这里做一些记录的工作. 如播放记录. @property (nonatomic, copy, nullable) void(^assetDeallocExeBlock)(__kindof SJBaseVideoPlayer *videoPlayer); -/// v1.6.5 新增 -/// 切换 清晰度 -/// - 切换当前播放的视频清晰度 -- (void)switchVideoDefinitionByURL:(NSURL *)URL; -/// 播放状态 -@property (nonatomic, readonly) SJVideoPlayerPlayStatus playStatus; +// - Playback Status - /// 播放状态观察者 - (id)getPlayStatusObserver; // 需要对它强引用, 否则观察者会被释放 - +/// 播放失败时的错误 +@property (nonatomic, strong, readonly, nullable) NSError *error; +/// 播放状态 +@property (nonatomic, readonly) SJVideoPlayerPlayStatus playStatus; /// 暂停原因 @property (nonatomic, readonly) SJVideoPlayerPausedReason pausedReason; - /// 不活跃原因 @property (nonatomic, readonly) SJVideoPlayerInactivityReason inactivityReason; -/// 资源刷新 -- (void)refresh; - -/// 播放失败时延迟多少秒自动刷新 -/// - 默认是0, 即不自动刷新 -/// - 单位秒 -@property (nonatomic) NSTimeInterval delayToAutoRefreshWhenPlayFailed; - -/// 是否静音🔇 -@property (nonatomic, getter=isMute) BOOL mute; -@property (nonatomic) float playerVolume; -/// 是否锁屏 -@property (nonatomic, getter=isLockedScreen) BOOL lockedScreen; +// - Play - +/// 刷新 +- (void)refresh; /// 初始化完成后, 是否自动播放 @property (nonatomic) BOOL autoPlayWhenPlayStatusIsReadyToPlay; - /// 播放器是否可以执行`play` /// /// - 当调用`play`时, 会回调该block, 如果返回YES, 则执行`play`方法, 否之. /// - 如果该block == nil, 则调用`play`时, 默认为执行. @property (nonatomic, copy, nullable) BOOL(^canPlayAnAsset)(__kindof SJBaseVideoPlayer *player); +/// 自动刷新, 播放失败时延迟多少秒刷新. +/// - 默认是0, 即不自动刷新 +/// - 单位是秒 +@property (nonatomic) NSTimeInterval delayToAutoRefreshWhenPlayFailed; +/// 当缓冲为`Unplayable`时, 多少秒后自动尝试播放 +/// - 默认是0, 将会在缓冲状态为`Playable`时播放. +/// - 单位是秒 +@property (nonatomic) NSInteger refreshToPlayAfterBufferTime; /// 使播放 - (void)play; +/// 切换`清晰度` (v1.6.5 新增) +/// - 切换当前播放的视频清晰度 +- (void)switchVideoDefinitionByURL:(NSURL *)URL; + + +// - Pause - /// 是否恢复播放, 进入前台时. /// /// 正常情况下, 进入后台时, 播放器将会暂停. 此属性表示App进入前台后, 播放器是否恢复播放. 默认为NO. @property (nonatomic) BOOL resumePlaybackWhenAppDidEnterForeground; - -/// 使暂停 -- (void)pause; - /// 关于后台播放视频, 引用自: https://juejin.im/post/5a38e1a0f265da4327185a26 /// /// 当您想在后台播放视频时: /// 1. 需要设置 videoPlayer.pauseWhenAppDidEnterBackground = NO; (该值默认为YES, 即App进入后台默认暂停). /// 2. 前往 `TARGETS` -> `Capability` -> enable `Background Modes` -> select this mode `Audio, AirPlay, and Picture in Picture` @property (nonatomic) BOOL pauseWhenAppDidEnterBackground; +/// 使暂停 +- (void)pause; + + +// - Stop - /// 使停止 - (void)stop; -/// 停止播放, 并淡出 +/// 使停止, 并淡出 - (void)stopAndFadeOut; -/// 重头开始播放 + +// - Replay - + +/// 是否重播过 - 当前的资源 +@property (nonatomic, readonly, getter=isReplayed) BOOL replayed; +/// 重播 - (void)replay; + +// - Seek To Time - + /// 是否可以调用 seekToTime:, 默认为YES @property (nonatomic) BOOL canSeekToTime; /// 跳转到指定位置 - (void)seekToTime:(NSTimeInterval)secs completionHandler:(void (^ __nullable)(BOOL finished))completionHandler; + +// - Rate - + /// 调速 @property (nonatomic) float rate; /// 速率改变的回调 @property (nonatomic, copy, nullable) void(^rateDidChangeExeBlock)(__kindof SJBaseVideoPlayer *player); -@property (nonatomic, strong, nullable) NSURL *assetURL; -- (void)playWithURL:(NSURL *)URL; // 不再建议使用, 请使用`URLAsset`进行初始化 + +// - Volume - + +/// 是否静音🔇 +@property (nonatomic, getter=isMute) BOOL mute; +@property (nonatomic) float playerVolume; + + +/// 是否锁屏 +@property (nonatomic, getter=isLockedScreen) BOOL lockedScreen; @end @@ -654,6 +641,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) float volume __deprecated_msg("use `deviceVolume`"); @property (nonatomic) float brightness __deprecated_msg("use `deviceBrightness`"); @property (nonatomic, copy, nullable) void(^playStatusDidChangeExeBlock)(__kindof SJBaseVideoPlayer *videoPlayer) __deprecated_msg("use `_playStatusObserver = [_player getPlayStatusObserver]`"); +- (void)playWithURL:(NSURL *)URL; // 不再建议使用, 请使用`URLAsset`进行初始化 +@property (nonatomic, strong, nullable) NSURL *assetURL; @end NS_ASSUME_NONNULL_END diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m index 9f11224b4..d0dbe1dc2 100755 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m @@ -91,11 +91,6 @@ @interface SJBaseVideoPlayer () @property (nonatomic, copy, nullable) void(^operationOfInitializing)(SJBaseVideoPlayer *player); -/** - 当前播放如果出错, 可以查看这个error - */ -@property (nonatomic, strong, nullable) NSError *error; - /** 当用户触摸到TableView或者ScrollView时, 这个值为YES. 这个值用于旋转的条件之一, 如果用户触摸在TableView或者ScrollView上时, 将不会自动旋转. @@ -172,6 +167,7 @@ @implementation SJBaseVideoPlayer { BOOL _vc_isDisappeared; /// playback controller + NSError *_Nullable _error; id _playbackController; void (^_Nullable _assetDeallocExeBlock)(__kindof SJBaseVideoPlayer * _Nonnull); BOOL _mute; @@ -193,6 +189,8 @@ @implementation SJBaseVideoPlayer { BOOL _canSeekToTime; NSTimeInterval _delayToAutoRefreshWhenPlayFailed; SJBaseVideoPlayerAutoRefreshContext *_Nullable _autoRefresh; + BOOL _replayed; + NSInteger _refreshToPlayAfterBufferTime; /// control layer appear manager id _controlLayerAppearManager; @@ -243,7 +241,7 @@ + (instancetype)player { } + (NSString *)version { - return @"2.1.4"; + return @"2.2.0"; } - (nullable __kindof UIViewController *)atViewController { @@ -718,160 +716,11 @@ - (void)switchVideoDefinitionByURL:(NSURL *)URL { return [[SJPlayStatusObserver alloc] initWithPlayer:self]; } -/// delegate methods - -- (void)playbackControllerIsReadyForDisplay:(id)controller { - [self _showOrHiddenPlaceholderImageViewIfNeeded]; -} - -- (void)playbackController:(id)controller prepareToPlayStatusDidChange:(SJMediaPlaybackPrepareStatus)prepareStatus { - switch ( prepareStatus ) { - case SJMediaPlaybackPrepareStatusUnknown: break; - case SJMediaPlaybackPrepareStatusReadyToPlay: { - [self _playerReadyToPlay]; - } - break; - case SJMediaPlaybackPrepareStatusFailed: { - [self _playerPrepareFailed]; - } - break; - } -} - -- (void)playbackController:(id)controller durationDidChange:(NSTimeInterval)duration { - [self _playTimeDidChange]; -} - -- (void)playbackController:(id)controller currentTimeDidChange:(NSTimeInterval)currentTime { - [self _playTimeDidChange]; -} - -- (void)_playTimeDidChange { - if ( [self playStatus_isPaused] ) return; - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:currentTime:currentTimeStr:totalTime:totalTimeStr:)] ) { - [self.controlLayerDelegate videoPlayer:self currentTime:self.currentTime currentTimeStr:self.currentTimeStr totalTime:self.totalTime totalTimeStr:self.totalTimeStr]; - } - if ( self.playTimeDidChangeExeBlok ) self.playTimeDidChangeExeBlok(self); -} - -- (void)mediaDidPlayToEndForPlaybackController:(id)controller { - [self _mediaDidPlayToEnd]; -} - -- (void)playbackController:(id)controller bufferLoadedTimeDidChange:(NSTimeInterval)bufferLoadedTime { - if ( controller.duration == 0 ) return; - - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:bufferTimeDidChange:)] ) { - [self.controlLayerDelegate videoPlayer:self bufferTimeDidChange:bufferLoadedTime]; - } -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - else if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:loadedTimeProgress:)] ) { - [self.controlLayerDelegate videoPlayer:self loadedTimeProgress:controller.bufferLoadedTime / controller.duration]; - } -#pragma clang diagnostic pop - -} - -- (void)playbackController:(id)controller bufferStatusDidChange:(SJPlayerBufferStatus)bufferStatus { - [self _refreshBufferStatus]; -} - -- (void)playbackController:(id)controller presentationSizeDidChange:(CGSize)presentationSize { - if ( self.presentationSize ) self.presentationSize(self, presentationSize); - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:presentationSize:)] ) { - [self.controlLayerDelegate videoPlayer:self presentationSize:presentationSize]; - } +- (void)setError:(NSError * _Nullable)error { + _error = error; } - -- (void)playbackController:(id)controller switchVideoDefinitionByURL:(NSURL *)URL statusDidChange:(SJMediaPlaybackSwitchDefinitionStatus)status { - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:switchVideoDefinitionByURL:statusDidChange:)] ) { - [self.controlLayerDelegate videoPlayer:self switchVideoDefinitionByURL:URL statusDidChange:status]; - } -} - -- (void)_refreshBufferStatus { - if ( [self playStatus_isInactivity_ReasonPlayEnd] ) { - return; - } - - SJPlayerBufferStatus bufferStatus = self.playbackController.bufferStatus; -#ifdef SJ_MAC - NSString *network = nil; - switch ( _reachability.networkStatus ) { - case SJNetworkStatus_NotReachable: - network = @"SJNetworkStatus_NotReachable"; - break; - case SJNetworkStatus_ReachableViaWWAN: - network = @"SJNetworkStatus_ReachableViaWWAN"; - break; - case SJNetworkStatus_ReachableViaWiFi: - network = @"SJNetworkStatus_ReachableViaWiFi"; - break; - } - - switch ( bufferStatus ) { - case SJPlayerBufferStatusUnknown: - printf("\nSJPlayerBufferStatusUnknown - %s \n", network.UTF8String); - break; - case SJPlayerBufferStatusUnplayable: - printf("\nSJPlayerBufferStatusUnplayable - %s \n", network.UTF8String); - break; - case SJPlayerBufferStatusPlayable: - printf("\nSJPlayerBufferStatusPlayable - %s \n", network.UTF8String); - break; - } -#endif - - - switch ( bufferStatus ) { - case SJPlayerBufferStatusUnknown: - case SJPlayerBufferStatusUnplayable: { - // 有网 - if ( self.reachability.networkStatus != SJNetworkStatus_NotReachable ) { - if ( (![self playStatus_isPrepare] && ![self playStatus_isReadyToPlay]) || _mpc_assetIsPlayed ) { - if ( ![self playStatus_isPaused] ) - [self pause:SJVideoPlayerPausedReasonBuffering]; - } - } - // 无网 - else if ( ![self.URLAsset.mediaURL isFileURL] ) { - self.inactivityReason = SJVideoPlayerInactivityReasonNotReachableAndPlaybackStalled; - self.playStatus = SJVideoPlayerPlayStatusInactivity; - } - } - break; - case SJPlayerBufferStatusPlayable: { - if ( [self playStatus_isPaused_ReasonBuffering] || [self playStatus_isInactivity_ReasonNotReachableAndPlaybackStalled] ) { - [self play]; - } - } - break; - } - - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:bufferStatusDidChange:)] ) { - [self.controlLayerDelegate videoPlayer:self bufferStatusDidChange:bufferStatus]; - } - else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - switch ( bufferStatus ) { - case SJPlayerBufferStatusUnknown: break; - case SJPlayerBufferStatusUnplayable: { - if ( [self.controlLayerDelegate respondsToSelector:@selector(startLoading:)] ) { - [self.controlLayerDelegate startLoading:self]; - } - } - break; - case SJPlayerBufferStatusPlayable: { - if ( [self.controlLayerDelegate respondsToSelector:@selector(loadCompletion:)] ) { - [self.controlLayerDelegate loadCompletion:self]; - } - } - break; - } -#pragma clang diagnostic pop - } +- (NSError *_Nullable)error { + return _error; } // 1. @@ -883,6 +732,7 @@ - (void)setURLAsset:(nullable SJVideoPlayerURLAsset *)URLAsset { _autoRefresh = nil; _mpc_assetIsPlayed = NO; + _replayed = NO; // update [self _updateCurrentPlayingIndexPathIfNeeded:URLAsset.playModel]; @@ -918,96 +768,13 @@ - (nullable SJVideoPlayerURLAsset *)URLAsset { return _URLAsset; } -// 2.1 -- (void)_playerReadyToPlay { - - if ( ![self playStatus_isPrepare] ) - return; - - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:currentTime:currentTimeStr:totalTime:totalTimeStr:)] ) { - [self.controlLayerDelegate videoPlayer:self currentTime:self.currentTime currentTimeStr:self.currentTimeStr totalTime:self.totalTime totalTimeStr:self.totalTimeStr]; - } - - if ( self.registrar.state == SJVideoPlayerAppState_Background && - self.pauseWhenAppDidEnterBackground ) { - [self pause:SJVideoPlayerPausedReasonPause]; - return; - } - - if ( !self.isLockedScreen && self.controlLayerAutoAppearWhenAssetInitialized ) { - __weak typeof(self) _self = self; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - __strong typeof(_self) self = _self; - if ( !self ) return; - [self.controlLayerAppearManager needAppear]; - }); - } - - self.playStatus = SJVideoPlayerPlayStatusReadyToPlay; - - if ( self.operationOfInitializing ) { - self.operationOfInitializing(self); - self.operationOfInitializing = nil; - } - else if ( self.autoPlayWhenPlayStatusIsReadyToPlay ) { - if ( self.isPlayOnScrollView ) { - if ( self.isScrollAppeared ) - [self play]; - else - [self pause]; - } - else { - [self play]; - } - } -} - -// 2.2 -- (void)_playerPrepareFailed { - self.error = _playbackController.error; - self.inactivityReason = SJVideoPlayerInactivityReasonPlayFailed; - self.playStatus = SJVideoPlayerPlayStatusInactivity; - - // auto refresh - if ( 0 != _delayToAutoRefreshWhenPlayFailed && _autoRefresh.asset != _URLAsset ) { - _autoRefresh = [[SJBaseVideoPlayerAutoRefreshContext alloc] initWithAsset:_URLAsset delay:_delayToAutoRefreshWhenPlayFailed]; - __weak typeof(self) _self = self; - _autoRefresh.after = ^(SJBaseVideoPlayerAutoRefreshContext * _Nonnull context) { - __strong typeof(_self) self = _self; - if ( !self ) return; - if ( [self playStatus_isInactivity_ReasonPlayFailed] && - self.registrar.state != SJVideoPlayerAppState_Background ) { -#ifdef DEBUG - puts("SJBaseVideoPlayer: 当前状态为播放失败, 正在尝试重新播放!"); -#endif - self.autoRefresh = nil; - [self refresh]; - } - }; - } -} - -- (void)_mediaDidPlayToEnd { - if ( !self.vc_isDisappeared ) { - UIScrollView *scrollView = sj_getScrollView(_URLAsset.playModel); - if ( scrollView.sj_enabledAutoplay ) { - if ( self.playDidToEndExeBlock ) self.playDidToEndExeBlock(self); - [scrollView sj_needPlayNextAsset]; - return; - } - } - - self.inactivityReason = SJVideoPlayerInactivityReasonPlayEnd; - self.playStatus = SJVideoPlayerPlayStatusInactivity; - if ( self.playDidToEndExeBlock ) self.playDidToEndExeBlock(self); -} - - (void)refresh { if ( !self.URLAsset ) return; if ( self.currentTime != 0 ) { _playedLastTime = self.currentTime; } + _URLAsset.specifyStartTime = _playedLastTime; [self setURLAsset:_URLAsset]; } @@ -1018,6 +785,13 @@ - (NSTimeInterval)delayToAutoRefreshWhenPlayFailed { return _delayToAutoRefreshWhenPlayFailed; } +- (void)setRefreshToPlayAfterBufferTime:(NSInteger)refreshToPlayAfterBufferTime { + _refreshToPlayAfterBufferTime = refreshToPlayAfterBufferTime; +} +- (NSInteger)refreshToPlayAfterBufferTime { + return _refreshToPlayAfterBufferTime; +} + - (void)setAssetDeallocExeBlock:(nullable void (^)(__kindof SJBaseVideoPlayer * _Nonnull))assetDeallocExeBlock { _assetDeallocExeBlock = assetDeallocExeBlock; } @@ -1099,9 +873,7 @@ - (void)setCanPlayAnAsset:(nullable BOOL (^)(__kindof SJBaseVideoPlayer * _Nonnu - (void)play { if ( !self.URLAsset ) return; - if ( self.canPlayAnAsset ) { if ( !self.canPlayAnAsset(self) ) return; } - if ( self.registrar.state == SJVideoPlayerAppState_Background && self.pauseWhenAppDidEnterBackground ) return; if ( [self playStatus_isInactivity_ReasonPlayEnd] ) { @@ -1145,14 +917,9 @@ - (void)pause:(SJVideoPlayerPausedReason)reason { if ( [self playStatus_isInactivity_ReasonPlayFailed] ) return; if ( [self playStatus_isPrepare] ) { - - __weak typeof(self) _self = self; self.operationOfInitializing = ^(SJBaseVideoPlayer * _Nonnull player) { - __strong typeof(_self) self = _self; - if ( !self ) return ; - [self pause:reason]; + [player pause:reason]; }; - return; } @@ -1177,147 +944,384 @@ - (void)stopAndFadeOut { }]; } +- (void)setReplayed:(BOOL)replayed { + _replayed = replayed; +} +- (BOOL)isReplayed { + return _replayed; +} + - (void)replay { if ( !self.URLAsset ) return; if ( [self playStatus_isInactivity_ReasonPlayFailed] ) { [self refresh]; return; } - - [self seekToTime:0 completionHandler:^(BOOL finished) { - [self.playbackController play]; - self.playStatus = SJVideoPlayerPlayStatusPlaying; - }]; + + [self seekToTime:0 completionHandler:^(BOOL finished) { + [self.playbackController play]; + self.playStatus = SJVideoPlayerPlayStatusPlaying; + }]; + + self.replayed = YES; +} + +- (void)setCanSeekToTime:(BOOL)canSeekToTime { + _canSeekToTime = canSeekToTime; + SJPlayerDisabledGestures ges = self.disabledGestures; + if ( !canSeekToTime ) { + ges = ges | SJPlayerDisabledGestures_Pan_H; + } + else { + ges &= (~SJPlayerDisabledGestures_Pan_H); + } + self.disabledGestures = ges; +} +- (BOOL)canSeekToTime { + return _canSeekToTime; +} +- (void)seekToTime:(NSTimeInterval)secs completionHandler:(void (^ __nullable)(BOOL finished))completionHandler { + if ( !_canSeekToTime ) return; + + if ( self.canPlayAnAsset ) { + if ( !self.canPlayAnAsset(self) ) return; + } + + if ( isnan(secs) ) { return;} + + if ( [self playStatus_isUnknown] || + [self playStatus_isInactivity_ReasonPlayFailed] ) { + if ( completionHandler ) completionHandler(NO); + return; + } + + if ( self.playbackController.prepareStatus != SJMediaPlaybackPrepareStatusReadyToPlay ) { + if ( completionHandler ) completionHandler(NO); + return; + } + + if ( secs > self.playbackController.duration ) { + secs = self.playbackController.duration * 0.98; + } + else if ( secs < 0 ) { + secs = 0; + } + + if ( [self.playbackController respondsToSelector:@selector(cancelPendingSeeks)] ) + [self.playbackController cancelPendingSeeks]; + + [self pause:SJVideoPlayerPausedReasonSeeking]; + __weak typeof(self) _self = self; + [self.playbackController seekToTime:secs completionHandler:^(BOOL finished) { + __strong typeof(_self) self = _self; + if ( !self ) return ; + [self.playbackController updateBufferStatus]; + if ( finished ) { + if ( [self playStatus_isPaused_ReasonSeeking] ) [self play]; + if ( self.playTimeDidChangeExeBlok ) self.playTimeDidChangeExeBlok(self); + } + if ( completionHandler ) completionHandler(finished); + }]; +} + +- (void)setRate:(float)rate { + if ( self.canPlayAnAsset && !self.canPlayAnAsset(self) ) return; + if ( _rate == rate ) return; + _rate = rate; + _playbackController.rate = rate; + + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:rateChanged:)] ) { + [self.controlLayerDelegate videoPlayer:self rateChanged:rate]; + } + + if ( self.rateDidChangeExeBlock ) self.rateDidChangeExeBlock(self); + + if ( [self playStatus_isInactivity_ReasonPlayEnd] ) [self replay]; + + if ( [self playStatus_isPaused] ) [self play]; +} + +- (float)rate { + return _rate; +} +- (void)setRateDidChangeExeBlock:(void (^_Nullable)(__kindof SJBaseVideoPlayer * _Nonnull))rateDidChangeExeBlock { + _rateDidChangeExeBlock = rateDidChangeExeBlock; +} +- (void (^_Nullable)(__kindof SJBaseVideoPlayer * _Nonnull))rateDidChangeExeBlock { + return _rateDidChangeExeBlock; +} + +- (void)_updateCurrentPlayingIndexPathIfNeeded:(SJPlayModel *)playModel { + if ( !playModel ) + return; + + // 维护当前播放的indexPath + UIScrollView *scrollView = sj_getScrollView(playModel); + if ( scrollView.sj_enabledAutoplay ) { + scrollView.sj_currentPlayingIndexPath = [playModel performSelector:@selector(indexPath)]; + } +} + +- (void)_updatePlayModelObserver:(SJPlayModel *)playModel { + if ( !playModel ) + return; + + // update playModel + self.playModelObserver = [[SJPlayModelPropertiesObserver alloc] initWithPlayModel:playModel]; + self.playModelObserver.delegate = (id)self; +} + +// - Playback Controll Delegate - + +- (void)playbackControllerIsReadyForDisplay:(id)controller { + [self _showOrHiddenPlaceholderImageViewIfNeeded]; +} + +- (void)playbackController:(id)controller prepareToPlayStatusDidChange:(SJMediaPlaybackPrepareStatus)prepareStatus { + switch ( prepareStatus ) { + case SJMediaPlaybackPrepareStatusUnknown: break; + case SJMediaPlaybackPrepareStatusReadyToPlay: { + [self _playerReadyToPlay]; + } + break; + case SJMediaPlaybackPrepareStatusFailed: { + [self _playerPrepareFailed]; + } + break; + } +} + +- (void)playbackController:(id)controller durationDidChange:(NSTimeInterval)duration { + [self _playTimeDidChange]; +} + +- (void)playbackController:(id)controller currentTimeDidChange:(NSTimeInterval)currentTime { + [self _playTimeDidChange]; +} + +- (void)mediaDidPlayToEndForPlaybackController:(id)controller { + [self _mediaDidPlayToEnd]; +} + +- (void)playbackController:(id)controller bufferLoadedTimeDidChange:(NSTimeInterval)bufferLoadedTime { + if ( controller.duration == 0 ) return; + + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:bufferTimeDidChange:)] ) { + [self.controlLayerDelegate videoPlayer:self bufferTimeDidChange:bufferLoadedTime]; + } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + else if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:loadedTimeProgress:)] ) { + [self.controlLayerDelegate videoPlayer:self loadedTimeProgress:controller.bufferLoadedTime / controller.duration]; + } +#pragma clang diagnostic pop + +} + +- (void)playbackController:(id)controller bufferStatusDidChange:(SJPlayerBufferStatus)bufferStatus { + [self _updateBufferStatus]; +} + +- (void)playbackController:(id)controller bufferWatingTimeDidChange:(NSTimeInterval)bufferWatingTime { + if ( _refreshToPlayAfterBufferTime == 0 ) return; + BOOL flag = (((NSInteger)bufferWatingTime) % _refreshToPlayAfterBufferTime == 0) && (self.networkStatus != SJNetworkStatus_NotReachable); + if ( flag ) { + __weak typeof(self) _self = self; + [self.playbackController seekToTime:self.currentTime completionHandler:^(BOOL finished) { + __strong typeof(_self) self = _self; + if ( !self ) return; + if ( finished ) [self.playbackController play]; + }]; + } } -- (void)setCanSeekToTime:(BOOL)canSeekToTime { - _canSeekToTime = canSeekToTime; - SJPlayerDisabledGestures ges = self.disabledGestures; - if ( !canSeekToTime ) { - ges = ges | SJPlayerDisabledGestures_Pan_H; +- (void)playbackController:(id)controller presentationSizeDidChange:(CGSize)presentationSize { + if ( self.presentationSize ) self.presentationSize(self, presentationSize); + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:presentationSize:)] ) { + [self.controlLayerDelegate videoPlayer:self presentationSize:presentationSize]; } - else { - ges &= (~SJPlayerDisabledGestures_Pan_H); +} + +- (void)playbackController:(id)controller switchVideoDefinitionByURL:(NSURL *)URL statusDidChange:(SJMediaPlaybackSwitchDefinitionStatus)status { + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:switchVideoDefinitionByURL:statusDidChange:)] ) { + [self.controlLayerDelegate videoPlayer:self switchVideoDefinitionByURL:URL statusDidChange:status]; } - self.disabledGestures = ges; } -- (BOOL)canSeekToTime { - return _canSeekToTime; + +- (void)_playTimeDidChange { + if ( [self playStatus_isPaused] ) return; + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:currentTime:currentTimeStr:totalTime:totalTimeStr:)] ) { + [self.controlLayerDelegate videoPlayer:self currentTime:self.currentTime currentTimeStr:self.currentTimeStr totalTime:self.totalTime totalTimeStr:self.totalTimeStr]; + } + if ( self.playTimeDidChangeExeBlok ) self.playTimeDidChangeExeBlok(self); } -- (void)seekToTime:(NSTimeInterval)secs completionHandler:(void (^ __nullable)(BOOL finished))completionHandler { - if ( !_canSeekToTime ) return; - - if ( self.canPlayAnAsset ) { - if ( !self.canPlayAnAsset(self) ) return; + +- (void)_updateBufferStatus { + if ( [self playStatus_isInactivity_ReasonPlayEnd] ) { + return; } - if ( isnan(secs) ) { return;} + SJPlayerBufferStatus bufferStatus = self.playbackController.bufferStatus; +#ifdef SJ_MAC + NSString *network = nil; + switch ( _reachability.networkStatus ) { + case SJNetworkStatus_NotReachable: + network = @"SJNetworkStatus_NotReachable"; + break; + case SJNetworkStatus_ReachableViaWWAN: + network = @"SJNetworkStatus_ReachableViaWWAN"; + break; + case SJNetworkStatus_ReachableViaWiFi: + network = @"SJNetworkStatus_ReachableViaWiFi"; + break; + } - if ( [self playStatus_isUnknown] || - [self playStatus_isInactivity_ReasonPlayFailed] ) { - if ( completionHandler ) completionHandler(NO); - return; + switch ( bufferStatus ) { + case SJPlayerBufferStatusUnknown: + printf("\nSJPlayerBufferStatusUnknown - %s \n", network.UTF8String); + break; + case SJPlayerBufferStatusUnplayable: + printf("\nSJPlayerBufferStatusUnplayable - %s \n", network.UTF8String); + break; + case SJPlayerBufferStatusPlayable: + printf("\nSJPlayerBufferStatusPlayable - %s \n", network.UTF8String); + break; } +#endif - if ( self.playbackController.prepareStatus != SJMediaPlaybackPrepareStatusReadyToPlay ) { - if ( completionHandler ) completionHandler(NO); - return; + switch ( bufferStatus ) { + case SJPlayerBufferStatusUnknown: + case SJPlayerBufferStatusUnplayable: { + // 有网 + if ( self.reachability.networkStatus != SJNetworkStatus_NotReachable ) { + if ( (![self playStatus_isPrepare] && ![self playStatus_isReadyToPlay]) || _mpc_assetIsPlayed ) { + if ( ![self playStatus_isPaused] ) + [self pause:SJVideoPlayerPausedReasonBuffering]; + } + } + // 无网 + else if ( ![self.URLAsset.mediaURL isFileURL] ) { + self.inactivityReason = SJVideoPlayerInactivityReasonNotReachableAndPlaybackStalled; + self.playStatus = SJVideoPlayerPlayStatusInactivity; + } + } + break; + case SJPlayerBufferStatusPlayable: { + if ( [self playStatus_isPaused_ReasonBuffering] || + [self playStatus_isInactivity_ReasonNotReachableAndPlaybackStalled] ) { + [self play]; + } + } + break; } - if ( secs > self.playbackController.duration ) { - secs = self.playbackController.duration; + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:bufferStatusDidChange:)] ) { + [self.controlLayerDelegate videoPlayer:self bufferStatusDidChange:bufferStatus]; } - else if ( secs < 0 ) { - secs = 0; + else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + switch ( bufferStatus ) { + case SJPlayerBufferStatusUnknown: break; + case SJPlayerBufferStatusUnplayable: { + if ( [self.controlLayerDelegate respondsToSelector:@selector(startLoading:)] ) { + [self.controlLayerDelegate startLoading:self]; + } + } + break; + case SJPlayerBufferStatusPlayable: { + if ( [self.controlLayerDelegate respondsToSelector:@selector(loadCompletion:)] ) { + [self.controlLayerDelegate loadCompletion:self]; + } + } + break; + } +#pragma clang diagnostic pop } +} + +// 2.1 +- (void)_playerReadyToPlay { - NSTimeInterval current = floor(self.playbackController.currentTime + 0.5); - NSTimeInterval seek = floor(secs + 0.5); - - if ( current == seek ) { - if ( completionHandler ) completionHandler(YES); + if ( ![self playStatus_isPrepare] ) return; + + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:currentTime:currentTimeStr:totalTime:totalTimeStr:)] ) { + [self.controlLayerDelegate videoPlayer:self currentTime:self.currentTime currentTimeStr:self.currentTimeStr totalTime:self.totalTime totalTimeStr:self.totalTimeStr]; } - if ( [self playStatus_isPaused_ReasonSeeking] ) { - if ( [self.playbackController respondsToSelector:@selector(cancelPendingSeeks)] ) [self.playbackController cancelPendingSeeks]; + if ( self.registrar.state == SJVideoPlayerAppState_Background && + self.pauseWhenAppDidEnterBackground ) { + [self pause:SJVideoPlayerPausedReasonPause]; + return; } - else { - if ( ![self playStatus_isPrepare] ) [self pause:SJVideoPlayerPausedReasonSeeking]; + + if ( !self.isLockedScreen && self.controlLayerAutoAppearWhenAssetInitialized ) { + __weak typeof(self) _self = self; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + __strong typeof(_self) self = _self; + if ( !self ) return; + [self.controlLayerAppearManager needAppear]; + }); } - __weak typeof(self) _self = self; - [self.playbackController seekToTime:secs completionHandler:^(BOOL finished) { - __strong typeof(_self) self = _self; - if ( !self ) return ; - if ( !finished ) { - [self _refreshBufferStatus]; + self.playStatus = SJVideoPlayerPlayStatusReadyToPlay; + + if ( self.operationOfInitializing ) { + self.operationOfInitializing(self); + self.operationOfInitializing = nil; + } + else if ( self.autoPlayWhenPlayStatusIsReadyToPlay ) { + if ( self.isPlayOnScrollView ) { + if ( self.isScrollAppeared ) + [self play]; + else + [self pause]; } else { - if ( [self playStatus_isPaused_ReasonSeeking] ) [self play]; - if ( self.playTimeDidChangeExeBlok ) self.playTimeDidChangeExeBlok(self); + [self play]; } - if ( completionHandler ) completionHandler(finished); - }]; -} - -- (void)setRate:(float)rate { - if ( self.canPlayAnAsset && !self.canPlayAnAsset(self) ) return; - if ( _rate == rate ) return; - _rate = rate; - _playbackController.rate = rate; - - if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:rateChanged:)] ) { - [self.controlLayerDelegate videoPlayer:self rateChanged:rate]; } - - if ( self.rateDidChangeExeBlock ) self.rateDidChangeExeBlock(self); - - if ( [self playStatus_isInactivity_ReasonPlayEnd] ) [self replay]; - - if ( [self playStatus_isPaused] ) [self play]; -} - -- (float)rate { - return _rate; -} -- (void)setRateDidChangeExeBlock:(void (^_Nullable)(__kindof SJBaseVideoPlayer * _Nonnull))rateDidChangeExeBlock { - _rateDidChangeExeBlock = rateDidChangeExeBlock; -} -- (void (^_Nullable)(__kindof SJBaseVideoPlayer * _Nonnull))rateDidChangeExeBlock { - return _rateDidChangeExeBlock; -} - -- (void)setAssetURL:(nullable NSURL *)assetURL { - self.URLAsset = [[SJVideoPlayerURLAsset alloc] initWithURL:assetURL]; -} - -- (nullable NSURL *)assetURL { - return self.URLAsset.mediaURL; -} - -- (void)playWithURL:(NSURL *)URL { - self.assetURL = URL; } -- (void)_updateCurrentPlayingIndexPathIfNeeded:(SJPlayModel *)playModel { - if ( !playModel ) - return; +// 2.2 +- (void)_playerPrepareFailed { + self.error = _playbackController.error; + self.inactivityReason = SJVideoPlayerInactivityReasonPlayFailed; + self.playStatus = SJVideoPlayerPlayStatusInactivity; - // 维护当前播放的indexPath - UIScrollView *scrollView = sj_getScrollView(playModel); - if ( scrollView.sj_enabledAutoplay ) { - scrollView.sj_currentPlayingIndexPath = [playModel performSelector:@selector(indexPath)]; + // auto refresh + if ( 0 != _delayToAutoRefreshWhenPlayFailed && _autoRefresh.asset != _URLAsset ) { + _autoRefresh = [[SJBaseVideoPlayerAutoRefreshContext alloc] initWithAsset:_URLAsset delay:_delayToAutoRefreshWhenPlayFailed]; + __weak typeof(self) _self = self; + _autoRefresh.after = ^(SJBaseVideoPlayerAutoRefreshContext * _Nonnull context) { + __strong typeof(_self) self = _self; + if ( !self ) return; + if ( [self playStatus_isInactivity_ReasonPlayFailed] && + self.registrar.state != SJVideoPlayerAppState_Background ) { +#ifdef DEBUG + puts("SJBaseVideoPlayer: 当前状态为播放失败, 正在尝试重新播放!"); +#endif + self.autoRefresh = nil; + [self refresh]; + } + }; } } -- (void)_updatePlayModelObserver:(SJPlayModel *)playModel { - if ( !playModel ) - return; +- (void)_mediaDidPlayToEnd { + if ( !self.vc_isDisappeared ) { + UIScrollView *scrollView = sj_getScrollView(_URLAsset.playModel); + if ( scrollView.sj_enabledAutoplay ) { + if ( self.playDidToEndExeBlock ) self.playDidToEndExeBlock(self); + [scrollView sj_needPlayNextAsset]; + return; + } + } - // update playModel - self.playModelObserver = [[SJPlayModelPropertiesObserver alloc] initWithPlayModel:playModel]; - self.playModelObserver.delegate = (id)self; + self.inactivityReason = SJVideoPlayerInactivityReasonPlayEnd; + self.playStatus = SJVideoPlayerPlayStatusInactivity; + if ( self.playDidToEndExeBlock ) self.playDidToEndExeBlock(self); } @end @@ -1349,7 +1353,7 @@ - (void)_needUpdateReachabilityProperties { __strong typeof(_self) self = _self; if ( !self ) return; - [self _refreshBufferStatus]; + [self _updateBufferStatus]; if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:reachabilityChanged:)] ) { [self.controlLayerDelegate videoPlayer:self reachabilityChanged:status]; @@ -2725,5 +2729,15 @@ - (void)setPlayStatusDidChangeExeBlock:(void (^_Nullable)(__kindof SJBaseVideoPl - (void (^_Nullable)(__kindof SJBaseVideoPlayer * _Nonnull))playStatusDidChangeExeBlock __deprecated_msg("use `_playStatusObserver = [_player getPlayStatusObserver]`") { return _playStatusDidChangeExeBlock; } +- (void)playWithURL:(NSURL *)URL { + self.assetURL = URL; +} +- (void)setAssetURL:(nullable NSURL *)assetURL { + self.URLAsset = [[SJVideoPlayerURLAsset alloc] initWithURL:assetURL]; +} + +- (nullable NSURL *)assetURL { + return self.URLAsset.mediaURL; +} @end NS_ASSUME_NONNULL_END diff --git a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Tool/SJPlayerGestureControl.m b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Tool/SJPlayerGestureControl.m index 986f31a89..67833fea0 100644 --- a/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Tool/SJPlayerGestureControl.m +++ b/SJVideoPlayerProject/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Tool/SJPlayerGestureControl.m @@ -19,10 +19,10 @@ @implementation SJPlayerGestureControl { /// Pan gesture SJPanGestureMovingDirection _movingDirection; SJPanGestureTriggeredPosition _triggeredPosition; - - __weak UIView *_Nullable _view; } +@synthesize targetView = _targetView; + @synthesize disabledGestures = _disabledGestures; @synthesize gestureRecognizerShouldTrigger = _gestureRecognizerShouldTrigger; @synthesize singleTapHandler = _singleTapHandler; @@ -34,7 +34,7 @@ - (instancetype)initWithTargetView:(UIView * _Nonnull __weak)view { self = [super init]; if ( !self ) return nil; NSAssert(view, @"view can not be empty!"); - _view = view; + _targetView = view; /// Single Tap _singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; @@ -156,7 +156,7 @@ - (void)handlePan:(UIPanGestureRecognizer *)pan { switch (pan.state) { case UIGestureRecognizerStateBegan: { CGPoint location = [pan locationInView:pan.view]; - if ( location.x > _view.bounds.size.width * 0.5 ) { + if ( location.x > _targetView.bounds.size.width * 0.5 ) { _triggeredPosition = SJPanGestureTriggeredPosition_Right; } else { diff --git a/SJVideoPlayerProject/Pods/SJRouter/SJRouter/Core/SJRouteRequest.m b/SJVideoPlayerProject/Pods/SJRouter/SJRouter/Core/SJRouteRequest.m index d649867c4..1315b9904 100755 --- a/SJVideoPlayerProject/Pods/SJRouter/SJRouter/Core/SJRouteRequest.m +++ b/SJVideoPlayerProject/Pods/SJRouter/SJRouter/Core/SJRouteRequest.m @@ -23,6 +23,15 @@ - (instancetype)initWithPath:(NSString *)rq parameters:(nullable SJParameters)pr _prts = prts; return self; } + +- (NSString *)description { + return + [NSString stringWithFormat:@"[%@<%p>] {\n \ + requestPath = %@; \n \ + parameters = %@; \n \ + originalURL = %@; \n \ + }", NSStringFromClass([self class]), self, _requestPath, _prts, _originalURL]; +} @end @implementation SJRouteRequest(CreateByURL) @@ -41,13 +50,5 @@ - (instancetype)initWithURL:(NSURL *)URL { _originalURL = URL; return self; } -- (NSString *)description { - return - [NSString stringWithFormat:@"[%@<%p>] {\n \ - requestPath = %@; \n \ - parameters = %@; \n \ - originalURL = %@; \n \ - }", NSStringFromClass([self class]), self, _requestPath, _prts, _originalURL]; -} @end NS_ASSUME_NONNULL_END diff --git a/SJVideoPlayerProject/Pods/SJRouter/SJRouter/SJRouter.m b/SJVideoPlayerProject/Pods/SJRouter/SJRouter/SJRouter.m index 4d65f8b88..90f63e41a 100755 --- a/SJVideoPlayerProject/Pods/SJRouter/SJRouter/SJRouter.m +++ b/SJVideoPlayerProject/Pods/SJRouter/SJRouter/SJRouter.m @@ -11,19 +11,27 @@ NS_ASSUME_NONNULL_BEGIN static UIViewController *_sj_get_top_view_controller() { UIViewController *vc = UIApplication.sharedApplication.keyWindow.rootViewController; - while ( [vc isKindOfClass:[UINavigationController class]] || [vc isKindOfClass:[UITabBarController class]] ) { - if ( [vc isKindOfClass:[UINavigationController class]] ) vc = [(UINavigationController *)vc topViewController]; - if ( [vc isKindOfClass:[UITabBarController class]] ) vc = [(UITabBarController *)vc selectedViewController]; - if ( vc.presentedViewController ) vc = vc.presentedViewController; + while ( [vc isKindOfClass:[UINavigationController class]] || + [vc isKindOfClass:[UITabBarController class]] || + vc.presentedViewController ) { + if ( [vc isKindOfClass:[UINavigationController class]] ) + vc = [(UINavigationController *)vc topViewController]; + if ( [vc isKindOfClass:[UITabBarController class]] ) + vc = [(UITabBarController *)vc selectedViewController]; + if ( vc.presentedViewController ) + vc = vc.presentedViewController; } return vc; } @interface SJRouter() -@property (nonatomic, strong, readonly) NSMutableDictionary> *handlersM; +@property (nonatomic, strong, readonly) NSMutableDictionary *handlersM; @end -@implementation SJRouter +@implementation SJRouter { + dispatch_group_t _group; +} + + (instancetype)shared { static id _instace; static dispatch_once_t onceToken; @@ -37,52 +45,69 @@ - (instancetype)init { self = [super init]; if ( !self ) return nil; _handlersM = [NSMutableDictionary new]; - - /// Thanks @yehot, @Potato121 - /// https://www.jianshu.com/p/534eccb63974 - /// https://github.com/changsanjiang/SJRouter/pull/1 - - unsigned int img_count = 0; - const char **imgs = objc_copyImageNames(&img_count); - const char *main = NSBundle.mainBundle.bundlePath.UTF8String; - for ( unsigned int i = 0 ; i < img_count ; ++ i ) { - const char *img = imgs[i]; - if ( !strstr(img, main) ) continue; - unsigned int cls_count = 0; - const char **classes = objc_copyClassNamesForImage(img, &cls_count); - Protocol *p_handler = @protocol(SJRouteHandler); - for ( unsigned int i = 0 ; i < cls_count ; ++ i ) { - const char *cls_name = classes[i]; - NSString *cls_str = [NSString stringWithUTF8String:cls_name]; - Class cls = NSClassFromString(cls_str); - if ( ![cls conformsToProtocol:p_handler] ) continue; - if ( ![(id)cls respondsToSelector:@selector(handleRequestWithParameters:topViewController:completionHandler:)] ) continue; - if ( [(id)cls respondsToSelector:@selector(routePath)] ) - _handlersM[[(id)cls routePath]] = cls; - else if ( [(id)cls respondsToSelector:@selector(multiRoutePath)] ) { - for ( NSString *rp in [(id)cls multiRoutePath] ) - _handlersM[rp] = cls; + _group = dispatch_group_create(); + dispatch_group_async(_group, dispatch_get_global_queue(0, 0), ^{ + /// Thanks @yehot, @Potato121 + /// https://www.jianshu.com/p/534eccb63974 + /// https://github.com/changsanjiang/SJRouter/pull/1 + unsigned int img_count = 0; + const char **imgs = objc_copyImageNames(&img_count); + const char *main = NSBundle.mainBundle.bundlePath.UTF8String; + SEL sel_handler = @selector(handleRequestWithParameters:topViewController:completionHandler:); + SEL sel_path = @selector(routePath); + SEL sel_multiPath = @selector(multiRoutePath); + Protocol *protocol = @protocol(SJRouteHandler); + for ( unsigned int i = 0 ; i < img_count ; ++ i ) { + const char *image = imgs[i]; + if ( !strstr(image, main) ) continue; + unsigned int cls_count = 0; + const char **names = objc_copyClassNamesForImage(image, &cls_count); + for ( unsigned int i = 0 ; i < cls_count ; ++ i ) { + const char *cls_name = names[i]; + Class _Nullable cls = objc_getClass(cls_name); + if ( !cls ) continue; + if ( !class_conformsToProtocol(cls, protocol) ) continue; + Class metaClass = (Class)object_getClass(cls); + if ( !class_respondsToSelector(metaClass, sel_handler) ) continue; + if ( class_respondsToSelector(metaClass, sel_path) ) { + IMP func = class_getMethodImplementation(metaClass, sel_path); + NSString *routePath = ((NSString *(*)(id, SEL))func)(cls, sel_path); + if ( routePath.length > 0 ) { + self->_handlersM[routePath] = cls; + } + } + else if ( class_respondsToSelector(metaClass, sel_multiPath) ) { + IMP func = class_getMethodImplementation(metaClass, sel_multiPath); + for ( NSString *routePath in ((NSArray *(*)(id, SEL))func)(cls, sel_multiPath) ) { + if ( routePath.length > 0 ) { + self->_handlersM[routePath] = cls; + } + } + } } + if ( names ) free(names); } - if ( classes ) free(classes); - } - if ( imgs ) free(imgs); + if ( imgs ) free(imgs); + }); + return self; } - (void)handleRequest:(SJRouteRequest *)request completionHandler:(nullable SJCompletionHandler)completionHandler { NSParameterAssert(request); if ( !request ) return; - Class handler = _handlersM[request.requestPath]; - if ( handler ) { - [handler handleRequestWithParameters:request.prts topViewController:_sj_get_top_view_controller() completionHandler:completionHandler]; - } - else { - printf("\n (-_-) Unhandled request: %s", request.description.UTF8String); - if ( _unhandledCallback ) _unhandledCallback(request, _sj_get_top_view_controller()); - } + dispatch_group_notify(_group, dispatch_get_main_queue(), ^{ + Class handler = self->_handlersM[request.requestPath]; + if ( handler ) { + [handler handleRequestWithParameters:request.prts topViewController:_sj_get_top_view_controller() completionHandler:completionHandler]; + } + else { + printf("\n (-_-) Unhandled request: %s", request.description.UTF8String); + if ( self->_unhandledCallback ) self->_unhandledCallback(request, _sj_get_top_view_controller()); + } + }); } - (BOOL)canHandleRoutePath:(NSString *)routePath { if ( 0 == routePath.length ) return NO; - return _handlersM[routePath]; + return _handlersM[routePath] != nil; } @end NS_ASSUME_NONNULL_END diff --git a/SJVideoPlayerProject/SJVideoPlayer.xcworkspace/xcuserdata/bluedancer.xcuserdatad/UserInterfaceState.xcuserstate b/SJVideoPlayerProject/SJVideoPlayer.xcworkspace/xcuserdata/bluedancer.xcuserdatad/UserInterfaceState.xcuserstate index 6ddbc5c982ee478084166117f33ba0dffea4c2c3..6935587f159e42bad3b70833cc74dd6df54e8f33 100644 GIT binary patch delta 172643 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℞>|i%S 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
    qR(+=bPOB_(bZc?ON!lE4+$+ zD(6+*HnN;Y%?6DeP5(TAm*`S~~}8CA{j`9Uls>y3WtW z)jxH#b57CT@v-o#C%hW|*A$;RI{(|3?!uSuCcNr9zjOmzV^5D-4SG2G{M#%0^2+|g ztC91Sjct=XJsMT}$}!~KU!e;f!yMl@hD#+KBTRK1qa34cTRlB`)oH~CBd?~ytIb)* zSjRYicf7;fF@aZ%a7_04-7&>hsk}#jD;WsT?7x=TG0idk&%2k`2f~XFQM~V6{A-yV zb694_T*o}ew~p_G7YE}dyqXKI7Jo1E|JM!7`mc8|M_|$Q;MMY9?qL78f&C+zV&Umc@34=!%!Pmmlo$Hr0R8h5uPUEt>`pI7iGXAU zj>+rmY5vf5w}MAV`TzTevnh)zdaQG^Mo3B0dFeOlx%Adl!sKas&s4=!%~Zow%T%A) z8k?G!nwex%Yg1p-c+&*aB-0er8dH=>H6@r*Oh-)FrUKIi(FH!mufCG zTxz*=a~a?=)a4tO5iX-#mb!$wY;xJ{a^B^l%Vn3VF3(-dxmI#*;M&;L%e95o^#j+| zu037Hx=wbT>N?$Zrt30SyXzL$ZLV>y39d(7ue;uMedPMo&CTsSx3+HG+ahv8g z&&|gzz|H2Sy6tv5=yu-imfL-|S8i|I-nyIIUEE#W-QCUZ#oSA{mvS%TUe3L|dqt_} z|6EM({$29@^WP=OR;HSV*{!Ouw6xVdYp&qtP#v1Bc{Pv5)}4|xJQYW95*KhCxA7D1 z-~oQaV?2|j5v9=@o$wXD#xM-WNQ}l5_!W38`umnpHEJ-~^tl-Hiti^h4#AZZd z7xHlxPbFz&C433K*~t0e3yjpDV~4G6b&vX0ukiF5Zr~QkF_IjkTx?UTdo=D|o2T{A z5bvWYMu6`&>Xalgxiq>N24gl7z!8k8i6LP8G5c{M6nY}!T0uFiPhk= zyw@QWROfvRIXHob_(PI7d1(UQYXaZPI)N`fp$$Gldwha1n1NZCgLw#tfi2jEIOKy0 zCS1o&{2)mai{m|1K{eDsC-eaUCJw+LEWlF9DotF*lMvAN#3by)0USgYIOU0)*u)q3 z9h}yry6{2^e1O*AWF`@9(j-j5G^{}sVxT}nHqPQaE?RlGEJ>41D1&k+kBVrA&+#RC zpciJt7k=t&>^JE8h;R1fd&$x^Gk~GZ| zwNMB3&;Z@>6~4wW42Qr#*-#!gOAW2pI{7T zU>4?J9>QT@3$`H+`M8SfxQQPmX-09phbpLs8t8;R=!XFqga!0JV=0y)1S^n)eK>%F z$if{w!wdY5*OD}|F1*kJAD}gcVge>%3Z`KVq7VZG8nST~*7H1E#AQjEWkMO0LwQt0 zJA95W(F46O8@}*^KLW57yRippNXHF4z;AejCz3R~DjMN^G^PL97M}FSNQ}l-qs0YBnr z+{JxKn(K*LsDpZFfbRGTUt<`CLtrIVV=dMp6-RIkIXHob_(PKB@%^QFE^tE=w82Mc zk54cLGcXHtFc0A{um#%?hkRVcb=<@clJsqHyoV~Nh8pOEKIn%5unyv30hVGJLa+i! z*oOl+h%DT}GrYj>cr8ia)rA*Y-~+VAP)xuiOu;m)K@?)3KtneDe|MHA=W!92C2771 zWl#>~Q4#I%Ile>>^ulcT!Vmrkz*g+W9;6{1H}C+z;Srul()U%-2=8Nuk7<@q=^uquQq5lPZ!v&Ku z2R>K~=dTO!iDW?_R>FpG@F8RY9}5;l!;Wp(iM==gj&%WpEnu((obCcncLArnfYV)Y z8=S_1=Wq^feZ|8Yyp^PdCNTZN3g8pX!ph*N7FGwJGZu1W3qJvg7Ls7$2yjXZCxEUO zP64$noQrQU9}7T53pvS!Yr*gf8Ga$dFJyS@LX{^v5|DyakYr&7_9GKHI1LgkB*8)w zETqqck3gRbpW%fh`4GT|06qlpA%G77d4QgXJZXUs@G-igH@?CsP{ZP>pn}CL*W!8j4y0JT z3~RvAFIK^@iy3zDcI?0|?8bgD?BX*x4^DhByR`T!{V)EBCwIZbitxKKZgszFZl;4DU-FzKdWbg)d$B zh9C?qkS|w*FDZOEa^Ey$fTQ>2=zS04Bsg+kj@*}{_I-p`a1Q&HBQ?Pl?qFyu!&+;h z4(fs9w{q%MPTgu{a%*d}MLTpxPxL{5a5Y$mU?{jNTB*W115{z93hR83#_EsdScga$ zNW=~#V-NO%FxDf;!+BV5@WAm~IdbbWyaY#YC5azN{7Rq#YM>#!z_5M{>&H?1bwEdS z0z>-^21o8U48t)F6EGRm!0>(y?dOMJ`uAJGlT}!Y^{^oZTM>(Rki?H9e!D;dKN9$n zz%L)CaR#LEW3l{hfnD-@isvAZANBaX0igt!vhW0YCb3hJUMT7h8x1he{+%)cY(&%Xx-Vlak) zl>Vgj=T7ENI)Bpnlg^)X{-pCKoj>XPN#{>Gf71Dr&YyJtr1K}7KjHid=f4w#^Cz4? z;rt2bf1LjPb9q9S{+DqZKjSXw(EkDG(EoS5#vhWj!~|EALM4!F3DqsB1rjc)4+}oT zNB9_2w}gO8x}X;bxP(wkCX!$Ysg{sx$s#!aGl`Z2A_%Jy4h1aZ5*Ba?3%KL}4uM5n zLXsuaw4@MM@FS>Z$qPveVAueL4R8n51W-)?)dVnfKy6r=IDm-*8iJ_AD3s6l!Z}bBd1&|4}t{#AxTR;P!3g5kG_|3^h@7IGjRM%TYwZxJEJECVFV_CVV82;OQ&H5IP#?n zz_3eKft%RUb>K=^x)FA0a9}IqKm|)V`lSb8WqFn|`O-WTfCNj=;X3Ys$(K^aQmR-= zf~C(TiCU!~7AdGa*!-XdkiphrmEd$3L#Bm34%t1^WlnkZ~O2uAeU_Tf-=rkBOh=GGHfT4qK;sfs8sUgQ zG}!!QIvm&zf-GaZs9hVe%TYe1k*2jBT2z7a7QteKn2tQ`xDH- z!R${k`xDII!PF4^3A*76bO*Z>+z0(I6l39hKM&^G4W0>l38t6e@4#Te)DcV_!C_br z8>l9jWWhREq+qHECQKCzyJIsVDd{u7Z%kgbcoqr}Q7pwH-{t;6EfO z!~|EALM2p2Ra8e!)CNgINEkxGkPp!o)D%M65YmQ_Fk}cw81fB9U=+rHD<@N$Onl-&fpv_g47|m@c_^9 z5`+zTBT37-ik7=rc_@jBsEOLBi~4AY#^ADA-VPt513ID;x_~a155X`D2aCDf8#Uo5`_F1O{s;8#4v zV>|_kSCDcAm)Z(Kt|*PN@I(c0#aUO7as??@G=UdLyP_37#HaWIJ@YLDCfy zF&R@a9kVb8RJwwsD?&lQ6>AWN^{^oZTMeE*60_D@m}D1S>Zo5+qrvLPr8pK!TM_zmf%9$*?OKcI7qP zz%AScL$7=eF1eKqy-EUi&{gj6Ksi*U|5Y`3QXBQq5RJhSuHuqg^)Wi2BdBIoSM&x+ zR*_&8306_fDsNEDD#ENH%qqgH3Ix@xqMB995elYQwGnm@YL#x~!2!Bj6^lLCk4zlG zVVuB8oWg0G!BzYO7I4)s_zjOiO{@Npq}3iMfzlx9>I$Hy)wR$V1YAwP)y}`~t?r3F z=noce^$^h0>am!Ld0334Ai?UjSPzn{-VAD5Z6FZ@Sk3UObHK2x8FuwKTmV(ArmEEp zy_&0LH3M5$Gx2JATFumJ=xB{ASgtk2;0Z3DHTA(#t!V-anxiG!qYFMqcl1JE^v5ua z!!&#gUj!ipRIz3?!sveuN!CQcf$d1eK^zCiz9t`B9cxIjh7@aV;vSyhjU=sQ*tKQB zuxmNywUtmARl(3}n?VLcuWgMsXa{y{ZCCnV+Z+8b5G>Z(q4);lFɌ*}j;zJ~xw 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