diff --git a/.DS_Store b/.DS_Store index 4dc6b07f3..aceed2b64 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Example/.DS_Store b/Example/.DS_Store index edbbd4a9b..f08e6a8db 100644 Binary files a/Example/.DS_Store and b/Example/.DS_Store differ diff --git a/Example/Podfile b/Example/Podfile index ce609def5..46275c8e8 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -1,7 +1,7 @@ source 'https://cdn.cocoapods.org/' # Uncomment the next line to define a global platform for your project -platform :ios, '8.0' +platform :ios, '9.0' #install! 'cocoapods', disable_input_output_paths: true, generate_multiple_pod_projects: true diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 8811cbf0c..3f7dfabf3 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -5,43 +5,43 @@ PODS: - SDWebImage (5.9.5): - SDWebImage/Core (= 5.9.5) - SDWebImage/Core (5.9.5) - - SJBaseVideoPlayer (3.5.2): + - SJBaseVideoPlayer (3.6.0): - Masonry - - SJBaseVideoPlayer/AVPlayer (= 3.5.2) - - SJBaseVideoPlayer/Common (= 3.5.2) + - SJBaseVideoPlayer/AVPlayer (= 3.6.0) + - SJBaseVideoPlayer/Common (= 3.6.0) - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - - SJBaseVideoPlayer/AVPlayer (3.5.2): + - SJBaseVideoPlayer/AVPlayer (3.6.0): - Masonry - SJBaseVideoPlayer/Common - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - - SJBaseVideoPlayer/Common (3.5.2): + - SJBaseVideoPlayer/Common (3.6.0): - Masonry - SJBaseVideoPlayer/ResourceLoader - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - - SJBaseVideoPlayer/ResourceLoader (3.5.2): + - SJBaseVideoPlayer/ResourceLoader (3.6.0): - Masonry - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - SJFullscreenPopGesture/ObjC (1.5.4) - - SJMediaCacheServer (1.5.3): - - SJMediaCacheServer/Core (= 1.5.3) - - SJMediaCacheServer/KTVCocoaHTTPServer (= 1.5.3) + - SJMediaCacheServer (1.6.3): + - SJMediaCacheServer/Core (= 1.6.3) + - SJMediaCacheServer/KTVCocoaHTTPServer (= 1.6.3) - SJUIKit/SQLite3 - - SJMediaCacheServer/Core (1.5.3): + - SJMediaCacheServer/Core (1.6.3): - SJMediaCacheServer/KTVCocoaHTTPServer - SJUIKit/SQLite3 - - SJMediaCacheServer/KTVCocoaHTTPServer (1.5.3): + - SJMediaCacheServer/KTVCocoaHTTPServer (1.6.3): - CocoaAsyncSocket - SJUIKit/SQLite3 - SJPlaybackListController (0.0.5): @@ -109,21 +109,21 @@ PODS: - SJUIKit/UIMaker (0.0.0.52): - SJUIKit/UIMaker/Core (= 0.0.0.52) - SJUIKit/UIMaker/Core (0.0.0.52) - - SJVideoPlayer (3.3.0): - - SJBaseVideoPlayer (>= 3.5.0) - - SJVideoPlayer/Common (= 3.3.0) - - SJVideoPlayer/ControlLayers (= 3.3.0) - - SJVideoPlayer/ResourceLoader (= 3.3.0) - - SJVideoPlayer/Common (3.3.0): + - SJVideoPlayer (3.3.2): + - SJBaseVideoPlayer (>= 3.6.0) + - SJVideoPlayer/Common (= 3.3.2) + - SJVideoPlayer/ControlLayers (= 3.3.2) + - SJVideoPlayer/ResourceLoader (= 3.3.2) + - SJVideoPlayer/Common (3.3.2): - Masonry - - SJBaseVideoPlayer (>= 3.5.0) + - SJBaseVideoPlayer (>= 3.6.0) - SJUIKit/AttributesFactory - SJVideoPlayer/ResourceLoader - - SJVideoPlayer/ControlLayers (3.3.0): - - SJBaseVideoPlayer (>= 3.5.0) + - SJVideoPlayer/ControlLayers (3.3.2): + - SJBaseVideoPlayer (>= 3.6.0) - SJVideoPlayer/Common - - SJVideoPlayer/ResourceLoader (3.3.0): - - SJBaseVideoPlayer (>= 3.5.0) + - SJVideoPlayer/ResourceLoader (3.3.2): + - SJBaseVideoPlayer (>= 3.6.0) - YYModel (1.0.4) DEPENDENCIES: @@ -162,15 +162,15 @@ SPEC CHECKSUMS: Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 MJRefresh: 53e3e3219f204425ee6d3e62e8733d3295944cd6 SDWebImage: 0b2ba0d56479bf6a45ecddbfd5558bea93150d25 - SJBaseVideoPlayer: c8f2fdb374ec2c946c37b1f39eee24f0812a979b + SJBaseVideoPlayer: cce3df2362ab1dee82a663394c0af1b9109cb4ac SJFullscreenPopGesture: 7be57b1014cb77f4b7c1e6df5e797da6d05dc75d - SJMediaCacheServer: 9f8a1410cdaa028e9089ac3f17cebca41193151e + SJMediaCacheServer: 74656385db09cf77d76a649143d1f870e344e4e9 SJPlaybackListController: e135c789fcd63d63a62d5e2e2965ab1e6d52a2bd SJRouter: a866e7884fc9219bed523be0a0318c3a84e85022 SJUIKit: 8246b1001e616b0dbd090309fd58cdd609ae3fd4 - SJVideoPlayer: f819c5074aea5192fe624784f8a7e820e45b85cf + SJVideoPlayer: 3a271ff92c7b9d611c537655fd1edcbae18b8587 YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 -PODFILE CHECKSUM: 29e274b3a7b747f79a95901fcf2d39e60d7aef9d +PODFILE CHECKSUM: f7beb076290a8efaaebb93dade92bb2c7513751f COCOAPODS: 1.10.1 diff --git a/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetCacheManager.h b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetCacheManager.h new file mode 120000 index 000000000..826ebfb56 --- /dev/null +++ b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetCacheManager.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetExporterDefines.h b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetExporterDefines.h new file mode 120000 index 000000000..1fed5175c --- /dev/null +++ b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetExporterDefines.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterDefines.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetExporterManager.h b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetExporterManager.h new file mode 120000 index 000000000..0e400cdca --- /dev/null +++ b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSAssetExporterManager.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/SJMediaCacheServer/MCSDatabase.h b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSDatabase.h new file mode 120000 index 000000000..2ff76c5e3 --- /dev/null +++ b/Example/Pods/Headers/Private/SJMediaCacheServer/MCSDatabase.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetCacheManager.h b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetCacheManager.h new file mode 120000 index 000000000..826ebfb56 --- /dev/null +++ b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetCacheManager.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetExporterDefines.h b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetExporterDefines.h new file mode 120000 index 000000000..1fed5175c --- /dev/null +++ b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetExporterDefines.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterDefines.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetExporterManager.h b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetExporterManager.h new file mode 120000 index 000000000..0e400cdca --- /dev/null +++ b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSAssetExporterManager.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/SJMediaCacheServer/MCSDatabase.h b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSDatabase.h new file mode 120000 index 000000000..2ff76c5e3 --- /dev/null +++ b/Example/Pods/Headers/Public/SJMediaCacheServer/MCSDatabase.h @@ -0,0 +1 @@ +../../../SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.h \ No newline at end of file diff --git a/Example/Pods/Local Podspecs/SJBaseVideoPlayer.podspec.json b/Example/Pods/Local Podspecs/SJBaseVideoPlayer.podspec.json deleted file mode 100644 index 8a030f99a..000000000 --- a/Example/Pods/Local Podspecs/SJBaseVideoPlayer.podspec.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "name": "SJBaseVideoPlayer", - "version": "3.5.2", - "summary": "video player.", - "description": "https://github.com/changsanjiang/SJBaseVideoPlayer/blob/master/README.md", - "homepage": "https://github.com/changsanjiang/SJBaseVideoPlayer", - "license": { - "type": "MIT", - "file": "LICENSE.md" - }, - "authors": { - "SanJiang": "changsanjiang@gmail.com" - }, - "platforms": { - "ios": "8.0" - }, - "source": { - "git": "https://github.com/changsanjiang/SJBaseVideoPlayer.git", - "tag": "v3.5.2" - }, - "frameworks": [ - "UIKit", - "AVFoundation" - ], - "requires_arc": true, - "source_files": "SJBaseVideoPlayer/*.{h,m}", - "default_subspecs": [ - "Common", - "AVPlayer" - ], - "dependencies": { - "Masonry": [ - - ], - "SJUIKit/AttributesFactory": [ - ">= 0.0.0.38" - ], - "SJUIKit/ObserverHelper": [ - - ], - "SJUIKit/Queues": [ - - ], - "SJUIKit/SQLite3": [ - - ] - }, - "subspecs": [ - { - "name": "Common", - "source_files": "SJBaseVideoPlayer/Common/**/*.{h,m}", - "dependencies": { - "SJBaseVideoPlayer/ResourceLoader": [ - - ] - } - }, - { - "name": "ResourceLoader", - "source_files": "SJBaseVideoPlayer/ResourceLoader/*.{h,m}", - "resources": "SJBaseVideoPlayer/ResourceLoader/SJBaseVideoPlayerResources.bundle" - }, - { - "name": "AVPlayer", - "source_files": "SJBaseVideoPlayer/AVPlayer/**/*.{h,m}", - "dependencies": { - "SJBaseVideoPlayer/Common": [ - - ] - } - }, - { - "name": "IJKPlayer", - "source_files": "SJBaseVideoPlayer/IJKPlayer/**/*.{h,m}", - "dependencies": { - "ijkplayerssl": [ - - ], - "SJBaseVideoPlayer/Common": [ - - ] - } - }, - { - "name": "AliPlayer", - "source_files": "SJBaseVideoPlayer/AliPlayer/**/*.{h,m}", - "dependencies": { - "AliPlayerSDK_iOS": [ - - ], - "SJBaseVideoPlayer/Common": [ - - ] - } - }, - { - "name": "AliVodPlayer", - "source_files": "SJBaseVideoPlayer/AliVodPlayer/**/*.{h,m}", - "dependencies": { - "AliyunPlayer_iOS/AliyunVodPlayerSDK": [ - - ], - "SJBaseVideoPlayer/Common": [ - - ] - } - }, - { - "name": "PLPlayer", - "source_files": "SJBaseVideoPlayer/PLPlayer/**/*.{h,m}", - "dependencies": { - "PLPlayerKit": [ - - ], - "SJBaseVideoPlayer/Common": [ - - ] - } - } - ] -} diff --git a/Example/Pods/Local Podspecs/SJVideoPlayer.podspec.json b/Example/Pods/Local Podspecs/SJVideoPlayer.podspec.json index fac61d1fa..ea3881e4a 100644 --- a/Example/Pods/Local Podspecs/SJVideoPlayer.podspec.json +++ b/Example/Pods/Local Podspecs/SJVideoPlayer.podspec.json @@ -1,6 +1,6 @@ { "name": "SJVideoPlayer", - "version": "3.3.0", + "version": "3.3.2", "summary": "video player.", "description": "https://github.com/changsanjiang/SJVideoPlayer/blob/master/README.md", "homepage": "https://github.com/changsanjiang/SJVideoPlayer", @@ -12,16 +12,16 @@ "SanJiang": "changsanjiang@gmail.com" }, "platforms": { - "ios": "8.0" + "ios": "9.0" }, "source": { "git": "https://github.com/changsanjiang/SJVideoPlayer.git", - "tag": "v3.3.0" + "tag": "v3.3.2" }, "requires_arc": true, "dependencies": { "SJBaseVideoPlayer": [ - ">= 3.5.0" + ">= 3.6.0" ] }, "source_files": "SJVideoPlayer/*.{h,m}", diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 8811cbf0c..3f7dfabf3 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -5,43 +5,43 @@ PODS: - SDWebImage (5.9.5): - SDWebImage/Core (= 5.9.5) - SDWebImage/Core (5.9.5) - - SJBaseVideoPlayer (3.5.2): + - SJBaseVideoPlayer (3.6.0): - Masonry - - SJBaseVideoPlayer/AVPlayer (= 3.5.2) - - SJBaseVideoPlayer/Common (= 3.5.2) + - SJBaseVideoPlayer/AVPlayer (= 3.6.0) + - SJBaseVideoPlayer/Common (= 3.6.0) - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - - SJBaseVideoPlayer/AVPlayer (3.5.2): + - SJBaseVideoPlayer/AVPlayer (3.6.0): - Masonry - SJBaseVideoPlayer/Common - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - - SJBaseVideoPlayer/Common (3.5.2): + - SJBaseVideoPlayer/Common (3.6.0): - Masonry - SJBaseVideoPlayer/ResourceLoader - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - - SJBaseVideoPlayer/ResourceLoader (3.5.2): + - SJBaseVideoPlayer/ResourceLoader (3.6.0): - Masonry - SJUIKit/AttributesFactory (>= 0.0.0.38) - SJUIKit/ObserverHelper - SJUIKit/Queues - SJUIKit/SQLite3 - SJFullscreenPopGesture/ObjC (1.5.4) - - SJMediaCacheServer (1.5.3): - - SJMediaCacheServer/Core (= 1.5.3) - - SJMediaCacheServer/KTVCocoaHTTPServer (= 1.5.3) + - SJMediaCacheServer (1.6.3): + - SJMediaCacheServer/Core (= 1.6.3) + - SJMediaCacheServer/KTVCocoaHTTPServer (= 1.6.3) - SJUIKit/SQLite3 - - SJMediaCacheServer/Core (1.5.3): + - SJMediaCacheServer/Core (1.6.3): - SJMediaCacheServer/KTVCocoaHTTPServer - SJUIKit/SQLite3 - - SJMediaCacheServer/KTVCocoaHTTPServer (1.5.3): + - SJMediaCacheServer/KTVCocoaHTTPServer (1.6.3): - CocoaAsyncSocket - SJUIKit/SQLite3 - SJPlaybackListController (0.0.5): @@ -109,21 +109,21 @@ PODS: - SJUIKit/UIMaker (0.0.0.52): - SJUIKit/UIMaker/Core (= 0.0.0.52) - SJUIKit/UIMaker/Core (0.0.0.52) - - SJVideoPlayer (3.3.0): - - SJBaseVideoPlayer (>= 3.5.0) - - SJVideoPlayer/Common (= 3.3.0) - - SJVideoPlayer/ControlLayers (= 3.3.0) - - SJVideoPlayer/ResourceLoader (= 3.3.0) - - SJVideoPlayer/Common (3.3.0): + - SJVideoPlayer (3.3.2): + - SJBaseVideoPlayer (>= 3.6.0) + - SJVideoPlayer/Common (= 3.3.2) + - SJVideoPlayer/ControlLayers (= 3.3.2) + - SJVideoPlayer/ResourceLoader (= 3.3.2) + - SJVideoPlayer/Common (3.3.2): - Masonry - - SJBaseVideoPlayer (>= 3.5.0) + - SJBaseVideoPlayer (>= 3.6.0) - SJUIKit/AttributesFactory - SJVideoPlayer/ResourceLoader - - SJVideoPlayer/ControlLayers (3.3.0): - - SJBaseVideoPlayer (>= 3.5.0) + - SJVideoPlayer/ControlLayers (3.3.2): + - SJBaseVideoPlayer (>= 3.6.0) - SJVideoPlayer/Common - - SJVideoPlayer/ResourceLoader (3.3.0): - - SJBaseVideoPlayer (>= 3.5.0) + - SJVideoPlayer/ResourceLoader (3.3.2): + - SJBaseVideoPlayer (>= 3.6.0) - YYModel (1.0.4) DEPENDENCIES: @@ -162,15 +162,15 @@ SPEC CHECKSUMS: Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 MJRefresh: 53e3e3219f204425ee6d3e62e8733d3295944cd6 SDWebImage: 0b2ba0d56479bf6a45ecddbfd5558bea93150d25 - SJBaseVideoPlayer: c8f2fdb374ec2c946c37b1f39eee24f0812a979b + SJBaseVideoPlayer: cce3df2362ab1dee82a663394c0af1b9109cb4ac SJFullscreenPopGesture: 7be57b1014cb77f4b7c1e6df5e797da6d05dc75d - SJMediaCacheServer: 9f8a1410cdaa028e9089ac3f17cebca41193151e + SJMediaCacheServer: 74656385db09cf77d76a649143d1f870e344e4e9 SJPlaybackListController: e135c789fcd63d63a62d5e2e2965ab1e6d52a2bd SJRouter: a866e7884fc9219bed523be0a0318c3a84e85022 SJUIKit: 8246b1001e616b0dbd090309fd58cdd609ae3fd4 - SJVideoPlayer: f819c5074aea5192fe624784f8a7e820e45b85cf + SJVideoPlayer: 3a271ff92c7b9d611c537655fd1edcbae18b8587 YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 -PODFILE CHECKSUM: 29e274b3a7b747f79a95901fcf2d39e60d7aef9d +PODFILE CHECKSUM: f7beb076290a8efaaebb93dade92bb2c7513751f COCOAPODS: 1.10.1 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index bb2e030c3..0c043e1c8 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -8,292 +8,301 @@ /* Begin PBXBuildFile section */ 00019CCAA3EBAB3F8539E6183612530B /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 560E0E129A5A7A82BB1820E9444A0581 /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01115DC551515C256C624B08361587F9 /* SJUTRangeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 10A3C158125C46497339B40E572ABF69 /* SJUTRangeHandler.m */; }; 012DEEFBEE400A346E6D7690D03C442D /* SJPlaybackListController.h in Headers */ = {isa = PBXBuildFile; fileRef = 467C652E295F76904F58BC6CCF0BADC5 /* SJPlaybackListController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 013C505091B7874AE7C0078FE0320A0E /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A608FF9AD8A82338C3893FA22BA6485 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m */; }; 016E3DD1A05996B95988A0F92C603610 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = D83CDBC0246F9EB1A4CAAFAF39DE83EB /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 017C06B71677BCC7357415D9D5A228C2 /* MultipartMessageHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = C51F52CA95017D97749BE2ABA2171B2B /* MultipartMessageHeader.m */; }; + 01A10732F98B8DFC8C11B34024E3DE2F /* FILEContentReader.h in Headers */ = {isa = PBXBuildFile; fileRef = A1926FDFCA182EB64E9A112542CA77A2 /* FILEContentReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01EEAAAE410356BC64AF4CED471DA9D6 /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3059A52441B60DD9A8BD4B4DD3CCE049 /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Project, ); }; }; 02018AA4E1D4B37C5064828B6983661B /* SJScrollingTextMarqueeView.m in Sources */ = {isa = PBXBuildFile; fileRef = D409DF0227B42F346E15A0AA1B6A1737 /* SJScrollingTextMarqueeView.m */; }; 0206AA9B8096F41E3066F2DE61992E30 /* SJEdgeControlLayerAdapters.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F4C95B603CF7091192F53C30A7E6912 /* SJEdgeControlLayerAdapters.m */; }; + 0278F92C8FC33B5D3E106683680DD566 /* NSFileManager+MCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 792C4EBADAFC58F63FC52B95CC087392 /* NSFileManager+MCS.m */; }; + 02D2B0142F1D87E9BD8DB99887ED26F0 /* SJPageMenuItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = DC06EEF43B1B262F1A4E6BD2E586BA72 /* SJPageMenuItemView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 031B5492C69D9F8CD12757A3FAFD3A36 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = F9EC09874E19E1B282CC69FCEDE178F3 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; 032B00C748FE79147F65DB862EE69E37 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C80D8B884D558E4EC06E4E8B4739ECD /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 034280DBCCE734F5BBA0F2C81F6A6386 /* MCSDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = B015A785C70AB78A84078CD6AE257075 /* MCSDownload.h */; settings = {ATTRIBUTES = (Project, ); }; }; 03552D845550E0E914B08624DF33B3AC /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B62B4E216857876FFAA0370F04B3E2C8 /* MJRefreshConst.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 039676F4F24635170BE0CE9EDD3C896A /* SJSQLite3+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EFA46E02E78F84D951C818E9B961E07 /* SJSQLite3+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 03A3C427BCEAEB0168C5B1DA5B9A0B86 /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = B8B5686D5C8BDEEA7F32027620DC9089 /* SDAnimatedImagePlayer.m */; }; 03ECE44E890B0E77E66141A886FF7384 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 83EE4AA934CD326F1B8260473827306D /* SDWebImageDownloaderConfig.m */; }; + 04016EAF004896380B686F67DDB72176 /* UILabel+AsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FCA9CFC70EAC2F50D15466FAD13EA5D /* UILabel+AsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; 040DD7A50C846F2D707268BF655C8D37 /* NSTimer+SJAssetAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB24AC95D8FBA82C5F6929E521ADBCD /* NSTimer+SJAssetAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05295354FDCD6FE7A5BA53E4575CCBF4 /* MCSContents.m in Sources */ = {isa = PBXBuildFile; fileRef = 61FEF9173358E4B2008CA72098EB7B25 /* MCSContents.m */; }; + 040FC0B49E8AD1DA58078D241EFD30A7 /* NSObject+SJObserverHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D6EE5C0D98C5C8BFF6E6E6AED2F6A883 /* NSObject+SJObserverHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; 054C76235F662ABDBDB8A36387A4B63D /* SJDraggingObservationDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B4459DA15487099BAAF757D68CA71B5E /* SJDraggingObservationDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 05751F398FC8210FFDDED3D4EB0AADEF /* SJClipsResultShareItemsContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F5C1C1D209E0978F434B46A288BA37 /* SJClipsResultShareItemsContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05887BC3FAD89B9F95710C48E4567DE5 /* MCSResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D980E76261FECBCA2AC5E91732F710 /* MCSResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0650AA299D9E18C22F3D7978B8D13F0E /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = FA80A870A145FE99C70C8EDD4AD65624 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06514FD84CC576BCCE44F89EE61A7F68 /* GCDAsyncSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = F21A5EAF88135F5B4BB309F424F006F9 /* GCDAsyncSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 066458A8DE5035F9DB2529F2F86FC150 /* NSObject+YYModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D13E739A02B7FA73CC1AB9E9D33B28B4 /* NSObject+YYModel.m */; }; + 06766DBC85DE41BD428F185A2BDD08CB /* NSFileHandle+MCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 801432771A18EE6A49F6EBD02AB81E7F /* NSFileHandle+MCS.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06943F195425D70618781500ECA5D13A /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 19524FEE891C6FAF5F55CA4E3AE22807 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0719A890DF87074AA999AC213C9B371E /* MultipartFormDataParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 71EBD99881B26F1B8670D3FCF6BEA510 /* MultipartFormDataParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06A19184FD8CCA4DEF1D2A4FD0913198 /* SJUTAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 69184AF8C74A5F2DA4984440A0FC8AE2 /* SJUTAttributes.m */; }; 0727F07AAFF0AF397420F6051DA07BDC /* SJFloatSmallViewControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD3305379840B12FF1DF0579050F418 /* SJFloatSmallViewControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 079C1221B830578A95B67872B0D43FC5 /* FILEPrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5428B43B415C37B1EA4BAF11540BFF40 /* FILEPrefetcher.m */; }; + 07A02E36986EB27A6778E0A5BA76B178 /* SJSQLite3TableClassCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E005BDED0E5395CD560BB8CAD5FF72A /* SJSQLite3TableClassCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07C7F8819A5E608FA257B2BB12C98EE3 /* SJBaseCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C53AAEF001D29B559B6EEC72C8D94DBF /* SJBaseCollectionViewCell.m */; }; 084F36480B7CF5E32993077A0B5A31F4 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = D35CD4F8D0E9BDAC8F9B19EFDEE73B71 /* NSData+ImageContentType.m */; }; - 0867DF9C40BC91466192EB8E4F1CAEBB /* HLSContentTs.m in Sources */ = {isa = PBXBuildFile; fileRef = 746F3A6A212EDD0491289415A0DEC7AB /* HLSContentTs.m */; }; - 0882C8A7983A9EDF1C7B3891D20C2B08 /* UIViewController+SJPageViewControllerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 422F86FA99E0FDDD558A309ADD7AFC8A /* UIViewController+SJPageViewControllerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0894591F0E79526791D2B22A4CAEF29B /* MultipartMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3847E8C01B180FE35579AB8A496055A1 /* MultipartMessageHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08D07AE18AA617014352BE98193CB9F0 /* NSObject+SJAsyncLoad.m in Sources */ = {isa = PBXBuildFile; fileRef = FCEEDF8927741E160A84A4E96A8A3B05 /* NSObject+SJAsyncLoad.m */; }; + 08C7F9984D38BFDEDDE25E926CF0538B /* SJAttributesRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 15DAEBB9A4FAE807C8656A8EAEF3EF44 /* SJAttributesRecorder.m */; }; 08FA8C552C284E620F6D60CBD7EF5F96 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 09EA1795A25EFDF3F2202C25D5FEEFAD /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 098E8CC8DF32416A428381F52273D2A6 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D128F1C2694137B637FC0B6DB8993F54 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 09B5CBEA8D0449BCC570F4470FB5C252 /* SJLoadFailedControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0444116F11EF9930E9DB4CFB2814A987 /* SJLoadFailedControlLayer.m */; }; 09BB6FF47D5A11F537E308ED12029DF8 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CE31CE6D8A2AD545B61CD57E68B8D51 /* SDImageCache.m */; }; 0A4F3D0625FFC1BFBE800B86278F93C8 /* SJAVMediaPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 456B6936BDD992AAB2DF20366342836D /* SJAVMediaPlaybackController.m */; }; - 0A5F46D18BB9C0022FF06B8A3F243CA8 /* MCSURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DD5D81A374225C9AD4FAE387F51AEF9 /* MCSURL.m */; }; + 0A594981BE02A7365019DB4249A79268 /* SJTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C0CFE75E571AE7754AEDB5EBA7891229 /* SJTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0A9EA29A8B86EBADCED48E971B49E8E8 /* SJClipsGIFCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = F0B48D7AEBC288C381A352E83EBF0AAA /* SJClipsGIFCountDownView.m */; }; + 0AB608FDC84E5519371D2803A8F1374F /* SJMediaCacheServer.m in Sources */ = {isa = PBXBuildFile; fileRef = B20E997D4E0937114B4FFCAB9C6D6940 /* SJMediaCacheServer.m */; }; 0ADFB8408D908E0C8F0A263AF44E663B /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AE120361D81F9815B8AA98D94BF3BCC /* SDWebImageDownloader.m */; }; 0B9322DBFDB7C240D7371108CA274C6C /* SJFlipTransitionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A9ACD11D4CE91EBC7D0566530A4D21 /* SJFlipTransitionManager.m */; }; - 0B974E69ADC037CC8ABB7A1E406121A1 /* HTTPDynamicFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = DB64F0EB5F8F52C8D0F468D0D0FD4D31 /* HTTPDynamicFileResponse.m */; }; - 0DF602CDC01F004AA27917CD8E8F8D38 /* UITextField+AsyncLoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EC4B483884FFCB8ACB7704461839DD5 /* UITextField+AsyncLoadImage.m */; }; + 0C15E01F00667B0385A3BC8125A5F161 /* SJSQLite3+QueryExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = C446BA4924D94445F06CBAF59AA1E319 /* SJSQLite3+QueryExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C350DE155068645789F94FB55980551 /* MCSPrefetcherManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CF3EF3F12ECF115ADA607E98C1789F1A /* MCSPrefetcherManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C889271AA4BCAC2EAF61E032C55AEB3 /* MCSConsts.m in Sources */ = {isa = PBXBuildFile; fileRef = C5D2A2A7417893F93C20C8A76904A9DB /* MCSConsts.m */; }; + 0DEC551DD62B1B948EBC14F6D020A319 /* HTTPAsyncFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E6180B0168C92CBD188A050B92AD60F /* HTTPAsyncFileResponse.m */; }; 0E9F8C927AA07FBC28D26CF0DC2CB71A /* SJPlaybackRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 50194C0386F8E1D079247D6C310D9F00 /* SJPlaybackRecord.m */; }; - 0F8527DE075A75D13B47054D050DC06F /* SJPageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34E16EB6E3782C95A0F105623E836990 /* SJPageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0FB482312F39D9E248887C62D84DFAF2 /* MCSAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AB83BCBB5BCF54268252E159B7A7939A /* MCSAssetManager.m */; }; 0FCE7CED88969056C378078FBA871C52 /* SJRouteObject+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B33F1CE4B793B98DE76BD3ED57446AA /* SJRouteObject+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 104C9595E899A6F217759B759C32DD08 /* UIImageView+AsyncLoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 301B27B5CF42CE3BF9D26BCB0073740E /* UIImageView+AsyncLoadImage.m */; }; + 0FE43E246966CDF693E16D38D6DFDE8B /* MultipartFormDataParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B39265485E928A896916FC843606AFC /* MultipartFormDataParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; 108EE8D01059252622BE5B77F4A1B4DE /* SJLoadFailedControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = CF71BD8DBCA3A0D7BBB352B44D69F4B4 /* SJLoadFailedControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 10D566112D94A961E02A2C54882DFB81 /* DDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C35B707038771C7773B679E182BA97 /* DDNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; 11132C66A4D174BD4D62BAD82D1C73F9 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2795E14AA2C1EE572265D1837213CFB2 /* MJRefreshAutoStateFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1156CC510D2FC8218F2E93EEE875E4DE /* SJSQLiteTableModelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACB4F76A28ADED78817AD28003C6CD4 /* SJSQLiteTableModelProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; 115ACCE253A886181B55773DDC70D6ED /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = CE96A9D98C4C65B6A366FCFF3CE1EA44 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; 11EACA97C79866F1918408EDEBCFF525 /* SJControlLayerAppearStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FA02658055F7B11B255FDDBD3C8870CF /* SJControlLayerAppearStateManager.m */; }; 12784159EDF62CA7CFE529452BA52061 /* SJFullscreenPopGesture.m in Sources */ = {isa = PBXBuildFile; fileRef = 2900353463EB7194CB94E05EC1735011 /* SJFullscreenPopGesture.m */; }; 128CB82581C01598C1E2F282C3EF6E6E /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D2EE7014D1FE6B3143866C53704D22EB /* SDAnimatedImage.m */; }; - 12D6A5DF53077ACC54F2E002FD28FE30 /* SJPageViewControllerItemCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D086E58295391DCE6B005555C826E8DB /* SJPageViewControllerItemCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 134A6185492AA4305AED1011AAC32BDF /* NSDate+SJAdded.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F316D901E4A712C758700835E58B84E /* NSDate+SJAdded.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1351C2BAE1B07087C52A1A62D9B4A4AC /* SJUTRegexHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8EF22AE772F18190CA274EE66691BE /* SJUTRegexHandler.m */; }; 1435130904E781B0C8BFB79A719FDE3B /* SJLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = F30FAD3E41CA3CA6EA88FCEAAD57E591 /* SJLoadingView.m */; }; - 14B712B232635652B63D66E5BE4DE083 /* SJBaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CB410245F325EB4ACF2D31E5560093A0 /* SJBaseTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14BC18BBAA08EF9FDE57D238476F00E6 /* MCSProxyServer.m in Sources */ = {isa = PBXBuildFile; fileRef = BC81AC058ACE717D9FA65DB57B81F169 /* MCSProxyServer.m */; }; + 14A48A4F9F0AE191E8644ED9B39AAB81 /* SJPageMenuBar.h in Headers */ = {isa = PBXBuildFile; fileRef = CD9F4CAB334BC9B1A0074BA0DDB844B3 /* SJPageMenuBar.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14C549A762DA24F3F10E5722D8D40FFD /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 469C321FFA71E97A6B96CC3F39DBB8A8 /* UIView+WebCache.m */; }; 14E576329E0DD1AA7F16E7E5C629C447 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C7F622F9BA7D562E9C0CC263979662A /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14FF8DDD0758BB2987E2477E78178E6B /* HTTPDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1751EBD13DBA77E60C4CC412CB14BA88 /* HTTPDataResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1534DEC8D547B6B03B4C9C7C86D8A101 /* HTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCFD91DA388D7BC10819DFCA4230E91 /* HTTPServer.m */; }; 15B0B2B8331E0C1A283101F8B556AF82 /* SJEdgeControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D2A019A0AD97FD48BD74D7F7A8760884 /* SJEdgeControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1690837086B59C2F4FE83F9D85986097 /* SJSQLite3+FoundationExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = E4DE603938351D49E770AA223DF18268 /* SJSQLite3+FoundationExtended.m */; }; + 15C75ADF3F54C8066114A4FB2BC47227 /* NSObject+SJObserverHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 49AE9CC8979882D457146630C03F9162 /* NSObject+SJObserverHelper.m */; }; + 160104B1155C8A14D801B5AC9102485A /* HTTPAuthenticationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E51090CA45B29E7C0B33990D2E8308 /* HTTPAuthenticationRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16B9DC8CB012DAA7A6ECFDD446FA8BBE /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 79C26FB5112E5D324A2FEDD9DF2C6E87 /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 170F97CD69BD6031D937C92D34FD4706 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = DE092EDFD8FB5D113C0A240D201285FA /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; 17500F12CDDF3903A2896BC0B063A8DE /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = C539C84D4FE7D54EB113417AF356876A /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 181B2691FF506F26F7F71F711C724B81 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E9D4ACA3FD1A89B5EF1B0C9852A562C /* MASConstraintMaker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 18EE3F482FB01CB8018D6DF8B407CBF7 /* SJSQLite3Condition.m in Sources */ = {isa = PBXBuildFile; fileRef = DCAE225C3EE10B254FFA9E752D38401A /* SJSQLite3Condition.m */; }; - 18F596F0D1A0C3FB437149BC6856DC4E /* SJSQLite3TableInfoCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D249833305FC0916F49C0D71657A14D8 /* SJSQLite3TableInfoCache.m */; }; - 194EC1B60D7B720AAC5F2A4DB15EF565 /* SJSQLiteTableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 082791AA847570FBE5B10E6AC0838DCC /* SJSQLiteTableInfo.m */; }; + 1885F18FBEF1D3C800B490D30CD46EB7 /* MCSQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D81C32A3CA916B11A414424422113622 /* MCSQueue.m */; }; 1A296D9023756DF9DF7E2977BE422FB2 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 805E54FDC8E8EE6E90AC78DE836AC86F /* SDImageCoderHelper.m */; }; 1A453B5A9A65BBA9F74C0C144358C0A2 /* SJLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = CABA7896EC27F5C017ADF1FD1D1BE108 /* SJLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1AE29B8DB9C31734F4AEB49DEE62CC0C /* SJUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C29C85CA36F0438F6BBA58EE8FFF5934 /* SJUIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B65A88645B28B04AF5861A38580765F /* SJPageViewControllerItemCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E737EE83F7200D7E3E6C5D4205ACD /* SJPageViewControllerItemCell.m */; }; 1B7FDF02A13B654CBEDB846B2D82B85B /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 935E5C650BAB766DBACD33480F646D69 /* SDWebImageDownloaderRequestModifier.m */; }; + 1BA2A9AB70B795330A66A9D9BF7A0EE3 /* SJSQLite3ColumnOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 77B665CFCABD912507565073EBC03283 /* SJSQLite3ColumnOrder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BB09284B2DB82230764BE62CA99E385 /* NSFileHandle+MCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D8F23E60318550DB3D11E30CBCBBC2D /* NSFileHandle+MCS.m */; }; + 1BBD9A7F3B684ACEA9A5D6A752EFC54F /* MCSPrefetcherDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 27A8DA400422C036D88E9DEB69815B31 /* MCSPrefetcherDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1C492DD17AE0B343F869E7947AB90AC2 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = FDEB7110344C3E7C743D25E5B6A37776 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D1AE2C185DA650DA3975B6CBFF7DA39 /* NSDate+SJAdded.m in Sources */ = {isa = PBXBuildFile; fileRef = C09B41A7CE35E76C2FAD99ABAE697D0D /* NSDate+SJAdded.m */; }; - 1D2286ADD6661E27F94021005AFEA7FF /* DDRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 1218A47DBBE16801D12A0E753479C60B /* DDRange.m */; }; 1E06190F195923FEB645A405D6DC1BCF /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F4977566D8263874914E6B30620FC6B6 /* SDImageCoder.m */; }; + 1E070E3185DC5187F1053013812A440C /* MCSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 007AEE4FE7A09C1EFC186CBF5584B996 /* MCSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1E1A615EB6B7183F994EA16CDD1DE493 /* SJVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A392908D9665C74181E7753861E65D /* SJVideoPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 204A99137273189D0E97D399BC37B435 /* NSFileHandle+MCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 78BC64960B8243C282E2BF6B04EB4C83 /* NSFileHandle+MCS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EF7F74AFEB246623831B16C202E900E /* DDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F575B277367BCFAD13C2932F747E9F /* DDNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F5909D6F2F62516C5FF83932D66888B /* MCSAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D575AF391B965707C4B064094E84D1 /* MCSAssetManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 20E2F8001CC8A41A0E1B50694BE7875D /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C455EA8AE1A0841BD97D128AAB4020 /* NSArray+MASAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 210425936BDF9C7FCF8F02D0E7C76709 /* HTTPDynamicFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5A1027278A6E38249F7E0B23273A34 /* HTTPDynamicFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; 210505196FADE0A4F8AFCA60988741E8 /* SJMediaPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D59D9E6E3BB6ED6FEB6264BFB238226 /* SJMediaPlaybackController.m */; }; - 211DE2B6E5C56C69465508D6283EA8CC /* SJBaseCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6728EE0A8F7DF9C8CCA37DA48046540F /* SJBaseCollectionReusableView.m */; }; - 213574EF6D1E2505E3E8E8C9FCFF73C0 /* SJRunLoopTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 264ABE4AE54782A9D1676AEBEEEAC7D6 /* SJRunLoopTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21535DB304F599193FC56B63C07831CA /* FILEContentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 98F0EE8451A1E32E6F55FE3A170527D9 /* FILEContentProvider.m */; }; 2184532A10E7502EA915D91369DFAC3C /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CA44520F726F2BFBA4BAD578F0A754 /* SDAsyncBlockOperation.m */; }; 219A06956BA50B4ED4DE1305E1CF31F6 /* SJDraggingProgressPopupViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = C2F0FA4F98A998A5819D89E2A49A386F /* SJDraggingProgressPopupViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 21F4321091720618E76FDA9511AD9BC9 /* SJVideoPlayerControlMaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = B43F6AEB05D31EAE479BDF9288373CB0 /* SJVideoPlayerControlMaskView.m */; }; - 225780E257E4695F58026FDEE428CEFE /* SJUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B7DFAA92FB109DFFF401573F58E1E9C /* SJUIKit-dummy.m */; }; + 226FD0D250B01A85421FA01E0BC1CC07 /* HLSContentIndexReader.m in Sources */ = {isa = PBXBuildFile; fileRef = DDFB72C5685A24CC8D42542FEA79FB44 /* HLSContentIndexReader.m */; }; 22900476BA43DFAAE47C55A8C550DF2A /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B3BD5998E02D06F89D918D0D8A764BA /* NSBundle+MJRefresh.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 22CA68C78E8CECE5FE1EC6EEDB6DC3B3 /* FILEContent.h in Headers */ = {isa = PBXBuildFile; fileRef = CF432D2EFA10E392C080AF8AAC35A1CB /* FILEContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2307907FA690285B5958B3A39C6816D8 /* SJSubtitlesPromptController.h in Headers */ = {isa = PBXBuildFile; fileRef = 327736F32583350FD23499203A1F5A0C /* SJSubtitlesPromptController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 234A51E5E45A143CA325D05C7DF6146D /* SJScrollingTextMarqueeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D6D7DF771F31BB280AD6A3AB4608929 /* SJScrollingTextMarqueeView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 23788E5C92F9B9F653AC71D149731F98 /* SJPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D8C4FBB9813B55041DF24897F64C87D2 /* SJPlayerView.m */; }; + 237BFD9B5B473DDD5BCD19AA193FD56D /* SJBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6040909778E41079B4FF16E867495637 /* SJBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; 246C8E02C80BAEA49014AD0DB5E40B4B /* SJVideoPlayerPlayStatusDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6AC938AADAF90197CD8F51F1C36C1D /* SJVideoPlayerPlayStatusDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 24D5A665091087501AA9B1F6AD200331 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1189BD4406A4759D47C6954327BDD207 /* UIView+WebCacheOperation.m */; }; - 25281D7C96FDE3B25B6191F3BD03B34F /* SJAttributesRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 15DAEBB9A4FAE807C8656A8EAEF3EF44 /* SJAttributesRecorder.m */; }; 258BBA439703CDE6B91347A733C19A10 /* SJPromptPopupController.m in Sources */ = {isa = PBXBuildFile; fileRef = 862F690964E6D42DD4C722305F76EC26 /* SJPromptPopupController.m */; }; 265D49A837950E796D67DF1A7BA105FE /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 24F071C81F5403A81827222A7C235CF1 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 26BB524F0704B66B24104167BD418668 /* SJPageCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 240A964012D19692836CC15C262FD79E /* SJPageCollectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 26CFF9ED3D5203C44262E458AE687A0D /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = D0257B34702D44B6FE17BF2C7645D6DB /* UIScrollView+MJRefresh.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2700A36B8534C45316DAB554E8498A28 /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 944C96D42F99F6D73573B3E7670EACD0 /* SDDiskCache.m */; }; 27481C08F70F2DB32935EE586754E43A /* SJClipsResultShareItemsContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BB977543C0A186871E702BFE07F04FE7 /* SJClipsResultShareItemsContainerView.m */; }; 27E2CF225C12F9EE09404A55A9974C4A /* SJSubtitleItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C2022462A0828B4985D6A7232F1CB87 /* SJSubtitleItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 27E5BFBBC08BC441E9B4E637ABEFFB77 /* SJAVPictureInPictureController.m in Sources */ = {isa = PBXBuildFile; fileRef = B1928E7490CEB4DF1EDF882570043D84 /* SJAVPictureInPictureController.m */; }; - 28DB33A1862A9D8F28812003B90E4608 /* UIButton+AsyncLoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 557D599CE7EEFAD1AE0F26972E995454 /* UIButton+AsyncLoadImage.m */; }; + 27EBCE9D64BC92BD5E7AFEA6B027A134 /* NSAttributedString+SJMake.m in Sources */ = {isa = PBXBuildFile; fileRef = 681BD6229132CEC451C08BC390C732F0 /* NSAttributedString+SJMake.m */; }; 293B9392E2E0687D5CD3A77E69A5095A /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BC721668923A846C92C19133EF9E263 /* NSButton+WebCache.m */; }; - 294FB936E9702C4AD65DAC3C3EC2E5A7 /* HLSContentIndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 426E8D3F9E9EA61D0D564D45C012A23C /* HLSContentIndexReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 29C5E1AF8AE16F1F32B96B212AC91C37 /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EE43EBC3BC72F91C049497F1054DB3B /* UIColor+SDHexString.m */; }; - 29ED334B5E82AA2E886FC8048892B274 /* UILabel+AsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FCA9CFC70EAC2F50D15466FAD13EA5D /* UILabel+AsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2A0F1729EE17550AB4FE5F5EC7CCAC74 /* SJSubtitlesPromptController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D806745BFFD04E44605D80E29A94F95 /* SJSubtitlesPromptController.m */; }; - 2AD7C7B7FC173214C1A15531553756A2 /* MCSPrefetcherManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 56029A7C92764D5F6689847FAAA12F6E /* MCSPrefetcherManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B02E7150AB14E4ACD94963AACD41140 /* SJSQLite3Condition.h in Headers */ = {isa = PBXBuildFile; fileRef = 1476D614C0C8E67355B7800DFEA4E2EB /* SJSQLite3Condition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C7E64BDBDA3FBFE7A1F0BC117037926 /* HLSAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = DE3396CE0226A6F1DAE09D3B77A4084B /* HLSAsset.m */; }; - 2CDC8451A8EE2D2AC7E5277E0759C5D6 /* HTTPErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C96ED50450003532CD54D3C4F4275B9C /* HTTPErrorResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A1A99CEFE27204DBB115FEB3B1FD314 /* HLSContentTs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BEDC631C46E4EB59ED7A74931966622 /* HLSContentTs.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2D3F2E1463A243E0CF6B9CF58319AA09 /* SJVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6D0BD99B56E4327A147144EB10F0CE /* SJVideoPlayer.m */; }; + 2D9DC33A472BFA8832FC944DC617C7AD /* SJBaseProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = E7EF31E720B44E6BF1D0862C013C9335 /* SJBaseProtocols.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2DB99E87328AB7C1FD3162AA94B0D3E7 /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 19C23103531AF95EB428D7D58B4234B7 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2DEDDD6CDB94B39D8EA9E0E1340B91CD /* MultipartFormDataParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 352BFE4CF42A9DEC8920FC8B08FDA1C5 /* MultipartFormDataParser.m */; }; 2DF042AD1D08D5FD6FF9BF6895811E2F /* SJClipsButtonContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D0FE6357F65A0ACE1C34CB60F4AC520 /* SJClipsButtonContainerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2E5F3B41BD51ACE4EE3B422BB67E51DF /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B347994389BF07D6B7B396D13E254D0 /* MASViewAttribute.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2E9D14DF107302D286E0F11DAC2B8D2D /* DDData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C165BDE43AE8D551D7E47BFAA0F3BE8 /* DDData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E9FCABE9F30394C4C5EF21DCE2E6AC7 /* SJAppearStateObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = D08E8CE6A8AAF694BB997927A41548EA /* SJAppearStateObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2EBF3535445644EAF525DB8990928271 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9727454E04EF84D47004157840466851 /* MJRefreshFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2ECB81FC72C7BB5040F10C021225ADED /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F7F29E24AF32983D2B40821541E8043 /* SDInternalMacros.m */; }; + 2ED00FC79A0A13785121B0478E945DD9 /* HTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C9B35D7FF2CF10C0367D7BA3B343EAE /* HTTPConnection.m */; }; + 2F085555A1BEE8638F3B1EFF1686E4D3 /* HLSReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F840E3DA338DACD65BBDA02C5F10449 /* HLSReader.m */; }; 2F0C010896955643EF27993D7C6C66AF /* SJFlipTransitionManagerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = D78AFFD77961193A1F175E6977693911 /* SJFlipTransitionManagerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F200F379295CFA559F84F07E5429EF2 /* MCSRootDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = F73BFCC8CB7C07961248B34795194703 /* MCSRootDirectory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FD59F17B2D7E6A830E67FDC9F050262 /* SJPageMenuBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 7177FA03D3BEBAB290A32FF51F9A5925 /* SJPageMenuBar.m */; }; + 2F3AA1EE09554C3B9EB77DC8DF192EE7 /* SJPresentationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 422F4909F71844826F93015FDBC4ACB2 /* SJPresentationQueue.m */; }; 2FEBC0F3A58CD98F759E592B3916FEF0 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C3C4FF54EA976B4337835C885C556F /* UIImage+ForceDecode.m */; }; - 303BAB0A17AE9E0D7DC2613B4DBF7B77 /* FILEPrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 02E8A1EF6873BBB376FD256D8A0DC43C /* FILEPrefetcher.m */; }; 3063231F3293E15061B3225DDE746FE6 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 008EA90CDCAE688871B4733A0244793F /* SDWebImageCacheKeyFilter.m */; }; - 3092BE453811D80F09B43ADE3824D149 /* SJSQLite3+FoundationExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 87BFDE22762249B18C577A7872940FD3 /* SJSQLite3+FoundationExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 309F5805FC4DA0590B9C67A85FB2FA81 /* SJAttributesFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8017B2BB2EAE0360064D7F3AAFF030C9 /* SJAttributesFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 30D0F2FAE04689071A28A91E04802A55 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B841B023207F4C7033C53C6B679F4B /* MJRefreshHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 31064475EC704EC31BC3E2DE0DAFC72C /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = E6B218C1D3C090B770D27448F712CC75 /* MASViewConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 31871065507B0A60F08EF4A891E3789F /* SJSQLiteTableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 24EDEE899C1D67310C45CF8C55F3A1B0 /* SJSQLiteTableInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31A29C7BC17101F57BFAC50A68014A5D /* HTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 87B160B255D50873CF7450D1D1DB5505 /* HTTPConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31D4B85F74AD455B9CADD59A4F5CF417 /* SJSQLiteObjectInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 29FE9D0DBB6A04FA0B2AECA084279272 /* SJSQLiteObjectInfo.m */; }; + 31FF8913511AB47E26F0119A4831AA0B /* SJUTAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D13B11477C3AB729A658A9329B6448FB /* SJUTAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 327DF3A45AD02490D6D3DFCC3A3A676C /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3A77CF2A4618DF7BFD3395E40D1E9D /* SDImageCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32D8410FB18E5387AC5ED8733C2F03D6 /* SJMediaCacheServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DCBE862ED9105835CB6F8A14E87BC27 /* SJMediaCacheServer-dummy.m */; }; 335B7A12B7EC0BD569580A3DE383D24D /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AAF635E72D0A10BC2703A7C1C124465 /* SDImageCodersManager.m */; }; - 33A758EE5EBD8AED29F483A029DDE0AE /* MCSConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = B30376F71DCF09A3DB8A729F06128371 /* MCSConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33E692D8C50990BEC20CF47BDDF9A490 /* HTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 045D5580B8180397C4FFC27C2DBA873D /* HTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33BE8DA7B6E8C1A07BB14C8DEBCB4F75 /* SJSQLite3TableInfoCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D249833305FC0916F49C0D71657A14D8 /* SJSQLite3TableInfoCache.m */; }; + 33E74EBB506602B5C4A668F99188C8EB /* HTTPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A02697056D8CD5A62FE57746EB1801B /* HTTPMessage.m */; }; 3430321D06CBCF49F5A7DF6A70D9BB91 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3AEFC675BF9C1BC248217D1CB710F97 /* Masonry-dummy.m */; }; 345E2C203E2D12E7E3546F2E8344A79B /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = BD2763ADDDBFA80BE56C8739134E08D5 /* SDImageLoader.m */; }; 349147060901F3881A99EB10AF7B3BC7 /* SJPlaybackHistoryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15E9F5EC2C7B52993754F937AE0BCE7C /* SJPlaybackHistoryController.m */; }; - 355E358231E98FD785E078AB7B2D281B /* HLSAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = D90509D46E491F41E23DCA11DB7F8E1D /* HLSAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3563F65D900DCECC2AC4A08157A0DDF6 /* SJQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = C415C1208D3ED89106C3C57ED01CFC26 /* SJQueue.m */; }; 369B073ABA1A305A16429932AD2D4F16 /* SJRotationManagerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 366606D50278213257D17CBC63A8D86C /* SJRotationManagerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36CC5844C5BDEF74AAE0A4017F63C5A2 /* YYModel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 350D4B1361E013C39A66BC4DD89C794F /* YYModel-dummy.m */; }; + 3728BA26BBB782D73067F4A524474132 /* SJBaseTableViewHeaderFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC97EA8502F4D91E7E0B2A05C314802 /* SJBaseTableViewHeaderFooterView.m */; }; 3781D5D2AEBD2D582BDA578CD5BC39A8 /* SJFullscreenModeStatusBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EF94BE8847E1BFA6816D62BFABAFFB8 /* SJFullscreenModeStatusBar.h */; settings = {ATTRIBUTES = (Project, ); }; }; 379B97B036149D62ADA6ED0A1946AE17 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 39EA50F070B43B922635ECA940E15A2E /* UIScrollView+MJExtension.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 37A31ACD79145372BB02899DBAB4C1E8 /* SJSQLiteObjectInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A731F0BAC1A0E438AC016EA6ECBA09AF /* SJSQLiteObjectInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 37C68E6707391B7007E5991A914CB2B7 /* SJBarrageItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C47244C895D3FD54B7F43007D00FCE4 /* SJBarrageItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 38E225F83FB50A828F51F93E59069CF9 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A22E5CAA6C9295980EF5EACAE123CBC1 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 38FC6723C49AC10FF5CAF0243CE6A1CC /* SJVideoPlayerClipsConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DB600A2B5CA714871D134C967B74BAB5 /* SJVideoPlayerClipsConfig.m */; }; 390E8375B19FF12764C5AA730AF0F0F4 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE0804F6A32C8826A489B9B4111C5E2 /* View+MASAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 39170B577F72F0543F26D80225020F5A /* SJSQLite3TableInfoCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FD4A52291819F86E185AF98F0BD653C9 /* SJSQLite3TableInfoCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3999613F3A4F703ADF0EC8F539968166 /* UIView+SJAnimationAdded.h in Headers */ = {isa = PBXBuildFile; fileRef = A39ECDB4D940A8F2ACAD1ED0506B242E /* UIView+SJAnimationAdded.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3A25A0B031EDD3B74BB39D3AD8967E3D /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 98C32D5DA32A3839B57001BD7E7A3E02 /* GCDAsyncUdpSocket.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 3A8C2F88BC19E0501773F158EB4ABF88 /* SJVideoPlayerClipsParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C824C75366318E5288BBF888AD5FB2 /* SJVideoPlayerClipsParameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3A9FAA5BD20B70FCB5966FD24C6152F4 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D57ECE2C1BE2DA1AD06B2B7456B9576 /* SDImageFrame.m */; }; - 3AFF67C097FDC66925C7DDFB9475A613 /* SJUTRegexHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = D13FE04036709F5A2335F57BFDDE4A1E /* SJUTRegexHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3B01BA3DBFB639ECC900A847CD54F34D /* SJAVMediaPlayerLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F3DED5AE8214AC82E416626CE048FA /* SJAVMediaPlayerLoader.m */; }; - 3B0B3B42CB3A89E83D489B35EC38807C /* SJUIMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = EA3399050B9C1E431649DD91A359D864 /* SJUIMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3B202DB775F482F8C829FEBD7B83C154 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BA579FF6E80F4C4356FF76B6D90530 /* SDWebImageDownloaderDecryptor.m */; }; - 3B93118312F3765B08EA7AE45F4FFD8D /* FILEContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 61D698E86C117B85F503BBF4A630CED5 /* FILEContent.m */; }; 3BF7F2A6F6943D4C17D203652CDA334D /* SJEdgeControlButtonItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E9A9C22E03571208664EA009CF0CB2B /* SJEdgeControlButtonItemView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3CC34DDC8DD23B65974D7BD8C4D87922 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7603CEBE9B1E4040249CB09A095140D8 /* MJRefreshComponent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3CE1F8376C9035828D0C65415ED2FF8E /* SJSQLite3+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EFA46E02E78F84D951C818E9B961E07 /* SJSQLite3+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3D090A9287B5B8FB7DFD3C312C154852 /* SJBaseVideoPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = E1EF26C34BD4EF1FC67ADDD83D4E96B4 /* SJBaseVideoPlayer.m */; }; + 3D28D20BD8DFAAA3C94D178ABB2A40B4 /* SJCornerMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 476D306D637343215426E465EF845780 /* SJCornerMask.m */; }; 3D2FEFBFF5B0E97FB3648C24FB791766 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EB6C752689AFF1BF813B20BB38675DAF /* UIButton+WebCache.m */; }; 3D3A3C987D8C52F46EF9D8AF40F0068E /* SJControlLayerAppearManagerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EBCABD9FA7C9479BB5F71844291F123 /* SJControlLayerAppearManagerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3DA7733E3D68808BAC2DC215FF617DA3 /* SJPlaybackRecordSaveHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = B1A86B6C755E8424DBC63605DDBEEB03 /* SJPlaybackRecordSaveHandler.m */; }; 3DA9427AF38AE205761D1D5222EB91C0 /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 838AAC7F80B2BCA42A8F0D48064AF7D4 /* SDGraphicsImageRenderer.m */; }; 3F5298DA39C4E097C4922513DF439E95 /* SJMediaPlaybackController.h in Headers */ = {isa = PBXBuildFile; fileRef = EC64D604880068B086EC4394CE65E1BC /* SJMediaPlaybackController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F5C3B86EDCD0A45EF5C3AD1F406F5A3 /* SJQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = C415C1208D3ED89106C3C57ED01CFC26 /* SJQueue.m */; }; 3FA77B2942212AF3C88FC3A297EDC4DA /* AVAsset+SJAVMediaExport.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B8B1C5F97B9D6ED39F268F558E4C9F /* AVAsset+SJAVMediaExport.m */; }; - 3FC4311C5AE6802DE19BCA92F757678E /* MultipartMessageHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 7795C6D8243A702A7C2808378E8EB8F4 /* MultipartMessageHeader.m */; }; 3FEC4DFD0D84B148C547217B59D7781C /* SJBaseVideoPlayerResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CC6ED43D07E096108F51E91470ED468 /* SJBaseVideoPlayerResourceLoader.m */; }; 4022B4C05B459EE36BD5A330A58B7A3E /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = CBFDC87543411596673D4E18BE1A2236 /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40CF369DA735DBB5540C24BFD1F8205F /* SJMediaCacheServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 988BE285DFE700E8E5CD14C305ECB502 /* SJMediaCacheServer-dummy.m */; }; - 41ED95EFF0ACFDB55F3075B26CEE701F /* SJUIKitAttributesDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B3B06EB33B6F1FA3154142F0A2E91883 /* SJUIKitAttributesDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42390ACA12A171EB01E9C4E8523CADA0 /* SJSQLite3+QueryExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = C446BA4924D94445F06CBAF59AA1E319 /* SJSQLite3+QueryExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 40B02FF6CA50643516F54F752555F613 /* MCSRootDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A09C90ADD9F7F140A4763CC77C371CF /* MCSRootDirectory.m */; }; + 4175B39E31FC55563F6FDA1B2C3C607C /* MCSUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 310E0E3863CEA39B64A028EF12E95A37 /* MCSUtils.m */; }; + 42831AC87580B1FD6FFD22DF8D6101BC /* MCSResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C4FEA7D676B4965F4E0F6ADCA36E120 /* MCSResponse.m */; }; 428323F5F727A7745DB9A0B99AF770B9 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 40AE3CDEC2DF0C67FB2B5E24E307790D /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 42947699890A199B08A896144A878D80 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 74309BC8E8BF7B6EC6B7606044E3F571 /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Project, ); }; }; 42B7AAA61537A6CD0BF0CCB76541E5BF /* SJMoreSettingControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE1C7E3CE66F58F5A14E8935EAED63A /* SJMoreSettingControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43092F476256FEE33D78AB900E5151BD /* SJUIMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = EA3399050B9C1E431649DD91A359D864 /* SJUIMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; 432DA7C9293573B3C5B6F8B5A28D15F0 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = BB63A0E1D14895BD9C9FCDD388DA098E /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4335D8F0960FEDF851FAC75B0CC04B1D /* SJVideoPlayerClipsConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E50A8C76370804B7BC47E3FC78C9872 /* SJVideoPlayerClipsConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 43D5DF11231CC10A157F20217A4B4341 /* SJVideoPlayerRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB1727A9BF54841A0D3B66014806D0B /* SJVideoPlayerRegistrar.m */; }; + 4404362061933148C756689BE08ADB77 /* SJSQLite3+TableExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E8105A6EDE60943B4EC67A61641DB88 /* SJSQLite3+TableExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 440B80BA24DF1849C41197FF51E16C1F /* MCSAssetCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C5F72CEB550806B3E9B0F8F8A3A0DC /* MCSAssetCacheManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44444E6969B4E8909B16A28CB747BE0D /* NSObject+SJAsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D3BE37123A34A1920BF68EB88FEFF7 /* NSObject+SJAsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; 446F9E8C1FF9D0E5B5679FF2CA418898 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CCEDA44F93BF9473D5E23E5D4D7AEA20 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44A3B1A5D2C513F8FD238E3B64E4C6CF /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FF3E74C5278360A933870B8CDA2C08F /* NSLayoutConstraint+MASDebugAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 44C8DEEE4C2383275CB675F29D45C761 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 347C965C0F5B50323F28D818FAA9B5A3 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44CBF3C604C09D5CF82A9688C83B35FD /* SJVideoDefinitionSwitchingInfo+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 76CCC35D6ACC9482C6F22E2CA87F83DF /* SJVideoDefinitionSwitchingInfo+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4542588C6C2DA5280CF616AE4E4DF99E /* SJSQLiteTableInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 082791AA847570FBE5B10E6AC0838DCC /* SJSQLiteTableInfo.m */; }; 454308F281F806DEB35D19FAD2B02B9E /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC48720B31095CEBA50478A55AC208D /* SDWebImageOperation.m */; }; + 45749043F7DB9AB87D79DD0055F35898 /* SJAsyncLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = B62D13D58CBC32F3487F3A1A66E2999A /* SJAsyncLoader.m */; }; 45B725D59EEA0992270B943C42E3FA17 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 22C1BBF430E0B1A8D6FD28DF1E81F4C7 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Project, ); }; }; 45ED7DCE41AAA302468872F4B5131328 /* UIViewController+SJBaseVideoPlayerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BE95856CFD7A61F1DD6D25A8B1EF88 /* UIViewController+SJBaseVideoPlayerExtended.m */; }; + 4650B6BC97648B0C20F0DC141B5138AA /* MCSAssetExporterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 78BE654B8AFBD183DFEE920C202374BB /* MCSAssetExporterManager.m */; }; 46692A2E77157B00827182C8DC686F72 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E30BDC2809A03AB313CEDD530E57CA83 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 466A9538550DB913B747528B69C04A8E /* SJTimerControl.m in Sources */ = {isa = PBXBuildFile; fileRef = A944988121EB9412AF6434A0D862C700 /* SJTimerControl.m */; }; 4670045ED9E12409423D29E8C8BB46C2 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = EC20EA90EACA92CDCDC50B14DA80AB02 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 472BDF20693240A7BBC7279CA137A73E /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = B788E033A2D84929FD9687A20FEA2F72 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Project, ); }; }; 47948B0FA1D66D170049BDFF4F42F543 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 373BB5356FB44080A66D14EB34E56BDC /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Project, ); }; }; 47EBA2DC63866F97931321F21F66B19F /* SJControlLayerSwitcher.m in Sources */ = {isa = PBXBuildFile; fileRef = FCDE97EDBFD7DF62B0B9622B2F3EA8A6 /* SJControlLayerSwitcher.m */; }; + 4806BD0DC2A8A57DB0A7FD6CA739FE66 /* SJSQLite3.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B621D16CC77ABF3B2B4127CA8CAFF2 /* SJSQLite3.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4810AEBF932187A3F1A94DFB6E028CB9 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 06A55959E7E0F59636A075D98513100F /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48E2BCEEB99402FA25A7DE3BBA145089 /* MCSAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E36A32E56A2BD36512F796233221DC51 /* MCSAssetManager.m */; }; 48E5BC51518D658CFD845D6A70940CB5 /* SJEdgeControlLayerAdapters.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD7D4387694049AF38DA990C80643D2 /* SJEdgeControlLayerAdapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4920B06392E29A66FA93FFBC03131536 /* SJVideoPlayerURLAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 126C0D741C4F5D93F9934A910B8AAD23 /* SJVideoPlayerURLAsset.m */; }; 4954558A9DC59E0EC7ED0446F288F492 /* SJClipsResultsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AC07D35EEE7B113C647489113B845E5 /* SJClipsResultsControlLayer.m */; }; 498B9F0F7350DE7E1A2346F69939E416 /* SJClipsSaveResultToAlbumHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C2804A441641BF6CE4F8A86D8B096F0 /* SJClipsSaveResultToAlbumHandler.m */; }; + 49A2F23830F7D283D8682755A5F74DD8 /* HLSContentTSReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E9C6954424E99D083542C5C991918B /* HLSContentTSReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 49ABC48273FA0DAD67A1499AD65AAC1D /* SJViewControllerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B7EB7E7B6538A10231D9676DADC8498D /* SJViewControllerManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49AE91BBFA543D0F1246B767B381E306 /* SJBaseCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5A6BA4CB18EA94F2C0DCDFA4E1F10D /* SJBaseCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4A902A0B2167B7EFF593834F41B2EC0C /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 266B55D4D53CE3CBE710E2DBE85B1088 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4B3964B71F74D3D48482B3D853DA94E5 /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A5145CA524CCC8493240639292AF4C4 /* GCDAsyncSocket.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4B4A4612605FDC539FB03DC250C9101E /* SJUTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BB67EEE02C933D1DC2AE7AA2C7860569 /* SJUTUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B85780D2FB7D7569F9535F4AD913BF5 /* NSURLRequest+MCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BFBC35F7F24F7B96CA1E8C907DE852B /* NSURLRequest+MCS.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4BA5BB5F687E579346F7C44661D98830 /* UIScrollView+SJBaseVideoPlayerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 37A81AC2BE53175A54F72DD1A8F94643 /* UIScrollView+SJBaseVideoPlayerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BC9351E4F674C10003BAD866DABE7C7 /* MCSContents.h in Headers */ = {isa = PBXBuildFile; fileRef = 934A884AC3A38FDAE56C8ED1B33FC579 /* MCSContents.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4BEF019A810DD9AA1409ED08C9DDB234 /* SJVideoDefinitionSwitchingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 329587CB14B91DD0C67CB6D645CE0A0B /* SJVideoDefinitionSwitchingInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C07B7976C7BE414C30CC97B4182BCAE /* SJSQLiteObjectInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A731F0BAC1A0E438AC016EA6ECBA09AF /* SJSQLiteObjectInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4C2D35EE6BA6CF4D76332D32E17DEA57 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F27974970189691B3C43BEDF4C2C4B /* MJRefreshGifHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4C3912D9D711FFA2E8310EC6AD47EE62 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AAE21D267924B33C56D12AD7762101 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4C398195C01DFFBCC2DF959872387ADF /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = E5EAD401B6E35009522BA675803596D0 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4C512C9252B6EC8D2A9EFFDBAD8BA0B7 /* SJFitOnScreenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BBFAA1DFDE44D3D004E2D6BB9A5C0339 /* SJFitOnScreenManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C7A755B33458171F786A0B6FE119FC1 /* SJSQLite3+RemoveExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 1402969A5DB0D4D68B98E7623D215C41 /* SJSQLite3+RemoveExtended.m */; }; + 4C9CCA1D6F44AA49E3770F6670373EE8 /* UISearchBar+AsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 827ECDD4A4498B0533E88F4D1DE5D9EA /* UISearchBar+AsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4CE091F886EC6324673EFE0AEBBEA0FE /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 45F9A863C8B64013B8CD3D573F053BCF /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4E2E631DAE70D9ADC5E05F1747055785 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 356EE7E662983B2DAB7DE66EA39500DA /* SDDisplayLink.m */; }; 4EA938016CFC7FB41C4E996CB870653E /* SJButtonProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 727FB18E52B98BCC1F886145DE2AD0D6 /* SJButtonProgressSlider.m */; }; + 4EC0CD7E01C122AA19198D0ED5F209AF /* SJRunLoopTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D471F55F9321608B0C128A984B9972B5 /* SJRunLoopTaskQueue.m */; }; 4EDBB4AAEEF26534BCF67340B60B9DC8 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A2D98670DEF160D7BD94E28A09A160F4 /* SDDeviceHelper.m */; }; - 4F4AE2FCBF206AC3A84BA02F6212F3B8 /* SJPageMenuBarScrollIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D6A9522028F2753F7900207BEDE029 /* SJPageMenuBarScrollIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4FC3021B4E753BC76A6250777B1C11D8 /* SJEdgeControlButtonItemAdapterLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 4007443FF668DEC10590A3C299A6B003 /* SJEdgeControlButtonItemAdapterLayout.m */; }; 4FD00D158BCA3ADC1FB00203AB17D9E1 /* SJVideoPlayerPresentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A266E4B5DD1DC066620C011112A2D60 /* SJVideoPlayerPresentView.m */; }; 4FEADC12360A46C758E9078C511EC7AB /* SJVideoPlayerURLAsset+SJControlAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E06013AFE67C792673E399D6AA244C9 /* SJVideoPlayerURLAsset+SJControlAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; 505087BB5B447723AF879D4F597A64B2 /* SJPlaybackRecordSaveHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 77CFA739C4CB5060F54E305F24D40405 /* SJPlaybackRecordSaveHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 50591EE07176278C669DCEFB2A46C37C /* CALayer+SJBaseVideoPlayerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = A70AEE260097FB8D500E316332B49588 /* CALayer+SJBaseVideoPlayerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50593A370C1027FC5317A3D6D72CA353 /* YYModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E2B3B2AF6366ECD0F0EF26DA166FCBA /* YYModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50B00FDEA27270159BC779EC6E2E8FE8 /* FILEContentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F243EE2D9A88603575BF6F238D70F77B /* FILEContentProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; 50BA43C8B4C7278FA449490F5ACEA40C /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 03A46DE5872DF2D38F6A53409AC27709 /* SDmetamacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50D48AA1DA2EC4239BF829BB34D86EFF /* MultipartMessageHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = DE0A0645E1D6C9FDC95EA772C2C57C07 /* MultipartMessageHeaderField.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50EBA2D6EEFC51EC8BA626F05A00394F /* HTTPLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = F23FDABEFA7EE43D7B1D689696C03A0D /* HTTPLogging.m */; }; 511B2B2E911994B978C25D5FA3CD524B /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 61898F90901D93568259F01B9599EADE /* SDWebImageDefine.m */; }; + 51360FE182C498CD47B0ECA1E1086E54 /* SJSQLiteTableModelConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = ADFC2F23C720EE73BF6BA43F2F363950 /* SJSQLiteTableModelConstraints.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52064CBDF2BF9A24E0DCBA95F3EE5289 /* NSFileManager+MCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 48108AA291C0966AF3D49E51FC03777A /* NSFileManager+MCS.h */; settings = {ATTRIBUTES = (Project, ); }; }; 520E3AE7CF626545A442A4FEE682DC0F /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = DB0F19BB9D721B2DE0050158D74CC8A1 /* MJRefreshNormalHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5217E4D2743ACBF41CF8DC4C4D04D937 /* MultipartFormDataParser.m in Sources */ = {isa = PBXBuildFile; fileRef = E0AAB93A171F57836D3E2EE193E43C28 /* MultipartFormDataParser.m */; }; 52184A8F4F60EFB6A6128AA795F3C4B5 /* UIScrollView+ListViewAutoplaySJAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFA2AE81D756D96E9A2F92E1413F20D /* UIScrollView+ListViewAutoplaySJAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; 524EC230FADED61858596FD2F4EAC57A /* SJPromptPopupController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8560C5C1D2B994EF4ACA1E5E63E34426 /* SJPromptPopupController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53022D630D8B5FF126A768F4A53DE675 /* HTTPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = E5178A5AB4033208D356BF18CA9278DA /* HTTPMessage.m */; }; + 52A76BCDEA891707229A5D06A2FB934A /* SJSQLite3+RemoveExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCCD6EE113D51F55E3999135778B5C0 /* SJSQLite3+RemoveExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; 533ED7D6775F2D9A028468BDFD5FFDE8 /* SJBarrageQueueController.m in Sources */ = {isa = PBXBuildFile; fileRef = 227E3E3368AB4D1625D1609E4E299341 /* SJBarrageQueueController.m */; }; 5376CD57545524F6266E36C055A7C0BD /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ED4A0CFD308499ED4CD2D7B4789E356 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53CBB78A188AA472378A13D70115393B /* MCSProxyServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 13518208C571795FE254B57D470596AA /* MCSProxyServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 53D5A906B201B5F4A53C894D88FF09FC /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3756DA6E1E2A291A0962B97CE4E10CB /* SDWebImage-dummy.m */; }; 53F80EABDB1A385F25DFA6710C51B600 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2F8D050416514D131E5D0E47847479 /* UIImage+Transform.m */; }; - 54D8471B7FB946A3C3752DBA757D5364 /* MCSUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B193952635F5D14C15D97F0F69F55 /* MCSUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 54F3078B386DA6B6F1652B0B4CF40F93 /* HTTPRedirectResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2339F99F0A8D4BD43BA4F3D7E5EBA0DD /* HTTPRedirectResponse.m */; }; 54FDBB3ABC7A8FD2DBF4EF0643F77298 /* SJVideoPlayerURLAsset+SJControlAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = D0253F24C0C0FAB8E507421CB162D2C6 /* SJVideoPlayerURLAsset+SJControlAdd.m */; }; 55371E0911F21A2F708C6A746DE8C708 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 46D2DFB51607CC2326DA4707E8C2EADE /* SDImageAWebPCoder.m */; }; 55E87B749F8B4611BBB0EDD16174DF2E /* SJFlipTransitionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 54D6375EEA5FE7D1F325B9522A1C6F61 /* SJFlipTransitionManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 560C538E75AC30D848A2AA154ACE9092 /* SJWatermarkViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 526957BBF52DD432C6706EEBCAA92586 /* SJWatermarkViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 563E3CAD1DF5EC91552959AE24A2B0F0 /* MCSPrefetcherDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 88B368976CE508876DF7FC2F6B9BFC22 /* MCSPrefetcherDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 564596CD8324F298A2CD25C99785177D /* SJPlayModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D1701CB309FB5D6F2894E80F963DA15B /* SJPlayModel.m */; }; 566F3A316DC9434BFBAA25333E529E63 /* SJVideoDefinitionSwitchingInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 69909F6806CE39186B66FF3C82E3F5B7 /* SJVideoDefinitionSwitchingInfo.m */; }; 5672C566E61B5A2ED572F143D71B4399 /* SJClipsResultShareItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D7EE22B61151054A1453DEE032661281 /* SJClipsResultShareItem.m */; }; + 56761CF26830A58A0D1D422FF22B88DD /* FILEContentReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B3340696AE25D5003E8FFCA01BFA3A10 /* FILEContentReader.m */; }; + 5676957E5E78794B5A6D53396AF468B7 /* UITextField+AsyncLoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EC4B483884FFCB8ACB7704461839DD5 /* UITextField+AsyncLoadImage.m */; }; 56A6F13FF368226A1B5AA8B821AC4B6E /* SJDeviceVolumeAndBrightnessManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC0D5C081A547876B855238FD94E968 /* SJDeviceVolumeAndBrightnessManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56B4A998C1E2989EA26B3A332AFC4CC0 /* HTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F9E4DFFB927880D482946DA2543D1A6D /* HTTPServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 570D3A6C763CF0544497F93A40F92BEE /* SJSQLiteTableModelConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = ADFC2F23C720EE73BF6BA43F2F363950 /* SJSQLiteTableModelConstraints.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5752BE3469F93C064C97B032DD9B2185 /* SJPageCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3395175736C72459045ADD7942C68A08 /* SJPageCollectionView.m */; }; - 57B867189FCFE71AA120BF522D667321 /* SJSQLite3+QueryExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = AF5E422442CEEB48A9603D0F5DBADA95 /* SJSQLite3+QueryExtended.m */; }; 57C4D41F54D6327C63C4508AF1CF989D /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = EF27BE6260E16FA91E19C7B315AF1E97 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 589569F295A0174FE0B3FEACCC8EFDEB /* UIImagePickerController+SJUIKitExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 571B7729518BD763860456E08432205F /* UIImagePickerController+SJUIKitExtension.m */; }; 58A8084F0B525B5F00655FCD63877483 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD801D25EA8759C54D9CD7BB9106AB0 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58F310373E1105F365E7191EC9D08C0D /* SJRunLoopTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D471F55F9321608B0C128A984B9972B5 /* SJRunLoopTaskQueue.m */; }; 58F4C5FFF7F1ADBD86EF4D72D10060F9 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C6E38B4041E1CD36341D9A5D4BE9732 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 591F996AAEAABEF72F201C0994CD7788 /* WebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 39F6CBE53F3D7175F03B4890BA8419B0 /* WebSocket.m */; }; 5938E9D9A7E09FC96186D2651278B68C /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DADEAF63BBAC57B2FF83AE99FE4FCED /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; 599AEB5E944F8E4CD7AD7766DBC5B9AD /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E80FCCC344C92316B18958BCC258C46 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59DF8AD9D5D60CF0B01C43BA1F0F1335 /* SJAsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD2DC760A506C3A141573449B5E04C1 /* SJAsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59FAACD98373580DCCD0BD98EA1107E3 /* HTTPFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AFF077FAEF6D88ADFC45E7C4D941DB8 /* HTTPFileResponse.m */; }; 5AC5B35F7A1F8D81E38D71BA2C5BFBC4 /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = FD7E23DBA8359E17F9FAF7DABDCC7EED /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5B925C01C24E119AB6B392CF5E7B42EA /* SJProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 78410545552116E1184980863D3DBD98 /* SJProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C3EF68926E82BA984BD0D13FF6D583A /* HLSParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 87B74A87161A5D0E5F59C7228590CAFC /* HLSParser.m */; }; 5C5C77BBF83B793B82713296519751DA /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F90BEFE9A79EDD4FB51BDD6A90FF67C /* ViewController+MASAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 5C7CE066A8C3006E646ED51FA8ABFBB0 /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0216349DA94DD392289ED80DFF314E4F /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5CB41A59A4D3FA5BC111747983E0AE46 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = CA5005F1F626867F351623A55B9F59C1 /* SDImageGraphics.m */; }; 5D07357A2D03AED307AAA918099E2824 /* SJClipsVideoRecordsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 70FB44CC5E8F5CE1A7ED3A7283717A82 /* SJClipsVideoRecordsControlLayer.m */; }; + 5D21E85CFCF6E03FB3522E92453E0EB8 /* SJPageMenuBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 7177FA03D3BEBAB290A32FF51F9A5925 /* SJPageMenuBar.m */; }; + 5D624277E19C3BC46BCEC57B57D356AE /* DDData.h in Headers */ = {isa = PBXBuildFile; fileRef = A171F46C5C041C66631D83292ABE7339 /* DDData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D7A82AB77B860479357F0B4F2B02E81 /* MCSInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C146B0E4F8E5EA6E532BC5051846B35 /* MCSInterfaces.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D7EE6BAAFB58B2A194C47A751442B4B /* MCSAssetCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 830124B41D1432DB6F6C705B422E5BD4 /* MCSAssetCacheManager.m */; }; 5D99006D6C33BDEC46599F810EF7F630 /* SJFloatSmallViewControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = DC94B52B7921158B5FFA7F3A4743105C /* SJFloatSmallViewControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D9AAD3AA621EAD70692A9CAFB127730 /* SJImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = E257991A6FBAF7244D30A1614F2750AA /* SJImagePickerController.m */; }; 5E09F160BDC1180231FFFD4E9CEF070A /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = D74A3DB0C9288CDAE3B9605D5CD98BE9 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5E158E376FDF57A748D2A3514A84BFD8 /* SJLoadingViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = D038BED15C69F6B4B88BFF462D3E440F /* SJLoadingViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F16D60F2D84773835B4E58673A76B24 /* SJMediaCacheServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CAD439A4C3D25ECA79C8928286B2319 /* SJMediaCacheServer.m */; }; 5F861CE0A0D6AE20ED64761FC369E6E5 /* SJRouteObject.m in Sources */ = {isa = PBXBuildFile; fileRef = B358226556B5F97373B98CF33F2DEE12 /* SJRouteObject.m */; }; - 6024357014F91ED44BC07661EFF971E2 /* UIScrollView+SJPageViewControllerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = F06ADB8EC1814C0B41C16B61C06F8757 /* UIScrollView+SJPageViewControllerExtended.m */; }; 604757858CD0570DA88BBFC6CBD3F97E /* SJBarrageQueueController.h in Headers */ = {isa = PBXBuildFile; fileRef = 715B8C94BBEB033876D9DF3695A21639 /* SJBarrageQueueController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 608320766ED3066F8080E29D8BE0E1C6 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 03E75095428DC90A5F93512F51A64794 /* SDFileAttributeHelper.m */; }; - 612CB04320902A06CF7342711D98AA97 /* HLSContentTSReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AA896164496F72445805CCC88E6EC44 /* HLSContentTSReader.m */; }; 616C37AA929ECF35C4127245FCDA9ADF /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 172C74F8DCF1FD8AF38BBB8C7F941C73 /* MJRefreshBackStateFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 61A03B69E9CDA31D3245DE5545900657 /* MCSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = B76D84BCBCF28BE7C3C61E4E9CAA480D /* MCSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61BDFFB4BC65C5F262DDA34BABC3E84D /* SJPageMenuBarScrollIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D6A9522028F2753F7900207BEDE029 /* SJPageMenuBarScrollIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; 623BB17975574316E915861C47FD4283 /* UIView+SJBaseVideoPlayerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA211A73E93BAC563BCFA8F91FE4F87 /* UIView+SJBaseVideoPlayerExtended.m */; }; 62E4E2F77141D8838A37912E46329E1A /* SJNotReachableControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CE244C613ADC3A4CBF5E71F4B26DB91 /* SJNotReachableControlLayer.m */; }; 630C7FEB7BD00317AD7EE0321A6C1DB0 /* SJReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 955BD31304224F57D7B96D47CE9811C9 /* SJReachability.m */; }; 63146D665F80EC558B62D8D44C02804D /* SJVideoPlayerURLAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 74A86F6D8F41DDDAB993981E78B96089 /* SJVideoPlayerURLAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 636EC3E511FA07752036FECB4E238867 /* SJAppearStateObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 77DF4339C22F7CBFDCA575FA47547783 /* SJAppearStateObserver.m */; }; - 639926A5F1BC49A41FC8778D4B99873B /* MCSPrefetcherManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A06772908E63DCA99CE3D80CCA32461 /* MCSPrefetcherManager.m */; }; - 63E0BB081036042DA811D7B446C33DB7 /* SJSQLite3TableClassCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E005BDED0E5395CD560BB8CAD5FF72A /* SJSQLite3TableClassCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 635999BF920281A5E3E76AB73AC3636D /* MCSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5058D4DB2CB414F962E1172F6A5B374B /* MCSLogger.m */; }; + 6410663DEAE584A55C5CF16185C3959D /* SJTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 87F97FABD0B6D4F3567DBE05AAF6A93D /* SJTaskQueue.m */; }; 64B74BF57C2B09334DF1E98A6D80BC44 /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F20257538C346CFED20D84E16647712 /* MJRefresh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6535EADC0294F5F51339C4033C193182 /* HLSContentAESKeyReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 42B797EBED73379F810E3475A7F0FAF6 /* HLSContentAESKeyReader.m */; }; - 659A32938D5793136D849C389918B1EE /* HTTPAuthenticationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF229DD4DA10052C0829407D586E175 /* HTTPAuthenticationRequest.m */; }; + 6512CDD87CA29C49C80BCC8E57B063D6 /* UIImagePickerController+SJUIKitExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 623BDF33769B399CAEB359070BF29681 /* UIImagePickerController+SJUIKitExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; 65B8AF7B290815BAD3E5A0E300382BA1 /* SJClipsButtonContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = CAF9D4361B5E5193B568818DF8A5A541 /* SJClipsButtonContainerView.m */; }; 65D8EE6074D8DB61D68B0D342B5D46B9 /* SJDraggingObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = 57818C1BC83C0FB8D0EAB961BC4BEAC0 /* SJDraggingObservation.m */; }; 65E88072A2BDC576BFC85E67EF9FBBC6 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F5B6CF4E59BA4E46C11F8E6A65ECE5 /* MASUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66F774D7B00DB37E1134885E6A735203 /* MCSConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 36FEABE690717E15B4915DB340450147 /* MCSConfiguration.m */; }; - 6703275985555B059933816F70107B4C /* SJUTRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = D32F2F828073E773CCFF5CDB68E6A3C4 /* SJUTRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 670358FEAC2E7F6952E15DB0AFFE2310 /* MCSResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = AFB06AE96B2E3C6D5685C6D0C87F62B1 /* MCSResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; 671823D453F2ECDC69913756C4E36D2D /* SJRouteRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 97397B8AAA50EE28F6DC15B37A2B53C7 /* SJRouteRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67C60A053F5229E6BF83F67D811491E8 /* SJApplicationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A36053D33BE7749E1A2839CA196B3F2 /* SJApplicationInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 67DCDA03A35A44165BA0FDF15E904DFA /* SJEdgeControlButtonItemAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E31A37EE26260BA33445511C79D14D4 /* SJEdgeControlButtonItemAdapter.m */; }; 68057DA0BFBFB102DFA4B30A76A1C8BA /* SJVideoPlayerControlMaskView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AF8DAF56E7DA13007650E986F7780C /* SJVideoPlayerControlMaskView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 68734B2FD4E55F9A95D5B416C075074A /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EE56940C3B29F0908FD78370B244BF2 /* MASLayoutConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -303,151 +312,139 @@ 68D5CDFC70219CFD84B21E25B974AE4C /* SJRouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CB69FEF5D0F242BE2F42DA13E535FF8 /* SJRouter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 68E789802094AC0064F5A3B41CF54ED9 /* SJButtonProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = E5646BC6E9398DFB6A748933FAAC8590 /* SJButtonProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; 68F51B1C47032D4C1E214D42B31D4336 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E0CAF51C45F539E737B4CBB988D357A /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69C67D0A970AE91CAAC28BA99D558990 /* NSURLRequest+MCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 485BCF1CA479B379C03F60F5269EAF24 /* NSURLRequest+MCS.m */; }; 69C754CBBC23A9D99FF051A2C963CD59 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B9F77A03B1F58F3C80E191C098057A /* UIImage+Metadata.m */; }; 6A01711D05261C2AC2455586AD258040 /* SJDeviceVolumeAndBrightnessManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D20048581433A8321A61874603444A2 /* SJDeviceVolumeAndBrightnessManager.m */; }; 6A22FA3944743E3967A46D599F7ACBA7 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1D1065238E0A97C2DD0B6931BA3B5E /* SDWebImagePrefetcher.m */; }; - 6A53AF2849715FD4CD738032E3A5CD79 /* HLSParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA48C8A1C19346EEBFB32937D7415DF /* HLSParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6ADA60F6FA3A2D6424BAB8AD8655A47B /* SJUTRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = B796B7F2EC17F5785FB66AF49DD878A0 /* SJUTRecorder.m */; }; 6AE18A8F822F485A48BF53126164296C /* SJEdgeControlButtonItemAdapterLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BC4D00142FF15E6E7A038F80C2D4BA0 /* SJEdgeControlButtonItemAdapterLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6AE7D45C097EDB5DED2988D4CDEFA4B4 /* UIViewController+SJBaseVideoPlayerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FBDE81A7E8FC8C9BA9699203BACDED1 /* UIViewController+SJBaseVideoPlayerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B0008E0E176BC6EF7C284CBCB113A1D /* UIViewController+SJPageViewControllerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1FAE3E737737421BBC3A63E187CDB6 /* UIViewController+SJPageViewControllerExtended.m */; }; + 6AE8585365D8A23878691021ED50AE62 /* HTTPDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E97F0D4B7D77991F509BA15D3A7D078E /* HTTPDataResponse.m */; }; 6B0ABF3AC523EE76C5C09379BB6DAAF8 /* SJDraggingProgressPopupView.m in Sources */ = {isa = PBXBuildFile; fileRef = B572B89B17997E76D86DEF65F97E3E75 /* SJDraggingProgressPopupView.m */; }; 6B27BE8C3E5E28F3B309307E87B99329 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 06E769ED426AC70A30722886DE7E1E7F /* SDAssociatedObject.m */; }; 6B81B723397F04FDBE60E2710404E152 /* SJEdgeControlButtonItemAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EED3B219964945EDEFA0CD9F661035E /* SJEdgeControlButtonItemAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6B990DFF59699A54E9F4ADACB4DF432D /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 135C874DC031F6E61FA0EBCF3A553FF9 /* SDWebImageCompat.m */; }; 6BEAA6D9564CD57BB27B0B5A47029B65 /* SJFitOnScreenManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D9D687F7B711772F96CDA64D1F16C6 /* SJFitOnScreenManager.m */; }; - 6C833FB6936E99D276C6A2BE52DEA583 /* MCSAssetFileRead.h in Headers */ = {isa = PBXBuildFile; fileRef = E87B7894629DF7D73D83B1C988C0FD29 /* MCSAssetFileRead.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C0E9D6B133DFB376156AB0C0D886A83 /* MCSDownload.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E66A90AFDB0D9F22881C649EBCD5630 /* MCSDownload.m */; }; + 6C3F5A0F6997E9639FB22C5FB61F0F86 /* HLSPrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E4ED60D5BBB337A3B8ECC0A48902EF5 /* HLSPrefetcher.m */; }; 6CA709D5E7EC9AA65892512265D83F10 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1157FB02F4480E8DED20634E8F190859 /* MJRefreshAutoNormalFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6CBBFB4042B0F460386DED4997F74E98 /* DDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 310884D912F30F8937EA1AE2BD7065F8 /* DDNumber.m */; }; - 6D52799B11030248CD983257C8AEB870 /* SJSQLiteTableModelConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 7783FC25C6F999AC141433F95E6EC22D /* SJSQLiteTableModelConstraints.m */; }; + 6CE5ACF2354BB224C594138391898642 /* SJSQLite3Logger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F7D77E1B5093E881CB2A230AC3ABA84 /* SJSQLite3Logger.m */; }; + 6D72C067462881A6C7B11BD8BDFCB840 /* SJBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 53448E504E7784E3E6DDE1F3712C5D92 /* SJBaseTableViewCell.m */; }; 6D7548D17D9D54D9128FCC702086C05C /* SJBaseVideoPlayer+TestLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E197F1AF1E8EFCA92607DC70E11DD30 /* SJBaseVideoPlayer+TestLog.m */; }; - 6E95843117661F35647435A4E06D1B09 /* SJUTRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = B796B7F2EC17F5785FB66AF49DD878A0 /* SJUTRecorder.m */; }; 6EC86A31DE9C7210CD8965CCE49A6342 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CD577881F8542C081B8718D7309267E /* SDWebImageError.m */; }; - 6F0CAB6534D4ECABE8DF635327B7795E /* SJAsyncLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = FA031C294261FB9D15336A95C3EAD6F5 /* SJAsyncLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6F1DE9B24A115793CA42AC76D3920188 /* SJPageMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = E38B0AC0EBCBABB3856556406E3952D8 /* SJPageMenuItemView.m */; }; - 6F3070541D8C55A61949F299DFB4426A /* WebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = B2CA61BB36DB1604C85EBB737D3A0247 /* WebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F0B9D70EFBC5CE29E5F30778F1D3496 /* SJSQLiteErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = A20ED9C28F17151812A2F7904FFAE33F /* SJSQLiteErrors.m */; }; + 6F6A490E46FFD9EF9A529DBA4F95CA31 /* MCSAssetFileRead.m in Sources */ = {isa = PBXBuildFile; fileRef = 68131CD5E316CD24796A8CC198CBBD0D /* MCSAssetFileRead.m */; }; + 6F7DF74534DC0BC43A923F87ACAB2516 /* YYModel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 350D4B1361E013C39A66BC4DD89C794F /* YYModel-dummy.m */; }; + 6F7FA72FD1A5008F4794636A2C82AF0B /* SJSQLite3Condition.h in Headers */ = {isa = PBXBuildFile; fileRef = 1476D614C0C8E67355B7800DFEA4E2EB /* SJSQLite3Condition.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7031CFA5FD7EC7C8E5EFAF8325D2C8ED /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = F673A7914DECDA93D5A45654CF5E2279 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70DBAB79C6DF20CCBE2D6515C4E6A49D /* DDData.m in Sources */ = {isa = PBXBuildFile; fileRef = F9952141DEE64582EA1F93357605D1EB /* DDData.m */; }; - 710A9B5D977EF802D6932B20B4836D4D /* MCSAssetFileRead.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF1D57415E9AC8567C00D99E52837EB /* MCSAssetFileRead.m */; }; + 7081EBA6C8DEA342B7BDADEB65D7FB17 /* HTTPRedirectResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B92BE1A0B48CF7F882CF5C89855AF7F /* HTTPRedirectResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70D380166CE5ADD6F6E722D2E60282AB /* HTTPDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7152CB64B5BC1D45DC4BC82BC97BD0EC /* HTTPDataResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71373605EB94DB3F49A56DD607E09A66 /* SJSQLite3ColumnOrder.m in Sources */ = {isa = PBXBuildFile; fileRef = 06996B686544F997E8FEFDDA33A29908 /* SJSQLite3ColumnOrder.m */; }; 7182F988A4A92A3B2CDA65753DFE098A /* SJBarrageQueueControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = E8222D4BA51A2E2634F4E691BC86C587 /* SJBarrageQueueControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71FA16426011D97ECAD37D60AE09899F /* SJClipsVideoCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = E5CBD65134933DF5F54DA8FF80EBC313 /* SJClipsVideoCountDownView.m */; }; - 721EF21D02EAFED58105FDA1295F6253 /* UIImagePickerController+SJUIKitExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 623BDF33769B399CAEB359070BF29681 /* UIImagePickerController+SJUIKitExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7299C2EA2AB9DB105128BDCA4C463BBB /* MCSAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CED2C3E3A829CC3DF8CE284B6307674 /* MCSAssetManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 735FE5DD6DA4ECE66C2747B2C211CE3C /* MCSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 88D1D2C3EA8DD771F7F1BA292939A402 /* MCSError.h */; settings = {ATTRIBUTES = (Project, ); }; }; 73BB65FD201B7AB5716CE818F49FC65E /* UIViewController+SJRotationPrivate_FixSafeArea.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A6D70407A56EA21428BF444F123ED0C /* UIViewController+SJRotationPrivate_FixSafeArea.m */; }; 73FE26D71246244AC6895D29F2C94655 /* SJFitOnScreenManagerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 81D3791B503B56B9CA4C249D378FE69A /* SJFitOnScreenManagerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 743722A2FC6EB7E7C4D48F8963A0C1FA /* NSAttributedString+SJMake.m in Sources */ = {isa = PBXBuildFile; fileRef = 681BD6229132CEC451C08BC390C732F0 /* NSAttributedString+SJMake.m */; }; - 743B65399AD239B587CC88622DFCBBCA /* NSObject+SJObserverHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 49AE9CC8979882D457146630C03F9162 /* NSObject+SJObserverHelper.m */; }; 7476E72D69D6048345A68802E89DB8D0 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3DBFF819CD462E9CDF00085084EA6C /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74784618A416F2EEB10E3BA385AAFDE0 /* HLSContentIndexReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 98D717AE7899428DB1CDA886347D043B /* HLSContentIndexReader.m */; }; 74EAE5276D0EF19E1CF97B70E9965FB4 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 233AFFD54A01A5072D0DBB70D67C3503 /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75083D51271B6FE55DAF243B54952A17 /* MCSProxyTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 650D335E051B97FC37B2A88D94BF4483 /* MCSProxyTask.m */; }; 75606E583AE329EA7FC0E29FCDD8E45B /* SJBaseVideoPlayerConst.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2374129F2435103CD3FEB47E901A21 /* SJBaseVideoPlayerConst.h */; settings = {ATTRIBUTES = (Project, ); }; }; 757EBD77D300E8FAF251BF89058A0063 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BD109C275E039599402F0828CBF45B47 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7586DD67411B61D2AE0E416D8BAFC21C /* HTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = CA8FC01C3816967CDB0BDB647CBFF07A /* HTTPConnection.m */; }; 759335CEF832A5F72222213C7AC7FFEA /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7193A30AD429A4AD3CED9961AA75E1C6 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75C2B9FAF71448176ED27ECE80AB3D37 /* SJImagePickerController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C066CE4EF356EF6484A313939E67E2C /* SJImagePickerController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 75DABB1BEA4DF9EBBD70E87A989B46DF /* SJPlayModelPropertiesObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = CD2A59BFCA0A51F2EB93847ED2B3665F /* SJPlayModelPropertiesObserver.m */; }; - 75E6294B0EC1F3D2674C7A7CA72A5A6B /* HLSContentTSReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 81FAD92448C08AAF35960BB136000B93 /* HLSContentTSReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76711A97D2000EE724F2E202287D894D /* SJBaseProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = E7EF31E720B44E6BF1D0862C013C9335 /* SJBaseProtocols.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7609F5D603D7BAD2F649240A4A00D518 /* SJCornerMask.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC255AB79A2DC0962D62443A6B9635B /* SJCornerMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76594AC5B539554D8BAB2BCFEC63A5A9 /* UIViewController+SJPageViewControllerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1FAE3E737737421BBC3A63E187CDB6 /* UIViewController+SJPageViewControllerExtended.m */; }; + 769A8868938B2C11EA1CA60C3C52C670 /* NSAttributedString+SJMake.h in Headers */ = {isa = PBXBuildFile; fileRef = B88CF8E6B72C6661062BA5C4861D7873 /* NSAttributedString+SJMake.h */; settings = {ATTRIBUTES = (Project, ); }; }; 76D0BE6C9B27AB329875EE1CDA4A13B6 /* SJClipsVideoRecordsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE4E95023B7291C8551D3EB60D6E99E /* SJClipsVideoRecordsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76D63D8C364E826A27ADB7CBCE0BAE46 /* SJAsyncLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = B62D13D58CBC32F3487F3A1A66E2999A /* SJAsyncLoader.m */; }; 76F902A536DF07064DFAD782000934A0 /* SJPlayerAutoplayConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F31D89BF5007B2D5B901845623F5D8E /* SJPlayerAutoplayConfig.m */; }; - 7791A6430ABCF88F9EBEDACE3D3FF099 /* SJCornerMask.m in Sources */ = {isa = PBXBuildFile; fileRef = 476D306D637343215426E465EF845780 /* SJCornerMask.m */; }; + 775FBB936B455FD84830E7E65CA8C077 /* YYClassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DDB17F488DFC67FD8EABFE57E25EE77 /* YYClassInfo.m */; }; 77D0B4900F9EBA8694450F8D47E8BCD6 /* SJEdgeControlButtonItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 75A9FAA6FD100021C0EB6E33D15359FA /* SJEdgeControlButtonItemView.m */; }; + 7821DDDD4673B44208C14B48D97B3095 /* MultipartMessageHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = 172CE0C57C9A138B843F150EA4B34370 /* MultipartMessageHeaderField.h */; settings = {ATTRIBUTES = (Project, ); }; }; 787AE202E71EF711783ABDEAA6D52204 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2771129AF8E2B014E9E1D7E3B25DA676 /* SDImageAPNGCoder.m */; }; - 78EC92D1BC17DEE34D1C0B1EB08EAA7F /* NSFileManager+MCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A441296D16688BE34C60D7B083C865 /* NSFileManager+MCS.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7914F43D7FC533A7DE6B424852E84419 /* SJResidentThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BF5F73B29C592D63F5303624D6498B /* SJResidentThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79C29613FE2F377F846ED7E132B5DDCF /* SJAttributesFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8017B2BB2EAE0360064D7F3AAFF030C9 /* SJAttributesFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78E9745555FD1A604C55A4FF0ABE140B /* SJSQLite3+TableExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F309DB92B01629FC681001237F7401 /* SJSQLite3+TableExtended.m */; }; + 798F9862B68E83AF848D53D4767E624B /* HTTPDynamicFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EFA16B5D6250645349BF7DFA07D422C /* HTTPDynamicFileResponse.m */; }; 79D177AE72405639EE556108B0F87069 /* SJPromptDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D0E82D4FDBF4F7E6F60B0132DC2A3AD /* SJPromptDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BA148D2C89C1445005F8682A0B82AA8 /* HLSPrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F41B8C91F2A906660C05CB88E6312A48 /* HLSPrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A8648DCC118B018BFD47621756111B3 /* SJBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 31494D8248BBA62EAD891364344B84F0 /* SJBaseViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B334FCE612F278B38DE61A0AB32B9DC /* SJSQLite3TableInfoCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FD4A52291819F86E185AF98F0BD653C9 /* SJSQLite3TableInfoCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BF2596A0255E54A91315A111722D8A0 /* HTTPErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 486A8E5AD51D96C124F1F4CF7E1A1A17 /* HTTPErrorResponse.m */; }; 7C5FA84671FC70A34C0C1434B8A3DF17 /* SJRouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C31151475C3A603CCC7BBCDA724742B /* SJRouter.m */; }; 7CF0CC397E6B3093CB4051B189E7A001 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CE7C4BBE34A43333B180F01EE3DDE5A /* MJRefreshBackNormalFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7CF2AC7A3B3ED03B30C1E4ED662B0551 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9DF7F114DD7A016F07B3C88ED0CCE6 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D46FB63D0D1BE369D6761719AEA8C70 /* SJBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 53448E504E7784E3E6DDE1F3712C5D92 /* SJBaseTableViewCell.m */; }; + 7D3B6C310DCCF8AF2F3ECC59045C4120 /* UIScrollView+SJRefreshAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EB97F016A3959F6C2620EDDB3B1C529 /* UIScrollView+SJRefreshAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D8D2B0D5AA01FB995BB4F9A6B83A95B /* NSURLRequest+MCS.m in Sources */ = {isa = PBXBuildFile; fileRef = ECAF630F82EA05CBF91D58E29E52942F /* NSURLRequest+MCS.m */; }; 7DF87BDC386372140CF6D2D0E9E55C38 /* SJClipsCommonViewLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE62BEFCFA8EF039BF62352FAD7405CC /* SJClipsCommonViewLayer.m */; }; 7E391A64600B54DEF1974DE44095D490 /* SJRouteObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A12225EFAF3DB48DA5CB9E41C1B3EAA /* SJRouteObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7E508BEEAF7B20822B0292A72352A554 /* SJClipsBackButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3113FA59340C0F63F2A7CEC7EDDCCB15 /* SJClipsBackButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7EA95D0A00D5F65CD721A3FC3CACDC0D /* HTTPRedirectResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F2A520201E5CCCBF3483E3ADC7784D52 /* HTTPRedirectResponse.m */; }; - 804E6304148EBDF09DD297EEACF00026 /* MCSAssetUsageLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 85DAB5841E7C2F3FACDBCBF9568F60E6 /* MCSAssetUsageLog.m */; }; + 7EA02300D24F0810ADF46EEE11DB7E83 /* SJImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = E257991A6FBAF7244D30A1614F2750AA /* SJImagePickerController.m */; }; + 7EDC5EC5BEA1D4D8BCAA9663107FA8F7 /* UIScrollView+SJPageViewControllerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = F06ADB8EC1814C0B41C16B61C06F8757 /* UIScrollView+SJPageViewControllerExtended.m */; }; + 7F37DD1615FE3335B6A441775822181B /* DDData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B3CD619EBB822FE3B724426A62CF7CF /* DDData.m */; }; + 803BA6326ECBD65B036AE813D9F9DC16 /* SJMakeView.m in Sources */ = {isa = PBXBuildFile; fileRef = A83CB57F8B31B12372E3C7FF285CC9BE /* SJMakeView.m */; }; 80B7FBA8291E76D74A651249A0E211FC /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DDAF8D290D96263CA2BE4E9674C0C1 /* SDMemoryCache.m */; }; - 80C029D66BE07A796CDEE78FA48C56E6 /* SJSQLiteErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 77BEF10FA79FB4906131BE3BDD41D559 /* SJSQLiteErrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80F3BB2D9651FF8F08110FC3FE25B7D7 /* HTTPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E55DC96309126DA289E2F7BB3F7F0E8 /* HTTPMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; 810AABE4B02DBCE5EB2B0D35CE782E8C /* SJPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 285EF96F1163B669364D8A69D3359BCF /* SJPlayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 812ECD28A4B07966D938EF9290D3465C /* MCSConsts.m in Sources */ = {isa = PBXBuildFile; fileRef = F9AA97EE718899F70B8F538D15DDA20A /* MCSConsts.m */; }; 8141E0F9B5099E5471DD31918E7DA7A3 /* SJVideoPlayerURLAsset+SJExtendedDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = 748117CC5D8B386423B53649A356EBE4 /* SJVideoPlayerURLAsset+SJExtendedDefinition.m */; }; 8192D9219478BF888D410C486F40C20C /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E0A3284FF707C2431429C0C24D172B /* MJRefreshAutoFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 81B3F82344F7716D7EB8CF4484A3ED05 /* SJPlaybackListControllerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA8C6204B91976A5F5918EFD305ED5F /* SJPlaybackListControllerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; 81F811A56B6724F7E8E2D25364E595E3 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FC431AEF7E2F39F79949D52FE7A2E0AA /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 827E29B47E4F01FE29CA50C3444B94BA /* SJPageCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 240A964012D19692836CC15C262FD79E /* SJPageCollectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 823C3C96EAAF509F054079468ACA4521 /* SJSQLiteCore.m in Sources */ = {isa = PBXBuildFile; fileRef = CF3D30F72694CC0C2FB250B334C009D9 /* SJSQLiteCore.m */; }; 82D8207DEF104392D2661BA6EBCF42FF /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBE68D9538E37B2BFAC9B9E365DBAAE /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82EC76A295B5ECF165CA502528420D57 /* SJApplicationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A36053D33BE7749E1A2839CA196B3F2 /* SJApplicationInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82EDD7AF9CC0233FA3BA836283D67803 /* WebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = FD3240837E2D69BF7D8E3B438F7EC45D /* WebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8385EA1E9A6EBC7120147A8E8128264B /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D6575F7C5D973874EABB508442F241B /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83BA8C9E3CBF4DAC1628C69DB54DEC77 /* FILEContentReader.h in Headers */ = {isa = PBXBuildFile; fileRef = A5D4504DAF19ECAEE5E23D36D612B47C /* FILEContentReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 84401147C86C9D1AF7F7BF7F9A33B13E /* SJSubtitlesPromptControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B3F3A108DD19193180951AD8DB751E2 /* SJSubtitlesPromptControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8487E616E339280CA226EFA20E1095A4 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FC533E458C59229C514664FC8E291AE /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84884ED4943B20D7D3C96A94B7AD497A /* SJPresentationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E40A1A5F12EF7DC03568FB79FF8FD7 /* SJPresentationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 84AAFB010BDB1A8961CABD87F1BCD930 /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AF827443977ACAA7304A8F7480B47E /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 84AEDD63C840C8013B3F597CD75D77CA /* SJAVPictureInPictureController.h in Headers */ = {isa = PBXBuildFile; fileRef = EE0FE28B2A7CEDC772A9690184A576E1 /* SJAVPictureInPictureController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 84CD575C4194CE074DC9DAF2032AE7BE /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A41C4259F757DD3B34CE732563F642 /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84E0A85DC112A9AD88CBE01EC1B1F28F /* SJPageMenuBar.h in Headers */ = {isa = PBXBuildFile; fileRef = CD9F4CAB334BC9B1A0074BA0DDB844B3 /* SJPageMenuBar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84E4823804FF3111F4F7CE9D8FFA8B49 /* SJSQLiteCore.m in Sources */ = {isa = PBXBuildFile; fileRef = CF3D30F72694CC0C2FB250B334C009D9 /* SJSQLiteCore.m */; }; 853E91715C5A9AC7CABB0F6E8CDF9A3C /* SJClipsSaveResultToAlbumHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = B8E7871B8BAE5A1A1A0C807BFB361231 /* SJClipsSaveResultToAlbumHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85E31CFF996745B9A95A1BF860EE5C85 /* HTTPFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2044B494CFF13054EB09F110A57B8E /* HTTPFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8655D7841854125F82B3EFA03825F56B /* KTVCocoaHTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = DC97900CB70795337BD34087AF26C38F /* KTVCocoaHTTPServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 867CCA0AA1329AAA571E4041265F13CD /* SJAVMediaPlaybackController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2BF4E947FD69CC70B2C62C81F1E992 /* SJAVMediaPlaybackController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 86AAD98E9EDA89718E2EC8454FD88DB4 /* NSString+SJBaseVideoPlayerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 529DD1E159AFC1E89F85C45FA0F59703 /* NSString+SJBaseVideoPlayerExtended.m */; }; - 86B15349CC69B1AFFE7EAEB557EADF5D /* SJBaseCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D7CEDCE8019A20C256340E18A9A8160 /* SJBaseCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; 876A9AC0946D4D44504799427257AE1A /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 688EFAE87AC1CF5FCA077B7A8BDC3707 /* UIView+MJExtension.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 876E62F3B520CE6A27CE8647E68CEA43 /* SJPlayModelPropertiesObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 808CB734B69C28B4D89C73D578B88ADE /* SJPlayModelPropertiesObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87C439A89A0D8D876F6567B936677E6D /* SJAttributesRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 54004C318658DD320E279E0141730D1F /* SJAttributesRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8862233C31F6E4E898D1D33D5CD903CB /* SJRouteInterceptor.m in Sources */ = {isa = PBXBuildFile; fileRef = C71E17D293D3E700F24F63BE914E18F6 /* SJRouteInterceptor.m */; }; - 889C0DC9D220AED46D63D2C6C64945E6 /* HLSContentAESKeyReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F7455F2E9FCB46FAB3B0A4A9B4F4346 /* HLSContentAESKeyReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88B4EE54C803B43046388E50C5E587DC /* MCSError.m in Sources */ = {isa = PBXBuildFile; fileRef = AAC526133E463178994F71B815E5FD07 /* MCSError.m */; }; 88EC2492778A65D49A56165E5DE416FF /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B327877FAB0F17485519871EA0A0062 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; 890323D7351A5635E8B2DFF8FCE479F5 /* SJDeviceVolumeAndBrightnessManagerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 22EB1A5A142EDF56BFE8B9432473225F /* SJDeviceVolumeAndBrightnessManagerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 893B5ABE1EAF8A3AD1B1C8E9AF7CD28F /* UIScrollView+SJRefreshAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E7175EE0C545B432AC6E065E60A1745 /* UIScrollView+SJRefreshAdd.m */; }; - 897D86F4992494EE345F704798A2A8AD /* MCSAssetDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E9C0E72D892C0D423DF8BAD77A1A10 /* MCSAssetDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 89E796A479F9BFBAAD8FBFDE5D92200C /* UIViewController+SJRotationPrivate_FixSafeArea.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B214A0EFD41486DA5F2D75C4DB97B10 /* UIViewController+SJRotationPrivate_FixSafeArea.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89E7A20484E8181259EB31D6ADCF3A5F /* MultipartMessageHeaderField.m in Sources */ = {isa = PBXBuildFile; fileRef = 888547C3EE1251CC61B0826DB888E1A9 /* MultipartMessageHeaderField.m */; }; - 8A83716E4A0E2AB7CBB434C87710779F /* NSFileHandle+MCS.m in Sources */ = {isa = PBXBuildFile; fileRef = F5F3A8FE3990523175250372E7902BBF /* NSFileHandle+MCS.m */; }; 8AA05F5215FDE6D93D464397D49A72A2 /* SJVideoPlayerResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CD32B773C6ED156D956B9AA03A8EE86 /* SJVideoPlayerResourceLoader.m */; }; 8AE193AD518D868F8A380BFBA29EE940 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 61F53670C70A4322F9C0F2328EAC5DC9 /* SDImageIOCoder.m */; }; 8B33DADE30399502DD6FA9D92DBBCB86 /* SJVideoPlayerRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D6224C2FA299A02312C9C8834FDD93 /* SJVideoPlayerRegistrar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B87D34BC825CA08CD1C90DA6AA11541 /* MCSInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB9E6E814DAEB3DFA95543B8A02CFB7 /* MCSInterfaces.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8C8C4B776FB3E101D6922277B283171E /* SJPictureInPictureControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 45CF393012C090762256710CD9305D47 /* SJPictureInPictureControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8CB39B392ABF658314F209F7EC25352E /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E691C422FD62B9864B0AC04EBA216890 /* SDImageLoadersManager.m */; }; - 8CB41556B5149DDD7BFFFA72AE412844 /* UIImageView+AsyncLoadImage.h in Headers */ = {isa = PBXBuildFile; fileRef = A1D918206A7F44D42E9619BE557CD314 /* UIImageView+AsyncLoadImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D33704EE8A7A98F299673828DEBB07C /* SJSQLite3+RemoveExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCCD6EE113D51F55E3999135778B5C0 /* SJSQLite3+RemoveExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CE26E55E4F96F44309BCE4CB0B0BD1B /* SJUTRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = D32F2F828073E773CCFF5CDB68E6A3C4 /* SJUTRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8D90F3A0C027A34BE56D82B97858360D /* SJClipsCommonViewLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C62EDB7CFD26DE1622FEE087F7181150 /* SJClipsCommonViewLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D9239F6FE1F7AF6E09F8651DB2645F3 /* SJObjectContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 74DCF4E5BF19CCBDF6BC323CC2866E7E /* SJObjectContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8DFB1356515A02DE288202D3DBEF1209 /* SJRotationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 70BDFA303EA597181F17DC575A0E2783 /* SJRotationManager.m */; }; 8E0B84E5E836C76A29201716700D0499 /* SJPlaybackRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BA57AB1E0437B167A3A99A52AEAF21B /* SJPlaybackRecord.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8E27EC136C6FBA3867CE73898926070E /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C7EBA27B93ECA27E57FEE6B99547F096 /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8E647828E4C169D55AAC86DB40DFF31C /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F1804578846AC0921ABDBCDF197DD7B1 /* SDAnimatedImageView+WebCache.m */; }; - 8E8A155EA63E647DAD106D4DF0EAE747 /* SJUIKitTextMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 96EB595C5EB691EA5BC42686217AA9E5 /* SJUIKitTextMaker.m */; }; + 8E862D4E6D49D56D785EA1D3E62CB582 /* MCSDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = 631CCEE2A251C80AA98C87F3AD31189C /* MCSDownload.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EB5915D9559213494D9F252BB5271FE /* SJAsyncLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = FA031C294261FB9D15336A95C3EAD6F5 /* SJAsyncLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8ED195FD73C43CFA427EE17C7ABDF31A /* SJAVMediaPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 057B753E8E2DF7F994D3744A244A1690 /* SJAVMediaPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8F8E582D91720BB121991E168D116D15 /* SJControlLayerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 913302C2FA39148ADA681DE449BFF28D /* SJControlLayerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8F9A973937EC315FD0B54962AC8CB5B9 /* UIScrollView+ListViewAutoplaySJAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 61973530DE355D581EAA3346E27A1852 /* UIScrollView+ListViewAutoplaySJAdd.m */; }; 903F6965B9FE8ABFC74C23A6A8F03C10 /* SJBaseVideoPlayer+TestLog.h in Headers */ = {isa = PBXBuildFile; fileRef = A238F1DF64496E3B8B79CBB2355B0875 /* SJBaseVideoPlayer+TestLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9061A43225E3C94F834D0EFC5055C733 /* MCSProxyTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 979D926A2575F7CE987AB89A8B413704 /* MCSProxyTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; 90721AA6D93B1D8C7F96A7C8152A284D /* SJPlaybackObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4F9A06CA1720B4F68D5E6AF926AA3B /* SJPlaybackObservation.m */; }; - 90CAA98F9D1573856AB7A7C6896F0ED4 /* UISearchBar+AsyncLoad.m in Sources */ = {isa = PBXBuildFile; fileRef = 99EB9F0AF13082FE5FF881DF72DC3186 /* UISearchBar+AsyncLoad.m */; }; + 9139686061A758C6456B384EB63F8546 /* MCSError.m in Sources */ = {isa = PBXBuildFile; fileRef = 850077C9F0B39F81759DD5A977A022F4 /* MCSError.m */; }; 9190EFE6D38E12D26CB9BC5C3A7AE8EA /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 93ACD96E87802F04FFB4CA5B0670A4A6 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9194B58ACE900ED6BAE6AD92E24A2CFF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E198E01C941CEB98E07426094BCDB9 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 924FBE4EB3752596C33E02ADCC64EDF7 /* KTVCocoaHTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 140C2E808885EB495D0494BC622B28A8 /* KTVCocoaHTTPServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 925A609BB048C6D387A0104E32CBDB95 /* MCSDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9B3AEB99DD18697A568E66325F3FD8 /* MCSDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9239AE2D5DCC68243E573CA27496A350 /* SJUTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D343E1AD6FA466D1D5BA6BA282845C /* SJUTUtils.m */; }; + 9251BF701E8AAD8AB0FB676ED0C1EC8C /* NSDate+SJAdded.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F316D901E4A712C758700835E58B84E /* NSDate+SJAdded.h */; settings = {ATTRIBUTES = (Project, ); }; }; 925CA4624FBA70F8DDFAD2C110DA1138 /* SJVideoPlayerLocalizedStringKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 4565924477651BCEE1243CDC8CE7F238 /* SJVideoPlayerLocalizedStringKeys.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92970796E3EC1D5A79EA31A9755B9B05 /* SJObjectContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 74DCF4E5BF19CCBDF6BC323CC2866E7E /* SJObjectContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 92BF70E9D3285561EB404A7C4A4A6DEE /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 853C0D86D4B432F6FB777974B0DAD608 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92D2B86C938F7870AF24FAA20C94EE04 /* FILEAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 99A5DFD34D131FB35D1DB667EB5146CF /* FILEAsset.m */; }; 92DE532935439B95296EA2902C1DD138 /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EB486581124F5510429C971CA94D0090 /* MJRefresh-dummy.m */; }; 92E4B15C6FF94A4FAA4A17621199703B /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 602FAED82D099E35198BAA68CB6757CE /* SDImageTransformer.m */; }; + 92FF80EE27B29A7C4C9351D391D35119 /* SJSQLite3TableClassCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A3ABCC5F1AF057A23C74420770A0A409 /* SJSQLite3TableClassCache.m */; }; 93147163DFC9AD7D994B83BB638828B9 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B6DDFA761C9DFAE07C84C97FA74243 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9483787872BDEF6AC1AB5F78CD7D3CDC /* FILEReader.m in Sources */ = {isa = PBXBuildFile; fileRef = CF2AF7895764E903C170399FEC6FBD52 /* FILEReader.m */; }; - 94935634C9DD423349C0D1275252C8A0 /* HTTPAsyncFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = E99ACAA6668C53099B11083BFB785A24 /* HTTPAsyncFileResponse.m */; }; 94C4AAA8B2B7E787FB98CAED1423660F /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 26924C878CD25589B2154BB2DBCF0784 /* MJRefreshStateHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 95644A51EFC0EE6CB81BFBACA2C49A4C /* SJMakeView.m in Sources */ = {isa = PBXBuildFile; fileRef = A83CB57F8B31B12372E3C7FF285CC9BE /* SJMakeView.m */; }; - 962A1ED6B1261C158FFF7EFD59E46B50 /* SJPageMenuBarScrollIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF1FD5CE7C18A5C1ED7419764774094 /* SJPageMenuBarScrollIndicator.m */; }; - 96E6CC027195E3DF62B68A253BB25D8B /* UISearchBar+AsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 827ECDD4A4498B0533E88F4D1DE5D9EA /* UISearchBar+AsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 974B57F72DFF24886C32189F255EE7D8 /* SJAppearStateObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = D08E8CE6A8AAF694BB997927A41548EA /* SJAppearStateObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97AF2763758E3E8456292751FBE0C272 /* SJUTAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = D13B11477C3AB729A658A9329B6448FB /* SJUTAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97B7EA6CB93CF7478D758746B112AFC2 /* SJQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D30FB2B33C854CB8ACCB6CED9707CD0D /* SJQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9519861FA771F0C6C7E0E26CA8F732F5 /* HLSParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C1328D107AA65F8BE807D2409FDF907C /* HLSParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95C34E5CB515A27011346103966A12E9 /* SJPageMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = E38B0AC0EBCBABB3856556406E3952D8 /* SJPageMenuItemView.m */; }; + 968256C3F53550955B2E3CD4552562E1 /* MultipartMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9324BB1346EE2AF82BC3AD638F7B572B /* MultipartMessageHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96831380E99095D02A5650E1E202B4EE /* NSObject+SJAsyncLoad.m in Sources */ = {isa = PBXBuildFile; fileRef = FCEEDF8927741E160A84A4E96A8A3B05 /* NSObject+SJAsyncLoad.m */; }; + 97062F9078A986A42F1A506730778918 /* SJStatusBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 19056F348AE77E882B106236B101C7AD /* SJStatusBarManager.m */; }; + 97714B774B6810F9977993FF1DDA090A /* HLSContentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 708CF752F665312EB35F211E80D13BC5 /* HLSContentProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97B3F35E86A07D3FEE95980B80BD87E9 /* UISearchBar+AsyncLoad.m in Sources */ = {isa = PBXBuildFile; fileRef = 99EB9F0AF13082FE5FF881DF72DC3186 /* UISearchBar+AsyncLoad.m */; }; 9881C8FF40D8F62F2B371FB262AA00FD /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A8908C6E23E90F0D816F1A92916F7D9 /* SDWeakProxy.m */; }; - 98FF3EFBCFB4C043C8A5A1389076321C /* NSObject+YYModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DEB42BE086E6F3D8B2DC09790FECE7 /* NSObject+YYModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; 998389497E9FD2964EB1277B4831AFF8 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 27DF1275440FBD974063E3977CE6F92A /* UIImageView+WebCache.m */; }; 9AE577F4D80841EB713F7E2DC0F61686 /* SJClipsResultShareItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD15C29EEAF6A3BBDCA415CF4C2F24F /* SJClipsResultShareItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9B12F156E1BEB77000D4E23081EC1F29 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B0224AF42F5D4D4A8EEB90D4C0259D2B /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -457,161 +454,166 @@ 9B6BF79A0FAFC2F411BC2D26B5FAE4B6 /* SJPlayerGestureControlDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C80B8B07BFB72EB0C76DA5B0792A6B0 /* SJPlayerGestureControlDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9B82B170C663C44EB3595CD7B0551472 /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 48F0BB30141F209448186A5FE9EE77F7 /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9B8365733D88EDAC8AAB34412130B375 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3170FD869802F4C6D028F6043705FE01 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BA71F6CED84ACBE780C715484B93862 /* MCSAssetUsageLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBCEECFA2242D30C62A413A3ACFBE1E /* MCSAssetUsageLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C061B368EE403BDEF37B8005657EBC3 /* SJPageMenuBarScrollIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF1FD5CE7C18A5C1ED7419764774094 /* SJPageMenuBarScrollIndicator.m */; }; 9C53BCA337AD9005DDB5EED0F28C3303 /* SJVideoPlayerConfigurations.h in Headers */ = {isa = PBXBuildFile; fileRef = D971A07322B9048E4BCEDBAC83800EAD /* SJVideoPlayerConfigurations.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9C9CDC354C1E5B46B76E26BC4A652131 /* SJBaseVideoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 07DED545AD708A325D2168FDDC6BA7CC /* SJBaseVideoPlayer-dummy.m */; }; - 9CD12568D6420D7FFEC1B639AC5E708A /* SJBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DB7391EC51AF2334476BCFFDC18B5FC /* SJBaseViewController.m */; }; - 9CD4DAC1160C3D7076339D91E0A23ECD /* MCSProxyTask.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3306BED9BA14236DDBB7746BEEA77F /* MCSProxyTask.m */; }; - 9D5AC832C217FEF952E8EE464A670477 /* HLSContentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 56DA2534B07BA8E2C5EC92FBFD6FEAF8 /* HLSContentProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9D5B7A2D161D6078DA4EB07849DDD72E /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C94082DFA108F18F64A1EE7FF1024001 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9DBBCF4AD4407CAF5452C573CBCE1EEC /* SJPlayModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 63BDFF844E44978C8EA53359DA4A1556 /* SJPlayModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9DFA2CC1D5727AE6DF276A1AB6464E1D /* SJVideoPlayerControlLayerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D377D069DFDEE0B5711704BA2DD9545E /* SJVideoPlayerControlLayerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9E3D347A11FFDDD63CE43296A1465A3F /* SJPrompt.h in Headers */ = {isa = PBXBuildFile; fileRef = AB5E10317B4E451B07E36AAB8837E162 /* SJPrompt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9EBFFDCA92EECEDB3A1C41F1717C7062 /* SJRotationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F8714EE7CE9F2D75158D60BAF9067D9B /* SJRotationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9ED5192E76CBC0A7362842C0768E5883 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D45E707C79E4A1132C9B4B93F5FE4E5 /* MJRefreshBackGifFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9F41A0B459F12287012D9EB9CDEDC908 /* YYClassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CE96864DBDE56BD8C22859C71CB60E /* YYClassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EFB12D9203F3B97E3D7A5AB8B4C950E /* SJBaseTableViewHeaderFooterView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F66FD2A4DF88F37607CDF17C3364C54 /* SJBaseTableViewHeaderFooterView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9F517EF334E49A9C29254BDB13F00FB2 /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 6908D9D6D0F69BBF413C2AE2273E646E /* SDImageFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FB5002F2A0DBAFB8BEA98FC0F35679D /* NSObject+YYModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DEB42BE086E6F3D8B2DC09790FECE7 /* NSObject+YYModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9FC187AAAC8122D37FA47E2AB4A05A0B /* SJSpeedupPlaybackPopupView.m in Sources */ = {isa = PBXBuildFile; fileRef = 20436208DA601A6215F809D0708CE68F /* SJSpeedupPlaybackPopupView.m */; }; - 9FCA7141B615A8231C6932A92E958275 /* YYClassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DDB17F488DFC67FD8EABFE57E25EE77 /* YYClassInfo.m */; }; + A002C531F1EDF0266A0345E3AC184F53 /* SJAttributeWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 4359BF2D87BE283838E4BF13001C4AEF /* SJAttributeWorker.m */; }; A00B584A73A9FF6D08B9CC8E6FD90AFB /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = EB12213346BBEECDCEB2F382F6937BAB /* UIImage+GIF.m */; }; A08F048D30D789C9F631A95D675A13D4 /* SJSwitchVideoDefinitionControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7613B2B5837FD067B951B1E77D24E455 /* SJSwitchVideoDefinitionControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0FAA3254ABDE227258A64485C232851 /* FILEReader.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC03E5E871D8C2DD597A103FFDD2DF0 /* FILEReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0A871A5E178B3C9410ABD85586D0FCF /* HTTPErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BABA059BBA87D806277A7683908F0E /* HTTPErrorResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0D4370C484C4F9CB2407E0F667BBCEA /* SJRunLoopTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 264ABE4AE54782A9D1676AEBEEEAC7D6 /* SJRunLoopTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; A165B608B8ACBE644BEFC13275E436C0 /* SJScrollingTextMarqueeViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 518E513655E9DA0B74F4F946DDB00628 /* SJScrollingTextMarqueeViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; A19AA07C7DB4989CB3E0A6423F39F82B /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2133955C82018D05EE6F895C0A92FB62 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1FDA4BBB3698C4CE6B09FE7505E2137 /* HTTPErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = AF8723110FAFCCDAA1AB154BF7CC6E0F /* HTTPErrorResponse.m */; }; - A20890624082C0B3B11718340A494B71 /* NSURLRequest+MCS.h in Headers */ = {isa = PBXBuildFile; fileRef = DE87BA6EE5BD20076D2E0FCCFB2F61AD /* NSURLRequest+MCS.h */; settings = {ATTRIBUTES = (Project, ); }; }; A2322BFCE25295A0B25ED060C2C0863B /* SJSwitchVideoDefinitionControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 88FBC6EBE3A22061D837CB9FE5521E03 /* SJSwitchVideoDefinitionControlLayer.m */; }; A2FFD247787C33CB1AD425A63D7A921B /* SJSpeedupPlaybackPopupView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B44BCA30C3E50316415C4E8F086BA53 /* SJSpeedupPlaybackPopupView.h */; settings = {ATTRIBUTES = (Project, ); }; }; A31CF75ED7C32E7E683978C3B7A7629C /* SJViewControllerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 37DA7B150BDADF31DDC1C0E8CC9416DD /* SJViewControllerManager.m */; }; A3307B8FB6EE0A049DBAE3AA4D2C6DA0 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 30DAE52611A09C0BB0C0AE5575CCBB8E /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; A3ADF25DA8D9233EF146EC40D326351B /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9023200CFC1EEB873BA1E58A94E8C25F /* MJRefreshAutoGifFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A3C94056341DFA2A8A77147BF8CCD625 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 3440844BA2A3A1D7A3D23B72FFAD92B8 /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A417B98C554C3E29D9328D2808A3122E /* SJBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DB7391EC51AF2334476BCFFDC18B5FC /* SJBaseViewController.m */; }; A41A57610520FF8E6A38B255D068A6C0 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 408C4EBD2BED7B5AB6E615112B62CFE8 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4C7E3C201576E8504755D39FB08B6CF /* SJPageMenuItemViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FFB58FEAC442BD1B52F4878E2F9185 /* SJPageMenuItemViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A52A760B7F825B7B27D50B6B33040EED /* MCSConsts.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BABFE1449A5023480CB6AFDFD3B954E /* MCSConsts.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A5621A85F2FB991D994B533A9A857FAD /* NSFileManager+MCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C32AD769BAF3DE842129633403C6E91 /* NSFileManager+MCS.m */; }; + A49072BC9B764675695B79B153523097 /* MCSQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A0E2BD60FD53F5041C53A8CFA73DAB88 /* MCSQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A4A80FC9EA21899D73FA011DCE007A69 /* SJUTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BB67EEE02C933D1DC2AE7AA2C7860569 /* SJUTUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5025162898C26520DA086A2E5501D6C /* SJPageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34E16EB6E3782C95A0F105623E836990 /* SJPageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; A5C2E63BDEE0B253240BD476588A7841 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 03FDFAAD7FAA5F4CCAB5D006DD45220A /* UIImageView+HighlightedWebCache.m */; }; - A650E25FB6AAE0641A9A4C10A9B7488C /* MCSUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F549BCC715BB95AC3369990F54854 /* MCSUtils.m */; }; A6747B6E6D35FB0709A0E58F686A88A5 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A21AAA22F0093BCE584238FF85B095 /* SDWebImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; A678960B8930C7BCCEA12BD103166DC5 /* SJVideoPlayerClipsGeneratedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 639B4B6419CD9C19A68FB7C6F8E320CB /* SJVideoPlayerClipsGeneratedResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; A7DD4611BCB9FDC7CAF070697D592985 /* SJPlaybackObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = FF680D01A217DC730C9FE4E3E626D197 /* SJPlaybackObservation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A80A9567B5FDB6B73256BCF2EB187E7A /* NSObject+SJAsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D3BE37123A34A1920BF68EB88FEFF7 /* NSObject+SJAsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8E07C9333AC2A8E216C7436775DF7A6 /* HLSReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 04EEB1F95F8A934BC175E59FE8374C1F /* HLSReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; A9B63AFB44FFD08122123F5A9A3E09A8 /* SJEdgeControlButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 50B3AE830FC3103F0F2C808E22973EC8 /* SJEdgeControlButtonItem.m */; }; - AA05BA9331880C61730B582A177BBC68 /* SJSQLite3TableClassCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A3ABCC5F1AF057A23C74420770A0A409 /* SJSQLite3TableClassCache.m */; }; + A9C5934D984B3741B30D0FF6F851E838 /* HTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 842ED4007B4D6B178D46597B3BA3C3EB /* HTTPServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; AA60DBCA6A577DFC28120104A123E1B9 /* SJClipsGIFCountDownView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BEF0AD407085C1B9C47C9C518A8B44B /* SJClipsGIFCountDownView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AABEA852C83099DD61BD2286BC51CC13 /* MCSRootDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = 72120949D9A82D8E1B1F68D1CEA3E394 /* MCSRootDirectory.m */; }; - AB01BD20A3A80E8709D69A30F787FEF4 /* FILEAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E381098A1160DC8B9BC2FA2A11217A /* FILEAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAC2D4B05C1F12FD6AD3ABD9FC00941A /* SJSQLite3+FoundationExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = E4DE603938351D49E770AA223DF18268 /* SJSQLite3+FoundationExtended.m */; }; + AB91907C1896FEA66F91FABC2608EEEB /* MCSProxyServer.m in Sources */ = {isa = PBXBuildFile; fileRef = DF557669D1B3C93E95FB479A2A91615B /* MCSProxyServer.m */; }; + ABCDDBEAFA3362CE7EBF99CD9F40BE3C /* MCSConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 46BBD361175435AB8DA5F652B14DC88C /* MCSConfiguration.m */; }; ABD879FD07A1B1D52EA3B150796918AC /* SJSpeedupPlaybackPopupViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 4024459B3153A8CA0FE7D072F17F486F /* SJSpeedupPlaybackPopupViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABE310EEE4A9CBDFDA5FE12243ED034C /* DDRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 593CE158626E3CA8C666B28A8C879616 /* DDRange.m */; }; AC35B180AD25A3DA11C2929AA1E194B3 /* SJPlaybackListControllerObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DC0AEBAC6EEF7240FD6B2015FEDED23 /* SJPlaybackListControllerObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC42FFEE4662B537BF6D3F5048C741BC /* SJBaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CB410245F325EB4ACF2D31E5560093A0 /* SJBaseTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; AC7B5CAC88A3E4AE47142401741ECED2 /* SJVideoPlayerURLAssetPrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 31B90EA24DC79AA8AE8F223A839CE11F /* SJVideoPlayerURLAssetPrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACDE227CC8F205AF223A84C49F20533E /* HTTPFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = D7E91F99D0D7B04C4F1AB1FDA4A3ADA6 /* HTTPFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD2DEE2222A8C38F6428B9FF5A36B506 /* NSString+SJBaseVideoPlayerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = BD60A6FBB7AE7160528412ACA95AFEE6 /* NSString+SJBaseVideoPlayerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD4C43E5F8FE0D4D299603266BA38BBC /* NSDate+SJAdded.m in Sources */ = {isa = PBXBuildFile; fileRef = C09B41A7CE35E76C2FAD99ABAE697D0D /* NSDate+SJAdded.m */; }; AD6255756703244047573E44E2586480 /* SJFloatSmallViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 572B00924A96FAF507A43EC17542E227 /* SJFloatSmallViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD75B647D0D2C5BACB54069BA96FD0AE /* UIButton+AsyncLoadImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D49D256B1C52AB54C8A2C8060256F9 /* UIButton+AsyncLoadImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD966EBDEC1C2EEEBEAE502F014E2FA2 /* SJSQLite3+TableExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E8105A6EDE60943B4EC67A61641DB88 /* SJSQLite3+TableExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD9976DF0D2ADF72A404C9496AE09B27 /* UIImagePickerController+SJUIKitExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 571B7729518BD763860456E08432205F /* UIImagePickerController+SJUIKitExtension.m */; }; - AE27568320ECE6D58613038BB9DCF674 /* SJSQLiteCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C713CCD92E253C2633DE67F21BF7BC8 /* SJSQLiteCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE5C3EA257850F96F5597B5454F33131 /* HTTPAsyncFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F55BE01B5831B9EE82527AA733BABCE3 /* HTTPAsyncFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADBF63CBAC45B25010B08E1FFC43BC94 /* HTTPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 06671E99E91AAEEEC9169A091A816D5E /* HTTPMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE16F1556FBE4AB1B6C41026383A8BC6 /* HTTPAsyncFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B2DD5F36D5909AE3AC289038082D64 /* HTTPAsyncFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE46407ACFCC9E8832310EAA11A8DF0A /* MCSAssetExporterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 855B2D6D26AA324940B56A00675BA76F /* MCSAssetExporterManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE523B1EA7E012FC0F5F19A5DC403A1C /* SJSQLiteColumnInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A595B4916920B663D21DE9AD391D8078 /* SJSQLiteColumnInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AEA17406F6D2BAAC2BE20FB0C58A8425 /* UIImageView+AsyncLoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 301B27B5CF42CE3BF9D26BCB0073740E /* UIImageView+AsyncLoadImage.m */; }; + AEE5F4DCAF74C994C0DFF3B72AD8E2BB /* MCSRootDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D737877DA7646D78330FB9C15A5DDD /* MCSRootDirectory.h */; settings = {ATTRIBUTES = (Project, ); }; }; AFAF04B22BE1008C70EF3C05EFDD2523 /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9712344E9C15C30465983C3AC7F51DDB /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; B034DCA6607ACB1BC879AA8AFA85576C /* SJWatermarkView.m in Sources */ = {isa = PBXBuildFile; fileRef = B39478ECBC82DE7682345E0B87F5D2F1 /* SJWatermarkView.m */; }; B07B0193B545AD11E0A9971DCDB97EDB /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E372FB801858BD2F30F99A56970118 /* UIImage+MemoryCacheCost.m */; }; B0ED107F3AAF83FDD3035D0B3D864953 /* GCDAsyncUdpSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F335906970F7211B6D13C5499AADFE0 /* GCDAsyncUdpSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; B0F0BFA01114A38253F6D62EC0CFFAB5 /* SJClipsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CCCB55BD375EFB892DC6355384E6A06 /* SJClipsControlLayer.m */; }; - B13C6AD6F2F664B1E6A0575722967A44 /* MCSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B0CC129930E755BEF6716B8F9E9800D9 /* MCSLogger.m */; }; B15E2845F41B6A6A8F540806EE735CC4 /* SJPlaybackListControllerObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 58B2360B403E0121FA36F9B60B0B6C05 /* SJPlaybackListControllerObserver.m */; }; + B1AA2F306ABF0DB12F17A97CD4C8B0B6 /* SJBaseCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6728EE0A8F7DF9C8CCA37DA48046540F /* SJBaseCollectionReusableView.m */; }; B1BE10B72E7A49B62C2D07197059015E /* SJNotReachableControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AD6E80C1A070078C435F98DE2175C8C /* SJNotReachableControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; B20A0E5D8F9BCED1A82793C4BE9E7258 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = F766934977F3EFFA3212428BF5D4177F /* Masonry.h */; settings = {ATTRIBUTES = (Project, ); }; }; B284E952224927D138B8A67AABA0A312 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 162B6C345733CB1A57823F7D0BB85A0A /* NSBezierPath+SDRoundedCorners.m */; }; B2C192C1F33B5CB36C0850902722CE56 /* SJVideoPlayerURLAsset+SJSubtitlesAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 1800D7BBB22B887D621FC7838C07E978 /* SJVideoPlayerURLAsset+SJSubtitlesAdd.m */; }; + B2E11062B47A5852240D0473FF57B81A /* SJSQLite3Condition.m in Sources */ = {isa = PBXBuildFile; fileRef = DCAE225C3EE10B254FFA9E752D38401A /* SJSQLite3Condition.m */; }; B351AF2F58E40882E9089840D8828B85 /* SJDraggingObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AF14DC9F4780968B5A77143106B8B2 /* SJDraggingObservation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3F81D79674170B244E69895FA2C5BD4 /* HLSContentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 53BE70F9DD5D34DDFDB331BC90235CAB /* HLSContentProvider.m */; }; + B36666EAE896F28DDD440A818CCA8FAD /* SJSQLiteErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 77BEF10FA79FB4906131BE3BDD41D559 /* SJSQLiteErrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; B472437E134F4DE3D384078738CE6A8D /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 2015914B9E8B1C8BC041942C41936829 /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4D3BD07FCBACC5551B068D3E688A8C9 /* SJSQLite3.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B621D16CC77ABF3B2B4127CA8CAFF2 /* SJSQLite3.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B571B86F7D09CACEBDB7761E1BA03DCA /* SJAttributeWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 06AA0406145E6565F44678FC0DF052F9 /* SJAttributeWorker.h */; settings = {ATTRIBUTES = (Project, ); }; }; B57742214BEE9AEBEBAD8AEA7EFCDB0D /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = B9B114D208C34EEC8985143F2869A685 /* NSImage+Compatibility.m */; }; - B5A7181AD64184E9DDD65673F27BA7AA /* HTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = A2916B555912E0AD1DBF37A2208B0799 /* HTTPServer.m */; }; - B61C0849950844900BD378751D7C3681 /* MCSResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 28AB8D92B7467FD545CC485C6CA9E4E7 /* MCSResponse.m */; }; + B5DBAB468671B5A525EB81D09C00D881 /* UIButton+AsyncLoadImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D49D256B1C52AB54C8A2C8060256F9 /* UIButton+AsyncLoadImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B789229D995B4C68C3A0E744FDF693BC /* HLSContentTs.m in Sources */ = {isa = PBXBuildFile; fileRef = 195D8C84619E5928D2843CBCC168B831 /* HLSContentTs.m */; }; + B7A619E472B5F53CC2B932BA652049F4 /* MCSDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 89939B9897BE2F559895AB94328DD232 /* MCSDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8327F2FBA5C7815C4EC083BC3358E1B /* SJCommonProgressSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 330085ECE299AAA0D6D06A5A2C89A17D /* SJCommonProgressSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; B83B6A071701DB7EF8D4D65EFB9EEC1B /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = C883DE4DFCE28A95EA0406380D489950 /* UIImage+ExtendedCacheData.m */; }; B89E9AD5408728BC333C04251B4BEC2B /* SJPlayerAutoplayConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 551B41E0149E16B630750F12C3F36C9B /* SJPlayerAutoplayConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8DB2CA24372A72023504546273D924B /* NSAttributedString+SJMake.h in Headers */ = {isa = PBXBuildFile; fileRef = B88CF8E6B72C6661062BA5C4861D7873 /* NSAttributedString+SJMake.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8DEED5E10AFDD2181F389C39AFBA321 /* SJControlLayerSwitcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEAB602D0842FBCC25A68C3DD029F19 /* SJControlLayerSwitcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8DF2ACEDB7F3B126526EA1BC5CEACD5 /* HTTPDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B8CB7FAE872BBD4FFB58F853A3014484 /* HTTPDataResponse.m */; }; B92DB014092D3F8C4C168D2408447080 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B65A81DC91D9A693D4AC8948E15F48E3 /* SDImageCachesManagerOperation.m */; }; - B98246A4B9BCCF6E8A0A9E75EFCC1411 /* UIScrollView+SJRefreshAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EB97F016A3959F6C2620EDDB3B1C529 /* UIScrollView+SJRefreshAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; B9FFD9917E8DEF537C28B086745F498B /* SJPlaybackListController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D0D790727627633CFB9BE2D2E5EFF0 /* SJPlaybackListController-dummy.m */; }; BA5C8F3C1C82304E12298CF458C2AE40 /* SJPlayModel+SJPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A724B11512E5CD7EB6B9BA73A279A8 /* SJPlayModel+SJPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA6628471A4D879A0E61D13ABA5B5D0D /* SJApplicationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D5804D3DE317507AC340B7AF9BC97248 /* SJApplicationInfo.m */; }; + BAA1FCD3569FBA6F8668C43F2B21135F /* SJResidentThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BF5F73B29C592D63F5303624D6498B /* SJResidentThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; BBA857E46F0BA97BCB93FF4A9A19CE35 /* SJEdgeControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C1B227E76AC083FB6F8CAADE5462003 /* SJEdgeControlLayer.m */; }; BBD377CC54BBD47D18B9468943FBC2FD /* SJVideoPlayerPresentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 227661B08BCB5E690EA4816BF3024F9A /* SJVideoPlayerPresentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBD8A286AD8724801B14F31F8DC46C0E /* DDRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEC9A59BA887087122827E42736A024 /* DDRange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC23493B9ED779A2D1DD0A428E595F38 /* SJUTRegexHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = D13FE04036709F5A2335F57BFDDE4A1E /* SJUTRegexHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC5C3E097AC6FD81D65EF8793A25FC35 /* SJMediaCacheServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 201FF7378324AA46C617BC66A5250902 /* SJMediaCacheServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC639A37BAA606FA630D1F9884CCE1B9 /* SJSQLite3+RemoveExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 1402969A5DB0D4D68B98E7623D215C41 /* SJSQLite3+RemoveExtended.m */; }; + BC892C8F8A402D2CF0BE93FCE104FC85 /* HTTPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BD5F0A5EB250E3A915B1FB439AF0950 /* HTTPLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCC4C5FF126E466F246C95B89C9661E0 /* SJBaseVideoPlayerConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 85EFDC5EA41BF08EF2F791B6A010DF75 /* SJBaseVideoPlayerConst.m */; }; - BCD427C9DDFDD23D6C8463F210CFB391 /* SJSQLite3.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F818EA1775429352AB6E7F2E9B8C9B /* SJSQLite3.m */; }; + BCD248DB433AA99BC6AA74F9A0F64D69 /* FILEAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 78BF5B10CB968C35A2308C532B5C2C76 /* FILEAsset.m */; }; + BD370E5DCFA3CF964254DAC2064FF0CA /* MCSUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D811109AEA8D5E409875C2D398193EC /* MCSUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD581F43E1B1B9B45DD3DC6C4B709539 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 97209C47DF4DC4804D4BB04ECABFBF72 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD83DCDB2BACC262DC641340F62DBA95 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1195E56F4B8F64111EFD5F819A206EC6 /* SDWebImageDownloaderOperation.m */; }; BDCEC74D09CA629346B8CDB4180B1BCF /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = C9405C36F76CA6C4E38BE7849BDA85E3 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; BED89133551A339F15B32E21124D1B3D /* SJVideoPlayerPlaybackControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 444E594712C4C3204F417A872E43FFEB /* SJVideoPlayerPlaybackControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; BEF1A6305297B7C7BA18254BF6C02DE0 /* SJCommonProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 26D6788B83F99BD7E6F0CF03C40AB7A5 /* SJCommonProgressSlider.m */; }; - BF36F55ED0B6159823C11C3CA369F11C /* SJSQLiteColumnInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 112668186AD5287BFBEB7171DDC17180 /* SJSQLiteColumnInfo.m */; }; + BF3DF943F7BC271928B51D4C91CD1B51 /* UILabel+AsyncLoad.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E742039877DCE5137E5E2AB8E12B95 /* UILabel+AsyncLoad.m */; }; BF86FA6ACC6BDFEC3B1DB01F39B26ABB /* SJControlLayerIdentifiers.m in Sources */ = {isa = PBXBuildFile; fileRef = DF2061CB493F5AAC1E6EFFD6764B21D9 /* SJControlLayerIdentifiers.m */; }; - C00A55A13C5D3385A4035FB737DCF342 /* SJResidentThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 639BEFED9A760CCD98B3A44D5FE2804E /* SJResidentThread.m */; }; - C0EE371C5B059384F74C27977BE6A263 /* SJUTRangeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EBFA27F94340F33F7E457F9F22391BD /* SJUTRangeHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0BC023988C56432868F3B0466F2A123 /* FILEReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9280D21282FC72F527DB90DF68904968 /* FILEReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C10114859BE1E8F9A609EAB7B2A7089F /* SJUTRangeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EBFA27F94340F33F7E457F9F22391BD /* SJUTRangeHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; C1BE1B9B8F123A2DDB9B0DD45B833DBD /* SJReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 95A62993FAFBFF4F58496D1A0FB468EE /* SJReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2C60E5ADA95B61834A38840C1738089 /* SJTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C0CFE75E571AE7754AEDB5EBA7891229 /* SJTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; C30CC261B75B92063A8E43BF9F019C47 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6351A8FC541E6A73FEE4DBBEED82CED3 /* SDImageCachesManager.m */; }; C387218C1A051131C34872AE04C7FD18 /* SJVideoPlayerConfigurations.m in Sources */ = {isa = PBXBuildFile; fileRef = 97349895656AB185D9533A491E02F37A /* SJVideoPlayerConfigurations.m */; }; C38E0C88715298187FE04434699A5F1C /* SJPlaybackListControllerProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 85BB75FF8DCF9F5B19EF25A3646BF402 /* SJPlaybackListControllerProtocol.m */; }; - C45B4144CEF6D00A02A7D344A6FD0F4D /* SJUTAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 69184AF8C74A5F2DA4984440A0FC8AE2 /* SJUTAttributes.m */; }; C4A781EEFE89058B7265C6F721CA91AB /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3034184441734D55975A03C28A0E496B /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5E2CD7DC4F4090D0CAC41B2493379FF /* SJSQLite3Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 90296676CEDE1B5D282B6CD8168FD48A /* SJSQLite3Logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5156E9E8FE5BECB4CECF17A50F09222 /* DDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = FD1A3C70263DA06587A11D2AC56F9ADD /* DDNumber.m */; }; + C5921C7CA8363E0CEFCA84AC955AB2E3 /* UIScrollView+SJRefreshAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E7175EE0C545B432AC6E065E60A1745 /* UIScrollView+SJRefreshAdd.m */; }; C643F5C46BD3B60D71E2C738EC624D9D /* SJVideoPlayerURLAssetPrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 34399975CAB8238625C54958F6CC7057 /* SJVideoPlayerURLAssetPrefetcher.m */; }; + C66C4FB78E301AD82505254358E2F6E6 /* UIViewController+SJPageViewControllerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 422F86FA99E0FDDD558A309ADD7AFC8A /* UIViewController+SJPageViewControllerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C73848C49E9DE604668A7B919D9446BC /* SJResidentThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 639BEFED9A760CCD98B3A44D5FE2804E /* SJResidentThread.m */; }; C74D2E856ADC8139CD00DBD184061B23 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FA1BE59C811AB194D0C3C2164C26B267 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C82C83168607E8DCFE308BB9185582CB /* SJMediaCacheServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A45EFF88A4DF6D7C79BEC08913B1E7F /* SJMediaCacheServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7FA7A9983975F09A42CE2DEB2F3C9B2 /* MCSConsts.h in Headers */ = {isa = PBXBuildFile; fileRef = CF236096E6BC28A79D1D2D54E203D897 /* MCSConsts.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C821251AFC6078E8EA3479AE49E94003 /* SJUIMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A80A1701FB6CC1E134D852559EB013 /* SJUIMaker.m */; }; C908812CE420D8673B6B1B8791CF58CD /* SJEdgeControlButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D21A7C30AB67CCF1160AA23A2A10ADB /* SJEdgeControlButtonItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; C9770BB99EC8859E87BFA25C6EA5BB77 /* SJFullscreenModeStatusBarDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 12861D4CFB626041A9297BDE6AA375F9 /* SJFullscreenModeStatusBarDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA40647D583C2B160375CD7F97276B6D /* SJSQLite3Logger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F7D77E1B5093E881CB2A230AC3ABA84 /* SJSQLite3Logger.m */; }; - CA4F15EB2399FCDCFEC6B1653693DB10 /* FILEContentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 02303DF9ED29892E51880AD279D818A9 /* FILEContentProvider.m */; }; CA5158D662DA2A72BE64F7F1AA12E41C /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = CE02D15D533EAD44A5F7143B69D54D03 /* MJRefreshConfig.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CA7AC13D182EE4D61C5713BCDC421F37 /* SJVideoPlayerURLAsset+SJSubtitlesAdd.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E2FF9A82875A373B9C4632EEB646872 /* SJVideoPlayerURLAsset+SJSubtitlesAdd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA82BC53452CCB487EAD0DEE99207FA5 /* SJTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 87F97FABD0B6D4F3567DBE05AAF6A93D /* SJTaskQueue.m */; }; - CAA4937745B3B1FAE84AC735D2C43F09 /* HTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 384BD6E95D37E6E6E89BE0964A3AADEA /* HTTPConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; CAB14AAABFD8A75B6A73A2A5E9149F77 /* NSTimer+SJAssetAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4BEAE6BDE4DBB6F0E2A4C54F057B64 /* NSTimer+SJAssetAdd.m */; }; - CAF790BB593B7C1FEEC07DB4216EC8ED /* YYModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E2B3B2AF6366ECD0F0EF26DA166FCBA /* YYModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB05DD7E84C0B5CAD838AC7F16F2F25E /* MCSContents.h in Headers */ = {isa = PBXBuildFile; fileRef = E91BFF85C0A6ED7B9ADA4FC3C975A1D7 /* MCSContents.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBBCD099E3C561602EC5F4FF84A982A9 /* HTTPFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ECC91BBEC28834BF5C49A9D534DDA5B /* HTTPFileResponse.m */; }; CBCF5788280656138A0C00CDE607DE5A /* SJClipsVideoCountDownView.h in Headers */ = {isa = PBXBuildFile; fileRef = 55EBE1E03E492BA56B07F6FCE1492D34 /* SJClipsVideoCountDownView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC9E5C2E6A9B58CB3E3DFDD902A0493D /* MCSProxyServer.h in Headers */ = {isa = PBXBuildFile; fileRef = BE34268EF832F9AF44E2A378DC41E5DF /* MCSProxyServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD1E25EA81E6E1EEC19EF02BAF9ECC8F /* FILEAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9B8B38420B3810E4426748F8D1B346 /* FILEAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; CD2245532B231B39146928B82B664800 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5321B6E6D677924A94E1D15537F68CD2 /* SDWebImageIndicator.m */; }; CD40EC89E9242EF2196E318E81133DCA /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFB5E5A60857DD833C527C579471F70 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD7BBD8D60FEDB30A1729E2C9C4E0A6E /* SJSQLiteColumnInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A595B4916920B663D21DE9AD391D8078 /* SJSQLiteColumnInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD80CD3BC4E95941E9C9AE24CFDAA355 /* MultipartMessageHeaderField.m in Sources */ = {isa = PBXBuildFile; fileRef = 9773B9F322079ACC692B3E72000A5BE0 /* MultipartMessageHeaderField.m */; }; CD985823037E946277617E2EB8E47F77 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 427FD9D882CFA9ACD2E86E812FCBA223 /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDB8A7A3B0371FD2AA8D768AB448B790 /* MCSAssetFileRead.h in Headers */ = {isa = PBXBuildFile; fileRef = E54774E61FDBBF57294F5EF614FE533B /* MCSAssetFileRead.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE0A956F44B6BABC496C73DC61136DB8 /* SJPageCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3395175736C72459045ADD7942C68A08 /* SJPageCollectionView.m */; }; + CE179EEFE8B656F9FF31DDEC8F008E7D /* UIButton+AsyncLoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 557D599CE7EEFAD1AE0F26972E995454 /* UIButton+AsyncLoadImage.m */; }; CE2FA03FBF86FC1A16968772D91E43CF /* SJItemTags.m in Sources */ = {isa = PBXBuildFile; fileRef = B2BB35AC2F935C866372275931017879 /* SJItemTags.m */; }; + CEA8F36F2769BC57B5F9F696474A41A7 /* UIImageView+AsyncLoadImage.h in Headers */ = {isa = PBXBuildFile; fileRef = A1D918206A7F44D42E9619BE557CD314 /* UIImageView+AsyncLoadImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; CF015D6109D2B386D6A1F1F18CB0C9C3 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = B56C901C3B1104A9BC0B61C40851D9C9 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Project, ); }; }; CF2EDB42665F2B645929E3C40C45E792 /* SJControlLayerAppearStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FF21C0A08A97E0AE2E26D80006194D39 /* SJControlLayerAppearStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF415E43D576F99A6DE57AF7C0DE1319 /* SJPresentationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E40A1A5F12EF7DC03568FB79FF8FD7 /* SJPresentationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; CFB4EFA7B2ADC28AD13CFFCA011596D7 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A701663F01E007593239F50B2EAF7F2 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CFE287EEA6042855A401CD723C132AB7 /* MCSQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = EF4C21B6B8C724A08A74E3190B461A94 /* MCSQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0265698B6434E4C89E0DF8DF6961C78 /* SJSQLite3+FoundationExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 87BFDE22762249B18C577A7872940FD3 /* SJSQLite3+FoundationExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D079AC1C9F461D860F187AFEBFD2AEE4 /* SJSQLite3.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F818EA1775429352AB6E7F2E9B8C9B /* SJSQLite3.m */; }; D085F6DE2E4C9ECBB23E1A3841AECFAA /* UIView+SJAnimationAdded.m in Sources */ = {isa = PBXBuildFile; fileRef = 36402D1ACDE5AE5F02AEBE64E4E535F0 /* UIView+SJAnimationAdded.m */; }; + D09BFC66DA465EE47C490DE8C4114EEA /* SJSQLiteCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C713CCD92E253C2633DE67F21BF7BC8 /* SJSQLiteCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; D0CB72094A35B11B27C87715A33B2532 /* SJRouteRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F5517D0299A3F30CA0CA96554FEEC82D /* SJRouteRequest.m */; }; D0F1C4CB9CC7FA000D6F0EFEC7F8B9A1 /* SJClipsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 801598796BA3A3E2129534F9BC427B11 /* SJClipsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D199A7203135B2D735C43D77A3503E94 /* SJUTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D343E1AD6FA466D1D5BA6BA282845C /* SJUTUtils.m */; }; D29A03BBC9B95E677C2F51345F344088 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DD74A0D3A5D50B59EF7CC52485AD67B /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; D2C0E6530E3AFBD6C079E42472F33800 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = E53B93CB87E9A8DD5E434D34C454CC9D /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D359C3A569F6495086697665239FDBBB /* HTTPAuthenticationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 33E584567ABF723589E290D1771516C5 /* HTTPAuthenticationRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3FA0FFF5EA843078ADB6EC72F2BF1A3 /* FILEPrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = BD64B1B5E1AE280A7DB02B2041A87FEA /* FILEPrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D325B459C1FA6AF9C1478643DA5DAC92 /* MCSAssetDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = A31508EFB4BFFA1057C59D7CA0CB89EE /* MCSAssetDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; D41B7A6A474877F5BB8975CC1FADDA4D /* SJItemTags.h in Headers */ = {isa = PBXBuildFile; fileRef = B53ADD5B938712E0D0593A73C5893404 /* SJItemTags.h */; settings = {ATTRIBUTES = (Project, ); }; }; D45D3AEB9410A3EFF7DC52DDE5435CA8 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CBD4E4555319C7FD3F262D386EF9487 /* SDWebImageCacheSerializer.m */; }; D4BE023EBEA183A0454CCD8DE70AA15B /* SJMoreSettingControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 527E3BC497A270E892D39802BEC992D5 /* SJMoreSettingControlLayer.m */; }; + D4D438009907742A01E8A0338C2684AE /* MCSURL.m in Sources */ = {isa = PBXBuildFile; fileRef = C0BCAB77800255DE01A0FD208D4D465D /* MCSURL.m */; }; + D4E15557868D0F56B0E5D9D5CDAB4B34 /* MCSProxyTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 35BE06A148B27F8FBCFB6C5C32E02CA7 /* MCSProxyTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; D4F0859B625A8CDE06343368426D38B7 /* SJSubtitleItem.m in Sources */ = {isa = PBXBuildFile; fileRef = FA259FCBBDFB8B3FB9B253EB42AF8F81 /* SJSubtitleItem.m */; }; D522C8B6C7C223E80D6BAB4BDDB5F69A /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA932ABB07FE499B4138BDD37BF0105 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; D57B99794CB5EE4AD35ADEBC6AE73422 /* SJProgressSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 894B0AA413A404063B27A54AC54823B0 /* SJProgressSlider.m */; }; - D684A3FD2E279C4939AA7285E3C24DB8 /* SJPresentationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 422F4909F71844826F93015FDBC4ACB2 /* SJPresentationQueue.m */; }; + D586F714569AAD00A1CD3340A45FCE54 /* SJMakeView.h in Headers */ = {isa = PBXBuildFile; fileRef = C8CA9938C1EE4A62573B1368E49EA00D /* SJMakeView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5BBCFD5444CC91600F6003957BB7437 /* NSObject+YYModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D13E739A02B7FA73CC1AB9E9D33B28B4 /* NSObject+YYModel.m */; }; + D5F020F187778795D8D475F140D882A0 /* MCSError.h in Headers */ = {isa = PBXBuildFile; fileRef = E7F1BC1A0F4E0E168ED0EDA928D1014E /* MCSError.h */; settings = {ATTRIBUTES = (Project, ); }; }; D6C89FA0808DCE5AAFC6DB859957FCFA /* SJVideoPlayerLocalizedStringKeys.m in Sources */ = {isa = PBXBuildFile; fileRef = A0C966AC3BD5064BA778AB7FE9F8718D /* SJVideoPlayerLocalizedStringKeys.m */; }; - D6E80C23CDD4038C3CB3B0BEC6A2AB0A /* SJSQLiteErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = A20ED9C28F17151812A2F7904FFAE33F /* SJSQLiteErrors.m */; }; D783A8A5A426DBF85162B92142651218 /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 088C8390284A58E6B6E74503916F8433 /* MASConstraint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7E29ED5CFB96560319CF0730CE94B52 /* MCSAssetExporterDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 3387290ECD5EFE2B30F6E716F9B7F6AE /* MCSAssetExporterDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; D7E39007ADC52A887967F78C6E5C61D9 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ECD4EFFEA57BD1582679E9F18927152A /* SDDiskCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D7F5689859BA3E6A3A28DF73AADDC8B1 /* SJUTRegexHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8EF22AE772F18190CA274EE66691BE /* SJUTRegexHandler.m */; }; D7F68AE7CBBF100C5D76FC685AAC0FB0 /* SJAVMediaPlayerLayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C15DAD7B5185946E2A2DE449BB1E58 /* SJAVMediaPlayerLayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D809622A4F0E9CC5C0C2EA47EF67D0AC /* SJBaseTableViewHeaderFooterView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F66FD2A4DF88F37607CDF17C3364C54 /* SJBaseTableViewHeaderFooterView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9C116272C659C3C5F0EAEDD89A1A909 /* SJApplicationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D5804D3DE317507AC340B7AF9BC97248 /* SJApplicationInfo.m */; }; D9D46860FCA44158DC2633C99DCB6361 /* SJClipsGIFRecordsControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C8AA2A253B37DCFC1A4FA7B63395CE6D /* SJClipsGIFRecordsControlLayer.m */; }; D9F3A1A6E314845DB3C09B693EB59570 /* SJFloatSmallViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B8E86B65A43BA91331CAAC891487A70A /* SJFloatSmallViewController.m */; }; DA1748D1A95CFB09630C1B1318088350 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C1F66B186B82B77F59208534E625A6 /* SDAnimatedImageView.m */; }; @@ -619,278 +621,281 @@ DA42E42C3FE47B42401C73797A11827E /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = BB30D9FFBDBC793BE38B5BB726CF7A46 /* MJRefreshBackFooter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DA765D01151CB2601493C20FAB272A99 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E4D9BB11B9479C879A3BF568CF60C8 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Project, ); }; }; DAB56CA3BF77D40CED6C19224D5E1794 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0112143C0D522B156B2843B4216E0C /* SDImageCacheConfig.m */; }; + DACBE940A79ADE5CC18CA517E8EE9B8C /* SJSQLiteColumnInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 112668186AD5287BFBEB7171DDC17180 /* SJSQLiteColumnInfo.m */; }; DADA569607F532A184DAF48486BCF33D /* SJAVMediaPlayerLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AFB79FA03878464B8BE7E5BAAA8D37A5 /* SJAVMediaPlayerLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB4FE39D894FACA9D9A29814B1D972E3 /* SJSQLiteTableInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 24EDEE899C1D67310C45CF8C55F3A1B0 /* SJSQLiteTableInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAE1362587187E9EE99C07E669809FCF /* MCSDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 5098B07BF16A4BAA0D24602A31892169 /* MCSDatabase.m */; }; DB85FB5C0ADE8137214DFEBB016413AB /* UIScrollView+SJBaseVideoPlayerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 6656A628E979A9F8F4725097822E3D18 /* UIScrollView+SJBaseVideoPlayerExtended.m */; }; DBB7C38541245840971728B2671146FF /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 344EC7F03989A525BBAE681733B3B63D /* SDWebImageManager.m */; }; - DC5925BBBCAAA87F525E50CB5DAA7F28 /* SJUIKitTextMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E1A37C387CCA71B5564B4F74F65B63 /* SJUIKitTextMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DBCACEE60C8F2102568519A46F29FCA4 /* SJObjectContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4736A1E243E4A784A1CDBD1E01CFA /* SJObjectContainer.m */; }; DDE2D5A5538B2992253CE4BE98673976 /* SJFullscreenPopGesture-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D6ED4E1F2F7C74ECD93F3A2FE51002 /* SJFullscreenPopGesture-dummy.m */; }; + DE15253B42BCE584450D770FAEE60073 /* UITextField+AsyncLoadImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2317279B1C7C6CDF54B89FF6B397949D /* UITextField+AsyncLoadImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE34490B829015373DAB5F9BDB15CFB6 /* SJSQLiteTableModelConstraints.m in Sources */ = {isa = PBXBuildFile; fileRef = 7783FC25C6F999AC141433F95E6EC22D /* SJSQLiteTableModelConstraints.m */; }; + DEECE8E4721B0EACF1F8AE07203EE980 /* SJUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C29C85CA36F0438F6BBA58EE8FFF5934 /* SJUIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; DF046830BBE9B67E21F8F21EC3BF276F /* Pods-SJVideoPlayer_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A961442A951AD4743D626428CC377BF /* Pods-SJVideoPlayer_Example-dummy.m */; }; DF091238315C2F3AE424E99745B03CB2 /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 3223F00DBFB88C49595E9FDAA1FFDD14 /* SDWebImageDownloaderResponseModifier.m */; }; DF263A7F1E3682B4704996D857D6E0AA /* AVAsset+SJAVMediaExport.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FC4D5967463C682204A4A4A4A9C8A96 /* AVAsset+SJAVMediaExport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF4DD109257236AF5043C68B41C3001C /* SJSQLite3ColumnOrder.m in Sources */ = {isa = PBXBuildFile; fileRef = 06996B686544F997E8FEFDDA33A29908 /* SJSQLite3ColumnOrder.m */; }; - E04A69CFE73C9C0E5AC169ECCB919FED /* SJObjectContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4736A1E243E4A784A1CDBD1E01CFA /* SJObjectContainer.m */; }; - E09717FBCF8A827F15E62C45E5072EC6 /* SJPageViewControllerItemCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E737EE83F7200D7E3E6C5D4205ACD /* SJPageViewControllerItemCell.m */; }; - E0F26C306BA61D099ECF873C3E8A2A29 /* SJBaseCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5A6BA4CB18EA94F2C0DCDFA4E1F10D /* SJBaseCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF325EAC2B9E9778EB1AD132CFE8638B /* HLSContentAESKeyReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5A3F8C7171D397769DAC214EA96F55 /* HLSContentAESKeyReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0CEE1A17A48815050E233879808726D /* HLSContentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F1933F67666A066DDAE563673A24F47C /* HLSContentProvider.m */; }; E1352F869E79225A2F66659F1E2C9B13 /* SJAVMediaPlayerLayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F18097EABFAB8274A0955C8F4980B98 /* SJAVMediaPlayerLayerView.m */; }; - E1C7FAD986B4C3B148BD92482FEEBD7D /* HLSParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D2C1934A328D320C554E64245A69AF38 /* HLSParser.m */; }; E21EA35FFAB901BB15FCC8276EA28C1A /* SJControlLayerIdentifiers.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C159B02CFBE39DE633D38BD594EB2E /* SJControlLayerIdentifiers.h */; settings = {ATTRIBUTES = (Project, ); }; }; E271AA1FB5B38D23584C1DC2580E7D6D /* SJVideoPlayerResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF9BCFEBC35BF8C6AE1F60121AF196D /* SJVideoPlayerResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2ACFD90EC345A33A02E369E7F1EBB09 /* SJAsyncLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD2DC760A506C3A141573449B5E04C1 /* SJAsyncLoad.h */; settings = {ATTRIBUTES = (Project, ); }; }; E2CE1800420C7443786792BE9B1D5336 /* SJRouter-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 762DAE38E5CAC4AB811F5BDC0BFC2D46 /* SJRouter-dummy.m */; }; - E2F54D979379EFE69D14C99D25255710 /* SJMakeView.h in Headers */ = {isa = PBXBuildFile; fileRef = C8CA9938C1EE4A62573B1368E49EA00D /* SJMakeView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2E015C85C284BDBAF96919E773843C8 /* HTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 363731F9F2C1EDB0ECA0BBD390262543 /* HTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; E34D536EB38161183AC71F5403278288 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = DFAE7EA907B5EC2F8EF1C2E9C606E1AF /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; E3DD3D071356582DFD6C5AF15746E015 /* SJPrompt.m in Sources */ = {isa = PBXBuildFile; fileRef = E9247D82A285D17C5E84DB5567EAAA10 /* SJPrompt.m */; }; E3E2BD738E7E9A105525F691CE53FDBF /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E1D412E25BE974812A758A59A7BF52F /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3F9CB1080A5BEB6C85CA41A9C9517A0 /* FILEContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F505993A370DBC4DF0D2B3CCD44E92 /* FILEContent.m */; }; E41D39AC5425517F0BF4C01879A3F6E9 /* SJAVMediaPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5885E576469E20680AA181A7F13728B3 /* SJAVMediaPlayer.m */; }; E42A7D1C9E99A24203A295E85B978938 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = D0ECBA8B9BB6843FB30BF4366BBE79CC /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E478F3633EC209CA12F49FEC7BE3DBEB /* FILEContentReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C0AEF62744C94E695300AB630F0554D /* FILEContentReader.m */; }; - E4A61984F0151156B8107AE015A0390F /* HTTPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1B69501D726F6826239456C327DC2E /* HTTPLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E434A2C348EBB5B62B6CBBD6DF6F1188 /* SJPageMenuItemViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FFB58FEAC442BD1B52F4878E2F9185 /* SJPageMenuItemViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; E4CDCC5BE0BAFE754390671C732D11BD /* SJReachabilityDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = EC626684FF92E42BED29EE2D32FE7181 /* SJReachabilityDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; E51D30B8AB319E61C437334D13FC859F /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = B13DE0F0B98E6AFCC6A5145D25248382 /* SDWebImageOptionsProcessor.m */; }; + E55EA8AD2471C2D6E7E250A1F0F7EE53 /* HLSPrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F327FAF98D9D730DEF67249DD7B4EE41 /* HLSPrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5B1FC86162D86A9E70A83E6329ED597 /* FILEContent.h in Headers */ = {isa = PBXBuildFile; fileRef = E9010DC0EBC28E2E92A1466E1EE286D7 /* FILEContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; E5FACE689C41C9E53BA42690B5463269 /* SJVideoPlayerClipsDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B753BF6CF4DC76DE0451384BB3FBD3BB /* SJVideoPlayerClipsDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6467C5309A4AD57824781D21F4860B2 /* HLSReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B789CB5F9D1EB2D22C2A6997E33447F /* HLSReader.m */; }; + E61E2F3F54938AB96551F1E0FFF2EC2F /* MCSURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 62339D3A7AC5C616BE4B6653486379B6 /* MCSURL.h */; settings = {ATTRIBUTES = (Project, ); }; }; E6AD01F3482B5DC39109FDDC4FA258F5 /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B264095AC6308FD40ED46AD7DD86AA92 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; E6BC06A0D781801399209C6236874B01 /* SJPromptPopupControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EB6AB42AE8076256A5198C9C045F1B6 /* SJPromptPopupControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6C8180FC2A7761DE3618F11CA4C65B2 /* SJBaseTableViewHeaderFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC97EA8502F4D91E7E0B2A05C314802 /* SJBaseTableViewHeaderFooterView.m */; }; E6CEF9CA740FDADD8B31F861B8B60B8F /* SJDraggingProgressPopupView.h in Headers */ = {isa = PBXBuildFile; fileRef = D1D8A74AB5B7C8EEC5413809FBA48D2B /* SJDraggingProgressPopupView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6D05597E1C5D4804ACEBA0EF1DFB290 /* SJSQLite3ColumnOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 77B665CFCABD912507565073EBC03283 /* SJSQLite3ColumnOrder.h */; settings = {ATTRIBUTES = (Project, ); }; }; E7165ACE4E69370B6C21B814BE564B38 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 12A1D3EEEA8D8774A7B208771E4FC61B /* UIImage+MultiFormat.m */; }; E76935CFF4AF327F8D9A7C1935F7D900 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7D24C39827E613AE1CCD91193DC2D7 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E84CFA305EE137CAA4498402671F17C0 /* SJUIMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A80A1701FB6CC1E134D852559EB013 /* SJUIMaker.m */; }; + E8880E15ADBAE9699F8CF09C20115C2D /* SJBaseCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D7CEDCE8019A20C256340E18A9A8160 /* SJBaseCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; E89678023EB928D8162BFC0B1DCF31D3 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = B0D12F463B29A18EEC16349B4021FF05 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Project, ); }; }; E8BC0E3B26159ED4D6462E921A5A69D9 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D0456551714CE9704106BCCA851B7B5 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; E8C96FF99FC6A03A737CD3202588C7D5 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DCD696F4BD25BDE713F78ACCDC36A369 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E949E979FA69E99700E8DABFF90C4849 /* SJAttributeWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 4359BF2D87BE283838E4BF13001C4AEF /* SJAttributeWorker.m */; }; - E9710093249BB59FC7F1999BF12D6022 /* SJSQLite3+TableExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F309DB92B01629FC681001237F7401 /* SJSQLite3+TableExtended.m */; }; + E9E1E0C44A3CB4896F287091221CDDB1 /* UIScrollView+SJPageViewControllerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = D2628532207F79438ECB6B9AA118303D /* UIScrollView+SJPageViewControllerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA13105F2FD0E12A2C2338C067032CBE /* SJUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B7DFAA92FB109DFFF401573F58E1E9C /* SJUIKit-dummy.m */; }; EA53B89AAC16CE584E6F5DD11D500FC8 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 07E002D1568E58C3510AE83D8A39D8F4 /* SDImageCacheDefine.m */; }; + EACF0CE04EF763A017F22C5C2A1C973A /* FILEPrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = B13805173D17BC7EBCA901515DE0119D /* FILEPrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EAE6FE139525609AF768B4019EEDAE4B /* MCSDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AEB4C3BE7F0EBBF0C07B1F731886D07 /* MCSDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; }; EB0099221088FE86F5BF856D980B4285 /* SJClipsResultsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = B8489769A9EBE6E7918D0045718DEC1C /* SJClipsResultsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; EB3C6B367B0767780397D6363CD298B8 /* SJWatermarkView.h in Headers */ = {isa = PBXBuildFile; fileRef = 53BC6D51253D1F8B43121A51578472FA /* SJWatermarkView.h */; settings = {ATTRIBUTES = (Project, ); }; }; EB663E3E1EB4BB670DC29B77DB330135 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = CF26DB0BE7FE916DD3F0C8ADDFD1DD96 /* MASConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EBBCE4EB73E512B52FA72FEB87E870C5 /* SJPageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E00513488A372A052E53CB31548438D /* SJPageViewController.m */; }; - EC08EB5F8EBC2577E2E9C989E5BFE017 /* SJBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 31494D8248BBA62EAD891364344B84F0 /* SJBaseViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB735FDDED5892DF4F5C8F01F73238E2 /* SJPageViewControllerItemCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D086E58295391DCE6B005555C826E8DB /* SJPageViewControllerItemCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC357E611B3D5756D5863C4408BE6CE2 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 78B1F6499A19A0F6B637FD2ACEC402A5 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC8899958ADC0DAEE77D927070982BB3 /* SJStatusBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 19056F348AE77E882B106236B101C7AD /* SJStatusBarManager.m */; }; - ECA7D3D4379145FDD0525429B83536D8 /* HTTPLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 19FE46D77B35BD7EF270AF3AC820213B /* HTTPLogging.m */; }; - ECAD4D9319036C331EED11B8BAFFB7A7 /* SJSQLiteObjectInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 29FE9D0DBB6A04FA0B2AECA084279272 /* SJSQLiteObjectInfo.m */; }; + EC60E4F80876272AEB10A8300009B2DC /* SJUTRangeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 10A3C158125C46497339B40E572ABF69 /* SJUTRangeHandler.m */; }; ECC8FBDED94024250C00FBB3B40C9353 /* SJRouteHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 133141124D71A2721CD4A4EEAF332960 /* SJRouteHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECE74E827B7D6F1A43FBB6D886573DE3 /* HLSContentTs.h in Headers */ = {isa = PBXBuildFile; fileRef = AF237771A08885479A912433EAF0D757 /* HLSContentTs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED494A3399A197411D2A1D598C84580C /* HLSPrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EF8A71A4FAC3FAAAD5D32D16A842EC2 /* HLSPrefetcher.m */; }; + ED35B8F7B8D7C040EFF7B9AB26E18FE1 /* SJAttributeWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 06AA0406145E6565F44678FC0DF052F9 /* SJAttributeWorker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED7D3BEB451BEEC8D874EC385F3109E7 /* SJUIKitTextMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E1A37C387CCA71B5564B4F74F65B63 /* SJUIKitTextMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED90A05F19587A85539E0A49643A1C3B /* HLSReader.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D651C456E32E871618A7FD59B1873A /* HLSReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; EDCD926B479A4DD0BCFFFA5B36BE2460 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F038694D6AD0E64732715827614AAC4A /* SDImageIOAnimatedCoder.m */; }; EDF55FBB774F1ABA1020D2949C29E931 /* UIView+SJBaseVideoPlayerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C1B3A52A378C34AF6DCF6999B13048 /* UIView+SJBaseVideoPlayerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE764788DD9BB2A9E0A223A40651E1C0 /* MCSConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B91EE54C8BCC4BE048A6176CFF1A0E7 /* MCSConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE98C3D24E6E3D25262D621BB21F3B1A /* SJSQLiteTableModelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACB4F76A28ADED78817AD28003C6CD4 /* SJSQLiteTableModelProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; EF5491A4CB593F4B14C3A4CD72649405 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C29EB4B8F9D2483941F4BC88C91E19D /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; EF837D4C7316C4673141380DC13352B0 /* SJBaseVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 39AB1C5991B159BB93271BCCE27D4E71 /* SJBaseVideoPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F014F4080818E715E10860C7EE726448 /* HTTPDynamicFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A8321E22660F35BFC88CA35CCBD2C888 /* HTTPDynamicFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; F026D9C39DB59AD0F3F7F6F6371A22B7 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F39670FE093D0791986C5EB53FE83F42 /* SDImageAssetManager.m */; }; - F1069C9E82745EB2178845D3888C37C3 /* NSObject+SJObserverHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D6EE5C0D98C5C8BFF6E6E6AED2F6A883 /* NSObject+SJObserverHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F120852F5DB027320E8DB36D8BFDBAE7 /* SJUIKitTextMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 96EB595C5EB691EA5BC42686217AA9E5 /* SJUIKitTextMaker.m */; }; + F131A88E10BB20F6C3521BA8621076FC /* SJUIKitAttributesDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B3B06EB33B6F1FA3154142F0A2E91883 /* SJUIKitAttributesDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; F1452646310B7DF8D987010249536E76 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ECAD2B98711BD2B71223B2BB69ADA90B /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; F1AD535E49AC4E77FEA30208554EDB69 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 920830A787125FA125764B1556E51E0F /* SDWebImageTransition.m */; }; F1B75048874B8773E5568E6D3ACA12E4 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C93BB319407EA74E5D8D868FABE3E2E0 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; F1DD207E3FDE8FD41F4E8FAD4A840C13 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2E37483EACF0E1BD095A93208365F7 /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F2E4915C12DDBB7419B0B2E9F5569A65 /* FILEContentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = A136BCD3A068F580B62D55D027794BF4 /* FILEContentProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F2A68AB9AAC2F3BDC3C68030D6B00941 /* HLSContentTSReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 95ED015B322BBDB7D67CDFBA0BF298F0 /* HLSContentTSReader.m */; }; F3070AF05843BA153507103098BE1C5D /* SJVideoPlayerPresentViewDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = EDC7C80AF103EDC20D07E68295A075AC /* SJVideoPlayerPresentViewDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F38C57B1AFE7E3736CEB056C42C18D82 /* MCSDownload.m in Sources */ = {isa = PBXBuildFile; fileRef = 2226F1A474B635F87E46DA416D35D431 /* MCSDownload.m */; }; + F315EB8863B0E9B903B45727D6518BB6 /* WebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD321438A32DB32AE2E43C8618DD71C /* WebSocket.m */; }; + F39798CC9E716DEB248755B7ADAF16E6 /* HLSAsset.h in Headers */ = {isa = PBXBuildFile; fileRef = 096D683D9C5ECAD22938774807EFF5FD /* HLSAsset.h */; settings = {ATTRIBUTES = (Project, ); }; }; F3C1F7F0CB3B466A65876F39EBDBFC65 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E346E9ECDB14F2E370D1EABF83209F3C /* SDImageGIFCoder.m */; }; + F3F94A1E2EFFA7395D28CABD7CCF91EE /* HLSContentIndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B77FE2643EDD8D73346D36A50B4BD42B /* HLSContentIndexReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F4E4FCE83BEEF464365D3133097BC6BC /* MCSContents.m in Sources */ = {isa = PBXBuildFile; fileRef = 445E2D6FDF04E3417C9756FFF43DD4D9 /* MCSContents.m */; }; + F63F6303778FA20AD6EDEC1629DB7692 /* HTTPAuthenticationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A52754245B9F4E35EF6900A31D2326DE /* HTTPAuthenticationRequest.m */; }; F6519E3D917A91B15963007AFE9016F3 /* SJBarrageItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AD2F782DE52727C7D8D684F74EE90D48 /* SJBarrageItem.m */; }; F6541A2BAA913272621A7CB6C823B035 /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E1FC0F099D60C3F36496125786F4DE /* SDImageHEICCoder.m */; }; F65C37D0DCE09B42EB816A24B9F73055 /* SJRouteInterceptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 94FFED8EA4A216BECB87F0347417C562 /* SJRouteInterceptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; F6648F78B8266D92956FAA93674EA402 /* SJBaseVideoPlayerResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 31CD93B8281091DC835EA6AAECE660E7 /* SJBaseVideoPlayerResourceLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6A0EFD1828AA219008455FBE23C15DD /* SJCornerMask.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC255AB79A2DC0962D62443A6B9635B /* SJCornerMask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6A1ABE2F9BFAD749A4A262166D74EEA /* DDRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E74DC5A673A7D70DFAE67373154CC88 /* DDRange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F68F8195F92381DF4E4BE8FF17A1C397 /* SJAppearStateObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 77DF4339C22F7CBFDCA575FA47547783 /* SJAppearStateObserver.m */; }; + F738E8B62303D199D5474896CB32A859 /* HLSContentAESKeyReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E72CC09C8918A97CF46419DD35A2708 /* HLSContentAESKeyReader.m */; }; F787C7CE9415326BB769046A6370AFC7 /* SJPlaybackHistoryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF1470EF3DE09F272EF3A892D0AE4D6 /* SJPlaybackHistoryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7D2D28190305A2F697596B53AD3D249 /* MCSAssetUsageLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A3A0F4E14153513092C8DD27C92BB6F /* MCSAssetUsageLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; F82CF4572FCCA28ECEE676EABA1BAAF3 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A93BBB9A90002A59D0A288DF6AA042F /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F89A90AC79815A6F3532A70F701F07EF /* UIScrollView+SJPageViewControllerExtended.h in Headers */ = {isa = PBXBuildFile; fileRef = D2628532207F79438ECB6B9AA118303D /* UIScrollView+SJPageViewControllerExtended.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F8AE5D3E93C9E95E2971A1A7A7D796D2 /* UITextField+AsyncLoadImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2317279B1C7C6CDF54B89FF6B397949D /* UITextField+AsyncLoadImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; F92BB0328A9C33863DADFD14B0DBBD90 /* SJClipsGIFRecordsControlLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DDCA9C09DA65845ACB1BE42BCA013EC /* SJClipsGIFRecordsControlLayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F958693E19CA5721F22A7FD7275993FD /* MCSURL.h in Headers */ = {isa = PBXBuildFile; fileRef = FE6B5DA77A84020C0382F08B54C6F686 /* MCSURL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9E7597177A3CA2A1EC9C061EDECFFB1 /* SJStatusBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DF58205FA20AB6D8C3F298368AF0A36 /* SJStatusBarManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9EE45E738AE7A0C500524C19F9B2A8D /* SJImagePickerController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C066CE4EF356EF6484A313939E67E2C /* SJImagePickerController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9D7205C29CE19300D4AB9D4014BD276 /* YYClassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CE96864DBDE56BD8C22859C71CB60E /* YYClassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA066D2B0CECD5D03FDA7EE6CBC45185 /* HLSAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = D16EBF331B8382E1A3CABC897FE59E17 /* HLSAsset.m */; }; FA4347EF4A800F16CE57D834D4859D8D /* CocoaAsyncSocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 35E70A6011FB1C3E7D09EB566E0F1B96 /* CocoaAsyncSocket-dummy.m */; }; FA7DFB408F4A73B37749C8A3D730F903 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2869644BC221888BB42A0DF7FFE50DE5 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FB183B6F9114FC8AC8767E9D79A70685 /* UILabel+AsyncLoad.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E742039877DCE5137E5E2AB8E12B95 /* UILabel+AsyncLoad.m */; }; FB3CA83767E075F24E193639316E7C97 /* SJVideoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 655EB80F8612533701711086FD8879FD /* SJVideoPlayer-dummy.m */; }; + FB8776D4CD1789DCE6F3F8F36B1ADA13 /* MCSAssetUsageLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F2DCDF678CD480DAA83F966D674BD65 /* MCSAssetUsageLog.m */; }; + FB88CF2DA19E1F4CA22F2C699E1F4E55 /* SJSQLite3Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 90296676CEDE1B5D282B6CD8168FD48A /* SJSQLite3Logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; FBCBC855C2BC31EE3B180627DF0E51E2 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BB86B476225A4EC9F7FEDD67788A88 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBDE3BCF1D4D9A69AB4915E3A05E23E2 /* MCSPrefetcherManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A9348ACA2645480CF86CF5C00EC14854 /* MCSPrefetcherManager.m */; }; FC20711B235BDA0FFA8061FDD98FCA23 /* SJPlaybackHistoryControllerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 917922FDAA993F14C6AEDCC19CD701BF /* SJPlaybackHistoryControllerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC5796F8A40E1D192B8E89A878FF97C6 /* SJPageMenuItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = DC06EEF43B1B262F1A4E6BD2E586BA72 /* SJPageMenuItemView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC539E9A584BFBD13D055DF4CC48ABA2 /* SJStatusBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DF58205FA20AB6D8C3F298368AF0A36 /* SJStatusBarManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; FCC25A540DF0CA820C1CCC7FFBE456FD /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 04FFABEF632FA70A9166DAA9E190E86C /* SDAnimatedImageRep.m */; }; FCF253E2655BA662E2E7165507EBE991 /* SJVideoPlayerURLAsset+SJExtendedDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AEF2C9E0B79C0E6E06156DF579C280E /* SJVideoPlayerURLAsset+SJExtendedDefinition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD31EC03FF8E06B4DC7D34F0F6318E76 /* MCSQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = B8E0324FF0D7057609B98019A9BD7719 /* MCSQueue.m */; }; - FD3633983112AAA9E4E21DB1EACB9628 /* HTTPRedirectResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 867AD1F7E43278E7C9EBA82C77952C5B /* HTTPRedirectResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD3AD78754CC32CD925E8B2E7AA226E4 /* SJBaseCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C53AAEF001D29B559B6EEC72C8D94DBF /* SJBaseCollectionViewCell.m */; }; - FEE20E400C397AFA5C9E47602A99B15A /* SJAttributesRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 54004C318658DD320E279E0141730D1F /* SJAttributesRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD96DC348C9B0024526EDCF6842ED058 /* SJQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D30FB2B33C854CB8ACCB6CED9707CD0D /* SJQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDE4101CDB7EE291908CE9BAC943C6E2 /* SJPageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E00513488A372A052E53CB31548438D /* SJPageViewController.m */; }; + FF05DFF3DF5574D566DF0639EA1EBDB9 /* FILEReader.m in Sources */ = {isa = PBXBuildFile; fileRef = A5D09541C6504C8E13BF08E2A5E75A26 /* FILEReader.m */; }; FF11E0C124CF8A5746A290FD943CCF50 /* CALayer+SJBaseVideoPlayerExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 0829BFC5D26BEC231921E0521432AF0C /* CALayer+SJBaseVideoPlayerExtended.m */; }; FF358CA7E36624D6C86B3E99EEA9716C /* SJFullscreenPopGesture.h in Headers */ = {isa = PBXBuildFile; fileRef = A100709491C4C6B1A2BFEAF334EFF536 /* SJFullscreenPopGesture.h */; settings = {ATTRIBUTES = (Project, ); }; }; FF65A995815B27B85B6130DEA209B841 /* SJClipsBackButton.m in Sources */ = {isa = PBXBuildFile; fileRef = EF2DC28D1F5573261D4950B2553438D1 /* SJClipsBackButton.m */; }; FF9BB3332CFE9DF67CD71E40239ED598 /* SJFloatSmallViewControlLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EC83466EFA0C91DF95DCED987EA3EF /* SJFloatSmallViewControlLayer.m */; }; + FFB299017AC71596F6C0474DDC85574E /* SJSQLite3+QueryExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = AF5E422442CEEB48A9603D0F5DBADA95 /* SJSQLite3+QueryExtended.m */; }; FFCC88EC5685A96EF031417DC2C4CE89 /* SJViewControllerManagerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = E02467CE752951B8FB5192A23A2C947F /* SJViewControllerManagerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FFEAB052869B53D2C79C0ADA84AA9A81 /* SJBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6040909778E41079B4FF16E867495637 /* SJBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0C60C54BEA404FC0B9A7731388150906 /* PBXContainerItemProxy */ = { + 00BF988DCFCEB05BB2FFA5937C5F511D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A19FC1B5D5F291312B4944B9B7DBF0A0; - remoteInfo = SJFullscreenPopGesture; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; }; - 259F36A1556860D1E9286B15C9BBD6DC /* PBXContainerItemProxy */ = { + 0FD6FFA4230602127E34426B4F496E4B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; remoteInfo = MJRefresh; }; - 2C13E2174D6D0083FEAE6F51E67A5E9C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; - remoteInfo = SJUIKit; - }; - 2E221229AF2444348DD8414800E99230 /* PBXContainerItemProxy */ = { + 102CF63D1527996153FACA2901E9FDDD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; - remoteInfo = CocoaAsyncSocket; + remoteGlobalIDString = 84B44807A12996D487A4A591A481D6A0; + remoteInfo = YYModel; }; - 313EDAB71557A5985A60B0A276D5A8C7 /* PBXContainerItemProxy */ = { + 547C1BA7E583BDBB1446FE8D4F4EAA7F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; }; - 31691EE8241F52E1D10868B3C6E74435 /* PBXContainerItemProxy */ = { + 6CFEF4854BB540AE0E9E096D29A6B82B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; - remoteInfo = SJUIKit; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; }; - 3A0649F935A045F0A0EB9E5432E47F1B /* PBXContainerItemProxy */ = { + 75B28AF2644CD7C15DD5DB1BD580204C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 53EA424E9D34B39228682599B5DABD60; - remoteInfo = SJMediaCacheServer; + remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; + remoteInfo = CocoaAsyncSocket; }; - 466AC56D689AD92EBDDDDA76EE187632 /* PBXContainerItemProxy */ = { + 76BAA2A1EDAA936F962846E9599DC042 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 6E1E1EC205B84668230348082E3FD9A8; remoteInfo = SJPlaybackListController; }; - 4D8313D6C6FABC08B25D91814FEEAD91 /* PBXContainerItemProxy */ = { + 821F4789AED2002FD8A049EC4E41C762 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 84B44807A12996D487A4A591A481D6A0; - remoteInfo = YYModel; + remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; + remoteInfo = CocoaAsyncSocket; }; - 5128337D40FD547914D8A63E3EAC07FF /* PBXContainerItemProxy */ = { + 9A6D805164372CF4F33F321102F245BE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 76A445C38D13436849B0EAD21F555034; remoteInfo = SJBaseVideoPlayer; }; - 69E2342C47336F88B0299404AA4C766D /* PBXContainerItemProxy */ = { + 9AA4819493AFC1F9F032887FD0F6053B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; - remoteInfo = CocoaAsyncSocket; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; }; - 6FB23DBC005CD3882EC31E3B815F7684 /* PBXContainerItemProxy */ = { + AB9053FEFC9CF5604CA3F1469C668098 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 84B44807A12996D487A4A591A481D6A0; remoteInfo = YYModel; }; - 8864AB995366EEA48D4C2CD08AE743ED /* PBXContainerItemProxy */ = { + AE828F2E82119419B239BAE01E0E48CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 76A445C38D13436849B0EAD21F555034; - remoteInfo = SJBaseVideoPlayer; + remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; + remoteInfo = SJUIKit; + }; + B0A25DCF9ED2E82CF0F3564230DA604A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A19FC1B5D5F291312B4944B9B7DBF0A0; + remoteInfo = SJFullscreenPopGesture; }; - 9502DCBFBB1ED919AD0FC01366C242F1 /* PBXContainerItemProxy */ = { + B187579CF12664772E89A3D38A21FDD8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 9D30A64C17E5B9AF4D9239A2C2A7630F; remoteInfo = SJVideoPlayer; }; - ACA414A26584CBC56B2B8A30EBC18D5F /* PBXContainerItemProxy */ = { + B529AB7FC2B19BBE42E7B368B4BA2DCA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = AC7ED7554C07C41E51C8BD5248179FED; remoteInfo = SJRouter; }; - AE7DA911A7A8D4B4B4A48747779CDCBC /* PBXContainerItemProxy */ = { + BFB5B8D02D63CB6FBFA40B95C58848DC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; remoteInfo = MJRefresh; }; - B1758BF6EEB6192CA49B1D95E92E494A /* PBXContainerItemProxy */ = { + E0FA809781E6F2BC12A8DADA1153BEAB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; + remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; + remoteInfo = SJUIKit; }; - B3C4B9CF03F099A793327DDC308AD6FA /* PBXContainerItemProxy */ = { + E6B5F7037867A1AFD0ECBC793F48B2BC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; remoteInfo = SJUIKit; }; - B556A3B7DB78158718C5CE21203AED21 /* PBXContainerItemProxy */ = { + EE09B0C4237B8310C68949195DF0D219 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; + remoteGlobalIDString = 76A445C38D13436849B0EAD21F555034; + remoteInfo = SJBaseVideoPlayer; }; - DC2A527AFFAD90AA265A68A83CA86677 /* PBXContainerItemProxy */ = { + F1329A2AA0E0CA26F815761216FD7CF5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; + remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; + remoteInfo = SJUIKit; }; - E7A4398FC7BF0286B54953732E999BD0 /* PBXContainerItemProxy */ = { + FE7E1AF4533581C20B40CDA39A526CEB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 66EF777DAC384165A40F94DC7D0BD98F; - remoteInfo = SJUIKit; + remoteGlobalIDString = 53EA424E9D34B39228682599B5DABD60; + remoteInfo = SJMediaCacheServer; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 007AEE4FE7A09C1EFC186CBF5584B996 /* MCSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSLogger.h; path = SJMediaCacheServer/Core/Common/MCSLogger.h; sourceTree = ""; }; 008EA90CDCAE688871B4733A0244793F /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; 00F27974970189691B3C43BEDF4C2C4B /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; 01F0C4B945527100A6362C7D0E2F0BEE /* SJTimerControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJTimerControl.h; path = SJBaseVideoPlayer/Common/Utils/SJTimerControl.h; sourceTree = ""; }; 0216349DA94DD392289ED80DFF314E4F /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; - 02303DF9ED29892E51880AD279D818A9 /* FILEContentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEContentProvider.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.m; sourceTree = ""; }; - 02E8A1EF6873BBB376FD256D8A0DC43C /* FILEPrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEPrefetcher.m; path = SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.m; sourceTree = ""; }; 03A46DE5872DF2D38F6A53409AC27709 /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; 03E75095428DC90A5F93512F51A64794 /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; 03FDFAAD7FAA5F4CCAB5D006DD45220A /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; 0444116F11EF9930E9DB4CFB2814A987 /* SJLoadFailedControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJLoadFailedControlLayer.m; sourceTree = ""; }; - 045D5580B8180397C4FFC27C2DBA873D /* HTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPResponse.h; sourceTree = ""; }; - 04EEB1F95F8A934BC175E59FE8374C1F /* HLSReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSReader.h; sourceTree = ""; }; 04FFABEF632FA70A9166DAA9E190E86C /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; 057B753E8E2DF7F994D3744A244A1690 /* SJAVMediaPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAVMediaPlayer.h; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayer.h; sourceTree = ""; }; + 06671E99E91AAEEEC9169A091A816D5E /* HTTPMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPMessage.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPMessage.h; sourceTree = ""; }; 06996B686544F997E8FEFDDA33A29908 /* SJSQLite3ColumnOrder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLite3ColumnOrder.m; path = SJUIKit/SQLite3/Core/SJSQLite3ColumnOrder.m; sourceTree = ""; }; 06A55959E7E0F59636A075D98513100F /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; 06AA0406145E6565F44678FC0DF052F9 /* SJAttributeWorker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAttributeWorker.h; path = SJUIKit/AttributesFactory/Deprecated/SJAttributeWorker.h; sourceTree = ""; }; @@ -902,17 +907,22 @@ 082791AA847570FBE5B10E6AC0838DCC /* SJSQLiteTableInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLiteTableInfo.m; path = SJUIKit/SQLite3/Core/SJSQLiteTableInfo.m; sourceTree = ""; }; 0829BFC5D26BEC231921E0521432AF0C /* CALayer+SJBaseVideoPlayerExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+SJBaseVideoPlayerExtended.m"; path = "SJBaseVideoPlayer/Common/UIKit/CALayer+SJBaseVideoPlayerExtended.m"; sourceTree = ""; }; 088C8390284A58E6B6E74503916F8433 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; + 096D683D9C5ECAD22938774807EFF5FD /* HLSAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSAsset.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSAsset.h; sourceTree = ""; }; + 09B2DD5F36D5909AE3AC289038082D64 /* HTTPAsyncFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPAsyncFileResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPAsyncFileResponse.h; sourceTree = ""; }; 09EA1795A25EFDF3F2202C25D5FEEFAD /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; 09FAD31258382D3E1171F30A6A61D033 /* Pods-SJVideoPlayer_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SJVideoPlayer_Example.release.xcconfig"; sourceTree = ""; }; 0A701663F01E007593239F50B2EAF7F2 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; 0A8908C6E23E90F0D816F1A92916F7D9 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; 0B3F3A108DD19193180951AD8DB751E2 /* SJSubtitlesPromptControllerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSubtitlesPromptControllerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJSubtitlesPromptControllerDefines.h; sourceTree = ""; }; 0B657355DA2F436027108B536FEFF29B /* SJBaseVideoPlayerResources.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SJBaseVideoPlayerResources.bundle; path = SJBaseVideoPlayer/ResourceLoader/SJBaseVideoPlayerResources.bundle; sourceTree = ""; }; + 0B91EE54C8BCC4BE048A6176CFF1A0E7 /* MCSConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSConfiguration.h; path = SJMediaCacheServer/Core/Asset/MCSConfiguration.h; sourceTree = ""; }; 0BB24AC95D8FBA82C5F6929E521ADBCD /* NSTimer+SJAssetAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTimer+SJAssetAdd.h"; path = "SJBaseVideoPlayer/Common/Foundation/NSTimer+SJAssetAdd.h"; sourceTree = ""; }; 0BC721668923A846C92C19133EF9E263 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; 0C066CE4EF356EF6484A313939E67E2C /* SJImagePickerController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJImagePickerController.h; path = SJUIKit/Photo/SJImagePickerController.h; sourceTree = ""; }; - 0C0AEF62744C94E695300AB630F0554D /* FILEContentReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEContentReader.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.m; sourceTree = ""; }; + 0C146B0E4F8E5EA6E532BC5051846B35 /* MCSInterfaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSInterfaces.h; path = SJMediaCacheServer/Core/Common/MCSInterfaces.h; sourceTree = ""; }; + 0D811109AEA8D5E409875C2D398193EC /* MCSUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSUtils.h; path = SJMediaCacheServer/Core/Common/MCSUtils.h; sourceTree = ""; }; 0DB7391EC51AF2334476BCFFDC18B5FC /* SJBaseViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseViewController.m; path = SJUIKit/Base/SJBaseViewController.m; sourceTree = ""; }; + 0DD321438A32DB32AE2E43C8618DD71C /* WebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WebSocket.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/WebSocket.m; sourceTree = ""; }; 0E14ED72F554BB4F9C094A079F3809CF /* SJVideoPlayerClipsParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerClipsParameters.m; sourceTree = ""; }; 0E2B3B2AF6366ECD0F0EF26DA166FCBA /* YYModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYModel.h; path = YYModel/YYModel.h; sourceTree = ""; }; 0FBDE81A7E8FC8C9BA9699203BACDED1 /* UIViewController+SJBaseVideoPlayerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+SJBaseVideoPlayerExtended.h"; path = "SJBaseVideoPlayer/Common/UIKit/UIViewController+SJBaseVideoPlayerExtended.h"; sourceTree = ""; }; @@ -922,37 +932,38 @@ 1189BD4406A4759D47C6954327BDD207 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; 1195E56F4B8F64111EFD5F819A206EC6 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; 11F5C1C1D209E0978F434B46A288BA37 /* SJClipsResultShareItemsContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsResultShareItemsContainerView.h; sourceTree = ""; }; - 1218A47DBBE16801D12A0E753479C60B /* DDRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDRange.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDRange.m; sourceTree = ""; }; 126C0D741C4F5D93F9934A910B8AAD23 /* SJVideoPlayerURLAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerURLAsset.m; path = SJBaseVideoPlayer/Common/Implements/SJVideoPlayerURLAsset.m; sourceTree = ""; }; 12861D4CFB626041A9297BDE6AA375F9 /* SJFullscreenModeStatusBarDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJFullscreenModeStatusBarDefines.h; sourceTree = ""; }; 12A1D3EEEA8D8774A7B208771E4FC61B /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; 133141124D71A2721CD4A4EEAF332960 /* SJRouteHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRouteHandler.h; path = SJRouter/Core/SJRouteHandler.h; sourceTree = ""; }; + 13518208C571795FE254B57D470596AA /* MCSProxyServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSProxyServer.h; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyServer.h; sourceTree = ""; }; 135C874DC031F6E61FA0EBCF3A553FF9 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; 1402969A5DB0D4D68B98E7623D215C41 /* SJSQLite3+RemoveExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJSQLite3+RemoveExtended.m"; path = "SJUIKit/SQLite3/SJSQLite3+RemoveExtended.m"; sourceTree = ""; }; - 140C2E808885EB495D0494BC622B28A8 /* KTVCocoaHTTPServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KTVCocoaHTTPServer.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/KTVCocoaHTTPServer.h; sourceTree = ""; }; 1476D614C0C8E67355B7800DFEA4E2EB /* SJSQLite3Condition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLite3Condition.h; path = SJUIKit/SQLite3/Core/SJSQLite3Condition.h; sourceTree = ""; }; + 14979D29234F4AE56F74C5F30CAD3E62 /* SJMediaCacheServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJMediaCacheServer-prefix.pch"; sourceTree = ""; }; 15D3BE37123A34A1920BF68EB88FEFF7 /* NSObject+SJAsyncLoad.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+SJAsyncLoad.h"; path = "SJUIKit/AsyncLoad/NSObject+SJAsyncLoad.h"; sourceTree = ""; }; 15DAEBB9A4FAE807C8656A8EAEF3EF44 /* SJAttributesRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAttributesRecorder.m; path = SJUIKit/AttributesFactory/Deprecated/SJAttributesRecorder.m; sourceTree = ""; }; 15E9F5EC2C7B52993754F937AE0BCE7C /* SJPlaybackHistoryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackHistoryController.m; path = SJBaseVideoPlayer/Common/Implements/SJPlaybackHistoryController.m; sourceTree = ""; }; 162B6C345733CB1A57823F7D0BB85A0A /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; 172C74F8DCF1FD8AF38BBB8C7F941C73 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; - 1751EBD13DBA77E60C4CC412CB14BA88 /* HTTPDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPDataResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDataResponse.h; sourceTree = ""; }; - 17C35B707038771C7773B679E182BA97 /* DDNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDNumber.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDNumber.h; sourceTree = ""; }; + 172CE0C57C9A138B843F150EA4B34370 /* MultipartMessageHeaderField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartMessageHeaderField.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeaderField.h; sourceTree = ""; }; 17D6ED4E1F2F7C74ECD93F3A2FE51002 /* SJFullscreenPopGesture-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJFullscreenPopGesture-dummy.m"; sourceTree = ""; }; 1800D7BBB22B887D621FC7838C07E978 /* SJVideoPlayerURLAsset+SJSubtitlesAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJVideoPlayerURLAsset+SJSubtitlesAdd.m"; path = "SJBaseVideoPlayer/Common/Implements/SJVideoPlayerURLAsset+SJSubtitlesAdd.m"; sourceTree = ""; }; 18AF14DC9F4780968B5A77143106B8B2 /* SJDraggingObservation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJDraggingObservation.h; sourceTree = ""; }; 18BA579FF6E80F4C4356FF76B6D90530 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; 19056F348AE77E882B106236B101C7AD /* SJStatusBarManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJStatusBarManager.m; path = SJUIKit/Base/Core/SJStatusBarManager.m; sourceTree = ""; }; 19524FEE891C6FAF5F55CA4E3AE22807 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 195D8C84619E5928D2843CBCC168B831 /* HLSContentTs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentTs.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTs.m; sourceTree = ""; }; 19C23103531AF95EB428D7D58B4234B7 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; - 19FE46D77B35BD7EF270AF3AC820213B /* HTTPLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPLogging.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPLogging.m; sourceTree = ""; }; 1A12225EFAF3DB48DA5CB9E41C1B3EAA /* SJRouteObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRouteObject.h; path = SJRouter/Core/SJRouteObject.h; sourceTree = ""; }; + 1A3A0F4E14153513092C8DD27C92BB6F /* MCSAssetUsageLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetUsageLog.h; path = SJMediaCacheServer/Core/Asset/MCSAssetUsageLog.h; sourceTree = ""; }; 1AC07D35EEE7B113C647489113B845E5 /* SJClipsResultsControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsResultsControlLayer.m; sourceTree = ""; }; 1ACB4F76A28ADED78817AD28003C6CD4 /* SJSQLiteTableModelProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLiteTableModelProtocol.h; path = SJUIKit/SQLite3/Protocol/SJSQLiteTableModelProtocol.h; sourceTree = ""; }; 1B2BF4E947FD69CC70B2C62C81F1E992 /* SJAVMediaPlaybackController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAVMediaPlaybackController.h; path = SJBaseVideoPlayer/AVPlayer/SJAVMediaPlaybackController.h; sourceTree = ""; }; - 1B789CB5F9D1EB2D22C2A6997E33447F /* HLSReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSReader.m; sourceTree = ""; }; + 1B92BE1A0B48CF7F882CF5C89855AF7F /* HTTPRedirectResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPRedirectResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPRedirectResponse.h; sourceTree = ""; }; 1C6E38B4041E1CD36341D9A5D4BE9732 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; 1C713CCD92E253C2633DE67F21BF7BC8 /* SJSQLiteCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLiteCore.h; path = SJUIKit/SQLite3/Core/SJSQLiteCore.h; sourceTree = ""; }; + 1C9B35D7FF2CF10C0367D7BA3B343EAE /* HTTPConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPConnection.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPConnection.m; sourceTree = ""; }; 1CC6ED43D07E096108F51E91470ED468 /* SJBaseVideoPlayerResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseVideoPlayerResourceLoader.m; path = SJBaseVideoPlayer/ResourceLoader/SJBaseVideoPlayerResourceLoader.m; sourceTree = ""; }; 1CD577881F8542C081B8718D7309267E /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; 1D3A77CF2A4618DF7BFD3395E40D1E9D /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; @@ -962,22 +973,23 @@ 1E0CAF51C45F539E737B4CBB988D357A /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; 1E9A9C22E03571208664EA009CF0CB2B /* SJEdgeControlButtonItemView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlButtonItemView.h; sourceTree = ""; }; 1F20257538C346CFED20D84E16647712 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; - 1F2B193952635F5D14C15D97F0F69F55 /* MCSUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSUtils.h; path = SJMediaCacheServer/Core/Common/MCSUtils.h; sourceTree = ""; }; 1F61ED498444FFB7311AA55C26CE51AE /* SJRouter-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJRouter-prefix.pch"; sourceTree = ""; }; 1F7F29E24AF32983D2B40821541E8043 /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; + 1FCFD91DA388D7BC10819DFCA4230E91 /* HTTPServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPServer.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPServer.m; sourceTree = ""; }; 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMasonry.a; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2015914B9E8B1C8BC041942C41936829 /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; + 201FF7378324AA46C617BC66A5250902 /* SJMediaCacheServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJMediaCacheServer.h; path = SJMediaCacheServer/SJMediaCacheServer.h; sourceTree = ""; }; 20436208DA601A6215F809D0708CE68F /* SJSpeedupPlaybackPopupView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJSpeedupPlaybackPopupView.m; sourceTree = ""; }; 20E742039877DCE5137E5E2AB8E12B95 /* UILabel+AsyncLoad.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+AsyncLoad.m"; path = "SJUIKit/AsyncLoad/UILabel+AsyncLoad.m"; sourceTree = ""; }; 2133955C82018D05EE6F895C0A92FB62 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; 21B36C58B63F486BEB91CAFE492C84F8 /* libSJUIKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJUIKit.a; path = libSJUIKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2226F1A474B635F87E46DA416D35D431 /* MCSDownload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSDownload.m; path = SJMediaCacheServer/Core/Download/MCSDownload.m; sourceTree = ""; }; 227661B08BCB5E690EA4816BF3024F9A /* SJVideoPlayerPresentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerPresentView.h; path = SJBaseVideoPlayer/Common/Implements/SJVideoPlayerPresentView.h; sourceTree = ""; }; 227E3E3368AB4D1625D1609E4E299341 /* SJBarrageQueueController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBarrageQueueController.m; path = SJBaseVideoPlayer/Common/Implements/SJBarrageQueueController.m; sourceTree = ""; }; 22C1BBF430E0B1A8D6FD28DF1E81F4C7 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; 22EB1A5A142EDF56BFE8B9432473225F /* SJDeviceVolumeAndBrightnessManagerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJDeviceVolumeAndBrightnessManagerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJDeviceVolumeAndBrightnessManagerDefines.h; sourceTree = ""; }; 22EF21C75E83D73EE80B1906A5EC4C02 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; 2317279B1C7C6CDF54B89FF6B397949D /* UITextField+AsyncLoadImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+AsyncLoadImage.h"; path = "SJUIKit/AsyncLoad/UITextField+AsyncLoadImage.h"; sourceTree = ""; }; + 2339F99F0A8D4BD43BA4F3D7E5EBA0DD /* HTTPRedirectResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPRedirectResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPRedirectResponse.m; sourceTree = ""; }; 233AFFD54A01A5072D0DBB70D67C3503 /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; 240A964012D19692836CC15C262FD79E /* SJPageCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPageCollectionView.h; path = SJUIKit/PageViewController/PageViewController/Core/SJPageCollectionView.h; sourceTree = ""; }; 24A21AAA22F0093BCE584238FF85B095 /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; @@ -991,17 +1003,17 @@ 26D6788B83F99BD7E6F0CF03C40AB7A5 /* SJCommonProgressSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJCommonProgressSlider.m; sourceTree = ""; }; 2771129AF8E2B014E9E1D7E3B25DA676 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; 2795E14AA2C1EE572265D1837213CFB2 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; + 27A8DA400422C036D88E9DEB69815B31 /* MCSPrefetcherDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSPrefetcherDefines.h; path = SJMediaCacheServer/Core/Prefetch/MCSPrefetcherDefines.h; sourceTree = ""; }; 27DF1275440FBD974063E3977CE6F92A /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; 285EF96F1163B669364D8A69D3359BCF /* SJPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlayerView.h; path = SJBaseVideoPlayer/Common/Implements/SJPlayerView.h; sourceTree = ""; }; 2869644BC221888BB42A0DF7FFE50DE5 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; - 28AB8D92B7467FD545CC485C6CA9E4E7 /* MCSResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSResponse.m; path = SJMediaCacheServer/Core/ProxyServer/MCSResponse.m; sourceTree = ""; }; 28CE96864DBDE56BD8C22859C71CB60E /* YYClassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYClassInfo.h; path = YYModel/YYClassInfo.h; sourceTree = ""; }; 2900353463EB7194CB94E05EC1735011 /* SJFullscreenPopGesture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJFullscreenPopGesture.m; path = SJFullscreenPopGesture/ObjC/SJFullscreenPopGesture.m; sourceTree = ""; }; 29E372FB801858BD2F30F99A56970118 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; + 29F505993A370DBC4DF0D2B3CCD44E92 /* FILEContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEContent.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEContent.m; sourceTree = ""; }; 29FE9D0DBB6A04FA0B2AECA084279272 /* SJSQLiteObjectInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLiteObjectInfo.m; path = SJUIKit/SQLite3/Core/SJSQLiteObjectInfo.m; sourceTree = ""; }; - 2AA896164496F72445805CCC88E6EC44 /* HLSContentTSReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentTSReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.m; sourceTree = ""; }; 2B214A0EFD41486DA5F2D75C4DB97B10 /* UIViewController+SJRotationPrivate_FixSafeArea.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+SJRotationPrivate_FixSafeArea.h"; path = "SJBaseVideoPlayer/UIViewController+SJRotationPrivate_FixSafeArea.h"; sourceTree = ""; }; - 2BF1D57415E9AC8567C00D99E52837EB /* MCSAssetFileRead.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetFileRead.m; path = SJMediaCacheServer/Core/Asset/MCSAssetFileRead.m; sourceTree = ""; }; + 2B3CD619EBB822FE3B724426A62CF7CF /* DDData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDData.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDData.m; sourceTree = ""; }; 2C7F622F9BA7D562E9C0CC263979662A /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; 2CE31CE6D8A2AD545B61CD57E68B8D51 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; 2D0E82D4FDBF4F7E6F60B0132DC2A3AD /* SJPromptDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPromptDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJPromptDefines.h; sourceTree = ""; }; @@ -1009,16 +1021,18 @@ 2D21A7C30AB67CCF1160AA23A2A10ADB /* SJEdgeControlButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlButtonItem.h; sourceTree = ""; }; 2D7CEDCE8019A20C256340E18A9A8160 /* SJBaseCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseCollectionViewCell.h; path = SJUIKit/Base/SJBaseCollectionViewCell.h; sourceTree = ""; }; 2DDB17F488DFC67FD8EABFE57E25EE77 /* YYClassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYClassInfo.m; path = YYModel/YYClassInfo.m; sourceTree = ""; }; + 2E4ED60D5BBB337A3B8ECC0A48902EF5 /* HLSPrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSPrefetcher.m; path = SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.m; sourceTree = ""; }; + 2E66A90AFDB0D9F22881C649EBCD5630 /* MCSDownload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSDownload.m; path = SJMediaCacheServer/Core/Download/MCSDownload.m; sourceTree = ""; }; 2E8105A6EDE60943B4EC67A61641DB88 /* SJSQLite3+TableExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJSQLite3+TableExtended.h"; path = "SJUIKit/SQLite3/SJSQLite3+TableExtended.h"; sourceTree = ""; }; 2EB97F016A3959F6C2620EDDB3B1C529 /* UIScrollView+SJRefreshAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+SJRefreshAdd.h"; path = "SJUIKit/Refresh/UIScrollView+SJRefreshAdd.h"; sourceTree = ""; }; + 2EFA16B5D6250645349BF7DFA07D422C /* HTTPDynamicFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPDynamicFileResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDynamicFileResponse.m; sourceTree = ""; }; 2EFA46E02E78F84D951C818E9B961E07 /* SJSQLite3+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJSQLite3+Private.h"; path = "SJUIKit/SQLite3/SJSQLite3+Private.h"; sourceTree = ""; }; 2FC4D5967463C682204A4A4A4A9C8A96 /* AVAsset+SJAVMediaExport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "AVAsset+SJAVMediaExport.h"; path = "SJBaseVideoPlayer/AVPlayer/Core/AVAsset+SJAVMediaExport.h"; sourceTree = ""; }; 301B27B5CF42CE3BF9D26BCB0073740E /* UIImageView+AsyncLoadImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AsyncLoadImage.m"; path = "SJUIKit/AsyncLoad/UIImageView+AsyncLoadImage.m"; sourceTree = ""; }; 3034184441734D55975A03C28A0E496B /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; 3059A52441B60DD9A8BD4B4DD3CCE049 /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; 30DAE52611A09C0BB0C0AE5575CCBB8E /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; - 30E9C0E72D892C0D423DF8BAD77A1A10 /* MCSAssetDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetDefines.h; path = SJMediaCacheServer/Core/Asset/MCSAssetDefines.h; sourceTree = ""; }; - 310884D912F30F8937EA1AE2BD7065F8 /* DDNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDNumber.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDNumber.m; sourceTree = ""; }; + 310E0E3863CEA39B64A028EF12E95A37 /* MCSUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSUtils.m; path = SJMediaCacheServer/Core/Common/MCSUtils.m; sourceTree = ""; }; 3113FA59340C0F63F2A7CEC7EDDCCB15 /* SJClipsBackButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsBackButton.h; sourceTree = ""; }; 31494D8248BBA62EAD891364344B84F0 /* SJBaseViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseViewController.h; path = SJUIKit/Base/SJBaseViewController.h; sourceTree = ""; }; 3170FD869802F4C6D028F6043705FE01 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; @@ -1029,8 +1043,8 @@ 329587CB14B91DD0C67CB6D645CE0A0B /* SJVideoDefinitionSwitchingInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoDefinitionSwitchingInfo.h; path = SJBaseVideoPlayer/Common/Implements/SJVideoDefinitionSwitchingInfo.h; sourceTree = ""; }; 32C3C4FF54EA976B4337835C885C556F /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; 330085ECE299AAA0D6D06A5A2C89A17D /* SJCommonProgressSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJCommonProgressSlider.h; sourceTree = ""; }; + 3387290ECD5EFE2B30F6E716F9B7F6AE /* MCSAssetExporterDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetExporterDefines.h; path = SJMediaCacheServer/Core/Export/MCSAssetExporterDefines.h; sourceTree = ""; }; 3395175736C72459045ADD7942C68A08 /* SJPageCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPageCollectionView.m; path = SJUIKit/PageViewController/PageViewController/Core/SJPageCollectionView.m; sourceTree = ""; }; - 33E584567ABF723589E290D1771516C5 /* HTTPAuthenticationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPAuthenticationRequest.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPAuthenticationRequest.h; sourceTree = ""; }; 34399975CAB8238625C54958F6CC7057 /* SJVideoPlayerURLAssetPrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerURLAssetPrefetcher.m; path = SJBaseVideoPlayer/AVPlayer/Core/SJVideoPlayerURLAssetPrefetcher.m; sourceTree = ""; }; 3440844BA2A3A1D7A3D23B72FFAD92B8 /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; 344EC7F03989A525BBAE681733B3B63D /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; @@ -1039,22 +1053,19 @@ 34C455EA8AE1A0841BD97D128AAB4020 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; 34E16EB6E3782C95A0F105623E836990 /* SJPageViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPageViewController.h; path = SJUIKit/PageViewController/PageViewController/SJPageViewController.h; sourceTree = ""; }; 350D4B1361E013C39A66BC4DD89C794F /* YYModel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YYModel-dummy.m"; sourceTree = ""; }; - 352BFE4CF42A9DEC8920FC8B08FDA1C5 /* MultipartFormDataParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartFormDataParser.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartFormDataParser.m; sourceTree = ""; }; 356EE7E662983B2DAB7DE66EA39500DA /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; + 35BE06A148B27F8FBCFB6C5C32E02CA7 /* MCSProxyTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSProxyTask.h; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyTask.h; sourceTree = ""; }; 35E1A37C387CCA71B5564B4F74F65B63 /* SJUIKitTextMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUIKitTextMaker.h; path = SJUIKit/AttributesFactory/UIKitText/SJUIKitTextMaker.h; sourceTree = ""; }; 35E70A6011FB1C3E7D09EB566E0F1B96 /* CocoaAsyncSocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaAsyncSocket-dummy.m"; sourceTree = ""; }; + 363731F9F2C1EDB0ECA0BBD390262543 /* HTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPResponse.h; sourceTree = ""; }; 36402D1ACDE5AE5F02AEBE64E4E535F0 /* UIView+SJAnimationAdded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIView+SJAnimationAdded.m"; sourceTree = ""; }; 366606D50278213257D17CBC63A8D86C /* SJRotationManagerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRotationManagerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJRotationManagerDefines.h; sourceTree = ""; }; - 36FEABE690717E15B4915DB340450147 /* MCSConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSConfiguration.m; path = SJMediaCacheServer/Core/Asset/MCSConfiguration.m; sourceTree = ""; }; 373BB5356FB44080A66D14EB34E56BDC /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; 37A81AC2BE53175A54F72DD1A8F94643 /* UIScrollView+SJBaseVideoPlayerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+SJBaseVideoPlayerExtended.h"; path = "SJBaseVideoPlayer/Common/UIKit/UIScrollView+SJBaseVideoPlayerExtended.h"; sourceTree = ""; }; 37DA7B150BDADF31DDC1C0E8CC9416DD /* SJViewControllerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJViewControllerManager.m; path = SJBaseVideoPlayer/Common/Implements/SJViewControllerManager.m; sourceTree = ""; }; - 3847E8C01B180FE35579AB8A496055A1 /* MultipartMessageHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartMessageHeader.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeader.h; sourceTree = ""; }; - 384BD6E95D37E6E6E89BE0964A3AADEA /* HTTPConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPConnection.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPConnection.h; sourceTree = ""; }; - 38E381098A1160DC8B9BC2FA2A11217A /* FILEAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEAsset.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEAsset.h; sourceTree = ""; }; + 37F575B277367BCFAD13C2932F747E9F /* DDNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDNumber.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDNumber.h; sourceTree = ""; }; 39AB1C5991B159BB93271BCCE27D4E71 /* SJBaseVideoPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseVideoPlayer.h; path = SJBaseVideoPlayer/SJBaseVideoPlayer.h; sourceTree = ""; }; 39EA50F070B43B922635ECA940E15A2E /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; - 39F6CBE53F3D7175F03B4890BA8419B0 /* WebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WebSocket.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/WebSocket.m; sourceTree = ""; }; 3A266E4B5DD1DC066620C011112A2D60 /* SJVideoPlayerPresentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerPresentView.m; path = SJBaseVideoPlayer/Common/Implements/SJVideoPlayerPresentView.m; sourceTree = ""; }; 3AE120361D81F9815B8AA98D94BF3BCC /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; 3AEF2C9E0B79C0E6E06156DF579C280E /* SJVideoPlayerURLAsset+SJExtendedDefinition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJVideoPlayerURLAsset+SJExtendedDefinition.h"; sourceTree = ""; }; @@ -1062,13 +1073,11 @@ 3C1B227E76AC083FB6F8CAADE5462003 /* SJEdgeControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJEdgeControlLayer.m; sourceTree = ""; }; 3C2804A441641BF6CE4F8A86D8B096F0 /* SJClipsSaveResultToAlbumHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsSaveResultToAlbumHandler.m; sourceTree = ""; }; 3C80D8B884D558E4EC06E4E8B4739ECD /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; - 3CB9E6E814DAEB3DFA95543B8A02CFB7 /* MCSInterfaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSInterfaces.h; path = SJMediaCacheServer/Core/Common/MCSInterfaces.h; sourceTree = ""; }; 3D20048581433A8321A61874603444A2 /* SJDeviceVolumeAndBrightnessManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJDeviceVolumeAndBrightnessManager.m; path = SJBaseVideoPlayer/Common/Implements/SJDeviceVolumeAndBrightnessManager.m; sourceTree = ""; }; 3DADEAF63BBAC57B2FF83AE99FE4FCED /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; - 3E74DC5A673A7D70DFAE67373154CC88 /* DDRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDRange.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDRange.h; sourceTree = ""; }; + 3E72CC09C8918A97CF46419DD35A2708 /* HLSContentAESKeyReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentAESKeyReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentAESKeyReader.m; sourceTree = ""; }; 3EC4B483884FFCB8ACB7704461839DD5 /* UITextField+AsyncLoadImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+AsyncLoadImage.m"; path = "SJUIKit/AsyncLoad/UITextField+AsyncLoadImage.m"; sourceTree = ""; }; 3F18097EABFAB8274A0955C8F4980B98 /* SJAVMediaPlayerLayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVMediaPlayerLayerView.m; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLayerView.m; sourceTree = ""; }; - 3F7455F2E9FCB46FAB3B0A4A9B4F4346 /* HLSContentAESKeyReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentAESKeyReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentAESKeyReader.h; sourceTree = ""; }; 3FE4E95023B7291C8551D3EB60D6E99E /* SJClipsVideoRecordsControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsVideoRecordsControlLayer.h; sourceTree = ""; }; 4007443FF668DEC10590A3C299A6B003 /* SJEdgeControlButtonItemAdapterLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJEdgeControlButtonItemAdapterLayout.m; sourceTree = ""; }; 4024459B3153A8CA0FE7D072F17F486F /* SJSpeedupPlaybackPopupViewDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJSpeedupPlaybackPopupViewDefines.h; sourceTree = ""; }; @@ -1076,12 +1085,11 @@ 40AE3CDEC2DF0C67FB2B5E24E307790D /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; 422F4909F71844826F93015FDBC4ACB2 /* SJPresentationQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPresentationQueue.m; path = SJUIKit/Queues/SJPresentationQueue.m; sourceTree = ""; }; 422F86FA99E0FDDD558A309ADD7AFC8A /* UIViewController+SJPageViewControllerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+SJPageViewControllerExtended.h"; path = "SJUIKit/PageViewController/PageViewController/Core/UIViewController+SJPageViewControllerExtended.h"; sourceTree = ""; }; - 426E8D3F9E9EA61D0D564D45C012A23C /* HLSContentIndexReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentIndexReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentIndexReader.h; sourceTree = ""; }; 427FD9D882CFA9ACD2E86E812FCBA223 /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; - 42B797EBED73379F810E3475A7F0FAF6 /* HLSContentAESKeyReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentAESKeyReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentAESKeyReader.m; sourceTree = ""; }; 42C15DAD7B5185946E2A2DE449BB1E58 /* SJAVMediaPlayerLayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAVMediaPlayerLayerView.h; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLayerView.h; sourceTree = ""; }; 4359BF2D87BE283838E4BF13001C4AEF /* SJAttributeWorker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAttributeWorker.m; path = SJUIKit/AttributesFactory/Deprecated/SJAttributeWorker.m; sourceTree = ""; }; 444E594712C4C3204F417A872E43FFEB /* SJVideoPlayerPlaybackControllerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerPlaybackControllerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJVideoPlayerPlaybackControllerDefines.h; sourceTree = ""; }; + 445E2D6FDF04E3417C9756FFF43DD4D9 /* MCSContents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSContents.m; path = SJMediaCacheServer/Core/Download/MCSContents.m; sourceTree = ""; }; 4565924477651BCEE1243CDC8CE7F238 /* SJVideoPlayerLocalizedStringKeys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerLocalizedStringKeys.h; sourceTree = ""; }; 456B6936BDD992AAB2DF20366342836D /* SJAVMediaPlaybackController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVMediaPlaybackController.m; path = SJBaseVideoPlayer/AVPlayer/SJAVMediaPlaybackController.m; sourceTree = ""; }; 45AA9C6D3DA9A7F31C21D03588E66F17 /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; @@ -1089,13 +1097,16 @@ 45F9A863C8B64013B8CD3D573F053BCF /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; 467C652E295F76904F58BC6CCF0BADC5 /* SJPlaybackListController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackListController.h; path = SJPlaybackListController/SJPlaybackListController.h; sourceTree = ""; }; 469C321FFA71E97A6B96CC3F39DBB8A8 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; + 46BBD361175435AB8DA5F652B14DC88C /* MCSConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSConfiguration.m; path = SJMediaCacheServer/Core/Asset/MCSConfiguration.m; sourceTree = ""; }; + 46C5F72CEB550806B3E9B0F8F8A3A0DC /* MCSAssetCacheManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetCacheManager.h; path = SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.h; sourceTree = ""; }; 46C824C75366318E5288BBF888AD5FB2 /* SJVideoPlayerClipsParameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerClipsParameters.h; sourceTree = ""; }; 46D2DFB51607CC2326DA4707E8C2EADE /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; 46D6A9522028F2753F7900207BEDE029 /* SJPageMenuBarScrollIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPageMenuBarScrollIndicator.h; path = SJUIKit/PageViewController/PageMenuBar/Core/SJPageMenuBarScrollIndicator.h; sourceTree = ""; }; 476D306D637343215426E465EF845780 /* SJCornerMask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJCornerMask.m; path = SJUIKit/CornerMask/SJCornerMask.m; sourceTree = ""; }; 47A80A1701FB6CC1E134D852559EB013 /* SJUIMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJUIMaker.m; path = SJUIKit/UIMaker/SJUIMaker.m; sourceTree = ""; }; + 48108AA291C0966AF3D49E51FC03777A /* NSFileManager+MCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileManager+MCS.h"; path = "SJMediaCacheServer/Core/Common/NSFileManager+MCS.h"; sourceTree = ""; }; 482568E694A91364C440FD44CDBF6881 /* SJVideoPlayer.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SJVideoPlayer.bundle; path = SJVideoPlayer/ResourceLoader/SJVideoPlayer.bundle; sourceTree = ""; }; - 485BCF1CA479B379C03F60F5269EAF24 /* NSURLRequest+MCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+MCS.m"; path = "SJMediaCacheServer/Core/Common/NSURLRequest+MCS.m"; sourceTree = ""; }; + 486A8E5AD51D96C124F1F4CF7E1A1A17 /* HTTPErrorResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPErrorResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPErrorResponse.m; sourceTree = ""; }; 48DDAF8D290D96263CA2BE4E9674C0C1 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; 48F0BB30141F209448186A5FE9EE77F7 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; 49AE9CC8979882D457146630C03F9162 /* NSObject+SJObserverHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+SJObserverHelper.m"; path = "SJUIKit/ObserverHelper/NSObject+SJObserverHelper.m"; sourceTree = ""; }; @@ -1103,11 +1114,13 @@ 4A608FF9AD8A82338C3893FA22BA6485 /* SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m"; path = "SJBaseVideoPlayer/AVPlayer/Core/SJVideoPlayerURLAsset+SJAVMediaPlaybackAdd.m"; sourceTree = ""; }; 4B347994389BF07D6B7B396D13E254D0 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; 4BD15C29EEAF6A3BBDCA415CF4C2F24F /* SJClipsResultShareItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsResultShareItem.h; sourceTree = ""; }; + 4BEDC631C46E4EB59ED7A74931966622 /* HLSContentTs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentTs.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTs.h; sourceTree = ""; }; 4C29EB4B8F9D2483941F4BC88C91E19D /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; 4C78C12B413A5A0F66A00F8371029E3C /* Pods-SJVideoPlayer_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SJVideoPlayer_Example-resources.sh"; sourceTree = ""; }; 4CB69FEF5D0F242BE2F42DA13E535FF8 /* SJRouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRouter.h; path = SJRouter/SJRouter.h; sourceTree = ""; }; 4D0456551714CE9704106BCCA851B7B5 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; 4D57ECE2C1BE2DA1AD06B2B7456B9576 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; + 4DCBE862ED9105835CB6F8A14E87BC27 /* SJMediaCacheServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJMediaCacheServer-dummy.m"; sourceTree = ""; }; 4DF58205FA20AB6D8C3F298368AF0A36 /* SJStatusBarManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJStatusBarManager.h; path = SJUIKit/Base/Core/SJStatusBarManager.h; sourceTree = ""; }; 4E80FCCC344C92316B18958BCC258C46 /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; 4EB47E14F6FC4F6E6110BC444D7EA851 /* YYModel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYModel.release.xcconfig; sourceTree = ""; }; @@ -1116,7 +1129,8 @@ 4F335906970F7211B6D13C5499AADFE0 /* GCDAsyncUdpSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDAsyncUdpSocket.h; path = Source/GCD/GCDAsyncUdpSocket.h; sourceTree = ""; }; 4FA211A73E93BAC563BCFA8F91FE4F87 /* UIView+SJBaseVideoPlayerExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SJBaseVideoPlayerExtended.m"; path = "SJBaseVideoPlayer/Common/UIKit/UIView+SJBaseVideoPlayerExtended.m"; sourceTree = ""; }; 50194C0386F8E1D079247D6C310D9F00 /* SJPlaybackRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackRecord.m; path = SJBaseVideoPlayer/Common/Implements/SJPlaybackRecord.m; sourceTree = ""; }; - 5084EF22EE0C12706C7EAEC6CA599D08 /* SJMediaCacheServer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJMediaCacheServer.release.xcconfig; sourceTree = ""; }; + 5058D4DB2CB414F962E1172F6A5B374B /* MCSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSLogger.m; path = SJMediaCacheServer/Core/Common/MCSLogger.m; sourceTree = ""; }; + 5098B07BF16A4BAA0D24602A31892169 /* MCSDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSDatabase.m; path = SJMediaCacheServer/Core/Common/MCSDatabase.m; sourceTree = ""; }; 50A392908D9665C74181E7753861E65D /* SJVideoPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayer.h; path = SJVideoPlayer/SJVideoPlayer.h; sourceTree = ""; }; 50A41C4259F757DD3B34CE732563F642 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; 50B3AE830FC3103F0F2C808E22973EC8 /* SJEdgeControlButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJEdgeControlButtonItem.m; sourceTree = ""; }; @@ -1129,29 +1143,28 @@ 5321B6E6D677924A94E1D15537F68CD2 /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; 53448E504E7784E3E6DDE1F3712C5D92 /* SJBaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseTableViewCell.m; path = SJUIKit/Base/SJBaseTableViewCell.m; sourceTree = ""; }; 53BC6D51253D1F8B43121A51578472FA /* SJWatermarkView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJWatermarkView.h; path = SJBaseVideoPlayer/Common/Implements/SJWatermarkView.h; sourceTree = ""; }; - 53BE70F9DD5D34DDFDB331BC90235CAB /* HLSContentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentProvider.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.m; sourceTree = ""; }; 54004C318658DD320E279E0141730D1F /* SJAttributesRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAttributesRecorder.h; path = SJUIKit/AttributesFactory/Deprecated/SJAttributesRecorder.h; sourceTree = ""; }; + 5428B43B415C37B1EA4BAF11540BFF40 /* FILEPrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEPrefetcher.m; path = SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.m; sourceTree = ""; }; 54D6375EEA5FE7D1F325B9522A1C6F61 /* SJFlipTransitionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFlipTransitionManager.h; path = SJBaseVideoPlayer/Common/Implements/SJFlipTransitionManager.h; sourceTree = ""; }; 551B41E0149E16B630750F12C3F36C9B /* SJPlayerAutoplayConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlayerAutoplayConfig.h; path = SJBaseVideoPlayer/Common/Implements/SJPlayerAutoplayConfig.h; sourceTree = ""; }; 55487250FF4F474B8C1D469B6230C23B /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; 557D599CE7EEFAD1AE0F26972E995454 /* UIButton+AsyncLoadImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AsyncLoadImage.m"; path = "SJUIKit/AsyncLoad/UIButton+AsyncLoadImage.m"; sourceTree = ""; }; - 55A441296D16688BE34C60D7B083C865 /* NSFileManager+MCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileManager+MCS.h"; path = "SJMediaCacheServer/Core/Common/NSFileManager+MCS.h"; sourceTree = ""; }; + 55E9C6954424E99D083542C5C991918B /* HLSContentTSReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentTSReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.h; sourceTree = ""; }; 55EBE1E03E492BA56B07F6FCE1492D34 /* SJClipsVideoCountDownView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsVideoCountDownView.h; sourceTree = ""; }; - 56029A7C92764D5F6689847FAAA12F6E /* MCSPrefetcherManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSPrefetcherManager.h; path = SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.h; sourceTree = ""; }; 560E0E129A5A7A82BB1820E9444A0581 /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; - 56DA2534B07BA8E2C5EC92FBFD6FEAF8 /* HLSContentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentProvider.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.h; sourceTree = ""; }; 571B7729518BD763860456E08432205F /* UIImagePickerController+SJUIKitExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImagePickerController+SJUIKitExtension.m"; path = "SJUIKit/Photo/UIImagePickerController+SJUIKitExtension.m"; sourceTree = ""; }; 572B00924A96FAF507A43EC17542E227 /* SJFloatSmallViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFloatSmallViewController.h; path = SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.h; sourceTree = ""; }; 57818C1BC83C0FB8D0EAB961BC4BEAC0 /* SJDraggingObservation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJDraggingObservation.m; sourceTree = ""; }; 5842ACB28A7891860A033AC3B8EDAA83 /* libSJFullscreenPopGesture.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJFullscreenPopGesture.a; path = libSJFullscreenPopGesture.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5885E576469E20680AA181A7F13728B3 /* SJAVMediaPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVMediaPlayer.m; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayer.m; sourceTree = ""; }; 58B2360B403E0121FA36F9B60B0B6C05 /* SJPlaybackListControllerObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackListControllerObserver.m; path = SJPlaybackListController/Core/SJPlaybackListControllerObserver.m; sourceTree = ""; }; + 593CE158626E3CA8C666B28A8C879616 /* DDRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDRange.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDRange.m; sourceTree = ""; }; 59E40A1A5F12EF7DC03568FB79FF8FD7 /* SJPresentationQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPresentationQueue.h; path = SJUIKit/Queues/SJPresentationQueue.h; sourceTree = ""; }; + 5A09C90ADD9F7F140A4763CC77C371CF /* MCSRootDirectory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSRootDirectory.m; path = SJMediaCacheServer/Core/Common/MCSRootDirectory.m; sourceTree = ""; }; 5A36053D33BE7749E1A2839CA196B3F2 /* SJApplicationInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJApplicationInfo.h; path = SJUIKit/Other/SJApplicationInfo.h; sourceTree = ""; }; - 5A45EFF88A4DF6D7C79BEC08913B1E7F /* SJMediaCacheServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJMediaCacheServer.h; path = SJMediaCacheServer/SJMediaCacheServer.h; sourceTree = ""; }; + 5B39265485E928A896916FC843606AFC /* MultipartFormDataParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartFormDataParser.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartFormDataParser.h; sourceTree = ""; }; 5B3BD5998E02D06F89D918D0D8A764BA /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; 5BA57AB1E0437B167A3A99A52AEAF21B /* SJPlaybackRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackRecord.h; path = SJBaseVideoPlayer/Common/Implements/SJPlaybackRecord.h; sourceTree = ""; }; - 5C165BDE43AE8D551D7E47BFAA0F3BE8 /* DDData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDData.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDData.h; sourceTree = ""; }; 5C2E37483EACF0E1BD095A93208365F7 /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; 5CCCB55BD375EFB892DC6355384E6A06 /* SJClipsControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsControlLayer.m; sourceTree = ""; }; 5D6AC938AADAF90197CD8F51F1C36C1D /* SJVideoPlayerPlayStatusDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerPlayStatusDefines.h; path = SJBaseVideoPlayer/Common/Const/SJVideoPlayerPlayStatusDefines.h; sourceTree = ""; }; @@ -1162,33 +1175,38 @@ 5EE43EBC3BC72F91C049497F1054DB3B /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; 5EED3B219964945EDEFA0CD9F661035E /* SJEdgeControlButtonItemAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlButtonItemAdapter.h; sourceTree = ""; }; 5EF1FD5CE7C18A5C1ED7419764774094 /* SJPageMenuBarScrollIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPageMenuBarScrollIndicator.m; path = SJUIKit/PageViewController/PageMenuBar/Core/SJPageMenuBarScrollIndicator.m; sourceTree = ""; }; + 5F2044B494CFF13054EB09F110A57B8E /* HTTPFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPFileResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPFileResponse.h; sourceTree = ""; }; 5F316D901E4A712C758700835E58B84E /* NSDate+SJAdded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+SJAdded.h"; path = "SJUIKit/Date/NSDate+SJAdded.h"; sourceTree = ""; }; 5F4C95B603CF7091192F53C30A7E6912 /* SJEdgeControlLayerAdapters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJEdgeControlLayerAdapters.m; sourceTree = ""; }; + 5FE4C6691D14EDF6DCAD3770E82856AB /* SJMediaCacheServer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJMediaCacheServer.debug.xcconfig; sourceTree = ""; }; 602FAED82D099E35198BAA68CB6757CE /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; 6040909778E41079B4FF16E867495637 /* SJBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBase.h; path = SJUIKit/Base/SJBase.h; sourceTree = ""; }; 61898F90901D93568259F01B9599EADE /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; 61973530DE355D581EAA3346E27A1852 /* UIScrollView+ListViewAutoplaySJAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+ListViewAutoplaySJAdd.m"; path = "SJBaseVideoPlayer/UIScrollView+ListViewAutoplaySJAdd.m"; sourceTree = ""; }; 61A83E8FC20655506AE9FAA4D95DFFF9 /* SJPlaybackListController.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJPlaybackListController.debug.xcconfig; sourceTree = ""; }; 61B9F77A03B1F58F3C80E191C098057A /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; - 61D698E86C117B85F503BBF4A630CED5 /* FILEContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEContent.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEContent.m; sourceTree = ""; }; 61F53670C70A4322F9C0F2328EAC5DC9 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; - 61FEF9173358E4B2008CA72098EB7B25 /* MCSContents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSContents.m; path = SJMediaCacheServer/Core/Download/MCSContents.m; sourceTree = ""; }; + 62339D3A7AC5C616BE4B6653486379B6 /* MCSURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSURL.h; path = SJMediaCacheServer/Core/Common/MCSURL.h; sourceTree = ""; }; 623BDF33769B399CAEB359070BF29681 /* UIImagePickerController+SJUIKitExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImagePickerController+SJUIKitExtension.h"; path = "SJUIKit/Photo/UIImagePickerController+SJUIKitExtension.h"; sourceTree = ""; }; + 631CCEE2A251C80AA98C87F3AD31189C /* MCSDownload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSDownload.h; path = SJMediaCacheServer/Core/Download/MCSDownload.h; sourceTree = ""; }; 6351A8FC541E6A73FEE4DBBEED82CED3 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; 639B4B6419CD9C19A68FB7C6F8E320CB /* SJVideoPlayerClipsGeneratedResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerClipsGeneratedResult.h; sourceTree = ""; }; 639BEFED9A760CCD98B3A44D5FE2804E /* SJResidentThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJResidentThread.m; path = SJUIKit/Thread/SJResidentThread.m; sourceTree = ""; }; 63BDFF844E44978C8EA53359DA4A1556 /* SJPlayModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlayModel.h; path = SJBaseVideoPlayer/Common/Implements/SJPlayModel.h; sourceTree = ""; }; 6434FD3A05EBAA2DCB456F4C40929543 /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; + 650D335E051B97FC37B2A88D94BF4483 /* MCSProxyTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSProxyTask.m; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyTask.m; sourceTree = ""; }; 652C00F28A20500864AE33EB8E1FBCA8 /* libPods-SJVideoPlayer_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-SJVideoPlayer_Example.a"; path = "libPods-SJVideoPlayer_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 655EB80F8612533701711086FD8879FD /* SJVideoPlayer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJVideoPlayer-dummy.m"; sourceTree = ""; }; 6656A628E979A9F8F4725097822E3D18 /* UIScrollView+SJBaseVideoPlayerExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+SJBaseVideoPlayerExtended.m"; path = "SJBaseVideoPlayer/Common/UIKit/UIScrollView+SJBaseVideoPlayerExtended.m"; sourceTree = ""; }; 6728EE0A8F7DF9C8CCA37DA48046540F /* SJBaseCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseCollectionReusableView.m; path = SJUIKit/Base/SJBaseCollectionReusableView.m; sourceTree = ""; }; + 68131CD5E316CD24796A8CC198CBBD0D /* MCSAssetFileRead.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetFileRead.m; path = SJMediaCacheServer/Core/Asset/MCSAssetFileRead.m; sourceTree = ""; }; 681BD6229132CEC451C08BC390C732F0 /* NSAttributedString+SJMake.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SJMake.m"; path = "SJUIKit/AttributesFactory/NSAttributedString+SJMake.m"; sourceTree = ""; }; 688EFAE87AC1CF5FCA077B7A8BDC3707 /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; 68EC83466EFA0C91DF95DCED987EA3EF /* SJFloatSmallViewControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJFloatSmallViewControlLayer.m; sourceTree = ""; }; 6908D9D6D0F69BBF413C2AE2273E646E /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; 69184AF8C74A5F2DA4984440A0FC8AE2 /* SJUTAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJUTAttributes.m; path = SJUIKit/AttributesFactory/UIKitText/SJUTAttributes.m; sourceTree = ""; }; 69909F6806CE39186B66FF3C82E3F5B7 /* SJVideoDefinitionSwitchingInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoDefinitionSwitchingInfo.m; path = SJBaseVideoPlayer/Common/Implements/SJVideoDefinitionSwitchingInfo.m; sourceTree = ""; }; + 6A9B8B38420B3810E4426748F8D1B346 /* FILEAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEAsset.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEAsset.h; sourceTree = ""; }; 6B327877FAB0F17485519871EA0A0062 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; 6BC4D00142FF15E6E7A038F80C2D4BA0 /* SJEdgeControlButtonItemAdapterLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlButtonItemAdapterLayout.h; sourceTree = ""; }; 6BD2DC760A506C3A141573449B5E04C1 /* SJAsyncLoad.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAsyncLoad.h; path = SJUIKit/AsyncLoad/SJAsyncLoad.h; sourceTree = ""; }; @@ -1199,30 +1217,29 @@ 6CCCD6EE113D51F55E3999135778B5C0 /* SJSQLite3+RemoveExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJSQLite3+RemoveExtended.h"; path = "SJUIKit/SQLite3/SJSQLite3+RemoveExtended.h"; sourceTree = ""; }; 6CD32B773C6ED156D956B9AA03A8EE86 /* SJVideoPlayerResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerResourceLoader.m; path = SJVideoPlayer/ResourceLoader/SJVideoPlayerResourceLoader.m; sourceTree = ""; }; 6D59D9E6E3BB6ED6FEB6264BFB238226 /* SJMediaPlaybackController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJMediaPlaybackController.m; path = SJBaseVideoPlayer/Common/Implements/SJMediaPlaybackController.m; sourceTree = ""; }; + 6D8F23E60318550DB3D11E30CBCBBC2D /* NSFileHandle+MCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileHandle+MCS.m"; path = "SJMediaCacheServer/Core/Common/NSFileHandle+MCS.m"; sourceTree = ""; }; 6E005BDED0E5395CD560BB8CAD5FF72A /* SJSQLite3TableClassCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLite3TableClassCache.h; path = SJUIKit/SQLite3/Core/SJSQLite3TableClassCache.h; sourceTree = ""; }; 6E06013AFE67C792673E399D6AA244C9 /* SJVideoPlayerURLAsset+SJControlAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJVideoPlayerURLAsset+SJControlAdd.h"; sourceTree = ""; }; 6E197F1AF1E8EFCA92607DC70E11DD30 /* SJBaseVideoPlayer+TestLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJBaseVideoPlayer+TestLog.m"; path = "SJBaseVideoPlayer/SJBaseVideoPlayer+TestLog.m"; sourceTree = ""; }; - 6E7F549BCC715BB95AC3369990F54854 /* MCSUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSUtils.m; path = SJMediaCacheServer/Core/Common/MCSUtils.m; sourceTree = ""; }; + 6E5A1027278A6E38249F7E0B23273A34 /* HTTPDynamicFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPDynamicFileResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDynamicFileResponse.h; sourceTree = ""; }; 6E9D4ACA3FD1A89B5EF1B0C9852A562C /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; 6EBCABD9FA7C9479BB5F71844291F123 /* SJControlLayerAppearManagerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJControlLayerAppearManagerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJControlLayerAppearManagerDefines.h; sourceTree = ""; }; - 6EF8A71A4FAC3FAAAD5D32D16A842EC2 /* HLSPrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSPrefetcher.m; path = SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.m; sourceTree = ""; }; 6FC533E458C59229C514664FC8E291AE /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; 70554F02CEAF2EF39E0271C14A2C6B4D /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; + 708CF752F665312EB35F211E80D13BC5 /* HLSContentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentProvider.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.h; sourceTree = ""; }; 70BDFA303EA597181F17DC575A0E2783 /* SJRotationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRotationManager.m; path = SJBaseVideoPlayer/Common/Implements/SJRotationManager.m; sourceTree = ""; }; 70FB44CC5E8F5CE1A7ED3A7283717A82 /* SJClipsVideoRecordsControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsVideoRecordsControlLayer.m; sourceTree = ""; }; + 7152CB64B5BC1D45DC4BC82BC97BD0EC /* HTTPDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPDataResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDataResponse.h; sourceTree = ""; }; 715B8C94BBEB033876D9DF3695A21639 /* SJBarrageQueueController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBarrageQueueController.h; path = SJBaseVideoPlayer/Common/Implements/SJBarrageQueueController.h; sourceTree = ""; }; 7177FA03D3BEBAB290A32FF51F9A5925 /* SJPageMenuBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPageMenuBar.m; path = SJUIKit/PageViewController/PageMenuBar/SJPageMenuBar.m; sourceTree = ""; }; 7193A30AD429A4AD3CED9961AA75E1C6 /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; 71C9A75E6D95DA0519E1F870C3CC2AA8 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 71EBD99881B26F1B8670D3FCF6BEA510 /* MultipartFormDataParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartFormDataParser.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartFormDataParser.h; sourceTree = ""; }; - 72120949D9A82D8E1B1F68D1CEA3E394 /* MCSRootDirectory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSRootDirectory.m; path = SJMediaCacheServer/Core/Common/MCSRootDirectory.m; sourceTree = ""; }; 727DB2283D544FDCEB69CB998DEF72BD /* SJFullscreenPopGesture.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJFullscreenPopGesture.debug.xcconfig; sourceTree = ""; }; 727FB18E52B98BCC1F886145DE2AD0D6 /* SJButtonProgressSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJButtonProgressSlider.m; sourceTree = ""; }; 7383BB11DA23178EC273C513C98EB9B3 /* LICENSE.md */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE.md; sourceTree = ""; }; 73DEB42BE086E6F3D8B2DC09790FECE7 /* NSObject+YYModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YYModel.h"; path = "YYModel/NSObject+YYModel.h"; sourceTree = ""; }; 73F5B6CF4E59BA4E46C11F8E6A65ECE5 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; 74309BC8E8BF7B6EC6B7606044E3F571 /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; - 746F3A6A212EDD0491289415A0DEC7AB /* HLSContentTs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentTs.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTs.m; sourceTree = ""; }; 748117CC5D8B386423B53649A356EBE4 /* SJVideoPlayerURLAsset+SJExtendedDefinition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJVideoPlayerURLAsset+SJExtendedDefinition.m"; sourceTree = ""; }; 74A86F6D8F41DDDAB993981E78B96089 /* SJVideoPlayerURLAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerURLAsset.h; path = SJBaseVideoPlayer/Common/Implements/SJVideoPlayerURLAsset.h; sourceTree = ""; }; 74C1F66B186B82B77F59208534E625A6 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; @@ -1236,7 +1253,6 @@ 76C159B02CFBE39DE633D38BD594EB2E /* SJControlLayerIdentifiers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJControlLayerIdentifiers.h; sourceTree = ""; }; 76CCC35D6ACC9482C6F22E2CA87F83DF /* SJVideoDefinitionSwitchingInfo+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJVideoDefinitionSwitchingInfo+Private.h"; path = "SJBaseVideoPlayer/Common/Implements/SJVideoDefinitionSwitchingInfo+Private.h"; sourceTree = ""; }; 7783FC25C6F999AC141433F95E6EC22D /* SJSQLiteTableModelConstraints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLiteTableModelConstraints.m; path = SJUIKit/SQLite3/Core/SJSQLiteTableModelConstraints.m; sourceTree = ""; }; - 7795C6D8243A702A7C2808378E8EB8F4 /* MultipartMessageHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartMessageHeader.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeader.m; sourceTree = ""; }; 77B052510BC68A06830564256548F3B7 /* SJFullscreenPopGesture-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJFullscreenPopGesture-prefix.pch"; sourceTree = ""; }; 77B665CFCABD912507565073EBC03283 /* SJSQLite3ColumnOrder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLite3ColumnOrder.h; path = SJUIKit/SQLite3/Core/SJSQLite3ColumnOrder.h; sourceTree = ""; }; 77BEF10FA79FB4906131BE3BDD41D559 /* SJSQLiteErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLiteErrors.h; path = SJUIKit/SQLite3/Core/SJSQLiteErrors.h; sourceTree = ""; }; @@ -1245,28 +1261,32 @@ 780634E729C4D79FBA038A7CA9ED0127 /* Pods-SJVideoPlayer_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SJVideoPlayer_Example.debug.xcconfig"; sourceTree = ""; }; 78410545552116E1184980863D3DBD98 /* SJProgressSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJProgressSlider.h; sourceTree = ""; }; 78B1F6499A19A0F6B637FD2ACEC402A5 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; - 78BC64960B8243C282E2BF6B04EB4C83 /* NSFileHandle+MCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileHandle+MCS.h"; path = "SJMediaCacheServer/Core/Common/NSFileHandle+MCS.h"; sourceTree = ""; }; + 78BE654B8AFBD183DFEE920C202374BB /* MCSAssetExporterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetExporterManager.m; path = SJMediaCacheServer/Core/Export/MCSAssetExporterManager.m; sourceTree = ""; }; + 78BF5B10CB968C35A2308C532B5C2C76 /* FILEAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEAsset.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEAsset.m; sourceTree = ""; }; + 792C4EBADAFC58F63FC52B95CC087392 /* NSFileManager+MCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager+MCS.m"; path = "SJMediaCacheServer/Core/Common/NSFileManager+MCS.m"; sourceTree = ""; }; 79C26FB5112E5D324A2FEDD9DF2C6E87 /* MJRefreshConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConfig.h; path = MJRefresh/MJRefreshConfig.h; sourceTree = ""; }; + 7A02697056D8CD5A62FE57746EB1801B /* HTTPMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPMessage.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPMessage.m; sourceTree = ""; }; 7A5E737EE83F7200D7E3E6C5D4205ACD /* SJPageViewControllerItemCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPageViewControllerItemCell.m; path = SJUIKit/PageViewController/PageViewController/Core/SJPageViewControllerItemCell.m; sourceTree = ""; }; 7A6D70407A56EA21428BF444F123ED0C /* UIViewController+SJRotationPrivate_FixSafeArea.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+SJRotationPrivate_FixSafeArea.m"; path = "SJBaseVideoPlayer/UIViewController+SJRotationPrivate_FixSafeArea.m"; sourceTree = ""; }; 7A961442A951AD4743D626428CC377BF /* Pods-SJVideoPlayer_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SJVideoPlayer_Example-dummy.m"; sourceTree = ""; }; 7AB1727A9BF54841A0D3B66014806D0B /* SJVideoPlayerRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayerRegistrar.m; path = SJBaseVideoPlayer/Common/Utils/SJVideoPlayerRegistrar.m; sourceTree = ""; }; 7AD6E80C1A070078C435F98DE2175C8C /* SJNotReachableControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJNotReachableControlLayer.h; sourceTree = ""; }; 7B44BCA30C3E50316415C4E8F086BA53 /* SJSpeedupPlaybackPopupView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJSpeedupPlaybackPopupView.h; sourceTree = ""; }; - 7BBCEECFA2242D30C62A413A3ACFBE1E /* MCSAssetUsageLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetUsageLog.h; path = SJMediaCacheServer/Core/Asset/MCSAssetUsageLog.h; sourceTree = ""; }; 7BBE68D9538E37B2BFAC9B9E365DBAAE /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; 7BEAB602D0842FBCC25A68C3DD029F19 /* SJControlLayerSwitcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJControlLayerSwitcher.h; sourceTree = ""; }; + 7BFBC35F7F24F7B96CA1E8C907DE852B /* NSURLRequest+MCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+MCS.h"; path = "SJMediaCacheServer/Core/Common/NSURLRequest+MCS.h"; sourceTree = ""; }; 7C47244C895D3FD54B7F43007D00FCE4 /* SJBarrageItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBarrageItem.h; path = SJBaseVideoPlayer/Common/Implements/SJBarrageItem.h; sourceTree = ""; }; - 7CAD439A4C3D25ECA79C8928286B2319 /* SJMediaCacheServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJMediaCacheServer.m; path = SJMediaCacheServer/SJMediaCacheServer.m; sourceTree = ""; }; + 7C4FEA7D676B4965F4E0F6ADCA36E120 /* MCSResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSResponse.m; path = SJMediaCacheServer/Core/ProxyServer/MCSResponse.m; sourceTree = ""; }; 7CBD4E4555319C7FD3F262D386EF9487 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; 7CE244C613ADC3A4CBF5E71F4B26DB91 /* SJNotReachableControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJNotReachableControlLayer.m; sourceTree = ""; }; 7CE7C4BBE34A43333B180F01EE3DDE5A /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; - 7DA48C8A1C19346EEBFB32937D7415DF /* HLSParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSParser.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSParser.h; sourceTree = ""; }; 7DAE84D1974D38B23BF113832E4C5829 /* CocoaAsyncSocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaAsyncSocket-prefix.pch"; sourceTree = ""; }; 7DD74A0D3A5D50B59EF7CC52485AD67B /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; + 7E6180B0168C92CBD188A050B92AD60F /* HTTPAsyncFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPAsyncFileResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPAsyncFileResponse.m; sourceTree = ""; }; 7E7175EE0C545B432AC6E065E60A1745 /* UIScrollView+SJRefreshAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+SJRefreshAdd.m"; path = "SJUIKit/Refresh/UIScrollView+SJRefreshAdd.m"; sourceTree = ""; }; 7EE56940C3B29F0908FD78370B244BF2 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; 7F31D89BF5007B2D5B901845623F5D8E /* SJPlayerAutoplayConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlayerAutoplayConfig.m; path = SJBaseVideoPlayer/Common/Implements/SJPlayerAutoplayConfig.m; sourceTree = ""; }; + 801432771A18EE6A49F6EBD02AB81E7F /* NSFileHandle+MCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileHandle+MCS.h"; path = "SJMediaCacheServer/Core/Common/NSFileHandle+MCS.h"; sourceTree = ""; }; 801598796BA3A3E2129534F9BC427B11 /* SJClipsControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsControlLayer.h; sourceTree = ""; }; 8017B2BB2EAE0360064D7F3AAFF030C9 /* SJAttributesFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAttributesFactory.h; path = SJUIKit/AttributesFactory/SJAttributesFactory.h; sourceTree = ""; }; 805E54FDC8E8EE6E90AC78DE836AC86F /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; @@ -1274,48 +1294,47 @@ 80A242144415A05CFCF6F2AC5FF00240 /* SJVideoPlayer.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SJVideoPlayer.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 80E198E01C941CEB98E07426094BCDB9 /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; 81D3791B503B56B9CA4C249D378FE69A /* SJFitOnScreenManagerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFitOnScreenManagerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJFitOnScreenManagerDefines.h; sourceTree = ""; }; - 81FAD92448C08AAF35960BB136000B93 /* HLSContentTSReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentTSReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.h; sourceTree = ""; }; 827ECDD4A4498B0533E88F4D1DE5D9EA /* UISearchBar+AsyncLoad.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISearchBar+AsyncLoad.h"; path = "SJUIKit/AsyncLoad/UISearchBar+AsyncLoad.h"; sourceTree = ""; }; + 830124B41D1432DB6F6C705B422E5BD4 /* MCSAssetCacheManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetCacheManager.m; path = SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.m; sourceTree = ""; }; 838AAC7F80B2BCA42A8F0D48064AF7D4 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; 83EE4AA934CD326F1B8260473827306D /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; + 842ED4007B4D6B178D46597B3BA3C3EB /* HTTPServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPServer.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPServer.h; sourceTree = ""; }; 84D49D256B1C52AB54C8A2C8060256F9 /* UIButton+AsyncLoadImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AsyncLoadImage.h"; path = "SJUIKit/AsyncLoad/UIButton+AsyncLoadImage.h"; sourceTree = ""; }; + 850077C9F0B39F81759DD5A977A022F4 /* MCSError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSError.m; path = SJMediaCacheServer/Core/Common/MCSError.m; sourceTree = ""; }; 853C0D86D4B432F6FB777974B0DAD608 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; + 855B2D6D26AA324940B56A00675BA76F /* MCSAssetExporterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetExporterManager.h; path = SJMediaCacheServer/Core/Export/MCSAssetExporterManager.h; sourceTree = ""; }; 8560C5C1D2B994EF4ACA1E5E63E34426 /* SJPromptPopupController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPromptPopupController.h; path = SJBaseVideoPlayer/Common/Implements/SJPromptPopupController.h; sourceTree = ""; }; 85946BC317749323316815E749BA9B3D /* Pods-SJVideoPlayer_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SJVideoPlayer_Example-acknowledgements.markdown"; sourceTree = ""; }; 85BB75FF8DCF9F5B19EF25A3646BF402 /* SJPlaybackListControllerProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackListControllerProtocol.m; path = SJPlaybackListController/Core/SJPlaybackListControllerProtocol.m; sourceTree = ""; }; - 85DAB5841E7C2F3FACDBCBF9568F60E6 /* MCSAssetUsageLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetUsageLog.m; path = SJMediaCacheServer/Core/Asset/MCSAssetUsageLog.m; sourceTree = ""; }; + 85E51090CA45B29E7C0B33990D2E8308 /* HTTPAuthenticationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPAuthenticationRequest.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPAuthenticationRequest.h; sourceTree = ""; }; 85EFDC5EA41BF08EF2F791B6A010DF75 /* SJBaseVideoPlayerConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseVideoPlayerConst.m; path = SJBaseVideoPlayer/Common/Const/SJBaseVideoPlayerConst.m; sourceTree = ""; }; 862F690964E6D42DD4C722305F76EC26 /* SJPromptPopupController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPromptPopupController.m; path = SJBaseVideoPlayer/Common/Implements/SJPromptPopupController.m; sourceTree = ""; }; - 867AD1F7E43278E7C9EBA82C77952C5B /* HTTPRedirectResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPRedirectResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPRedirectResponse.h; sourceTree = ""; }; + 87B160B255D50873CF7450D1D1DB5505 /* HTTPConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPConnection.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPConnection.h; sourceTree = ""; }; + 87B74A87161A5D0E5F59C7228590CAFC /* HLSParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSParser.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSParser.m; sourceTree = ""; }; 87BFDE22762249B18C577A7872940FD3 /* SJSQLite3+FoundationExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJSQLite3+FoundationExtended.h"; path = "SJUIKit/SQLite3/SJSQLite3+FoundationExtended.h"; sourceTree = ""; }; 87F97FABD0B6D4F3567DBE05AAF6A93D /* SJTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJTaskQueue.m; path = SJUIKit/Queues/SJTaskQueue.m; sourceTree = ""; }; 880E4396CE3748B426DCBE6851EDFC73 /* CocoaAsyncSocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaAsyncSocket.release.xcconfig; sourceTree = ""; }; - 888547C3EE1251CC61B0826DB888E1A9 /* MultipartMessageHeaderField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartMessageHeaderField.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeaderField.m; sourceTree = ""; }; - 88B368976CE508876DF7FC2F6B9BFC22 /* MCSPrefetcherDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSPrefetcherDefines.h; path = SJMediaCacheServer/Core/Prefetch/MCSPrefetcherDefines.h; sourceTree = ""; }; - 88D1D2C3EA8DD771F7F1BA292939A402 /* MCSError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSError.h; path = SJMediaCacheServer/Core/Common/MCSError.h; sourceTree = ""; }; 88FBC6EBE3A22061D837CB9FE5521E03 /* SJSwitchVideoDefinitionControlLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJSwitchVideoDefinitionControlLayer.m; sourceTree = ""; }; 894B0AA413A404063B27A54AC54823B0 /* SJProgressSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJProgressSlider.m; sourceTree = ""; }; + 89939B9897BE2F559895AB94328DD232 /* MCSDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSDefines.h; path = SJMediaCacheServer/Core/Common/MCSDefines.h; sourceTree = ""; }; 8A5145CA524CCC8493240639292AF4C4 /* GCDAsyncSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDAsyncSocket.m; path = Source/GCD/GCDAsyncSocket.m; sourceTree = ""; }; 8A93BBB9A90002A59D0A288DF6AA042F /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; 8AAF635E72D0A10BC2703A7C1C124465 /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; 8AF1470EF3DE09F272EF3A892D0AE4D6 /* SJPlaybackHistoryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackHistoryController.h; path = SJBaseVideoPlayer/Common/Implements/SJPlaybackHistoryController.h; sourceTree = ""; }; + 8AFF077FAEF6D88ADFC45E7C4D941DB8 /* HTTPFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPFileResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPFileResponse.m; sourceTree = ""; }; 8B33F1CE4B793B98DE76BD3ED57446AA /* SJRouteObject+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJRouteObject+Private.h"; path = "SJRouter/Core/SJRouteObject+Private.h"; sourceTree = ""; }; - 8BABFE1449A5023480CB6AFDFD3B954E /* MCSConsts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSConsts.h; path = SJMediaCacheServer/Core/Common/MCSConsts.h; sourceTree = ""; }; 8BEF0AD407085C1B9C47C9C518A8B44B /* SJClipsGIFCountDownView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsGIFCountDownView.h; sourceTree = ""; }; - 8C32AD769BAF3DE842129633403C6E91 /* NSFileManager+MCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager+MCS.m"; path = "SJMediaCacheServer/Core/Common/NSFileManager+MCS.m"; sourceTree = ""; }; 8C6D0BD99B56E4327A147144EB10F0CE /* SJVideoPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJVideoPlayer.m; path = SJVideoPlayer/SJVideoPlayer.m; sourceTree = ""; }; - 8CF229DD4DA10052C0829407D586E175 /* HTTPAuthenticationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPAuthenticationRequest.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPAuthenticationRequest.m; sourceTree = ""; }; 8D0112143C0D522B156B2843B4216E0C /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; 8D0FE6357F65A0ACE1C34CB60F4AC520 /* SJClipsButtonContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsButtonContainerView.h; sourceTree = ""; }; 8D1EE56EBEDDF86D4EBA1BCB57070AA9 /* libSJVideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJVideoPlayer.a; path = libSJVideoPlayer.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8D45E707C79E4A1132C9B4B93F5FE4E5 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; - 8DD5D81A374225C9AD4FAE387F51AEF9 /* MCSURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSURL.m; path = SJMediaCacheServer/Core/Common/MCSURL.m; sourceTree = ""; }; 8DDCA9C09DA65845ACB1BE42BCA013EC /* SJClipsGIFRecordsControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsGIFRecordsControlLayer.h; sourceTree = ""; }; 8E18D55F5761CF3F0594F6509821E0C1 /* SJPlaybackListController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJPlaybackListController-prefix.pch"; sourceTree = ""; }; 8E1D412E25BE974812A758A59A7BF52F /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; - 8E55DC96309126DA289E2F7BB3F7F0E8 /* HTTPMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPMessage.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPMessage.h; sourceTree = ""; }; 8E699C6793319573FB00A3BDE42AAA4C /* YYModel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYModel.debug.xcconfig; sourceTree = ""; }; 8EC4736A1E243E4A784A1CDBD1E01CFA /* SJObjectContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJObjectContainer.m; path = SJUIKit/Other/SJObjectContainer.m; sourceTree = ""; }; + 8FEC9A59BA887087122827E42736A024 /* DDRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDRange.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDRange.h; sourceTree = ""; }; 8FF3E74C5278360A933870B8CDA2C08F /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; 9023200CFC1EEB873BA1E58A94E8C25F /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; 90296676CEDE1B5D282B6CD8168FD48A /* SJSQLite3Logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLite3Logger.h; path = SJUIKit/SQLite3/Core/SJSQLite3Logger.h; sourceTree = ""; }; @@ -1323,6 +1342,9 @@ 917922FDAA993F14C6AEDCC19CD701BF /* SJPlaybackHistoryControllerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackHistoryControllerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJPlaybackHistoryControllerDefines.h; sourceTree = ""; }; 91C1B3A52A378C34AF6DCF6999B13048 /* UIView+SJBaseVideoPlayerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SJBaseVideoPlayerExtended.h"; path = "SJBaseVideoPlayer/Common/UIKit/UIView+SJBaseVideoPlayerExtended.h"; sourceTree = ""; }; 920830A787125FA125764B1556E51E0F /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; + 9280D21282FC72F527DB90DF68904968 /* FILEReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEReader.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEReader.h; sourceTree = ""; }; + 9324BB1346EE2AF82BC3AD638F7B572B /* MultipartMessageHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartMessageHeader.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeader.h; sourceTree = ""; }; + 934A884AC3A38FDAE56C8ED1B33FC579 /* MCSContents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSContents.h; path = SJMediaCacheServer/Core/Download/MCSContents.h; sourceTree = ""; }; 935E5C650BAB766DBACD33480F646D69 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; 93ACD96E87802F04FFB4CA5B0670A4A6 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; 93E4D9BB11B9479C879A3BF568CF60C8 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; @@ -1330,94 +1352,92 @@ 94FFED8EA4A216BECB87F0347417C562 /* SJRouteInterceptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRouteInterceptor.h; path = SJRouter/Core/SJRouteInterceptor.h; sourceTree = ""; }; 955BD31304224F57D7B96D47CE9811C9 /* SJReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJReachability.m; path = SJBaseVideoPlayer/Common/Implements/SJReachability.m; sourceTree = ""; }; 95A62993FAFBFF4F58496D1A0FB468EE /* SJReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJReachability.h; path = SJBaseVideoPlayer/Common/Implements/SJReachability.h; sourceTree = ""; }; + 95ED015B322BBDB7D67CDFBA0BF298F0 /* HLSContentTSReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentTSReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.m; sourceTree = ""; }; 96EB595C5EB691EA5BC42686217AA9E5 /* SJUIKitTextMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJUIKitTextMaker.m; path = SJUIKit/AttributesFactory/UIKitText/SJUIKitTextMaker.m; sourceTree = ""; }; 9712344E9C15C30465983C3AC7F51DDB /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; 97209C47DF4DC4804D4BB04ECABFBF72 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; 9727454E04EF84D47004157840466851 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; 97349895656AB185D9533A491E02F37A /* SJVideoPlayerConfigurations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerConfigurations.m; sourceTree = ""; }; 97397B8AAA50EE28F6DC15B37A2B53C7 /* SJRouteRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRouteRequest.h; path = SJRouter/Core/SJRouteRequest.h; sourceTree = ""; }; - 979D926A2575F7CE987AB89A8B413704 /* MCSProxyTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSProxyTask.h; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyTask.h; sourceTree = ""; }; - 988BE285DFE700E8E5CD14C305ECB502 /* SJMediaCacheServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJMediaCacheServer-dummy.m"; sourceTree = ""; }; + 9773B9F322079ACC692B3E72000A5BE0 /* MultipartMessageHeaderField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartMessageHeaderField.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeaderField.m; sourceTree = ""; }; 98C32D5DA32A3839B57001BD7E7A3E02 /* GCDAsyncUdpSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDAsyncUdpSocket.m; path = Source/GCD/GCDAsyncUdpSocket.m; sourceTree = ""; }; - 98D717AE7899428DB1CDA886347D043B /* HLSContentIndexReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentIndexReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentIndexReader.m; sourceTree = ""; }; - 99A5DFD34D131FB35D1DB667EB5146CF /* FILEAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEAsset.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEAsset.m; sourceTree = ""; }; + 98F0EE8451A1E32E6F55FE3A170527D9 /* FILEContentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEContentProvider.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.m; sourceTree = ""; }; 99EB9F0AF13082FE5FF881DF72DC3186 /* UISearchBar+AsyncLoad.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISearchBar+AsyncLoad.m"; path = "SJUIKit/AsyncLoad/UISearchBar+AsyncLoad.m"; sourceTree = ""; }; - 9A06772908E63DCA99CE3D80CCA32461 /* MCSPrefetcherManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSPrefetcherManager.m; path = SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.m; sourceTree = ""; }; 9A8EF22AE772F18190CA274EE66691BE /* SJUTRegexHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJUTRegexHandler.m; path = SJUIKit/AttributesFactory/UIKitText/SJUTRegexHandler.m; sourceTree = ""; }; 9AE1C7E3CE66F58F5A14E8935EAED63A /* SJMoreSettingControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJMoreSettingControlLayer.h; sourceTree = ""; }; + 9AEB4C3BE7F0EBBF0C07B1F731886D07 /* MCSDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSDatabase.h; path = SJMediaCacheServer/Core/Common/MCSDatabase.h; sourceTree = ""; }; + 9BD5F0A5EB250E3A915B1FB439AF0950 /* HTTPLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPLogging.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPLogging.h; sourceTree = ""; }; 9C31151475C3A603CCC7BBCDA724742B /* SJRouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRouter.m; path = SJRouter/SJRouter.m; sourceTree = ""; }; - 9CED2C3E3A829CC3DF8CE284B6307674 /* MCSAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetManager.h; path = SJMediaCacheServer/Core/Asset/MCSAssetManager.h; sourceTree = ""; }; + 9C5A3F8C7171D397769DAC214EA96F55 /* HLSContentAESKeyReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentAESKeyReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentAESKeyReader.h; sourceTree = ""; }; 9D6575F7C5D973874EABB508442F241B /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; 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; }; 9DFE326F84B719D440676E11775E3B93 /* SJFullscreenPopGesture.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJFullscreenPopGesture.release.xcconfig; sourceTree = ""; }; 9E2FF9A82875A373B9C4632EEB646872 /* SJVideoPlayerURLAsset+SJSubtitlesAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJVideoPlayerURLAsset+SJSubtitlesAdd.h"; path = "SJBaseVideoPlayer/Common/Implements/SJVideoPlayerURLAsset+SJSubtitlesAdd.h"; sourceTree = ""; }; 9E50A8C76370804B7BC47E3FC78C9872 /* SJVideoPlayerClipsConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerClipsConfig.h; sourceTree = ""; }; - 9ECC91BBEC28834BF5C49A9D534DDA5B /* HTTPFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPFileResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPFileResponse.m; sourceTree = ""; }; 9ED4A0CFD308499ED4CD2D7B4789E356 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; + 9F2DCDF678CD480DAA83F966D674BD65 /* MCSAssetUsageLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetUsageLog.m; path = SJMediaCacheServer/Core/Asset/MCSAssetUsageLog.m; sourceTree = ""; }; 9F59BEA752C73D8454DFD7E54D5C947E /* SJRouter.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJRouter.release.xcconfig; sourceTree = ""; }; 9F66FD2A4DF88F37607CDF17C3364C54 /* SJBaseTableViewHeaderFooterView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseTableViewHeaderFooterView.h; path = SJUIKit/Base/SJBaseTableViewHeaderFooterView.h; sourceTree = ""; }; 9F7D77E1B5093E881CB2A230AC3ABA84 /* SJSQLite3Logger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLite3Logger.m; path = SJUIKit/SQLite3/Core/SJSQLite3Logger.m; sourceTree = ""; }; + 9F840E3DA338DACD65BBDA02C5F10449 /* HLSReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSReader.m; sourceTree = ""; }; 9F90BEFE9A79EDD4FB51BDD6A90FF67C /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; 9FCA9CFC70EAC2F50D15466FAD13EA5D /* UILabel+AsyncLoad.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+AsyncLoad.h"; path = "SJUIKit/AsyncLoad/UILabel+AsyncLoad.h"; sourceTree = ""; }; A0C966AC3BD5064BA778AB7FE9F8718D /* SJVideoPlayerLocalizedStringKeys.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerLocalizedStringKeys.m; sourceTree = ""; }; + A0E2BD60FD53F5041C53A8CFA73DAB88 /* MCSQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSQueue.h; path = SJMediaCacheServer/Core/Common/MCSQueue.h; sourceTree = ""; }; A100709491C4C6B1A2BFEAF334EFF536 /* SJFullscreenPopGesture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFullscreenPopGesture.h; path = SJFullscreenPopGesture/ObjC/SJFullscreenPopGesture.h; sourceTree = ""; }; - A136BCD3A068F580B62D55D027794BF4 /* FILEContentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEContentProvider.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.h; sourceTree = ""; }; + A171F46C5C041C66631D83292ABE7339 /* DDData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDData.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDData.h; sourceTree = ""; }; + A1926FDFCA182EB64E9A112542CA77A2 /* FILEContentReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEContentReader.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.h; sourceTree = ""; }; A1D918206A7F44D42E9619BE557CD314 /* UIImageView+AsyncLoadImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AsyncLoadImage.h"; path = "SJUIKit/AsyncLoad/UIImageView+AsyncLoadImage.h"; sourceTree = ""; }; A20ED9C28F17151812A2F7904FFAE33F /* SJSQLiteErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLiteErrors.m; path = SJUIKit/SQLite3/Core/SJSQLiteErrors.m; sourceTree = ""; }; A22E5CAA6C9295980EF5EACAE123CBC1 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; A238F1DF64496E3B8B79CBB2355B0875 /* SJBaseVideoPlayer+TestLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJBaseVideoPlayer+TestLog.h"; path = "SJBaseVideoPlayer/SJBaseVideoPlayer+TestLog.h"; sourceTree = ""; }; - A2916B555912E0AD1DBF37A2208B0799 /* HTTPServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPServer.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPServer.m; sourceTree = ""; }; A2D98670DEF160D7BD94E28A09A160F4 /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; + A31508EFB4BFFA1057C59D7CA0CB89EE /* MCSAssetDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetDefines.h; path = SJMediaCacheServer/Core/Asset/MCSAssetDefines.h; sourceTree = ""; }; A39ECDB4D940A8F2ACAD1ED0506B242E /* UIView+SJAnimationAdded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIView+SJAnimationAdded.h"; sourceTree = ""; }; A3ABCC5F1AF057A23C74420770A0A409 /* SJSQLite3TableClassCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLite3TableClassCache.m; path = SJUIKit/SQLite3/Core/SJSQLite3TableClassCache.m; sourceTree = ""; }; + A52754245B9F4E35EF6900A31D2326DE /* HTTPAuthenticationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPAuthenticationRequest.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPAuthenticationRequest.m; sourceTree = ""; }; A595B4916920B663D21DE9AD391D8078 /* SJSQLiteColumnInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLiteColumnInfo.h; path = SJUIKit/SQLite3/Core/SJSQLiteColumnInfo.h; sourceTree = ""; }; A5AF8DAF56E7DA13007650E986F7780C /* SJVideoPlayerControlMaskView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerControlMaskView.h; sourceTree = ""; }; - A5D4504DAF19ECAEE5E23D36D612B47C /* FILEContentReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEContentReader.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.h; sourceTree = ""; }; + A5D09541C6504C8E13BF08E2A5E75A26 /* FILEReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEReader.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEReader.m; sourceTree = ""; }; A70AEE260097FB8D500E316332B49588 /* CALayer+SJBaseVideoPlayerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+SJBaseVideoPlayerExtended.h"; path = "SJBaseVideoPlayer/Common/UIKit/CALayer+SJBaseVideoPlayerExtended.h"; sourceTree = ""; }; A731F0BAC1A0E438AC016EA6ECBA09AF /* SJSQLiteObjectInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLiteObjectInfo.h; path = SJUIKit/SQLite3/Core/SJSQLiteObjectInfo.h; sourceTree = ""; }; - A8321E22660F35BFC88CA35CCBD2C888 /* HTTPDynamicFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPDynamicFileResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDynamicFileResponse.h; sourceTree = ""; }; A83CB57F8B31B12372E3C7FF285CC9BE /* SJMakeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJMakeView.m; path = SJUIKit/UIMaker/Core/SJMakeView.m; sourceTree = ""; }; A8AF827443977ACAA7304A8F7480B47E /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; + A9348ACA2645480CF86CF5C00EC14854 /* MCSPrefetcherManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSPrefetcherManager.m; path = SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.m; sourceTree = ""; }; A944988121EB9412AF6434A0D862C700 /* SJTimerControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJTimerControl.m; path = SJBaseVideoPlayer/Common/Utils/SJTimerControl.m; sourceTree = ""; }; + A9F545D09F3D8A98F0E5D82AAA59285B /* SJMediaCacheServer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJMediaCacheServer.release.xcconfig; sourceTree = ""; }; AA9DF7F114DD7A016F07B3C88ED0CCE6 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; - AAC526133E463178994F71B815E5FD07 /* MCSError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSError.m; path = SJMediaCacheServer/Core/Common/MCSError.m; sourceTree = ""; }; AAFA2AE81D756D96E9A2F92E1413F20D /* UIScrollView+ListViewAutoplaySJAdd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+ListViewAutoplaySJAdd.h"; path = "SJBaseVideoPlayer/UIScrollView+ListViewAutoplaySJAdd.h"; sourceTree = ""; }; AB2374129F2435103CD3FEB47E901A21 /* SJBaseVideoPlayerConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseVideoPlayerConst.h; path = SJBaseVideoPlayer/Common/Const/SJBaseVideoPlayerConst.h; sourceTree = ""; }; - AB3306BED9BA14236DDBB7746BEEA77F /* MCSProxyTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSProxyTask.m; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyTask.m; sourceTree = ""; }; AB5E10317B4E451B07E36AAB8837E162 /* SJPrompt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPrompt.h; path = SJBaseVideoPlayer/Common/Implements/SJPrompt.h; sourceTree = ""; }; - AB83BCBB5BCF54268252E159B7A7939A /* MCSAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetManager.m; path = SJMediaCacheServer/Core/Asset/MCSAssetManager.m; sourceTree = ""; }; ACA932ABB07FE499B4138BDD37BF0105 /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; - ACECBCFA5C04C0D94B4A78E7D5E041BA /* SJMediaCacheServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJMediaCacheServer-prefix.pch"; sourceTree = ""; }; AD2F782DE52727C7D8D684F74EE90D48 /* SJBarrageItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBarrageItem.m; path = SJBaseVideoPlayer/Common/Implements/SJBarrageItem.m; sourceTree = ""; }; ADDAFB2AA4F7FF403F49E10A71A853F0 /* SJUIKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJUIKit.release.xcconfig; sourceTree = ""; }; ADFC2F23C720EE73BF6BA43F2F363950 /* SJSQLiteTableModelConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLiteTableModelConstraints.h; path = SJUIKit/SQLite3/Core/SJSQLiteTableModelConstraints.h; sourceTree = ""; }; AEF9BCFEBC35BF8C6AE1F60121AF196D /* SJVideoPlayerResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerResourceLoader.h; path = SJVideoPlayer/ResourceLoader/SJVideoPlayerResourceLoader.h; sourceTree = ""; }; - AF237771A08885479A912433EAF0D757 /* HLSContentTs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentTs.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentTs.h; sourceTree = ""; }; AF5E422442CEEB48A9603D0F5DBADA95 /* SJSQLite3+QueryExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJSQLite3+QueryExtended.m"; path = "SJUIKit/SQLite3/SJSQLite3+QueryExtended.m"; sourceTree = ""; }; AF7D24C39827E613AE1CCD91193DC2D7 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; - AF8723110FAFCCDAA1AB154BF7CC6E0F /* HTTPErrorResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPErrorResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPErrorResponse.m; sourceTree = ""; }; + AFB06AE96B2E3C6D5685C6D0C87F62B1 /* MCSResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSResponse.h; path = SJMediaCacheServer/Core/ProxyServer/MCSResponse.h; sourceTree = ""; }; AFB79FA03878464B8BE7E5BAAA8D37A5 /* SJAVMediaPlayerLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAVMediaPlayerLoader.h; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLoader.h; sourceTree = ""; }; - B015A785C70AB78A84078CD6AE257075 /* MCSDownload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSDownload.h; path = SJMediaCacheServer/Core/Download/MCSDownload.h; sourceTree = ""; }; B0224AF42F5D4D4A8EEB90D4C0259D2B /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; B02599594DF24163CF561AE745B203C1 /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; - B0CC129930E755BEF6716B8F9E9800D9 /* MCSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSLogger.m; path = SJMediaCacheServer/Core/Common/MCSLogger.m; sourceTree = ""; }; B0D12F463B29A18EEC16349B4021FF05 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; + B13805173D17BC7EBCA901515DE0119D /* FILEPrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEPrefetcher.h; path = SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.h; sourceTree = ""; }; B13DE0F0B98E6AFCC6A5145D25248382 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; B1928E7490CEB4DF1EDF882570043D84 /* SJAVPictureInPictureController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVPictureInPictureController.m; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVPictureInPictureController.m; sourceTree = ""; }; B1A86B6C755E8424DBC63605DDBEEB03 /* SJPlaybackRecordSaveHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackRecordSaveHandler.m; path = SJBaseVideoPlayer/SJPlaybackRecordSaveHandler.m; sourceTree = ""; }; + B20E997D4E0937114B4FFCAB9C6D6940 /* SJMediaCacheServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJMediaCacheServer.m; path = SJMediaCacheServer/SJMediaCacheServer.m; sourceTree = ""; }; B210321EE0AAFCFD88F170C7412A0ADC /* YYModel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYModel-prefix.pch"; sourceTree = ""; }; B264095AC6308FD40ED46AD7DD86AA92 /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; B2BB35AC2F935C866372275931017879 /* SJItemTags.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJItemTags.m; sourceTree = ""; }; - B2CA61BB36DB1604C85EBB737D3A0247 /* WebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WebSocket.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/WebSocket.h; sourceTree = ""; }; - B30376F71DCF09A3DB8A729F06128371 /* MCSConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSConfiguration.h; path = SJMediaCacheServer/Core/Asset/MCSConfiguration.h; sourceTree = ""; }; + B3340696AE25D5003E8FFCA01BFA3A10 /* FILEContentReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEContentReader.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.m; sourceTree = ""; }; B358226556B5F97373B98CF33F2DEE12 /* SJRouteObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRouteObject.m; path = SJRouter/Core/SJRouteObject.m; sourceTree = ""; }; B39478ECBC82DE7682345E0B87F5D2F1 /* SJWatermarkView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJWatermarkView.m; path = SJBaseVideoPlayer/Common/Implements/SJWatermarkView.m; sourceTree = ""; }; B3B06EB33B6F1FA3154142F0A2E91883 /* SJUIKitAttributesDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUIKitAttributesDefines.h; path = SJUIKit/AttributesFactory/UIKitText/SJUIKitAttributesDefines.h; sourceTree = ""; }; B3DFFCA006DABBD3CC640C987C020BB8 /* SJPlaybackListController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackListController.m; path = SJPlaybackListController/SJPlaybackListController.m; sourceTree = ""; }; B43F6AEB05D31EAE479BDF9288373CB0 /* SJVideoPlayerControlMaskView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerControlMaskView.m; sourceTree = ""; }; B4459DA15487099BAAF757D68CA71B5E /* SJDraggingObservationDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJDraggingObservationDefines.h; sourceTree = ""; }; - B46A2496D6110BDEB4B45A411FCE7D15 /* SJMediaCacheServer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJMediaCacheServer.debug.xcconfig; sourceTree = ""; }; B49C9C421A2389B673870CBC0281AFDB /* SJVideoPlayer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJVideoPlayer.release.xcconfig; sourceTree = ""; }; B4A724B11512E5CD7EB6B9BA73A279A8 /* SJPlayModel+SJPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJPlayModel+SJPrivate.h"; path = "SJBaseVideoPlayer/Common/Implements/SJPlayModel+SJPrivate.h"; sourceTree = ""; }; B53ADD5B938712E0D0593A73C5893404 /* SJItemTags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJItemTags.h; sourceTree = ""; }; @@ -1425,12 +1445,13 @@ B572B89B17997E76D86DEF65F97E3E75 /* SJDraggingProgressPopupView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJDraggingProgressPopupView.m; sourceTree = ""; }; B58F7685B09D52DE1C8E68983579AB99 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; }; B5A9ACD11D4CE91EBC7D0566530A4D21 /* SJFlipTransitionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJFlipTransitionManager.m; path = SJBaseVideoPlayer/Common/Implements/SJFlipTransitionManager.m; sourceTree = ""; }; + B5D575AF391B965707C4B064094E84D1 /* MCSAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetManager.h; path = SJMediaCacheServer/Core/Asset/MCSAssetManager.h; sourceTree = ""; }; B62B4E216857876FFAA0370F04B3E2C8 /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; B62D13D58CBC32F3487F3A1A66E2999A /* SJAsyncLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAsyncLoader.m; path = SJUIKit/AsyncLoad/SJAsyncLoader.m; sourceTree = ""; }; B65A81DC91D9A693D4AC8948E15F48E3 /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; B66BAE0E6D2328E826BBB9F6D9B80B34 /* SJVideoPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJVideoPlayer.debug.xcconfig; sourceTree = ""; }; B753BF6CF4DC76DE0451384BB3FBD3BB /* SJVideoPlayerClipsDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerClipsDefines.h; sourceTree = ""; }; - B76D84BCBCF28BE7C3C61E4E9CAA480D /* MCSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSLogger.h; path = SJMediaCacheServer/Core/Common/MCSLogger.h; sourceTree = ""; }; + B77FE2643EDD8D73346D36A50B4BD42B /* HLSContentIndexReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSContentIndexReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentIndexReader.h; sourceTree = ""; }; B788E033A2D84929FD9687A20FEA2F72 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; B796B7F2EC17F5785FB66AF49DD878A0 /* SJUTRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJUTRecorder.m; path = SJUIKit/AttributesFactory/UIKitText/SJUTRecorder.m; sourceTree = ""; }; B7CA7CFFF421A8403C5E7A8D4280A941 /* SJRouter.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJRouter.debug.xcconfig; sourceTree = ""; }; @@ -1439,8 +1460,6 @@ B88CF8E6B72C6661062BA5C4861D7873 /* NSAttributedString+SJMake.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SJMake.h"; path = "SJUIKit/AttributesFactory/NSAttributedString+SJMake.h"; sourceTree = ""; }; B891B04342B052A63862FEFD4B351031 /* libSJPlaybackListController.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJPlaybackListController.a; path = libSJPlaybackListController.a; sourceTree = BUILT_PRODUCTS_DIR; }; B8B5686D5C8BDEEA7F32027620DC9089 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; - B8CB7FAE872BBD4FFB58F853A3014484 /* HTTPDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPDataResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDataResponse.m; sourceTree = ""; }; - B8E0324FF0D7057609B98019A9BD7719 /* MCSQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSQueue.m; path = SJMediaCacheServer/Core/Common/MCSQueue.m; sourceTree = ""; }; B8E7871B8BAE5A1A1A0C807BFB361231 /* SJClipsSaveResultToAlbumHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsSaveResultToAlbumHandler.h; sourceTree = ""; }; B8E86B65A43BA91331CAAC891487A70A /* SJFloatSmallViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJFloatSmallViewController.m; path = SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.m; sourceTree = ""; }; B9B114D208C34EEC8985143F2869A685 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; @@ -1452,17 +1471,15 @@ BB67EEE02C933D1DC2AE7AA2C7860569 /* SJUTUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUTUtils.h; path = SJUIKit/AttributesFactory/UIKitText/SJUTUtils.h; sourceTree = ""; }; BB977543C0A186871E702BFE07F04FE7 /* SJClipsResultShareItemsContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsResultShareItemsContainerView.m; sourceTree = ""; }; BBFAA1DFDE44D3D004E2D6BB9A5C0339 /* SJFitOnScreenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFitOnScreenManager.h; path = SJBaseVideoPlayer/Common/Implements/SJFitOnScreenManager.h; sourceTree = ""; }; - BC81AC058ACE717D9FA65DB57B81F169 /* MCSProxyServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSProxyServer.m; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyServer.m; sourceTree = ""; }; BD109C275E039599402F0828CBF45B47 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; BD2763ADDDBFA80BE56C8739134E08D5 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; BD60A6FBB7AE7160528412ACA95AFEE6 /* NSString+SJBaseVideoPlayerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+SJBaseVideoPlayerExtended.h"; path = "SJBaseVideoPlayer/Common/Foundation/NSString+SJBaseVideoPlayerExtended.h"; sourceTree = ""; }; - BD64B1B5E1AE280A7DB02B2041A87FEA /* FILEPrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEPrefetcher.h; path = SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.h; sourceTree = ""; }; - BE34268EF832F9AF44E2A378DC41E5DF /* MCSProxyServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSProxyServer.h; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyServer.h; sourceTree = ""; }; - BE9B3AEB99DD18697A568E66325F3FD8 /* MCSDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSDefines.h; path = SJMediaCacheServer/Core/Common/MCSDefines.h; sourceTree = ""; }; BF1FAE3E737737421BBC3A63E187CDB6 /* UIViewController+SJPageViewControllerExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+SJPageViewControllerExtended.m"; path = "SJUIKit/PageViewController/PageViewController/Core/UIViewController+SJPageViewControllerExtended.m"; sourceTree = ""; }; C09B41A7CE35E76C2FAD99ABAE697D0D /* NSDate+SJAdded.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+SJAdded.m"; path = "SJUIKit/Date/NSDate+SJAdded.m"; sourceTree = ""; }; + C0BCAB77800255DE01A0FD208D4D465D /* MCSURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSURL.m; path = SJMediaCacheServer/Core/Common/MCSURL.m; sourceTree = ""; }; C0BF5F73B29C592D63F5303624D6498B /* SJResidentThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJResidentThread.h; path = SJUIKit/Thread/SJResidentThread.h; sourceTree = ""; }; C0CFE75E571AE7754AEDB5EBA7891229 /* SJTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJTaskQueue.h; path = SJUIKit/Queues/SJTaskQueue.h; sourceTree = ""; }; + C1328D107AA65F8BE807D2409FDF907C /* HLSParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSParser.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSParser.h; sourceTree = ""; }; C1CA44520F726F2BFBA4BAD578F0A754 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; C29C85CA36F0438F6BBA58EE8FFF5934 /* SJUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUIKit.h; path = SJUIKit/SJUIKit.h; sourceTree = ""; }; C2B841B023207F4C7033C53C6B679F4B /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; @@ -1472,8 +1489,10 @@ C3BB86B476225A4EC9F7FEDD67788A88 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; C415C1208D3ED89106C3C57ED01CFC26 /* SJQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJQueue.m; path = SJUIKit/Queues/SJQueue.m; sourceTree = ""; }; C446BA4924D94445F06CBAF59AA1E319 /* SJSQLite3+QueryExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SJSQLite3+QueryExtended.h"; path = "SJUIKit/SQLite3/SJSQLite3+QueryExtended.h"; sourceTree = ""; }; + C51F52CA95017D97749BE2ABA2171B2B /* MultipartMessageHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartMessageHeader.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeader.m; sourceTree = ""; }; C539C84D4FE7D54EB113417AF356876A /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; C53AAEF001D29B559B6EEC72C8D94DBF /* SJBaseCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseCollectionViewCell.m; path = SJUIKit/Base/SJBaseCollectionViewCell.m; sourceTree = ""; }; + C5D2A2A7417893F93C20C8A76904A9DB /* MCSConsts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSConsts.m; path = SJMediaCacheServer/Core/Common/MCSConsts.m; sourceTree = ""; }; C62EDB7CFD26DE1622FEE087F7181150 /* SJClipsCommonViewLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJClipsCommonViewLayer.h; sourceTree = ""; }; C71E17D293D3E700F24F63BE914E18F6 /* SJRouteInterceptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRouteInterceptor.m; path = SJRouter/Core/SJRouteInterceptor.m; sourceTree = ""; }; C7EBA27B93ECA27E57FEE6B99547F096 /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; @@ -1484,11 +1503,9 @@ C93BB319407EA74E5D8D868FABE3E2E0 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; C9405C36F76CA6C4E38BE7849BDA85E3 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; C94082DFA108F18F64A1EE7FF1024001 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; - C96ED50450003532CD54D3C4F4275B9C /* HTTPErrorResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPErrorResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPErrorResponse.h; sourceTree = ""; }; C9B6DDFA761C9DFAE07C84C97FA74243 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; CA4BEAE6BDE4DBB6F0E2A4C54F057B64 /* NSTimer+SJAssetAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTimer+SJAssetAdd.m"; path = "SJBaseVideoPlayer/Common/Foundation/NSTimer+SJAssetAdd.m"; sourceTree = ""; }; CA5005F1F626867F351623A55B9F59C1 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; - CA8FC01C3816967CDB0BDB647CBFF07A /* HTTPConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPConnection.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPConnection.m; sourceTree = ""; }; CABA7896EC27F5C017ADF1FD1D1BE108 /* SJLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJLoadingView.h; sourceTree = ""; }; CAF9D4361B5E5193B568818DF8A5A541 /* SJClipsButtonContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsButtonContainerView.m; sourceTree = ""; }; CB410245F325EB4ACF2D31E5560093A0 /* SJBaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseTableViewCell.h; path = SJUIKit/Base/SJBaseTableViewCell.h; sourceTree = ""; }; @@ -1498,17 +1515,15 @@ CCEDA44F93BF9473D5E23E5D4D7AEA20 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; CD2A59BFCA0A51F2EB93847ED2B3665F /* SJPlayModelPropertiesObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlayModelPropertiesObserver.m; path = SJBaseVideoPlayer/Common/Implements/SJPlayModelPropertiesObserver.m; sourceTree = ""; }; CD9F4CAB334BC9B1A0074BA0DDB844B3 /* SJPageMenuBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPageMenuBar.h; path = SJUIKit/PageViewController/PageMenuBar/SJPageMenuBar.h; sourceTree = ""; }; - CDC03E5E871D8C2DD597A103FFDD2DF0 /* FILEReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEReader.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEReader.h; sourceTree = ""; }; CDFB5E5A60857DD833C527C579471F70 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; CE02D15D533EAD44A5F7143B69D54D03 /* MJRefreshConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConfig.m; path = MJRefresh/MJRefreshConfig.m; sourceTree = ""; }; - CE1B69501D726F6826239456C327DC2E /* HTTPLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPLogging.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPLogging.h; sourceTree = ""; }; CE96A9D98C4C65B6A366FCFF3CE1EA44 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; CEC48720B31095CEBA50478A55AC208D /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; CEE0804F6A32C8826A489B9B4111C5E2 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; + CF236096E6BC28A79D1D2D54E203D897 /* MCSConsts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSConsts.h; path = SJMediaCacheServer/Core/Common/MCSConsts.h; sourceTree = ""; }; CF26DB0BE7FE916DD3F0C8ADDFD1DD96 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; - CF2AF7895764E903C170399FEC6FBD52 /* FILEReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FILEReader.m; path = SJMediaCacheServer/Core/Asset/FILE/FILEReader.m; sourceTree = ""; }; CF3D30F72694CC0C2FB250B334C009D9 /* SJSQLiteCore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLiteCore.m; path = SJUIKit/SQLite3/Core/SJSQLiteCore.m; sourceTree = ""; }; - CF432D2EFA10E392C080AF8AAC35A1CB /* FILEContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEContent.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEContent.h; sourceTree = ""; }; + CF3EF3F12ECF115ADA607E98C1789F1A /* MCSPrefetcherManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSPrefetcherManager.h; path = SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.h; sourceTree = ""; }; CF71BD8DBCA3A0D7BBB352B44D69F4B4 /* SJLoadFailedControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJLoadFailedControlLayer.h; sourceTree = ""; }; D0253F24C0C0FAB8E507421CB162D2C6 /* SJVideoPlayerURLAsset+SJControlAdd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SJVideoPlayerURLAsset+SJControlAdd.m"; sourceTree = ""; }; D0257B34702D44B6FE17BF2C7645D6DB /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; @@ -1521,6 +1536,7 @@ D13B11477C3AB729A658A9329B6448FB /* SJUTAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUTAttributes.h; path = SJUIKit/AttributesFactory/UIKitText/SJUTAttributes.h; sourceTree = ""; }; D13E739A02B7FA73CC1AB9E9D33B28B4 /* NSObject+YYModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YYModel.m"; path = "YYModel/NSObject+YYModel.m"; sourceTree = ""; }; D13FE04036709F5A2335F57BFDDE4A1E /* SJUTRegexHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUTRegexHandler.h; path = SJUIKit/AttributesFactory/UIKitText/SJUTRegexHandler.h; sourceTree = ""; }; + D16EBF331B8382E1A3CABC897FE59E17 /* HLSAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSAsset.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSAsset.m; sourceTree = ""; }; D1701CB309FB5D6F2894E80F963DA15B /* SJPlayModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlayModel.m; path = SJBaseVideoPlayer/Common/Implements/SJPlayModel.m; sourceTree = ""; }; D1ABEDA1C56F54F2F00CD316F291413B /* SJVideoPlayerClipsGeneratedResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerClipsGeneratedResult.m; sourceTree = ""; }; D1D8A74AB5B7C8EEC5413809FBA48D2B /* SJDraggingProgressPopupView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJDraggingProgressPopupView.h; sourceTree = ""; }; @@ -1528,13 +1544,14 @@ D2628532207F79438ECB6B9AA118303D /* UIScrollView+SJPageViewControllerExtended.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+SJPageViewControllerExtended.h"; path = "SJUIKit/PageViewController/PageViewController/Core/UIScrollView+SJPageViewControllerExtended.h"; sourceTree = ""; }; D26B68DF9D9AD97C69EDD590CC2822DE /* SJBaseVideoPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJBaseVideoPlayer.debug.xcconfig; sourceTree = ""; }; D2A019A0AD97FD48BD74D7F7A8760884 /* SJEdgeControlLayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlLayer.h; sourceTree = ""; }; - D2C1934A328D320C554E64245A69AF38 /* HLSParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSParser.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSParser.m; sourceTree = ""; }; D2EE7014D1FE6B3143866C53704D22EB /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; D30FB2B33C854CB8ACCB6CED9707CD0D /* SJQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJQueue.h; path = SJUIKit/Queues/SJQueue.h; sourceTree = ""; }; D32F2F828073E773CCFF5CDB68E6A3C4 /* SJUTRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUTRecorder.h; path = SJUIKit/AttributesFactory/UIKitText/SJUTRecorder.h; sourceTree = ""; }; D35CD4F8D0E9BDAC8F9B19EFDEE73B71 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; D377D069DFDEE0B5711704BA2DD9545E /* SJVideoPlayerControlLayerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerControlLayerProtocol.h; path = SJBaseVideoPlayer/Common/Interfaces/SJVideoPlayerControlLayerProtocol.h; sourceTree = ""; }; D3D6224C2FA299A02312C9C8834FDD93 /* SJVideoPlayerRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerRegistrar.h; path = SJBaseVideoPlayer/Common/Utils/SJVideoPlayerRegistrar.h; sourceTree = ""; }; + D3D651C456E32E871618A7FD59B1873A /* HLSReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSReader.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSReader.h; sourceTree = ""; }; + D3D737877DA7646D78330FB9C15A5DDD /* MCSRootDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSRootDirectory.h; path = SJMediaCacheServer/Core/Common/MCSRootDirectory.h; sourceTree = ""; }; D409DF0227B42F346E15A0AA1B6A1737 /* SJScrollingTextMarqueeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJScrollingTextMarqueeView.m; sourceTree = ""; }; D444CDB611C89A31497695905D2BA023 /* libSJRouter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJRouter.a; path = libSJRouter.a; sourceTree = BUILT_PRODUCTS_DIR; }; D471F55F9321608B0C128A984B9972B5 /* SJRunLoopTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRunLoopTaskQueue.m; path = SJUIKit/Queues/SJRunLoopTaskQueue.m; sourceTree = ""; }; @@ -1544,30 +1561,28 @@ D773C25C7F3C54BB756DDD6213FC4A6B /* SJUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SJUIKit-prefix.pch"; sourceTree = ""; }; D78AFFD77961193A1F175E6977693911 /* SJFlipTransitionManagerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFlipTransitionManagerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJFlipTransitionManagerDefines.h; sourceTree = ""; }; D7E0A3284FF707C2431429C0C24D172B /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; - D7E91F99D0D7B04C4F1AB1FDA4A3ADA6 /* HTTPFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPFileResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPFileResponse.h; sourceTree = ""; }; D7EE22B61151054A1453DEE032661281 /* SJClipsResultShareItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsResultShareItem.m; sourceTree = ""; }; + D81C32A3CA916B11A414424422113622 /* MCSQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSQueue.m; path = SJMediaCacheServer/Core/Common/MCSQueue.m; sourceTree = ""; }; D83CDBC0246F9EB1A4CAAFAF39DE83EB /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; D8C4FBB9813B55041DF24897F64C87D2 /* SJPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlayerView.m; path = SJBaseVideoPlayer/Common/Implements/SJPlayerView.m; sourceTree = ""; }; - D8D980E76261FECBCA2AC5E91732F710 /* MCSResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSResponse.h; path = SJMediaCacheServer/Core/ProxyServer/MCSResponse.h; sourceTree = ""; }; - D90509D46E491F41E23DCA11DB7F8E1D /* HLSAsset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSAsset.h; path = SJMediaCacheServer/Core/Asset/HLS/HLSAsset.h; sourceTree = ""; }; D971A07322B9048E4BCEDBAC83800EAD /* SJVideoPlayerConfigurations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJVideoPlayerConfigurations.h; sourceTree = ""; }; DA3DBFF819CD462E9CDF00085084EA6C /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; DAA8C6204B91976A5F5918EFD305ED5F /* SJPlaybackListControllerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackListControllerProtocol.h; path = SJPlaybackListController/Core/SJPlaybackListControllerProtocol.h; sourceTree = ""; }; DB0F19BB9D721B2DE0050158D74CC8A1 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; DB600A2B5CA714871D134C967B74BAB5 /* SJVideoPlayerClipsConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJVideoPlayerClipsConfig.m; sourceTree = ""; }; - DB64F0EB5F8F52C8D0F468D0D0FD4D31 /* HTTPDynamicFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPDynamicFileResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDynamicFileResponse.m; sourceTree = ""; }; DC06EEF43B1B262F1A4E6BD2E586BA72 /* SJPageMenuItemView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPageMenuItemView.h; path = SJUIKit/PageViewController/PageMenuBar/Core/SJPageMenuItemView.h; sourceTree = ""; }; DC94B52B7921158B5FFA7F3A4743105C /* SJFloatSmallViewControllerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJFloatSmallViewControllerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJFloatSmallViewControllerDefines.h; sourceTree = ""; }; + DC97900CB70795337BD34087AF26C38F /* KTVCocoaHTTPServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KTVCocoaHTTPServer.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/KTVCocoaHTTPServer.h; sourceTree = ""; }; DCAE225C3EE10B254FFA9E752D38401A /* SJSQLite3Condition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLite3Condition.m; path = SJUIKit/SQLite3/Core/SJSQLite3Condition.m; sourceTree = ""; }; DCD696F4BD25BDE713F78ACCDC36A369 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; + DDFB72C5685A24CC8D42542FEA79FB44 /* HLSContentIndexReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentIndexReader.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentIndexReader.m; sourceTree = ""; }; DE092EDFD8FB5D113C0A240D201285FA /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; - DE0A0645E1D6C9FDC95EA772C2C57C07 /* MultipartMessageHeaderField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartMessageHeaderField.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartMessageHeaderField.h; sourceTree = ""; }; - DE3396CE0226A6F1DAE09D3B77A4084B /* HLSAsset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSAsset.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSAsset.m; sourceTree = ""; }; DE4F9A06CA1720B4F68D5E6AF926AA3B /* SJPlaybackObservation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPlaybackObservation.m; path = SJBaseVideoPlayer/Common/Implements/SJPlaybackObservation.m; sourceTree = ""; }; - DE87BA6EE5BD20076D2E0FCCFB2F61AD /* NSURLRequest+MCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+MCS.h"; path = "SJMediaCacheServer/Core/Common/NSURLRequest+MCS.h"; sourceTree = ""; }; DF2061CB493F5AAC1E6EFFD6764B21D9 /* SJControlLayerIdentifiers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJControlLayerIdentifiers.m; sourceTree = ""; }; + DF557669D1B3C93E95FB479A2A91615B /* MCSProxyServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSProxyServer.m; path = SJMediaCacheServer/Core/ProxyServer/MCSProxyServer.m; sourceTree = ""; }; DFAE7EA907B5EC2F8EF1C2E9C606E1AF /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; E02467CE752951B8FB5192A23A2C947F /* SJViewControllerManagerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJViewControllerManagerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJViewControllerManagerDefines.h; sourceTree = ""; }; + E0AAB93A171F57836D3E2EE193E43C28 /* MultipartFormDataParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartFormDataParser.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Mime/MultipartFormDataParser.m; sourceTree = ""; }; E0F309DB92B01629FC681001237F7401 /* SJSQLite3+TableExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJSQLite3+TableExtended.m"; path = "SJUIKit/SQLite3/SJSQLite3+TableExtended.m"; sourceTree = ""; }; E1B48DA2B5F4A310EC2FD9BC588FFF54 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; E1EF26C34BD4EF1FC67ADDD83D4E96B4 /* SJBaseVideoPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJBaseVideoPlayer.m; path = SJBaseVideoPlayer/SJBaseVideoPlayer.m; sourceTree = ""; }; @@ -1575,12 +1590,13 @@ E257991A6FBAF7244D30A1614F2750AA /* SJImagePickerController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJImagePickerController.m; path = SJUIKit/Photo/SJImagePickerController.m; sourceTree = ""; }; E30BDC2809A03AB313CEDD530E57CA83 /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; E346E9ECDB14F2E370D1EABF83209F3C /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; + E36A32E56A2BD36512F796233221DC51 /* MCSAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSAssetManager.m; path = SJMediaCacheServer/Core/Asset/MCSAssetManager.m; sourceTree = ""; }; E38B0AC0EBCBABB3856556406E3952D8 /* SJPageMenuItemView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPageMenuItemView.m; path = SJUIKit/PageViewController/PageMenuBar/Core/SJPageMenuItemView.m; sourceTree = ""; }; E460D5B0416D36F66EE8EC89E5D2FA0A /* libYYModel.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libYYModel.a; path = libYYModel.a; sourceTree = BUILT_PRODUCTS_DIR; }; E49D6D248DD1CEE584E6776B9164A1B2 /* libMJRefresh.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMJRefresh.a; path = libMJRefresh.a; sourceTree = BUILT_PRODUCTS_DIR; }; E4DE603938351D49E770AA223DF18268 /* SJSQLite3+FoundationExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SJSQLite3+FoundationExtended.m"; path = "SJUIKit/SQLite3/SJSQLite3+FoundationExtended.m"; sourceTree = ""; }; - E5178A5AB4033208D356BF18CA9278DA /* HTTPMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPMessage.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPMessage.m; sourceTree = ""; }; E53B93CB87E9A8DD5E434D34C454CC9D /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; + E54774E61FDBBF57294F5EF614FE533B /* MCSAssetFileRead.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetFileRead.h; path = SJMediaCacheServer/Core/Asset/MCSAssetFileRead.h; sourceTree = ""; }; E5646BC6E9398DFB6A748933FAAC8590 /* SJButtonProgressSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJButtonProgressSlider.h; sourceTree = ""; }; E5AA174BA60C14D69580351B098515D1 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; E5CBD65134933DF5F54DA8FF80EBC313 /* SJClipsVideoCountDownView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsVideoCountDownView.m; sourceTree = ""; }; @@ -1588,12 +1604,12 @@ E691C422FD62B9864B0AC04EBA216890 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; E6B218C1D3C090B770D27448F712CC75 /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; E7EF31E720B44E6BF1D0862C013C9335 /* SJBaseProtocols.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBaseProtocols.h; path = SJUIKit/Base/Core/SJBaseProtocols.h; sourceTree = ""; }; + E7F1BC1A0F4E0E168ED0EDA928D1014E /* MCSError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSError.h; path = SJMediaCacheServer/Core/Common/MCSError.h; sourceTree = ""; }; E8222D4BA51A2E2634F4E691BC86C587 /* SJBarrageQueueControllerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJBarrageQueueControllerDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJBarrageQueueControllerDefines.h; sourceTree = ""; }; - E87B7894629DF7D73D83B1C988C0FD29 /* MCSAssetFileRead.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSAssetFileRead.h; path = SJMediaCacheServer/Core/Asset/MCSAssetFileRead.h; sourceTree = ""; }; + E9010DC0EBC28E2E92A1466E1EE286D7 /* FILEContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEContent.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEContent.h; sourceTree = ""; }; E90570A98BEB9F98A1FC6647230C26BF /* SJUIKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SJUIKit.debug.xcconfig; sourceTree = ""; }; - E91BFF85C0A6ED7B9ADA4FC3C975A1D7 /* MCSContents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSContents.h; path = SJMediaCacheServer/Core/Download/MCSContents.h; sourceTree = ""; }; E9247D82A285D17C5E84DB5567EAAA10 /* SJPrompt.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJPrompt.m; path = SJBaseVideoPlayer/Common/Implements/SJPrompt.m; sourceTree = ""; }; - E99ACAA6668C53099B11083BFB785A24 /* HTTPAsyncFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPAsyncFileResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPAsyncFileResponse.m; sourceTree = ""; }; + E97F0D4B7D77991F509BA15D3A7D078E /* HTTPDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPDataResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPDataResponse.m; sourceTree = ""; }; EA3399050B9C1E431649DD91A359D864 /* SJUIMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJUIMaker.h; path = SJUIKit/UIMaker/SJUIMaker.h; sourceTree = ""; }; EB12213346BBEECDCEB2F382F6937BAB /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; EB486581124F5510429C971CA94D0090 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; @@ -1603,6 +1619,7 @@ EC626684FF92E42BED29EE2D32FE7181 /* SJReachabilityDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJReachabilityDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJReachabilityDefines.h; sourceTree = ""; }; EC64D604880068B086EC4394CE65E1BC /* SJMediaPlaybackController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJMediaPlaybackController.h; path = SJBaseVideoPlayer/Common/Implements/SJMediaPlaybackController.h; sourceTree = ""; }; ECAD2B98711BD2B71223B2BB69ADA90B /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; + ECAF630F82EA05CBF91D58E29E52942F /* NSURLRequest+MCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+MCS.m"; path = "SJMediaCacheServer/Core/Common/NSURLRequest+MCS.m"; sourceTree = ""; }; ECD4EFFEA57BD1582679E9F18927152A /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; EDC7C80AF103EDC20D07E68295A075AC /* SJVideoPlayerPresentViewDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJVideoPlayerPresentViewDefines.h; path = SJBaseVideoPlayer/Common/Interfaces/SJVideoPlayerPresentViewDefines.h; sourceTree = ""; }; EE0FE28B2A7CEDC772A9690184A576E1 /* SJAVPictureInPictureController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAVPictureInPictureController.h; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVPictureInPictureController.h; sourceTree = ""; }; @@ -1610,32 +1627,28 @@ EEC0D5C081A547876B855238FD94E968 /* SJDeviceVolumeAndBrightnessManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJDeviceVolumeAndBrightnessManager.h; path = SJBaseVideoPlayer/Common/Implements/SJDeviceVolumeAndBrightnessManager.h; sourceTree = ""; }; EF27BE6260E16FA91E19C7B315AF1E97 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; EF2DC28D1F5573261D4950B2553438D1 /* SJClipsBackButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsBackButton.m; sourceTree = ""; }; - EF4C21B6B8C724A08A74E3190B461A94 /* MCSQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSQueue.h; path = SJMediaCacheServer/Core/Common/MCSQueue.h; sourceTree = ""; }; EFD7D4387694049AF38DA990C80643D2 /* SJEdgeControlLayerAdapters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SJEdgeControlLayerAdapters.h; sourceTree = ""; }; F038694D6AD0E64732715827614AAC4A /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; F06ADB8EC1814C0B41C16B61C06F8757 /* UIScrollView+SJPageViewControllerExtended.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+SJPageViewControllerExtended.m"; path = "SJUIKit/PageViewController/PageViewController/Core/UIScrollView+SJPageViewControllerExtended.m"; sourceTree = ""; }; F0B48D7AEBC288C381A352E83EBF0AAA /* SJClipsGIFCountDownView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJClipsGIFCountDownView.m; sourceTree = ""; }; F0F3DED5AE8214AC82E416626CE048FA /* SJAVMediaPlayerLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJAVMediaPlayerLoader.m; path = SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLoader.m; sourceTree = ""; }; F1804578846AC0921ABDBCDF197DD7B1 /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; + F1933F67666A066DDAE563673A24F47C /* HLSContentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HLSContentProvider.m; path = SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.m; sourceTree = ""; }; F21A5EAF88135F5B4BB309F424F006F9 /* GCDAsyncSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDAsyncSocket.h; path = Source/GCD/GCDAsyncSocket.h; sourceTree = ""; }; - F2A520201E5CCCBF3483E3ADC7784D52 /* HTTPRedirectResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPRedirectResponse.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPRedirectResponse.m; sourceTree = ""; }; + F23FDABEFA7EE43D7B1D689696C03A0D /* HTTPLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPLogging.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPLogging.m; sourceTree = ""; }; + F243EE2D9A88603575BF6F238D70F77B /* FILEContentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FILEContentProvider.h; path = SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.h; sourceTree = ""; }; F30FAD3E41CA3CA6EA88FCEAAD57E591 /* SJLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJLoadingView.m; sourceTree = ""; }; + F327FAF98D9D730DEF67249DD7B4EE41 /* HLSPrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSPrefetcher.h; path = SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.h; sourceTree = ""; }; F39670FE093D0791986C5EB53FE83F42 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; - F41B8C91F2A906660C05CB88E6312A48 /* HLSPrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HLSPrefetcher.h; path = SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.h; sourceTree = ""; }; F4977566D8263874914E6B30620FC6B6 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; + F4BABA059BBA87D806277A7683908F0E /* HTTPErrorResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPErrorResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPErrorResponse.h; sourceTree = ""; }; F5517D0299A3F30CA0CA96554FEEC82D /* SJRouteRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJRouteRequest.m; path = SJRouter/Core/SJRouteRequest.m; sourceTree = ""; }; - F55BE01B5831B9EE82527AA733BABCE3 /* HTTPAsyncFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPAsyncFileResponse.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Responses/HTTPAsyncFileResponse.h; sourceTree = ""; }; - F5F3A8FE3990523175250372E7902BBF /* NSFileHandle+MCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileHandle+MCS.m"; path = "SJMediaCacheServer/Core/Common/NSFileHandle+MCS.m"; sourceTree = ""; }; F673A7914DECDA93D5A45654CF5E2279 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; - F73BFCC8CB7C07961248B34795194703 /* MCSRootDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSRootDirectory.h; path = SJMediaCacheServer/Core/Common/MCSRootDirectory.h; sourceTree = ""; }; F766934977F3EFFA3212428BF5D4177F /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; F7785B72FFA7AD5738D7E285153CEECD /* libSJMediaCacheServer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSJMediaCacheServer.a; path = libSJMediaCacheServer.a; sourceTree = BUILT_PRODUCTS_DIR; }; F7B8B1C5F97B9D6ED39F268F558E4C9F /* AVAsset+SJAVMediaExport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "AVAsset+SJAVMediaExport.m"; path = "SJBaseVideoPlayer/AVPlayer/Core/AVAsset+SJAVMediaExport.m"; sourceTree = ""; }; F7F818EA1775429352AB6E7F2E9B8C9B /* SJSQLite3.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJSQLite3.m; path = SJUIKit/SQLite3/SJSQLite3.m; sourceTree = ""; }; F8714EE7CE9F2D75158D60BAF9067D9B /* SJRotationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJRotationManager.h; path = SJBaseVideoPlayer/Common/Implements/SJRotationManager.h; sourceTree = ""; }; - F9952141DEE64582EA1F93357605D1EB /* DDData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDData.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDData.m; sourceTree = ""; }; - F9AA97EE718899F70B8F538D15DDA20A /* MCSConsts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MCSConsts.m; path = SJMediaCacheServer/Core/Common/MCSConsts.m; sourceTree = ""; }; - F9E4DFFB927880D482946DA2543D1A6D /* HTTPServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPServer.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/HTTPServer.h; sourceTree = ""; }; F9EC09874E19E1B282CC69FCEDE178F3 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; FA02658055F7B11B255FDDBD3C8870CF /* SJControlLayerAppearStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SJControlLayerAppearStateManager.m; path = SJBaseVideoPlayer/Common/Implements/SJControlLayerAppearStateManager.m; sourceTree = ""; }; FA031C294261FB9D15336A95C3EAD6F5 /* SJAsyncLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJAsyncLoader.h; path = SJUIKit/AsyncLoad/SJAsyncLoader.h; sourceTree = ""; }; @@ -1648,11 +1661,12 @@ FC431AEF7E2F39F79949D52FE7A2E0AA /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; FCDE97EDBFD7DF62B0B9622B2F3EA8A6 /* SJControlLayerSwitcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SJControlLayerSwitcher.m; sourceTree = ""; }; FCEEDF8927741E160A84A4E96A8A3B05 /* NSObject+SJAsyncLoad.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+SJAsyncLoad.m"; path = "SJUIKit/AsyncLoad/NSObject+SJAsyncLoad.m"; sourceTree = ""; }; + FD1A3C70263DA06587A11D2AC56F9ADD /* DDNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDNumber.m; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/Categories/DDNumber.m; sourceTree = ""; }; + FD3240837E2D69BF7D8E3B438F7EC45D /* WebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WebSocket.h; path = SJMediaCacheServer/KTVCocoaHTTPServer/Classes/WebSocket.h; sourceTree = ""; }; FD4A52291819F86E185AF98F0BD653C9 /* SJSQLite3TableInfoCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJSQLite3TableInfoCache.h; path = SJUIKit/SQLite3/Core/SJSQLite3TableInfoCache.h; sourceTree = ""; }; FD7E23DBA8359E17F9FAF7DABDCC7EED /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; FDD801D25EA8759C54D9CD7BB9106AB0 /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; FDEB7110344C3E7C743D25E5B6A37776 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; - FE6B5DA77A84020C0382F08B54C6F686 /* MCSURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MCSURL.h; path = SJMediaCacheServer/Core/Common/MCSURL.h; sourceTree = ""; }; FF21C0A08A97E0AE2E26D80006194D39 /* SJControlLayerAppearStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJControlLayerAppearStateManager.h; path = SJBaseVideoPlayer/Common/Implements/SJControlLayerAppearStateManager.h; sourceTree = ""; }; FF680D01A217DC730C9FE4E3E626D197 /* SJPlaybackObservation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SJPlaybackObservation.h; path = SJBaseVideoPlayer/Common/Implements/SJPlaybackObservation.h; sourceTree = ""; }; /* End PBXFileReference section */ @@ -1679,49 +1693,49 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 466FED6AF471C7276453E97E43B0A5C6 /* Frameworks */ = { + 30C693F9F91A219502757968E2B26637 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 56E7B9E4E4F38DBBF44B252348D19D46 /* Frameworks */ = { + 466FED6AF471C7276453E97E43B0A5C6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 7E80886A77B7A91B1BC733E90677B568 /* Frameworks */ = { + 56E7B9E4E4F38DBBF44B252348D19D46 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 8155C3C4BC8420EF1586B0648B0D6388 /* Frameworks */ = { + 8ED7EF35DC0D6DD03DADA74C8A44C9FB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9446F26D4B9D26A514B6E93D547C14B6 /* Frameworks */ = { + 9A8E5412CB0D1C65610568029C8C6240 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9A8E5412CB0D1C65610568029C8C6240 /* Frameworks */ = { + A49283F52929A1601817100F489E96BB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A49283F52929A1601817100F489E96BB /* Frameworks */ = { + A685C76B55464B7C7C9926DAC84B6CD2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -1867,16 +1881,49 @@ path = Switcher; sourceTree = ""; }; - 21E91A0B63C7B87A38A43F2F3FE8178D /* Support Files */ = { + 2647BFA43AEC3F6DB1BD9E0FA9DEF31F /* KTVCocoaHTTPServer */ = { isa = PBXGroup; children = ( - 988BE285DFE700E8E5CD14C305ECB502 /* SJMediaCacheServer-dummy.m */, - ACECBCFA5C04C0D94B4A78E7D5E041BA /* SJMediaCacheServer-prefix.pch */, - B46A2496D6110BDEB4B45A411FCE7D15 /* SJMediaCacheServer.debug.xcconfig */, - 5084EF22EE0C12706C7EAEC6CA599D08 /* SJMediaCacheServer.release.xcconfig */, + A171F46C5C041C66631D83292ABE7339 /* DDData.h */, + 2B3CD619EBB822FE3B724426A62CF7CF /* DDData.m */, + 37F575B277367BCFAD13C2932F747E9F /* DDNumber.h */, + FD1A3C70263DA06587A11D2AC56F9ADD /* DDNumber.m */, + 8FEC9A59BA887087122827E42736A024 /* DDRange.h */, + 593CE158626E3CA8C666B28A8C879616 /* DDRange.m */, + 09B2DD5F36D5909AE3AC289038082D64 /* HTTPAsyncFileResponse.h */, + 7E6180B0168C92CBD188A050B92AD60F /* HTTPAsyncFileResponse.m */, + 85E51090CA45B29E7C0B33990D2E8308 /* HTTPAuthenticationRequest.h */, + A52754245B9F4E35EF6900A31D2326DE /* HTTPAuthenticationRequest.m */, + 87B160B255D50873CF7450D1D1DB5505 /* HTTPConnection.h */, + 1C9B35D7FF2CF10C0367D7BA3B343EAE /* HTTPConnection.m */, + 7152CB64B5BC1D45DC4BC82BC97BD0EC /* HTTPDataResponse.h */, + E97F0D4B7D77991F509BA15D3A7D078E /* HTTPDataResponse.m */, + 6E5A1027278A6E38249F7E0B23273A34 /* HTTPDynamicFileResponse.h */, + 2EFA16B5D6250645349BF7DFA07D422C /* HTTPDynamicFileResponse.m */, + F4BABA059BBA87D806277A7683908F0E /* HTTPErrorResponse.h */, + 486A8E5AD51D96C124F1F4CF7E1A1A17 /* HTTPErrorResponse.m */, + 5F2044B494CFF13054EB09F110A57B8E /* HTTPFileResponse.h */, + 8AFF077FAEF6D88ADFC45E7C4D941DB8 /* HTTPFileResponse.m */, + 9BD5F0A5EB250E3A915B1FB439AF0950 /* HTTPLogging.h */, + F23FDABEFA7EE43D7B1D689696C03A0D /* HTTPLogging.m */, + 06671E99E91AAEEEC9169A091A816D5E /* HTTPMessage.h */, + 7A02697056D8CD5A62FE57746EB1801B /* HTTPMessage.m */, + 1B92BE1A0B48CF7F882CF5C89855AF7F /* HTTPRedirectResponse.h */, + 2339F99F0A8D4BD43BA4F3D7E5EBA0DD /* HTTPRedirectResponse.m */, + 363731F9F2C1EDB0ECA0BBD390262543 /* HTTPResponse.h */, + 842ED4007B4D6B178D46597B3BA3C3EB /* HTTPServer.h */, + 1FCFD91DA388D7BC10819DFCA4230E91 /* HTTPServer.m */, + DC97900CB70795337BD34087AF26C38F /* KTVCocoaHTTPServer.h */, + 5B39265485E928A896916FC843606AFC /* MultipartFormDataParser.h */, + E0AAB93A171F57836D3E2EE193E43C28 /* MultipartFormDataParser.m */, + 9324BB1346EE2AF82BC3AD638F7B572B /* MultipartMessageHeader.h */, + C51F52CA95017D97749BE2ABA2171B2B /* MultipartMessageHeader.m */, + 172CE0C57C9A138B843F150EA4B34370 /* MultipartMessageHeaderField.h */, + 9773B9F322079ACC692B3E72000A5BE0 /* MultipartMessageHeaderField.m */, + FD3240837E2D69BF7D8E3B438F7EC45D /* WebSocket.h */, + 0DD321438A32DB32AE2E43C8618DD71C /* WebSocket.m */, ); - name = "Support Files"; - path = "../Target Support Files/SJMediaCacheServer"; + name = KTVCocoaHTTPServer; sourceTree = ""; }; 2726CC7341C45CBA602315902F5F0A87 /* Common */ = { @@ -2101,6 +2148,18 @@ path = "../Target Support Files/SJRouter"; sourceTree = ""; }; + 41FD00D3483B1F5341CDE650C0D64AC2 /* Support Files */ = { + isa = PBXGroup; + children = ( + 4DCBE862ED9105835CB6F8A14E87BC27 /* SJMediaCacheServer-dummy.m */, + 14979D29234F4AE56F74C5F30CAD3E62 /* SJMediaCacheServer-prefix.pch */, + 5FE4C6691D14EDF6DCAD3770E82856AB /* SJMediaCacheServer.debug.xcconfig */, + A9F545D09F3D8A98F0E5D82AAA59285B /* SJMediaCacheServer.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SJMediaCacheServer"; + sourceTree = ""; + }; 44256D69A467CBAB739C0B6881A8FF58 /* Core */ = { isa = PBXGroup; children = ( @@ -2446,87 +2505,6 @@ name = Core; sourceTree = ""; }; - 80EC505533ECB67FCC66B2C4C1A9F1FD /* Core */ = { - isa = PBXGroup; - children = ( - 38E381098A1160DC8B9BC2FA2A11217A /* FILEAsset.h */, - 99A5DFD34D131FB35D1DB667EB5146CF /* FILEAsset.m */, - CF432D2EFA10E392C080AF8AAC35A1CB /* FILEContent.h */, - 61D698E86C117B85F503BBF4A630CED5 /* FILEContent.m */, - A136BCD3A068F580B62D55D027794BF4 /* FILEContentProvider.h */, - 02303DF9ED29892E51880AD279D818A9 /* FILEContentProvider.m */, - A5D4504DAF19ECAEE5E23D36D612B47C /* FILEContentReader.h */, - 0C0AEF62744C94E695300AB630F0554D /* FILEContentReader.m */, - BD64B1B5E1AE280A7DB02B2041A87FEA /* FILEPrefetcher.h */, - 02E8A1EF6873BBB376FD256D8A0DC43C /* FILEPrefetcher.m */, - CDC03E5E871D8C2DD597A103FFDD2DF0 /* FILEReader.h */, - CF2AF7895764E903C170399FEC6FBD52 /* FILEReader.m */, - D90509D46E491F41E23DCA11DB7F8E1D /* HLSAsset.h */, - DE3396CE0226A6F1DAE09D3B77A4084B /* HLSAsset.m */, - 3F7455F2E9FCB46FAB3B0A4A9B4F4346 /* HLSContentAESKeyReader.h */, - 42B797EBED73379F810E3475A7F0FAF6 /* HLSContentAESKeyReader.m */, - 426E8D3F9E9EA61D0D564D45C012A23C /* HLSContentIndexReader.h */, - 98D717AE7899428DB1CDA886347D043B /* HLSContentIndexReader.m */, - 56DA2534B07BA8E2C5EC92FBFD6FEAF8 /* HLSContentProvider.h */, - 53BE70F9DD5D34DDFDB331BC90235CAB /* HLSContentProvider.m */, - AF237771A08885479A912433EAF0D757 /* HLSContentTs.h */, - 746F3A6A212EDD0491289415A0DEC7AB /* HLSContentTs.m */, - 81FAD92448C08AAF35960BB136000B93 /* HLSContentTSReader.h */, - 2AA896164496F72445805CCC88E6EC44 /* HLSContentTSReader.m */, - 7DA48C8A1C19346EEBFB32937D7415DF /* HLSParser.h */, - D2C1934A328D320C554E64245A69AF38 /* HLSParser.m */, - F41B8C91F2A906660C05CB88E6312A48 /* HLSPrefetcher.h */, - 6EF8A71A4FAC3FAAAD5D32D16A842EC2 /* HLSPrefetcher.m */, - 04EEB1F95F8A934BC175E59FE8374C1F /* HLSReader.h */, - 1B789CB5F9D1EB2D22C2A6997E33447F /* HLSReader.m */, - 30E9C0E72D892C0D423DF8BAD77A1A10 /* MCSAssetDefines.h */, - E87B7894629DF7D73D83B1C988C0FD29 /* MCSAssetFileRead.h */, - 2BF1D57415E9AC8567C00D99E52837EB /* MCSAssetFileRead.m */, - 9CED2C3E3A829CC3DF8CE284B6307674 /* MCSAssetManager.h */, - AB83BCBB5BCF54268252E159B7A7939A /* MCSAssetManager.m */, - 7BBCEECFA2242D30C62A413A3ACFBE1E /* MCSAssetUsageLog.h */, - 85DAB5841E7C2F3FACDBCBF9568F60E6 /* MCSAssetUsageLog.m */, - B30376F71DCF09A3DB8A729F06128371 /* MCSConfiguration.h */, - 36FEABE690717E15B4915DB340450147 /* MCSConfiguration.m */, - 8BABFE1449A5023480CB6AFDFD3B954E /* MCSConsts.h */, - F9AA97EE718899F70B8F538D15DDA20A /* MCSConsts.m */, - E91BFF85C0A6ED7B9ADA4FC3C975A1D7 /* MCSContents.h */, - 61FEF9173358E4B2008CA72098EB7B25 /* MCSContents.m */, - BE9B3AEB99DD18697A568E66325F3FD8 /* MCSDefines.h */, - B015A785C70AB78A84078CD6AE257075 /* MCSDownload.h */, - 2226F1A474B635F87E46DA416D35D431 /* MCSDownload.m */, - 88D1D2C3EA8DD771F7F1BA292939A402 /* MCSError.h */, - AAC526133E463178994F71B815E5FD07 /* MCSError.m */, - 3CB9E6E814DAEB3DFA95543B8A02CFB7 /* MCSInterfaces.h */, - B76D84BCBCF28BE7C3C61E4E9CAA480D /* MCSLogger.h */, - B0CC129930E755BEF6716B8F9E9800D9 /* MCSLogger.m */, - 88B368976CE508876DF7FC2F6B9BFC22 /* MCSPrefetcherDefines.h */, - 56029A7C92764D5F6689847FAAA12F6E /* MCSPrefetcherManager.h */, - 9A06772908E63DCA99CE3D80CCA32461 /* MCSPrefetcherManager.m */, - BE34268EF832F9AF44E2A378DC41E5DF /* MCSProxyServer.h */, - BC81AC058ACE717D9FA65DB57B81F169 /* MCSProxyServer.m */, - 979D926A2575F7CE987AB89A8B413704 /* MCSProxyTask.h */, - AB3306BED9BA14236DDBB7746BEEA77F /* MCSProxyTask.m */, - EF4C21B6B8C724A08A74E3190B461A94 /* MCSQueue.h */, - B8E0324FF0D7057609B98019A9BD7719 /* MCSQueue.m */, - D8D980E76261FECBCA2AC5E91732F710 /* MCSResponse.h */, - 28AB8D92B7467FD545CC485C6CA9E4E7 /* MCSResponse.m */, - F73BFCC8CB7C07961248B34795194703 /* MCSRootDirectory.h */, - 72120949D9A82D8E1B1F68D1CEA3E394 /* MCSRootDirectory.m */, - FE6B5DA77A84020C0382F08B54C6F686 /* MCSURL.h */, - 8DD5D81A374225C9AD4FAE387F51AEF9 /* MCSURL.m */, - 1F2B193952635F5D14C15D97F0F69F55 /* MCSUtils.h */, - 6E7F549BCC715BB95AC3369990F54854 /* MCSUtils.m */, - 78BC64960B8243C282E2BF6B04EB4C83 /* NSFileHandle+MCS.h */, - F5F3A8FE3990523175250372E7902BBF /* NSFileHandle+MCS.m */, - 55A441296D16688BE34C60D7B083C865 /* NSFileManager+MCS.h */, - 8C32AD769BAF3DE842129633403C6E91 /* NSFileManager+MCS.m */, - DE87BA6EE5BD20076D2E0FCCFB2F61AD /* NSURLRequest+MCS.h */, - 485BCF1CA479B379C03F60F5269EAF24 /* NSURLRequest+MCS.m */, - ); - name = Core; - sourceTree = ""; - }; 822BAC6D78E9FC339B463FD6454635FD /* Date */ = { isa = PBXGroup; children = ( @@ -2638,6 +2616,19 @@ name = Other; sourceTree = ""; }; + 9A07477F6189EECED4D88855E61348E9 /* SJMediaCacheServer */ = { + isa = PBXGroup; + children = ( + 201FF7378324AA46C617BC66A5250902 /* SJMediaCacheServer.h */, + B20E997D4E0937114B4FFCAB9C6D6940 /* SJMediaCacheServer.m */, + B49A9DBD1545E3182FD977A3A34793AB /* Core */, + 2647BFA43AEC3F6DB1BD9E0FA9DEF31F /* KTVCocoaHTTPServer */, + 41FD00D3483B1F5341CDE650C0D64AC2 /* Support Files */, + ); + name = SJMediaCacheServer; + path = SJMediaCacheServer; + sourceTree = ""; + }; 9A89499B7BA9680BCD7C351A7F2B50AC /* Refresh */ = { isa = PBXGroup; children = ( @@ -2729,7 +2720,7 @@ CFEEBB86CB37CF90616F2173B03FF29E /* SDWebImage */, C736A0D3D43C4894B09859F472AD30B5 /* SJBaseVideoPlayer */, FDDCF3942DF7AD245A40765203788D5C /* SJFullscreenPopGesture */, - FD5696560F9BA52A2ECF9F6C22F03390 /* SJMediaCacheServer */, + 9A07477F6189EECED4D88855E61348E9 /* SJMediaCacheServer */, B33330A7EF18E5A95F8507972992B3A6 /* SJPlaybackListController */, CB41AC8C1BF8F989FD979FC868D4B6E2 /* SJRouter */, 493B2A399DE3C53A350C112964A6B5AA /* SJUIKit */, @@ -2782,6 +2773,94 @@ path = SJPlaybackListController; sourceTree = ""; }; + B49A9DBD1545E3182FD977A3A34793AB /* Core */ = { + isa = PBXGroup; + children = ( + 6A9B8B38420B3810E4426748F8D1B346 /* FILEAsset.h */, + 78BF5B10CB968C35A2308C532B5C2C76 /* FILEAsset.m */, + E9010DC0EBC28E2E92A1466E1EE286D7 /* FILEContent.h */, + 29F505993A370DBC4DF0D2B3CCD44E92 /* FILEContent.m */, + F243EE2D9A88603575BF6F238D70F77B /* FILEContentProvider.h */, + 98F0EE8451A1E32E6F55FE3A170527D9 /* FILEContentProvider.m */, + A1926FDFCA182EB64E9A112542CA77A2 /* FILEContentReader.h */, + B3340696AE25D5003E8FFCA01BFA3A10 /* FILEContentReader.m */, + B13805173D17BC7EBCA901515DE0119D /* FILEPrefetcher.h */, + 5428B43B415C37B1EA4BAF11540BFF40 /* FILEPrefetcher.m */, + 9280D21282FC72F527DB90DF68904968 /* FILEReader.h */, + A5D09541C6504C8E13BF08E2A5E75A26 /* FILEReader.m */, + 096D683D9C5ECAD22938774807EFF5FD /* HLSAsset.h */, + D16EBF331B8382E1A3CABC897FE59E17 /* HLSAsset.m */, + 9C5A3F8C7171D397769DAC214EA96F55 /* HLSContentAESKeyReader.h */, + 3E72CC09C8918A97CF46419DD35A2708 /* HLSContentAESKeyReader.m */, + B77FE2643EDD8D73346D36A50B4BD42B /* HLSContentIndexReader.h */, + DDFB72C5685A24CC8D42542FEA79FB44 /* HLSContentIndexReader.m */, + 708CF752F665312EB35F211E80D13BC5 /* HLSContentProvider.h */, + F1933F67666A066DDAE563673A24F47C /* HLSContentProvider.m */, + 4BEDC631C46E4EB59ED7A74931966622 /* HLSContentTs.h */, + 195D8C84619E5928D2843CBCC168B831 /* HLSContentTs.m */, + 55E9C6954424E99D083542C5C991918B /* HLSContentTSReader.h */, + 95ED015B322BBDB7D67CDFBA0BF298F0 /* HLSContentTSReader.m */, + C1328D107AA65F8BE807D2409FDF907C /* HLSParser.h */, + 87B74A87161A5D0E5F59C7228590CAFC /* HLSParser.m */, + F327FAF98D9D730DEF67249DD7B4EE41 /* HLSPrefetcher.h */, + 2E4ED60D5BBB337A3B8ECC0A48902EF5 /* HLSPrefetcher.m */, + D3D651C456E32E871618A7FD59B1873A /* HLSReader.h */, + 9F840E3DA338DACD65BBDA02C5F10449 /* HLSReader.m */, + 46C5F72CEB550806B3E9B0F8F8A3A0DC /* MCSAssetCacheManager.h */, + 830124B41D1432DB6F6C705B422E5BD4 /* MCSAssetCacheManager.m */, + A31508EFB4BFFA1057C59D7CA0CB89EE /* MCSAssetDefines.h */, + 3387290ECD5EFE2B30F6E716F9B7F6AE /* MCSAssetExporterDefines.h */, + 855B2D6D26AA324940B56A00675BA76F /* MCSAssetExporterManager.h */, + 78BE654B8AFBD183DFEE920C202374BB /* MCSAssetExporterManager.m */, + E54774E61FDBBF57294F5EF614FE533B /* MCSAssetFileRead.h */, + 68131CD5E316CD24796A8CC198CBBD0D /* MCSAssetFileRead.m */, + B5D575AF391B965707C4B064094E84D1 /* MCSAssetManager.h */, + E36A32E56A2BD36512F796233221DC51 /* MCSAssetManager.m */, + 1A3A0F4E14153513092C8DD27C92BB6F /* MCSAssetUsageLog.h */, + 9F2DCDF678CD480DAA83F966D674BD65 /* MCSAssetUsageLog.m */, + 0B91EE54C8BCC4BE048A6176CFF1A0E7 /* MCSConfiguration.h */, + 46BBD361175435AB8DA5F652B14DC88C /* MCSConfiguration.m */, + CF236096E6BC28A79D1D2D54E203D897 /* MCSConsts.h */, + C5D2A2A7417893F93C20C8A76904A9DB /* MCSConsts.m */, + 934A884AC3A38FDAE56C8ED1B33FC579 /* MCSContents.h */, + 445E2D6FDF04E3417C9756FFF43DD4D9 /* MCSContents.m */, + 9AEB4C3BE7F0EBBF0C07B1F731886D07 /* MCSDatabase.h */, + 5098B07BF16A4BAA0D24602A31892169 /* MCSDatabase.m */, + 89939B9897BE2F559895AB94328DD232 /* MCSDefines.h */, + 631CCEE2A251C80AA98C87F3AD31189C /* MCSDownload.h */, + 2E66A90AFDB0D9F22881C649EBCD5630 /* MCSDownload.m */, + E7F1BC1A0F4E0E168ED0EDA928D1014E /* MCSError.h */, + 850077C9F0B39F81759DD5A977A022F4 /* MCSError.m */, + 0C146B0E4F8E5EA6E532BC5051846B35 /* MCSInterfaces.h */, + 007AEE4FE7A09C1EFC186CBF5584B996 /* MCSLogger.h */, + 5058D4DB2CB414F962E1172F6A5B374B /* MCSLogger.m */, + 27A8DA400422C036D88E9DEB69815B31 /* MCSPrefetcherDefines.h */, + CF3EF3F12ECF115ADA607E98C1789F1A /* MCSPrefetcherManager.h */, + A9348ACA2645480CF86CF5C00EC14854 /* MCSPrefetcherManager.m */, + 13518208C571795FE254B57D470596AA /* MCSProxyServer.h */, + DF557669D1B3C93E95FB479A2A91615B /* MCSProxyServer.m */, + 35BE06A148B27F8FBCFB6C5C32E02CA7 /* MCSProxyTask.h */, + 650D335E051B97FC37B2A88D94BF4483 /* MCSProxyTask.m */, + A0E2BD60FD53F5041C53A8CFA73DAB88 /* MCSQueue.h */, + D81C32A3CA916B11A414424422113622 /* MCSQueue.m */, + AFB06AE96B2E3C6D5685C6D0C87F62B1 /* MCSResponse.h */, + 7C4FEA7D676B4965F4E0F6ADCA36E120 /* MCSResponse.m */, + D3D737877DA7646D78330FB9C15A5DDD /* MCSRootDirectory.h */, + 5A09C90ADD9F7F140A4763CC77C371CF /* MCSRootDirectory.m */, + 62339D3A7AC5C616BE4B6653486379B6 /* MCSURL.h */, + C0BCAB77800255DE01A0FD208D4D465D /* MCSURL.m */, + 0D811109AEA8D5E409875C2D398193EC /* MCSUtils.h */, + 310E0E3863CEA39B64A028EF12E95A37 /* MCSUtils.m */, + 801432771A18EE6A49F6EBD02AB81E7F /* NSFileHandle+MCS.h */, + 6D8F23E60318550DB3D11E30CBCBBC2D /* NSFileHandle+MCS.m */, + 48108AA291C0966AF3D49E51FC03777A /* NSFileManager+MCS.h */, + 792C4EBADAFC58F63FC52B95CC087392 /* NSFileManager+MCS.m */, + 7BFBC35F7F24F7B96CA1E8C907DE852B /* NSURLRequest+MCS.h */, + ECAF630F82EA05CBF91D58E29E52942F /* NSURLRequest+MCS.m */, + ); + name = Core; + sourceTree = ""; + }; B7F52992B0034D80006A37AEABE0FEDB /* Support Files */ = { isa = PBXGroup; children = ( @@ -3068,51 +3147,6 @@ name = ResourceLoader; sourceTree = ""; }; - DC77FFA9E6D7B52BB43F403159405A48 /* KTVCocoaHTTPServer */ = { - isa = PBXGroup; - children = ( - 5C165BDE43AE8D551D7E47BFAA0F3BE8 /* DDData.h */, - F9952141DEE64582EA1F93357605D1EB /* DDData.m */, - 17C35B707038771C7773B679E182BA97 /* DDNumber.h */, - 310884D912F30F8937EA1AE2BD7065F8 /* DDNumber.m */, - 3E74DC5A673A7D70DFAE67373154CC88 /* DDRange.h */, - 1218A47DBBE16801D12A0E753479C60B /* DDRange.m */, - F55BE01B5831B9EE82527AA733BABCE3 /* HTTPAsyncFileResponse.h */, - E99ACAA6668C53099B11083BFB785A24 /* HTTPAsyncFileResponse.m */, - 33E584567ABF723589E290D1771516C5 /* HTTPAuthenticationRequest.h */, - 8CF229DD4DA10052C0829407D586E175 /* HTTPAuthenticationRequest.m */, - 384BD6E95D37E6E6E89BE0964A3AADEA /* HTTPConnection.h */, - CA8FC01C3816967CDB0BDB647CBFF07A /* HTTPConnection.m */, - 1751EBD13DBA77E60C4CC412CB14BA88 /* HTTPDataResponse.h */, - B8CB7FAE872BBD4FFB58F853A3014484 /* HTTPDataResponse.m */, - A8321E22660F35BFC88CA35CCBD2C888 /* HTTPDynamicFileResponse.h */, - DB64F0EB5F8F52C8D0F468D0D0FD4D31 /* HTTPDynamicFileResponse.m */, - C96ED50450003532CD54D3C4F4275B9C /* HTTPErrorResponse.h */, - AF8723110FAFCCDAA1AB154BF7CC6E0F /* HTTPErrorResponse.m */, - D7E91F99D0D7B04C4F1AB1FDA4A3ADA6 /* HTTPFileResponse.h */, - 9ECC91BBEC28834BF5C49A9D534DDA5B /* HTTPFileResponse.m */, - CE1B69501D726F6826239456C327DC2E /* HTTPLogging.h */, - 19FE46D77B35BD7EF270AF3AC820213B /* HTTPLogging.m */, - 8E55DC96309126DA289E2F7BB3F7F0E8 /* HTTPMessage.h */, - E5178A5AB4033208D356BF18CA9278DA /* HTTPMessage.m */, - 867AD1F7E43278E7C9EBA82C77952C5B /* HTTPRedirectResponse.h */, - F2A520201E5CCCBF3483E3ADC7784D52 /* HTTPRedirectResponse.m */, - 045D5580B8180397C4FFC27C2DBA873D /* HTTPResponse.h */, - F9E4DFFB927880D482946DA2543D1A6D /* HTTPServer.h */, - A2916B555912E0AD1DBF37A2208B0799 /* HTTPServer.m */, - 140C2E808885EB495D0494BC622B28A8 /* KTVCocoaHTTPServer.h */, - 71EBD99881B26F1B8670D3FCF6BEA510 /* MultipartFormDataParser.h */, - 352BFE4CF42A9DEC8920FC8B08FDA1C5 /* MultipartFormDataParser.m */, - 3847E8C01B180FE35579AB8A496055A1 /* MultipartMessageHeader.h */, - 7795C6D8243A702A7C2808378E8EB8F4 /* MultipartMessageHeader.m */, - DE0A0645E1D6C9FDC95EA772C2C57C07 /* MultipartMessageHeaderField.h */, - 888547C3EE1251CC61B0826DB888E1A9 /* MultipartMessageHeaderField.m */, - B2CA61BB36DB1604C85EBB737D3A0247 /* WebSocket.h */, - 39F6CBE53F3D7175F03B4890BA8419B0 /* WebSocket.m */, - ); - name = KTVCocoaHTTPServer; - sourceTree = ""; - }; DCBE85D82A16BC4B34C3CDE27B3A9016 /* PageViewController */ = { isa = PBXGroup; children = ( @@ -3251,19 +3285,6 @@ name = Resources; sourceTree = ""; }; - FD5696560F9BA52A2ECF9F6C22F03390 /* SJMediaCacheServer */ = { - isa = PBXGroup; - children = ( - 5A45EFF88A4DF6D7C79BEC08913B1E7F /* SJMediaCacheServer.h */, - 7CAD439A4C3D25ECA79C8928286B2319 /* SJMediaCacheServer.m */, - 80EC505533ECB67FCC66B2C4C1A9F1FD /* Core */, - DC77FFA9E6D7B52BB43F403159405A48 /* KTVCocoaHTTPServer */, - 21E91A0B63C7B87A38A43F2F3FE8178D /* Support Files */, - ); - name = SJMediaCacheServer; - path = SJMediaCacheServer; - sourceTree = ""; - }; FDDCF3942DF7AD245A40765203788D5C /* SJFullscreenPopGesture */ = { isa = PBXGroup; children = ( @@ -3398,70 +3419,84 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 60752F5275AB15F471534F71945323A8 /* Headers */ = { + 4F28E060E1ACB63A895A8842F31C10A8 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5D624277E19C3BC46BCEC57B57D356AE /* DDData.h in Headers */, + 1EF7F74AFEB246623831B16C202E900E /* DDNumber.h in Headers */, + BBD8A286AD8724801B14F31F8DC46C0E /* DDRange.h in Headers */, + CD1E25EA81E6E1EEC19EF02BAF9ECC8F /* FILEAsset.h in Headers */, + E5B1FC86162D86A9E70A83E6329ED597 /* FILEContent.h in Headers */, + 50B00FDEA27270159BC779EC6E2E8FE8 /* FILEContentProvider.h in Headers */, + 01A10732F98B8DFC8C11B34024E3DE2F /* FILEContentReader.h in Headers */, + EACF0CE04EF763A017F22C5C2A1C973A /* FILEPrefetcher.h in Headers */, + C0BC023988C56432868F3B0466F2A123 /* FILEReader.h in Headers */, + F39798CC9E716DEB248755B7ADAF16E6 /* HLSAsset.h in Headers */, + DF325EAC2B9E9778EB1AD132CFE8638B /* HLSContentAESKeyReader.h in Headers */, + F3F94A1E2EFFA7395D28CABD7CCF91EE /* HLSContentIndexReader.h in Headers */, + 97714B774B6810F9977993FF1DDA090A /* HLSContentProvider.h in Headers */, + 2A1A99CEFE27204DBB115FEB3B1FD314 /* HLSContentTs.h in Headers */, + 49A2F23830F7D283D8682755A5F74DD8 /* HLSContentTSReader.h in Headers */, + 9519861FA771F0C6C7E0E26CA8F732F5 /* HLSParser.h in Headers */, + E55EA8AD2471C2D6E7E250A1F0F7EE53 /* HLSPrefetcher.h in Headers */, + ED90A05F19587A85539E0A49643A1C3B /* HLSReader.h in Headers */, + AE16F1556FBE4AB1B6C41026383A8BC6 /* HTTPAsyncFileResponse.h in Headers */, + 160104B1155C8A14D801B5AC9102485A /* HTTPAuthenticationRequest.h in Headers */, + 31A29C7BC17101F57BFAC50A68014A5D /* HTTPConnection.h in Headers */, + 70D380166CE5ADD6F6E722D2E60282AB /* HTTPDataResponse.h in Headers */, + 210425936BDF9C7FCF8F02D0E7C76709 /* HTTPDynamicFileResponse.h in Headers */, + A0A871A5E178B3C9410ABD85586D0FCF /* HTTPErrorResponse.h in Headers */, + 85E31CFF996745B9A95A1BF860EE5C85 /* HTTPFileResponse.h in Headers */, + BC892C8F8A402D2CF0BE93FCE104FC85 /* HTTPLogging.h in Headers */, + ADBF63CBAC45B25010B08E1FFC43BC94 /* HTTPMessage.h in Headers */, + 7081EBA6C8DEA342B7BDADEB65D7FB17 /* HTTPRedirectResponse.h in Headers */, + E2E015C85C284BDBAF96919E773843C8 /* HTTPResponse.h in Headers */, + A9C5934D984B3741B30D0FF6F851E838 /* HTTPServer.h in Headers */, + 8655D7841854125F82B3EFA03825F56B /* KTVCocoaHTTPServer.h in Headers */, + 440B80BA24DF1849C41197FF51E16C1F /* MCSAssetCacheManager.h in Headers */, + D325B459C1FA6AF9C1478643DA5DAC92 /* MCSAssetDefines.h in Headers */, + D7E29ED5CFB96560319CF0730CE94B52 /* MCSAssetExporterDefines.h in Headers */, + AE46407ACFCC9E8832310EAA11A8DF0A /* MCSAssetExporterManager.h in Headers */, + CDB8A7A3B0371FD2AA8D768AB448B790 /* MCSAssetFileRead.h in Headers */, + 1F5909D6F2F62516C5FF83932D66888B /* MCSAssetManager.h in Headers */, + F7D2D28190305A2F697596B53AD3D249 /* MCSAssetUsageLog.h in Headers */, + EE764788DD9BB2A9E0A223A40651E1C0 /* MCSConfiguration.h in Headers */, + C7FA7A9983975F09A42CE2DEB2F3C9B2 /* MCSConsts.h in Headers */, + 4BC9351E4F674C10003BAD866DABE7C7 /* MCSContents.h in Headers */, + EAE6FE139525609AF768B4019EEDAE4B /* MCSDatabase.h in Headers */, + B7A619E472B5F53CC2B932BA652049F4 /* MCSDefines.h in Headers */, + 8E862D4E6D49D56D785EA1D3E62CB582 /* MCSDownload.h in Headers */, + D5F020F187778795D8D475F140D882A0 /* MCSError.h in Headers */, + 5D7A82AB77B860479357F0B4F2B02E81 /* MCSInterfaces.h in Headers */, + 1E070E3185DC5187F1053013812A440C /* MCSLogger.h in Headers */, + 1BBD9A7F3B684ACEA9A5D6A752EFC54F /* MCSPrefetcherDefines.h in Headers */, + 0C350DE155068645789F94FB55980551 /* MCSPrefetcherManager.h in Headers */, + 53CBB78A188AA472378A13D70115393B /* MCSProxyServer.h in Headers */, + D4E15557868D0F56B0E5D9D5CDAB4B34 /* MCSProxyTask.h in Headers */, + A49072BC9B764675695B79B153523097 /* MCSQueue.h in Headers */, + 670358FEAC2E7F6952E15DB0AFFE2310 /* MCSResponse.h in Headers */, + AEE5F4DCAF74C994C0DFF3B72AD8E2BB /* MCSRootDirectory.h in Headers */, + E61E2F3F54938AB96551F1E0FFF2EC2F /* MCSURL.h in Headers */, + BD370E5DCFA3CF964254DAC2064FF0CA /* MCSUtils.h in Headers */, + 0FE43E246966CDF693E16D38D6DFDE8B /* MultipartFormDataParser.h in Headers */, + 968256C3F53550955B2E3CD4552562E1 /* MultipartMessageHeader.h in Headers */, + 7821DDDD4673B44208C14B48D97B3095 /* MultipartMessageHeaderField.h in Headers */, + 06766DBC85DE41BD428F185A2BDD08CB /* NSFileHandle+MCS.h in Headers */, + 52064CBDF2BF9A24E0DCBA95F3EE5289 /* NSFileManager+MCS.h in Headers */, + 4B85780D2FB7D7569F9535F4AD913BF5 /* NSURLRequest+MCS.h in Headers */, + BC5C3E097AC6FD81D65EF8793A25FC35 /* SJMediaCacheServer.h in Headers */, + 82EDD7AF9CC0233FA3BA836283D67803 /* WebSocket.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6EB386172FBE75081138A82B1DC7FEC2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2E9D14DF107302D286E0F11DAC2B8D2D /* DDData.h in Headers */, - 10D566112D94A961E02A2C54882DFB81 /* DDNumber.h in Headers */, - F6A1ABE2F9BFAD749A4A262166D74EEA /* DDRange.h in Headers */, - AB01BD20A3A80E8709D69A30F787FEF4 /* FILEAsset.h in Headers */, - 22CA68C78E8CECE5FE1EC6EEDB6DC3B3 /* FILEContent.h in Headers */, - F2E4915C12DDBB7419B0B2E9F5569A65 /* FILEContentProvider.h in Headers */, - 83BA8C9E3CBF4DAC1628C69DB54DEC77 /* FILEContentReader.h in Headers */, - D3FA0FFF5EA843078ADB6EC72F2BF1A3 /* FILEPrefetcher.h in Headers */, - A0FAA3254ABDE227258A64485C232851 /* FILEReader.h in Headers */, - 355E358231E98FD785E078AB7B2D281B /* HLSAsset.h in Headers */, - 889C0DC9D220AED46D63D2C6C64945E6 /* HLSContentAESKeyReader.h in Headers */, - 294FB936E9702C4AD65DAC3C3EC2E5A7 /* HLSContentIndexReader.h in Headers */, - 9D5AC832C217FEF952E8EE464A670477 /* HLSContentProvider.h in Headers */, - ECE74E827B7D6F1A43FBB6D886573DE3 /* HLSContentTs.h in Headers */, - 75E6294B0EC1F3D2674C7A7CA72A5A6B /* HLSContentTSReader.h in Headers */, - 6A53AF2849715FD4CD738032E3A5CD79 /* HLSParser.h in Headers */, - 7BA148D2C89C1445005F8682A0B82AA8 /* HLSPrefetcher.h in Headers */, - A8E07C9333AC2A8E216C7436775DF7A6 /* HLSReader.h in Headers */, - AE5C3EA257850F96F5597B5454F33131 /* HTTPAsyncFileResponse.h in Headers */, - D359C3A569F6495086697665239FDBBB /* HTTPAuthenticationRequest.h in Headers */, - CAA4937745B3B1FAE84AC735D2C43F09 /* HTTPConnection.h in Headers */, - 14FF8DDD0758BB2987E2477E78178E6B /* HTTPDataResponse.h in Headers */, - F014F4080818E715E10860C7EE726448 /* HTTPDynamicFileResponse.h in Headers */, - 2CDC8451A8EE2D2AC7E5277E0759C5D6 /* HTTPErrorResponse.h in Headers */, - ACDE227CC8F205AF223A84C49F20533E /* HTTPFileResponse.h in Headers */, - E4A61984F0151156B8107AE015A0390F /* HTTPLogging.h in Headers */, - 80F3BB2D9651FF8F08110FC3FE25B7D7 /* HTTPMessage.h in Headers */, - FD3633983112AAA9E4E21DB1EACB9628 /* HTTPRedirectResponse.h in Headers */, - 33E692D8C50990BEC20CF47BDDF9A490 /* HTTPResponse.h in Headers */, - 56B4A998C1E2989EA26B3A332AFC4CC0 /* HTTPServer.h in Headers */, - 924FBE4EB3752596C33E02ADCC64EDF7 /* KTVCocoaHTTPServer.h in Headers */, - 897D86F4992494EE345F704798A2A8AD /* MCSAssetDefines.h in Headers */, - 6C833FB6936E99D276C6A2BE52DEA583 /* MCSAssetFileRead.h in Headers */, - 7299C2EA2AB9DB105128BDCA4C463BBB /* MCSAssetManager.h in Headers */, - 9BA71F6CED84ACBE780C715484B93862 /* MCSAssetUsageLog.h in Headers */, - 33A758EE5EBD8AED29F483A029DDE0AE /* MCSConfiguration.h in Headers */, - A52A760B7F825B7B27D50B6B33040EED /* MCSConsts.h in Headers */, - CB05DD7E84C0B5CAD838AC7F16F2F25E /* MCSContents.h in Headers */, - 925A609BB048C6D387A0104E32CBDB95 /* MCSDefines.h in Headers */, - 034280DBCCE734F5BBA0F2C81F6A6386 /* MCSDownload.h in Headers */, - 735FE5DD6DA4ECE66C2747B2C211CE3C /* MCSError.h in Headers */, - 8B87D34BC825CA08CD1C90DA6AA11541 /* MCSInterfaces.h in Headers */, - 61A03B69E9CDA31D3245DE5545900657 /* MCSLogger.h in Headers */, - 563E3CAD1DF5EC91552959AE24A2B0F0 /* MCSPrefetcherDefines.h in Headers */, - 2AD7C7B7FC173214C1A15531553756A2 /* MCSPrefetcherManager.h in Headers */, - CC9E5C2E6A9B58CB3E3DFDD902A0493D /* MCSProxyServer.h in Headers */, - 9061A43225E3C94F834D0EFC5055C733 /* MCSProxyTask.h in Headers */, - CFE287EEA6042855A401CD723C132AB7 /* MCSQueue.h in Headers */, - 05887BC3FAD89B9F95710C48E4567DE5 /* MCSResponse.h in Headers */, - 2F200F379295CFA559F84F07E5429EF2 /* MCSRootDirectory.h in Headers */, - F958693E19CA5721F22A7FD7275993FD /* MCSURL.h in Headers */, - 54D8471B7FB946A3C3752DBA757D5364 /* MCSUtils.h in Headers */, - 0719A890DF87074AA999AC213C9B371E /* MultipartFormDataParser.h in Headers */, - 0894591F0E79526791D2B22A4CAEF29B /* MultipartMessageHeader.h in Headers */, - 50D48AA1DA2EC4239BF829BB34D86EFF /* MultipartMessageHeaderField.h in Headers */, - 204A99137273189D0E97D399BC37B435 /* NSFileHandle+MCS.h in Headers */, - 78EC92D1BC17DEE34D1C0B1EB08EAA7F /* NSFileManager+MCS.h in Headers */, - A20890624082C0B3B11718340A494B71 /* NSURLRequest+MCS.h in Headers */, - C82C83168607E8DCFE308BB9185582CB /* SJMediaCacheServer.h in Headers */, - 6F3070541D8C55A61949F299DFB4426A /* WebSocket.h in Headers */, + 9FB5002F2A0DBAFB8BEA98FC0F35679D /* NSObject+YYModel.h in Headers */, + F9D7205C29CE19300D4AB9D4014BD276 /* YYClassInfo.h in Headers */, + 50593A370C1027FC5317A3D6D72CA353 /* YYModel.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3544,94 +3579,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 7AB7DE5AFF95074F9CC271A2F843CD64 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 98FF3EFBCFB4C043C8A5A1389076321C /* NSObject+YYModel.h in Headers */, - 9F41A0B459F12287012D9EB9CDEDC908 /* YYClassInfo.h in Headers */, - CAF790BB593B7C1FEEC07DB4216EC8ED /* YYModel.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7EE0BD2DE4A1E8C08FCD32BED56FE1AB /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B8DB2CA24372A72023504546273D924B /* NSAttributedString+SJMake.h in Headers */, - 134A6185492AA4305AED1011AAC32BDF /* NSDate+SJAdded.h in Headers */, - A80A9567B5FDB6B73256BCF2EB187E7A /* NSObject+SJAsyncLoad.h in Headers */, - F1069C9E82745EB2178845D3888C37C3 /* NSObject+SJObserverHelper.h in Headers */, - 974B57F72DFF24886C32189F255EE7D8 /* SJAppearStateObserver.h in Headers */, - 82EC76A295B5ECF165CA502528420D57 /* SJApplicationInfo.h in Headers */, - E2ACFD90EC345A33A02E369E7F1EBB09 /* SJAsyncLoad.h in Headers */, - 6F0CAB6534D4ECABE8DF635327B7795E /* SJAsyncLoader.h in Headers */, - 79C29613FE2F377F846ED7E132B5DDCF /* SJAttributesFactory.h in Headers */, - FEE20E400C397AFA5C9E47602A99B15A /* SJAttributesRecorder.h in Headers */, - B571B86F7D09CACEBDB7761E1BA03DCA /* SJAttributeWorker.h in Headers */, - FFEAB052869B53D2C79C0ADA84AA9A81 /* SJBase.h in Headers */, - E0F26C306BA61D099ECF873C3E8A2A29 /* SJBaseCollectionReusableView.h in Headers */, - 86B15349CC69B1AFFE7EAEB557EADF5D /* SJBaseCollectionViewCell.h in Headers */, - 76711A97D2000EE724F2E202287D894D /* SJBaseProtocols.h in Headers */, - 14B712B232635652B63D66E5BE4DE083 /* SJBaseTableViewCell.h in Headers */, - D809622A4F0E9CC5C0C2EA47EF67D0AC /* SJBaseTableViewHeaderFooterView.h in Headers */, - EC08EB5F8EBC2577E2E9C989E5BFE017 /* SJBaseViewController.h in Headers */, - F6A0EFD1828AA219008455FBE23C15DD /* SJCornerMask.h in Headers */, - F9EE45E738AE7A0C500524C19F9B2A8D /* SJImagePickerController.h in Headers */, - E2F54D979379EFE69D14C99D25255710 /* SJMakeView.h in Headers */, - 8D9239F6FE1F7AF6E09F8651DB2645F3 /* SJObjectContainer.h in Headers */, - 827E29B47E4F01FE29CA50C3444B94BA /* SJPageCollectionView.h in Headers */, - 84E0A85DC112A9AD88CBE01EC1B1F28F /* SJPageMenuBar.h in Headers */, - 4F4AE2FCBF206AC3A84BA02F6212F3B8 /* SJPageMenuBarScrollIndicator.h in Headers */, - FC5796F8A40E1D192B8E89A878FF97C6 /* SJPageMenuItemView.h in Headers */, - A4C7E3C201576E8504755D39FB08B6CF /* SJPageMenuItemViewDefines.h in Headers */, - 0F8527DE075A75D13B47054D050DC06F /* SJPageViewController.h in Headers */, - 12D6A5DF53077ACC54F2E002FD28FE30 /* SJPageViewControllerItemCell.h in Headers */, - CF415E43D576F99A6DE57AF7C0DE1319 /* SJPresentationQueue.h in Headers */, - 97B7EA6CB93CF7478D758746B112AFC2 /* SJQueue.h in Headers */, - 7914F43D7FC533A7DE6B424852E84419 /* SJResidentThread.h in Headers */, - 213574EF6D1E2505E3E8E8C9FCFF73C0 /* SJRunLoopTaskQueue.h in Headers */, - 3092BE453811D80F09B43ADE3824D149 /* SJSQLite3+FoundationExtended.h in Headers */, - 3CE1F8376C9035828D0C65415ED2FF8E /* SJSQLite3+Private.h in Headers */, - 42390ACA12A171EB01E9C4E8523CADA0 /* SJSQLite3+QueryExtended.h in Headers */, - 8D33704EE8A7A98F299673828DEBB07C /* SJSQLite3+RemoveExtended.h in Headers */, - AD966EBDEC1C2EEEBEAE502F014E2FA2 /* SJSQLite3+TableExtended.h in Headers */, - B4D3BD07FCBACC5551B068D3E688A8C9 /* SJSQLite3.h in Headers */, - E6D05597E1C5D4804ACEBA0EF1DFB290 /* SJSQLite3ColumnOrder.h in Headers */, - 2B02E7150AB14E4ACD94963AACD41140 /* SJSQLite3Condition.h in Headers */, - C5E2CD7DC4F4090D0CAC41B2493379FF /* SJSQLite3Logger.h in Headers */, - 63E0BB081036042DA811D7B446C33DB7 /* SJSQLite3TableClassCache.h in Headers */, - 39170B577F72F0543F26D80225020F5A /* SJSQLite3TableInfoCache.h in Headers */, - CD7BBD8D60FEDB30A1729E2C9C4E0A6E /* SJSQLiteColumnInfo.h in Headers */, - AE27568320ECE6D58613038BB9DCF674 /* SJSQLiteCore.h in Headers */, - 80C029D66BE07A796CDEE78FA48C56E6 /* SJSQLiteErrors.h in Headers */, - 4C07B7976C7BE414C30CC97B4182BCAE /* SJSQLiteObjectInfo.h in Headers */, - DB4FE39D894FACA9D9A29814B1D972E3 /* SJSQLiteTableInfo.h in Headers */, - 570D3A6C763CF0544497F93A40F92BEE /* SJSQLiteTableModelConstraints.h in Headers */, - 1156CC510D2FC8218F2E93EEE875E4DE /* SJSQLiteTableModelProtocol.h in Headers */, - F9E7597177A3CA2A1EC9C061EDECFFB1 /* SJStatusBarManager.h in Headers */, - C2C60E5ADA95B61834A38840C1738089 /* SJTaskQueue.h in Headers */, - 1AE29B8DB9C31734F4AEB49DEE62CC0C /* SJUIKit.h in Headers */, - 41ED95EFF0ACFDB55F3075B26CEE701F /* SJUIKitAttributesDefines.h in Headers */, - DC5925BBBCAAA87F525E50CB5DAA7F28 /* SJUIKitTextMaker.h in Headers */, - 3B0B3B42CB3A89E83D489B35EC38807C /* SJUIMaker.h in Headers */, - 97AF2763758E3E8456292751FBE0C272 /* SJUTAttributes.h in Headers */, - C0EE371C5B059384F74C27977BE6A263 /* SJUTRangeHandler.h in Headers */, - 6703275985555B059933816F70107B4C /* SJUTRecorder.h in Headers */, - 3AFF67C097FDC66925C7DDFB9475A613 /* SJUTRegexHandler.h in Headers */, - 4B4A4612605FDC539FB03DC250C9101E /* SJUTUtils.h in Headers */, - AD75B647D0D2C5BACB54069BA96FD0AE /* UIButton+AsyncLoadImage.h in Headers */, - 721EF21D02EAFED58105FDA1295F6253 /* UIImagePickerController+SJUIKitExtension.h in Headers */, - 8CB41556B5149DDD7BFFFA72AE412844 /* UIImageView+AsyncLoadImage.h in Headers */, - 29ED334B5E82AA2E886FC8048892B274 /* UILabel+AsyncLoad.h in Headers */, - F89A90AC79815A6F3532A70F701F07EF /* UIScrollView+SJPageViewControllerExtended.h in Headers */, - B98246A4B9BCCF6E8A0A9E75EFCC1411 /* UIScrollView+SJRefreshAdd.h in Headers */, - 96E6CC027195E3DF62B68A253BB25D8B /* UISearchBar+AsyncLoad.h in Headers */, - F8AE5D3E93C9E95E2971A1A7A7D796D2 /* UITextField+AsyncLoadImage.h in Headers */, - 0882C8A7983A9EDF1C7B3891D20C2B08 /* UIViewController+SJPageViewControllerExtended.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 83268A4608982FCFF93FA48DCC883251 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3661,6 +3608,84 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 984A68539E50524FF84155A6963FA061 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 769A8868938B2C11EA1CA60C3C52C670 /* NSAttributedString+SJMake.h in Headers */, + 9251BF701E8AAD8AB0FB676ED0C1EC8C /* NSDate+SJAdded.h in Headers */, + 44444E6969B4E8909B16A28CB747BE0D /* NSObject+SJAsyncLoad.h in Headers */, + 040FC0B49E8AD1DA58078D241EFD30A7 /* NSObject+SJObserverHelper.h in Headers */, + 2E9FCABE9F30394C4C5EF21DCE2E6AC7 /* SJAppearStateObserver.h in Headers */, + 67C60A053F5229E6BF83F67D811491E8 /* SJApplicationInfo.h in Headers */, + 59DF8AD9D5D60CF0B01C43BA1F0F1335 /* SJAsyncLoad.h in Headers */, + 8EB5915D9559213494D9F252BB5271FE /* SJAsyncLoader.h in Headers */, + 309F5805FC4DA0590B9C67A85FB2FA81 /* SJAttributesFactory.h in Headers */, + 87C439A89A0D8D876F6567B936677E6D /* SJAttributesRecorder.h in Headers */, + ED35B8F7B8D7C040EFF7B9AB26E18FE1 /* SJAttributeWorker.h in Headers */, + 237BFD9B5B473DDD5BCD19AA193FD56D /* SJBase.h in Headers */, + 49AE91BBFA543D0F1246B767B381E306 /* SJBaseCollectionReusableView.h in Headers */, + E8880E15ADBAE9699F8CF09C20115C2D /* SJBaseCollectionViewCell.h in Headers */, + 2D9DC33A472BFA8832FC944DC617C7AD /* SJBaseProtocols.h in Headers */, + AC42FFEE4662B537BF6D3F5048C741BC /* SJBaseTableViewCell.h in Headers */, + 9EFB12D9203F3B97E3D7A5AB8B4C950E /* SJBaseTableViewHeaderFooterView.h in Headers */, + 7A8648DCC118B018BFD47621756111B3 /* SJBaseViewController.h in Headers */, + 7609F5D603D7BAD2F649240A4A00D518 /* SJCornerMask.h in Headers */, + 75C2B9FAF71448176ED27ECE80AB3D37 /* SJImagePickerController.h in Headers */, + D586F714569AAD00A1CD3340A45FCE54 /* SJMakeView.h in Headers */, + 92970796E3EC1D5A79EA31A9755B9B05 /* SJObjectContainer.h in Headers */, + 26BB524F0704B66B24104167BD418668 /* SJPageCollectionView.h in Headers */, + 14A48A4F9F0AE191E8644ED9B39AAB81 /* SJPageMenuBar.h in Headers */, + 61BDFFB4BC65C5F262DDA34BABC3E84D /* SJPageMenuBarScrollIndicator.h in Headers */, + 02D2B0142F1D87E9BD8DB99887ED26F0 /* SJPageMenuItemView.h in Headers */, + E434A2C348EBB5B62B6CBBD6DF6F1188 /* SJPageMenuItemViewDefines.h in Headers */, + A5025162898C26520DA086A2E5501D6C /* SJPageViewController.h in Headers */, + EB735FDDED5892DF4F5C8F01F73238E2 /* SJPageViewControllerItemCell.h in Headers */, + 84884ED4943B20D7D3C96A94B7AD497A /* SJPresentationQueue.h in Headers */, + FD96DC348C9B0024526EDCF6842ED058 /* SJQueue.h in Headers */, + BAA1FCD3569FBA6F8668C43F2B21135F /* SJResidentThread.h in Headers */, + A0D4370C484C4F9CB2407E0F667BBCEA /* SJRunLoopTaskQueue.h in Headers */, + D0265698B6434E4C89E0DF8DF6961C78 /* SJSQLite3+FoundationExtended.h in Headers */, + 039676F4F24635170BE0CE9EDD3C896A /* SJSQLite3+Private.h in Headers */, + 0C15E01F00667B0385A3BC8125A5F161 /* SJSQLite3+QueryExtended.h in Headers */, + 52A76BCDEA891707229A5D06A2FB934A /* SJSQLite3+RemoveExtended.h in Headers */, + 4404362061933148C756689BE08ADB77 /* SJSQLite3+TableExtended.h in Headers */, + 4806BD0DC2A8A57DB0A7FD6CA739FE66 /* SJSQLite3.h in Headers */, + 1BA2A9AB70B795330A66A9D9BF7A0EE3 /* SJSQLite3ColumnOrder.h in Headers */, + 6F7FA72FD1A5008F4794636A2C82AF0B /* SJSQLite3Condition.h in Headers */, + FB88CF2DA19E1F4CA22F2C699E1F4E55 /* SJSQLite3Logger.h in Headers */, + 07A02E36986EB27A6778E0A5BA76B178 /* SJSQLite3TableClassCache.h in Headers */, + 7B334FCE612F278B38DE61A0AB32B9DC /* SJSQLite3TableInfoCache.h in Headers */, + AE523B1EA7E012FC0F5F19A5DC403A1C /* SJSQLiteColumnInfo.h in Headers */, + D09BFC66DA465EE47C490DE8C4114EEA /* SJSQLiteCore.h in Headers */, + B36666EAE896F28DDD440A818CCA8FAD /* SJSQLiteErrors.h in Headers */, + 37A31ACD79145372BB02899DBAB4C1E8 /* SJSQLiteObjectInfo.h in Headers */, + 31871065507B0A60F08EF4A891E3789F /* SJSQLiteTableInfo.h in Headers */, + 51360FE182C498CD47B0ECA1E1086E54 /* SJSQLiteTableModelConstraints.h in Headers */, + EE98C3D24E6E3D25262D621BB21F3B1A /* SJSQLiteTableModelProtocol.h in Headers */, + FC539E9A584BFBD13D055DF4CC48ABA2 /* SJStatusBarManager.h in Headers */, + 0A594981BE02A7365019DB4249A79268 /* SJTaskQueue.h in Headers */, + DEECE8E4721B0EACF1F8AE07203EE980 /* SJUIKit.h in Headers */, + F131A88E10BB20F6C3521BA8621076FC /* SJUIKitAttributesDefines.h in Headers */, + ED7D3BEB451BEEC8D874EC385F3109E7 /* SJUIKitTextMaker.h in Headers */, + 43092F476256FEE33D78AB900E5151BD /* SJUIMaker.h in Headers */, + 31FF8913511AB47E26F0119A4831AA0B /* SJUTAttributes.h in Headers */, + C10114859BE1E8F9A609EAB7B2A7089F /* SJUTRangeHandler.h in Headers */, + 8CE26E55E4F96F44309BCE4CB0B0BD1B /* SJUTRecorder.h in Headers */, + BC23493B9ED779A2D1DD0A428E595F38 /* SJUTRegexHandler.h in Headers */, + A4A80FC9EA21899D73FA011DCE007A69 /* SJUTUtils.h in Headers */, + B5DBAB468671B5A525EB81D09C00D881 /* UIButton+AsyncLoadImage.h in Headers */, + 6512CDD87CA29C49C80BCC8E57B063D6 /* UIImagePickerController+SJUIKitExtension.h in Headers */, + CEA8F36F2769BC57B5F9F696474A41A7 /* UIImageView+AsyncLoadImage.h in Headers */, + 04016EAF004896380B686F67DDB72176 /* UILabel+AsyncLoad.h in Headers */, + E9E1E0C44A3CB4896F287091221CDDB1 /* UIScrollView+SJPageViewControllerExtended.h in Headers */, + 7D3B6C310DCCF8AF2F3ECC59045C4120 /* UIScrollView+SJRefreshAdd.h in Headers */, + 4C9CCA1D6F44AA49E3770F6670373EE8 /* UISearchBar+AsyncLoad.h in Headers */, + DE15253B42BCE584450D770FAEE60073 /* UITextField+AsyncLoadImage.h in Headers */, + C66C4FB78E301AD82505254358E2F6E6 /* UIViewController+SJPageViewControllerExtended.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9D5CD09EB11EBEA16426B1EEC4E0D1F9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3799,17 +3824,17 @@ }; 53EA424E9D34B39228682599B5DABD60 /* SJMediaCacheServer */ = { isa = PBXNativeTarget; - buildConfigurationList = EC292DBF810346C86DF1A7127E14EBB2 /* Build configuration list for PBXNativeTarget "SJMediaCacheServer" */; + buildConfigurationList = 48EF5458907358E058F201E73BBAD998 /* Build configuration list for PBXNativeTarget "SJMediaCacheServer" */; buildPhases = ( - 60752F5275AB15F471534F71945323A8 /* Headers */, - E8696C3883F9EEF570B9E7EDB25179B5 /* Sources */, - 9446F26D4B9D26A514B6E93D547C14B6 /* Frameworks */, + 4F28E060E1ACB63A895A8842F31C10A8 /* Headers */, + E497295438FF0A80BE74BA89124FEED5 /* Sources */, + 8ED7EF35DC0D6DD03DADA74C8A44C9FB /* Frameworks */, ); buildRules = ( ); dependencies = ( - 3BE025F10499ADF4FAC541887E51729E /* PBXTargetDependency */, - 76D11B645B21FA0B02084E8D7D0975A7 /* PBXTargetDependency */, + 99308C6585B2DD76656974AF1B8FE2DA /* PBXTargetDependency */, + A4F33EEFC8592A62AF81AFA4C2F432B2 /* PBXTargetDependency */, ); name = SJMediaCacheServer; productName = SJMediaCacheServer; @@ -3852,17 +3877,17 @@ }; 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 8EAFB731B3AAA5DD2F7563A906DC9152 /* Build configuration list for PBXNativeTarget "SJUIKit" */; + buildConfigurationList = 55A5DCF17473306A5CD8C751E68023AE /* Build configuration list for PBXNativeTarget "SJUIKit" */; buildPhases = ( - 7EE0BD2DE4A1E8C08FCD32BED56FE1AB /* Headers */, - 62992E18D0980C132B1DC6BEF059C728 /* Sources */, - 8155C3C4BC8420EF1586B0648B0D6388 /* Frameworks */, + 984A68539E50524FF84155A6963FA061 /* Headers */, + 7C4807CD947D50E4CDE61148ED048BDE /* Sources */, + 30C693F9F91A219502757968E2B26637 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 9EBAAB84CBBE4B7D2F6D686E672F3CC5 /* PBXTargetDependency */, - E85B0C5C28EEC8A7FF30F7C8BFE05536 /* PBXTargetDependency */, + B12B1F3EFA181B1CFF919BDB91180350 /* PBXTargetDependency */, + 8D17C97D22F51307A27745EFE194643E /* PBXTargetDependency */, ); name = SJUIKit; productName = SJUIKit; @@ -3914,8 +3939,8 @@ buildRules = ( ); dependencies = ( - 71F1254661E630C7D0121A7774D4A8D6 /* PBXTargetDependency */, - 0B9C443B584E28CA0148F0CE8C2CC086 /* PBXTargetDependency */, + EDC734FDDBF42D79A1EE72DD2763D939 /* PBXTargetDependency */, + 15770CC456DD5D4500A2738BDEDE9CCF /* PBXTargetDependency */, ); name = SJBaseVideoPlayer; productName = SJBaseVideoPlayer; @@ -3924,11 +3949,11 @@ }; 84B44807A12996D487A4A591A481D6A0 /* YYModel */ = { isa = PBXNativeTarget; - buildConfigurationList = 513CF42211370984B927727AEEF876BB /* Build configuration list for PBXNativeTarget "YYModel" */; + buildConfigurationList = EEC872754C01D8639E96286984CEE380 /* Build configuration list for PBXNativeTarget "YYModel" */; buildPhases = ( - 7AB7DE5AFF95074F9CC271A2F843CD64 /* Headers */, - 3EAC993CAE487BEDC98E51403B6E09AD /* Sources */, - 7E80886A77B7A91B1BC733E90677B568 /* Frameworks */, + 6EB386172FBE75081138A82B1DC7FEC2 /* Headers */, + 334FE2B2B1056769970E49E5A5CD7D71 /* Sources */, + A685C76B55464B7C7C9926DAC84B6CD2 /* Frameworks */, ); buildRules = ( ); @@ -3950,18 +3975,18 @@ buildRules = ( ); dependencies = ( - BECD67359322A4EAE2C7703C4A75B49B /* PBXTargetDependency */, - 1406F0E78A9D4C4BF63189EF0E1BE595 /* PBXTargetDependency */, - BAC1BEA3491CD61132DCAE9D78F7DB12 /* PBXTargetDependency */, - 46F50CA5B68C6313C2C05C200E8851DF /* PBXTargetDependency */, - 31C5F043916F5FEA08A88D88F5C4AF2A /* PBXTargetDependency */, - 4C158A2BBEC771AC8B82A2F5D472BACE /* PBXTargetDependency */, - 4BBABBEB966ED8D99324594CC7D086E2 /* PBXTargetDependency */, - 40CDFF21C979A6988F06BEC27ACCC5F3 /* PBXTargetDependency */, - 47A21B9EB2555E2901357F8E572C8DE1 /* PBXTargetDependency */, - E74B10AB00EC8AC9B19930FDB9085E20 /* PBXTargetDependency */, - 815533B74B79192F3D559ED0E45ECA62 /* PBXTargetDependency */, - 8AF5CFB963F5853F3731E9FCCEF5DD98 /* PBXTargetDependency */, + DFB520F43D05479E1C11640D5C0E03A8 /* PBXTargetDependency */, + D9EAF1247488B0CC78B1ADAC0D4B0366 /* PBXTargetDependency */, + 35DDCCF4696D7A90FD1EDAA67D4E6483 /* PBXTargetDependency */, + B9E28C83CA3207F4AA07CAD8C6C6F4F2 /* PBXTargetDependency */, + D3BDC12DE3BB77800EE374DC140D86D5 /* PBXTargetDependency */, + EF39553E61163914E85120444FFA9D30 /* PBXTargetDependency */, + 78AA366E0D81918215267BF3DAF0E22A /* PBXTargetDependency */, + C7BF34FB93CCA9D049FE2A0B6E157777 /* PBXTargetDependency */, + 2F4BD5F27A734F96365A9ABDA8AEB9D0 /* PBXTargetDependency */, + 3E039D57F967FF9ACFE97263E210D9E6 /* PBXTargetDependency */, + A725DC2E02399C73D16EC7A8E3265567 /* PBXTargetDependency */, + 017F7101C8D3B078BC50FCDBE8AB3A96 /* PBXTargetDependency */, ); name = "Pods-SJVideoPlayer_Example"; productName = "Pods-SJVideoPlayer_Example"; @@ -3979,9 +4004,9 @@ buildRules = ( ); dependencies = ( - 8494EA4D32B262C0E281AC1B7E0F3684 /* PBXTargetDependency */, - B2163BD40EB1757DF62516E4BB4AA14B /* PBXTargetDependency */, - 4BFDF59970331BDEF74699462FE8591D /* PBXTargetDependency */, + 475A8690C36B7F42F9E275E7E078BD06 /* PBXTargetDependency */, + 443FD9917C4AF8A2915220A277FECDE3 /* PBXTargetDependency */, + 19739C4EF9F48249B45C5D346DAE287A /* PBXTargetDependency */, ); name = SJVideoPlayer; productName = SJVideoPlayer; @@ -4092,94 +4117,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 368073C696D07C69A8AE39A8D3B6308A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B9FFD9917E8DEF537C28B086745F498B /* SJPlaybackListController-dummy.m in Sources */, - 688206E6070F3536A331FF6DCC0B4BF2 /* SJPlaybackListController.m in Sources */, - B15E2845F41B6A6A8F540806EE735CC4 /* SJPlaybackListControllerObserver.m in Sources */, - C38E0C88715298187FE04434699A5F1C /* SJPlaybackListControllerProtocol.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3EAC993CAE487BEDC98E51403B6E09AD /* Sources */ = { + 334FE2B2B1056769970E49E5A5CD7D71 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 066458A8DE5035F9DB2529F2F86FC150 /* NSObject+YYModel.m in Sources */, - 9FCA7141B615A8231C6932A92E958275 /* YYClassInfo.m in Sources */, - 36CC5844C5BDEF74AAE0A4017F63C5A2 /* YYModel-dummy.m in Sources */, + D5BBCFD5444CC91600F6003957BB7437 /* NSObject+YYModel.m in Sources */, + 775FBB936B455FD84830E7E65CA8C077 /* YYClassInfo.m in Sources */, + 6F7DF74534DC0BC43A923F87ACAB2516 /* YYModel-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 62992E18D0980C132B1DC6BEF059C728 /* Sources */ = { + 368073C696D07C69A8AE39A8D3B6308A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 743722A2FC6EB7E7C4D48F8963A0C1FA /* NSAttributedString+SJMake.m in Sources */, - 1D1AE2C185DA650DA3975B6CBFF7DA39 /* NSDate+SJAdded.m in Sources */, - 08D07AE18AA617014352BE98193CB9F0 /* NSObject+SJAsyncLoad.m in Sources */, - 743B65399AD239B587CC88622DFCBBCA /* NSObject+SJObserverHelper.m in Sources */, - 636EC3E511FA07752036FECB4E238867 /* SJAppearStateObserver.m in Sources */, - BA6628471A4D879A0E61D13ABA5B5D0D /* SJApplicationInfo.m in Sources */, - 76D63D8C364E826A27ADB7CBCE0BAE46 /* SJAsyncLoader.m in Sources */, - 25281D7C96FDE3B25B6191F3BD03B34F /* SJAttributesRecorder.m in Sources */, - E949E979FA69E99700E8DABFF90C4849 /* SJAttributeWorker.m in Sources */, - 211DE2B6E5C56C69465508D6283EA8CC /* SJBaseCollectionReusableView.m in Sources */, - FD3AD78754CC32CD925E8B2E7AA226E4 /* SJBaseCollectionViewCell.m in Sources */, - 7D46FB63D0D1BE369D6761719AEA8C70 /* SJBaseTableViewCell.m in Sources */, - E6C8180FC2A7761DE3618F11CA4C65B2 /* SJBaseTableViewHeaderFooterView.m in Sources */, - 9CD12568D6420D7FFEC1B639AC5E708A /* SJBaseViewController.m in Sources */, - 7791A6430ABCF88F9EBEDACE3D3FF099 /* SJCornerMask.m in Sources */, - 5D9AAD3AA621EAD70692A9CAFB127730 /* SJImagePickerController.m in Sources */, - 95644A51EFC0EE6CB81BFBACA2C49A4C /* SJMakeView.m in Sources */, - E04A69CFE73C9C0E5AC169ECCB919FED /* SJObjectContainer.m in Sources */, - 5752BE3469F93C064C97B032DD9B2185 /* SJPageCollectionView.m in Sources */, - 2FD59F17B2D7E6A830E67FDC9F050262 /* SJPageMenuBar.m in Sources */, - 962A1ED6B1261C158FFF7EFD59E46B50 /* SJPageMenuBarScrollIndicator.m in Sources */, - 6F1DE9B24A115793CA42AC76D3920188 /* SJPageMenuItemView.m in Sources */, - EBBCE4EB73E512B52FA72FEB87E870C5 /* SJPageViewController.m in Sources */, - E09717FBCF8A827F15E62C45E5072EC6 /* SJPageViewControllerItemCell.m in Sources */, - D684A3FD2E279C4939AA7285E3C24DB8 /* SJPresentationQueue.m in Sources */, - 3F5C3B86EDCD0A45EF5C3AD1F406F5A3 /* SJQueue.m in Sources */, - C00A55A13C5D3385A4035FB737DCF342 /* SJResidentThread.m in Sources */, - 58F310373E1105F365E7191EC9D08C0D /* SJRunLoopTaskQueue.m in Sources */, - 1690837086B59C2F4FE83F9D85986097 /* SJSQLite3+FoundationExtended.m in Sources */, - 57B867189FCFE71AA120BF522D667321 /* SJSQLite3+QueryExtended.m in Sources */, - 4C7A755B33458171F786A0B6FE119FC1 /* SJSQLite3+RemoveExtended.m in Sources */, - E9710093249BB59FC7F1999BF12D6022 /* SJSQLite3+TableExtended.m in Sources */, - BCD427C9DDFDD23D6C8463F210CFB391 /* SJSQLite3.m in Sources */, - DF4DD109257236AF5043C68B41C3001C /* SJSQLite3ColumnOrder.m in Sources */, - 18EE3F482FB01CB8018D6DF8B407CBF7 /* SJSQLite3Condition.m in Sources */, - CA40647D583C2B160375CD7F97276B6D /* SJSQLite3Logger.m in Sources */, - AA05BA9331880C61730B582A177BBC68 /* SJSQLite3TableClassCache.m in Sources */, - 18F596F0D1A0C3FB437149BC6856DC4E /* SJSQLite3TableInfoCache.m in Sources */, - BF36F55ED0B6159823C11C3CA369F11C /* SJSQLiteColumnInfo.m in Sources */, - 84E4823804FF3111F4F7CE9D8FFA8B49 /* SJSQLiteCore.m in Sources */, - D6E80C23CDD4038C3CB3B0BEC6A2AB0A /* SJSQLiteErrors.m in Sources */, - ECAD4D9319036C331EED11B8BAFFB7A7 /* SJSQLiteObjectInfo.m in Sources */, - 194EC1B60D7B720AAC5F2A4DB15EF565 /* SJSQLiteTableInfo.m in Sources */, - 6D52799B11030248CD983257C8AEB870 /* SJSQLiteTableModelConstraints.m in Sources */, - EC8899958ADC0DAEE77D927070982BB3 /* SJStatusBarManager.m in Sources */, - CA82BC53452CCB487EAD0DEE99207FA5 /* SJTaskQueue.m in Sources */, - 225780E257E4695F58026FDEE428CEFE /* SJUIKit-dummy.m in Sources */, - 8E8A155EA63E647DAD106D4DF0EAE747 /* SJUIKitTextMaker.m in Sources */, - E84CFA305EE137CAA4498402671F17C0 /* SJUIMaker.m in Sources */, - C45B4144CEF6D00A02A7D344A6FD0F4D /* SJUTAttributes.m in Sources */, - 01115DC551515C256C624B08361587F9 /* SJUTRangeHandler.m in Sources */, - 6E95843117661F35647435A4E06D1B09 /* SJUTRecorder.m in Sources */, - 1351C2BAE1B07087C52A1A62D9B4A4AC /* SJUTRegexHandler.m in Sources */, - D199A7203135B2D735C43D77A3503E94 /* SJUTUtils.m in Sources */, - 28DB33A1862A9D8F28812003B90E4608 /* UIButton+AsyncLoadImage.m in Sources */, - AD9976DF0D2ADF72A404C9496AE09B27 /* UIImagePickerController+SJUIKitExtension.m in Sources */, - 104C9595E899A6F217759B759C32DD08 /* UIImageView+AsyncLoadImage.m in Sources */, - FB183B6F9114FC8AC8767E9D79A70685 /* UILabel+AsyncLoad.m in Sources */, - 6024357014F91ED44BC07661EFF971E2 /* UIScrollView+SJPageViewControllerExtended.m in Sources */, - 893B5ABE1EAF8A3AD1B1C8E9AF7CD28F /* UIScrollView+SJRefreshAdd.m in Sources */, - 90CAA98F9D1573856AB7A7C6896F0ED4 /* UISearchBar+AsyncLoad.m in Sources */, - 0DF602CDC01F004AA27917CD8E8F8D38 /* UITextField+AsyncLoadImage.m in Sources */, - 6B0008E0E176BC6EF7C284CBCB113A1D /* UIViewController+SJPageViewControllerExtended.m in Sources */, + B9FFD9917E8DEF537C28B086745F498B /* SJPlaybackListController-dummy.m in Sources */, + 688206E6070F3536A331FF6DCC0B4BF2 /* SJPlaybackListController.m in Sources */, + B15E2845F41B6A6A8F540806EE735CC4 /* SJPlaybackListControllerObserver.m in Sources */, + C38E0C88715298187FE04434699A5F1C /* SJPlaybackListControllerProtocol.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4211,6 +4166,76 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7C4807CD947D50E4CDE61148ED048BDE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 27EBCE9D64BC92BD5E7AFEA6B027A134 /* NSAttributedString+SJMake.m in Sources */, + AD4C43E5F8FE0D4D299603266BA38BBC /* NSDate+SJAdded.m in Sources */, + 96831380E99095D02A5650E1E202B4EE /* NSObject+SJAsyncLoad.m in Sources */, + 15C75ADF3F54C8066114A4FB2BC47227 /* NSObject+SJObserverHelper.m in Sources */, + F68F8195F92381DF4E4BE8FF17A1C397 /* SJAppearStateObserver.m in Sources */, + D9C116272C659C3C5F0EAEDD89A1A909 /* SJApplicationInfo.m in Sources */, + 45749043F7DB9AB87D79DD0055F35898 /* SJAsyncLoader.m in Sources */, + 08C7F9984D38BFDEDDE25E926CF0538B /* SJAttributesRecorder.m in Sources */, + A002C531F1EDF0266A0345E3AC184F53 /* SJAttributeWorker.m in Sources */, + B1AA2F306ABF0DB12F17A97CD4C8B0B6 /* SJBaseCollectionReusableView.m in Sources */, + 07C7F8819A5E608FA257B2BB12C98EE3 /* SJBaseCollectionViewCell.m in Sources */, + 6D72C067462881A6C7B11BD8BDFCB840 /* SJBaseTableViewCell.m in Sources */, + 3728BA26BBB782D73067F4A524474132 /* SJBaseTableViewHeaderFooterView.m in Sources */, + A417B98C554C3E29D9328D2808A3122E /* SJBaseViewController.m in Sources */, + 3D28D20BD8DFAAA3C94D178ABB2A40B4 /* SJCornerMask.m in Sources */, + 7EA02300D24F0810ADF46EEE11DB7E83 /* SJImagePickerController.m in Sources */, + 803BA6326ECBD65B036AE813D9F9DC16 /* SJMakeView.m in Sources */, + DBCACEE60C8F2102568519A46F29FCA4 /* SJObjectContainer.m in Sources */, + CE0A956F44B6BABC496C73DC61136DB8 /* SJPageCollectionView.m in Sources */, + 5D21E85CFCF6E03FB3522E92453E0EB8 /* SJPageMenuBar.m in Sources */, + 9C061B368EE403BDEF37B8005657EBC3 /* SJPageMenuBarScrollIndicator.m in Sources */, + 95C34E5CB515A27011346103966A12E9 /* SJPageMenuItemView.m in Sources */, + FDE4101CDB7EE291908CE9BAC943C6E2 /* SJPageViewController.m in Sources */, + 1B65A88645B28B04AF5861A38580765F /* SJPageViewControllerItemCell.m in Sources */, + 2F3AA1EE09554C3B9EB77DC8DF192EE7 /* SJPresentationQueue.m in Sources */, + 3563F65D900DCECC2AC4A08157A0DDF6 /* SJQueue.m in Sources */, + C73848C49E9DE604668A7B919D9446BC /* SJResidentThread.m in Sources */, + 4EC0CD7E01C122AA19198D0ED5F209AF /* SJRunLoopTaskQueue.m in Sources */, + AAC2D4B05C1F12FD6AD3ABD9FC00941A /* SJSQLite3+FoundationExtended.m in Sources */, + FFB299017AC71596F6C0474DDC85574E /* SJSQLite3+QueryExtended.m in Sources */, + BC639A37BAA606FA630D1F9884CCE1B9 /* SJSQLite3+RemoveExtended.m in Sources */, + 78E9745555FD1A604C55A4FF0ABE140B /* SJSQLite3+TableExtended.m in Sources */, + D079AC1C9F461D860F187AFEBFD2AEE4 /* SJSQLite3.m in Sources */, + 71373605EB94DB3F49A56DD607E09A66 /* SJSQLite3ColumnOrder.m in Sources */, + B2E11062B47A5852240D0473FF57B81A /* SJSQLite3Condition.m in Sources */, + 6CE5ACF2354BB224C594138391898642 /* SJSQLite3Logger.m in Sources */, + 92FF80EE27B29A7C4C9351D391D35119 /* SJSQLite3TableClassCache.m in Sources */, + 33BE8DA7B6E8C1A07BB14C8DEBCB4F75 /* SJSQLite3TableInfoCache.m in Sources */, + DACBE940A79ADE5CC18CA517E8EE9B8C /* SJSQLiteColumnInfo.m in Sources */, + 823C3C96EAAF509F054079468ACA4521 /* SJSQLiteCore.m in Sources */, + 6F0B9D70EFBC5CE29E5F30778F1D3496 /* SJSQLiteErrors.m in Sources */, + 31D4B85F74AD455B9CADD59A4F5CF417 /* SJSQLiteObjectInfo.m in Sources */, + 4542588C6C2DA5280CF616AE4E4DF99E /* SJSQLiteTableInfo.m in Sources */, + DE34490B829015373DAB5F9BDB15CFB6 /* SJSQLiteTableModelConstraints.m in Sources */, + 97062F9078A986A42F1A506730778918 /* SJStatusBarManager.m in Sources */, + 6410663DEAE584A55C5CF16185C3959D /* SJTaskQueue.m in Sources */, + EA13105F2FD0E12A2C2338C067032CBE /* SJUIKit-dummy.m in Sources */, + F120852F5DB027320E8DB36D8BFDBAE7 /* SJUIKitTextMaker.m in Sources */, + C821251AFC6078E8EA3479AE49E94003 /* SJUIMaker.m in Sources */, + 06A19184FD8CCA4DEF1D2A4FD0913198 /* SJUTAttributes.m in Sources */, + EC60E4F80876272AEB10A8300009B2DC /* SJUTRangeHandler.m in Sources */, + 6ADA60F6FA3A2D6424BAB8AD8655A47B /* SJUTRecorder.m in Sources */, + D7F5689859BA3E6A3A28DF73AADDC8B1 /* SJUTRegexHandler.m in Sources */, + 9239AE2D5DCC68243E573CA27496A350 /* SJUTUtils.m in Sources */, + CE179EEFE8B656F9FF31DDEC8F008E7D /* UIButton+AsyncLoadImage.m in Sources */, + 589569F295A0174FE0B3FEACCC8EFDEB /* UIImagePickerController+SJUIKitExtension.m in Sources */, + AEA17406F6D2BAAC2BE20FB0C58A8425 /* UIImageView+AsyncLoadImage.m in Sources */, + BF3DF943F7BC271928B51D4C91CD1B51 /* UILabel+AsyncLoad.m in Sources */, + 7EDC5EC5BEA1D4D8BCAA9663107FA8F7 /* UIScrollView+SJPageViewControllerExtended.m in Sources */, + C5921C7CA8363E0CEFCA84AC955AB2E3 /* UIScrollView+SJRefreshAdd.m in Sources */, + 97B3F35E86A07D3FEE95980B80BD87E9 /* UISearchBar+AsyncLoad.m in Sources */, + 5676957E5E78794B5A6D53396AF468B7 /* UITextField+AsyncLoadImage.m in Sources */, + 76594AC5B539554D8BAB2BCFEC63A5A9 /* UIViewController+SJPageViewControllerExtended.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 811E255F9DA765E3FED6313B480D487A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -4419,65 +4444,68 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E8696C3883F9EEF570B9E7EDB25179B5 /* Sources */ = { + E497295438FF0A80BE74BA89124FEED5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 70DBAB79C6DF20CCBE2D6515C4E6A49D /* DDData.m in Sources */, - 6CBBFB4042B0F460386DED4997F74E98 /* DDNumber.m in Sources */, - 1D2286ADD6661E27F94021005AFEA7FF /* DDRange.m in Sources */, - 92D2B86C938F7870AF24FAA20C94EE04 /* FILEAsset.m in Sources */, - 3B93118312F3765B08EA7AE45F4FFD8D /* FILEContent.m in Sources */, - CA4F15EB2399FCDCFEC6B1653693DB10 /* FILEContentProvider.m in Sources */, - E478F3633EC209CA12F49FEC7BE3DBEB /* FILEContentReader.m in Sources */, - 303BAB0A17AE9E0D7DC2613B4DBF7B77 /* FILEPrefetcher.m in Sources */, - 9483787872BDEF6AC1AB5F78CD7D3CDC /* FILEReader.m in Sources */, - 2C7E64BDBDA3FBFE7A1F0BC117037926 /* HLSAsset.m in Sources */, - 6535EADC0294F5F51339C4033C193182 /* HLSContentAESKeyReader.m in Sources */, - 74784618A416F2EEB10E3BA385AAFDE0 /* HLSContentIndexReader.m in Sources */, - B3F81D79674170B244E69895FA2C5BD4 /* HLSContentProvider.m in Sources */, - 0867DF9C40BC91466192EB8E4F1CAEBB /* HLSContentTs.m in Sources */, - 612CB04320902A06CF7342711D98AA97 /* HLSContentTSReader.m in Sources */, - E1C7FAD986B4C3B148BD92482FEEBD7D /* HLSParser.m in Sources */, - ED494A3399A197411D2A1D598C84580C /* HLSPrefetcher.m in Sources */, - E6467C5309A4AD57824781D21F4860B2 /* HLSReader.m in Sources */, - 94935634C9DD423349C0D1275252C8A0 /* HTTPAsyncFileResponse.m in Sources */, - 659A32938D5793136D849C389918B1EE /* HTTPAuthenticationRequest.m in Sources */, - 7586DD67411B61D2AE0E416D8BAFC21C /* HTTPConnection.m in Sources */, - B8DF2ACEDB7F3B126526EA1BC5CEACD5 /* HTTPDataResponse.m in Sources */, - 0B974E69ADC037CC8ABB7A1E406121A1 /* HTTPDynamicFileResponse.m in Sources */, - A1FDA4BBB3698C4CE6B09FE7505E2137 /* HTTPErrorResponse.m in Sources */, - CBBCD099E3C561602EC5F4FF84A982A9 /* HTTPFileResponse.m in Sources */, - ECA7D3D4379145FDD0525429B83536D8 /* HTTPLogging.m in Sources */, - 53022D630D8B5FF126A768F4A53DE675 /* HTTPMessage.m in Sources */, - 7EA95D0A00D5F65CD721A3FC3CACDC0D /* HTTPRedirectResponse.m in Sources */, - B5A7181AD64184E9DDD65673F27BA7AA /* HTTPServer.m in Sources */, - 710A9B5D977EF802D6932B20B4836D4D /* MCSAssetFileRead.m in Sources */, - 0FB482312F39D9E248887C62D84DFAF2 /* MCSAssetManager.m in Sources */, - 804E6304148EBDF09DD297EEACF00026 /* MCSAssetUsageLog.m in Sources */, - 66F774D7B00DB37E1134885E6A735203 /* MCSConfiguration.m in Sources */, - 812ECD28A4B07966D938EF9290D3465C /* MCSConsts.m in Sources */, - 05295354FDCD6FE7A5BA53E4575CCBF4 /* MCSContents.m in Sources */, - F38C57B1AFE7E3736CEB056C42C18D82 /* MCSDownload.m in Sources */, - 88B4EE54C803B43046388E50C5E587DC /* MCSError.m in Sources */, - B13C6AD6F2F664B1E6A0575722967A44 /* MCSLogger.m in Sources */, - 639926A5F1BC49A41FC8778D4B99873B /* MCSPrefetcherManager.m in Sources */, - 14BC18BBAA08EF9FDE57D238476F00E6 /* MCSProxyServer.m in Sources */, - 9CD4DAC1160C3D7076339D91E0A23ECD /* MCSProxyTask.m in Sources */, - FD31EC03FF8E06B4DC7D34F0F6318E76 /* MCSQueue.m in Sources */, - B61C0849950844900BD378751D7C3681 /* MCSResponse.m in Sources */, - AABEA852C83099DD61BD2286BC51CC13 /* MCSRootDirectory.m in Sources */, - 0A5F46D18BB9C0022FF06B8A3F243CA8 /* MCSURL.m in Sources */, - A650E25FB6AAE0641A9A4C10A9B7488C /* MCSUtils.m in Sources */, - 2DEDDD6CDB94B39D8EA9E0E1340B91CD /* MultipartFormDataParser.m in Sources */, - 3FC4311C5AE6802DE19BCA92F757678E /* MultipartMessageHeader.m in Sources */, - 89E7A20484E8181259EB31D6ADCF3A5F /* MultipartMessageHeaderField.m in Sources */, - 8A83716E4A0E2AB7CBB434C87710779F /* NSFileHandle+MCS.m in Sources */, - A5621A85F2FB991D994B533A9A857FAD /* NSFileManager+MCS.m in Sources */, - 69C67D0A970AE91CAAC28BA99D558990 /* NSURLRequest+MCS.m in Sources */, - 40CF369DA735DBB5540C24BFD1F8205F /* SJMediaCacheServer-dummy.m in Sources */, - 5F16D60F2D84773835B4E58673A76B24 /* SJMediaCacheServer.m in Sources */, - 591F996AAEAABEF72F201C0994CD7788 /* WebSocket.m in Sources */, + 7F37DD1615FE3335B6A441775822181B /* DDData.m in Sources */, + C5156E9E8FE5BECB4CECF17A50F09222 /* DDNumber.m in Sources */, + ABE310EEE4A9CBDFDA5FE12243ED034C /* DDRange.m in Sources */, + BCD248DB433AA99BC6AA74F9A0F64D69 /* FILEAsset.m in Sources */, + E3F9CB1080A5BEB6C85CA41A9C9517A0 /* FILEContent.m in Sources */, + 21535DB304F599193FC56B63C07831CA /* FILEContentProvider.m in Sources */, + 56761CF26830A58A0D1D422FF22B88DD /* FILEContentReader.m in Sources */, + 079C1221B830578A95B67872B0D43FC5 /* FILEPrefetcher.m in Sources */, + FF05DFF3DF5574D566DF0639EA1EBDB9 /* FILEReader.m in Sources */, + FA066D2B0CECD5D03FDA7EE6CBC45185 /* HLSAsset.m in Sources */, + F738E8B62303D199D5474896CB32A859 /* HLSContentAESKeyReader.m in Sources */, + 226FD0D250B01A85421FA01E0BC1CC07 /* HLSContentIndexReader.m in Sources */, + E0CEE1A17A48815050E233879808726D /* HLSContentProvider.m in Sources */, + B789229D995B4C68C3A0E744FDF693BC /* HLSContentTs.m in Sources */, + F2A68AB9AAC2F3BDC3C68030D6B00941 /* HLSContentTSReader.m in Sources */, + 5C3EF68926E82BA984BD0D13FF6D583A /* HLSParser.m in Sources */, + 6C3F5A0F6997E9639FB22C5FB61F0F86 /* HLSPrefetcher.m in Sources */, + 2F085555A1BEE8638F3B1EFF1686E4D3 /* HLSReader.m in Sources */, + 0DEC551DD62B1B948EBC14F6D020A319 /* HTTPAsyncFileResponse.m in Sources */, + F63F6303778FA20AD6EDEC1629DB7692 /* HTTPAuthenticationRequest.m in Sources */, + 2ED00FC79A0A13785121B0478E945DD9 /* HTTPConnection.m in Sources */, + 6AE8585365D8A23878691021ED50AE62 /* HTTPDataResponse.m in Sources */, + 798F9862B68E83AF848D53D4767E624B /* HTTPDynamicFileResponse.m in Sources */, + 7BF2596A0255E54A91315A111722D8A0 /* HTTPErrorResponse.m in Sources */, + 59FAACD98373580DCCD0BD98EA1107E3 /* HTTPFileResponse.m in Sources */, + 50EBA2D6EEFC51EC8BA626F05A00394F /* HTTPLogging.m in Sources */, + 33E74EBB506602B5C4A668F99188C8EB /* HTTPMessage.m in Sources */, + 54F3078B386DA6B6F1652B0B4CF40F93 /* HTTPRedirectResponse.m in Sources */, + 1534DEC8D547B6B03B4C9C7C86D8A101 /* HTTPServer.m in Sources */, + 5D7EE6BAAFB58B2A194C47A751442B4B /* MCSAssetCacheManager.m in Sources */, + 4650B6BC97648B0C20F0DC141B5138AA /* MCSAssetExporterManager.m in Sources */, + 6F6A490E46FFD9EF9A529DBA4F95CA31 /* MCSAssetFileRead.m in Sources */, + 48E2BCEEB99402FA25A7DE3BBA145089 /* MCSAssetManager.m in Sources */, + FB8776D4CD1789DCE6F3F8F36B1ADA13 /* MCSAssetUsageLog.m in Sources */, + ABCDDBEAFA3362CE7EBF99CD9F40BE3C /* MCSConfiguration.m in Sources */, + 0C889271AA4BCAC2EAF61E032C55AEB3 /* MCSConsts.m in Sources */, + F4E4FCE83BEEF464365D3133097BC6BC /* MCSContents.m in Sources */, + DAE1362587187E9EE99C07E669809FCF /* MCSDatabase.m in Sources */, + 6C0E9D6B133DFB376156AB0C0D886A83 /* MCSDownload.m in Sources */, + 9139686061A758C6456B384EB63F8546 /* MCSError.m in Sources */, + 635999BF920281A5E3E76AB73AC3636D /* MCSLogger.m in Sources */, + FBDE3BCF1D4D9A69AB4915E3A05E23E2 /* MCSPrefetcherManager.m in Sources */, + AB91907C1896FEA66F91FABC2608EEEB /* MCSProxyServer.m in Sources */, + 75083D51271B6FE55DAF243B54952A17 /* MCSProxyTask.m in Sources */, + 1885F18FBEF1D3C800B490D30CD46EB7 /* MCSQueue.m in Sources */, + 42831AC87580B1FD6FFD22DF8D6101BC /* MCSResponse.m in Sources */, + 40B02FF6CA50643516F54F752555F613 /* MCSRootDirectory.m in Sources */, + D4D438009907742A01E8A0338C2684AE /* MCSURL.m in Sources */, + 4175B39E31FC55563F6FDA1B2C3C607C /* MCSUtils.m in Sources */, + 5217E4D2743ACBF41CF8DC4C4D04D937 /* MultipartFormDataParser.m in Sources */, + 017C06B71677BCC7357415D9D5A228C2 /* MultipartMessageHeader.m in Sources */, + CD80CD3BC4E95941E9C9AE24CFDAA355 /* MultipartMessageHeaderField.m in Sources */, + 1BB09284B2DB82230764BE62CA99E385 /* NSFileHandle+MCS.m in Sources */, + 0278F92C8FC33B5D3E106683680DD566 /* NSFileManager+MCS.m in Sources */, + 7D8D2B0D5AA01FB995BB4F9A6B83A95B /* NSURLRequest+MCS.m in Sources */, + 32D8410FB18E5387AC5ED8733C2F03D6 /* SJMediaCacheServer-dummy.m in Sources */, + 0AB608FDC84E5519371D2803A8F1374F /* SJMediaCacheServer.m in Sources */, + F315EB8863B0E9B903B45727D6518BB6 /* WebSocket.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4492,131 +4520,131 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0B9C443B584E28CA0148F0CE8C2CC086 /* PBXTargetDependency */ = { + 017F7101C8D3B078BC50FCDBE8AB3A96 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = YYModel; + target = 84B44807A12996D487A4A591A481D6A0 /* YYModel */; + targetProxy = AB9053FEFC9CF5604CA3F1469C668098 /* PBXContainerItemProxy */; + }; + 15770CC456DD5D4500A2738BDEDE9CCF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SJUIKit; target = 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */; - targetProxy = B3C4B9CF03F099A793327DDC308AD6FA /* PBXContainerItemProxy */; + targetProxy = E0FA809781E6F2BC12A8DADA1153BEAB /* PBXContainerItemProxy */; }; - 1406F0E78A9D4C4BF63189EF0E1BE595 /* PBXTargetDependency */ = { + 19739C4EF9F48249B45C5D346DAE287A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MJRefresh; - target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; - targetProxy = AE7DA911A7A8D4B4B4A48747779CDCBC /* PBXContainerItemProxy */; + name = SJUIKit; + target = 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */; + targetProxy = E6B5F7037867A1AFD0ECBC793F48B2BC /* PBXContainerItemProxy */; }; - 31C5F043916F5FEA08A88D88F5C4AF2A /* PBXTargetDependency */ = { + 2F4BD5F27A734F96365A9ABDA8AEB9D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SJBaseVideoPlayer; - target = 76A445C38D13436849B0EAD21F555034 /* SJBaseVideoPlayer */; - targetProxy = 8864AB995366EEA48D4C2CD08AE743ED /* PBXContainerItemProxy */; + name = SJRouter; + target = AC7ED7554C07C41E51C8BD5248179FED /* SJRouter */; + targetProxy = B529AB7FC2B19BBE42E7B368B4BA2DCA /* PBXContainerItemProxy */; }; - 3BE025F10499ADF4FAC541887E51729E /* PBXTargetDependency */ = { + 35DDCCF4696D7A90FD1EDAA67D4E6483 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CocoaAsyncSocket; - target = 6083682834ABE0AE7BD1CBF06CADD036 /* CocoaAsyncSocket */; - targetProxy = 69E2342C47336F88B0299404AA4C766D /* PBXContainerItemProxy */; + name = Masonry; + target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; + targetProxy = 547C1BA7E583BDBB1446FE8D4F4EAA7F /* PBXContainerItemProxy */; }; - 40CDFF21C979A6988F06BEC27ACCC5F3 /* PBXTargetDependency */ = { + 3E039D57F967FF9ACFE97263E210D9E6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SJPlaybackListController; - target = 6E1E1EC205B84668230348082E3FD9A8 /* SJPlaybackListController */; - targetProxy = 466AC56D689AD92EBDDDDA76EE187632 /* PBXContainerItemProxy */; + name = SJUIKit; + target = 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */; + targetProxy = F1329A2AA0E0CA26F815761216FD7CF5 /* PBXContainerItemProxy */; }; - 46F50CA5B68C6313C2C05C200E8851DF /* PBXTargetDependency */ = { + 443FD9917C4AF8A2915220A277FECDE3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = 313EDAB71557A5985A60B0A276D5A8C7 /* PBXContainerItemProxy */; + name = SJBaseVideoPlayer; + target = 76A445C38D13436849B0EAD21F555034 /* SJBaseVideoPlayer */; + targetProxy = 9A6D805164372CF4F33F321102F245BE /* PBXContainerItemProxy */; }; - 47A21B9EB2555E2901357F8E572C8DE1 /* PBXTargetDependency */ = { + 475A8690C36B7F42F9E275E7E078BD06 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SJRouter; - target = AC7ED7554C07C41E51C8BD5248179FED /* SJRouter */; - targetProxy = ACA414A26584CBC56B2B8A30EBC18D5F /* PBXContainerItemProxy */; + name = Masonry; + target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; + targetProxy = 6CFEF4854BB540AE0E9E096D29A6B82B /* PBXContainerItemProxy */; }; - 4BBABBEB966ED8D99324594CC7D086E2 /* PBXTargetDependency */ = { + 78AA366E0D81918215267BF3DAF0E22A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SJMediaCacheServer; target = 53EA424E9D34B39228682599B5DABD60 /* SJMediaCacheServer */; - targetProxy = 3A0649F935A045F0A0EB9E5432E47F1B /* PBXContainerItemProxy */; + targetProxy = FE7E1AF4533581C20B40CDA39A526CEB /* PBXContainerItemProxy */; }; - 4BFDF59970331BDEF74699462FE8591D /* PBXTargetDependency */ = { + 8D17C97D22F51307A27745EFE194643E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SJUIKit; - target = 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */; - targetProxy = 31691EE8241F52E1D10868B3C6E74435 /* PBXContainerItemProxy */; - }; - 4C158A2BBEC771AC8B82A2F5D472BACE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SJFullscreenPopGesture; - target = A19FC1B5D5F291312B4944B9B7DBF0A0 /* SJFullscreenPopGesture */; - targetProxy = 0C60C54BEA404FC0B9A7731388150906 /* PBXContainerItemProxy */; + name = YYModel; + target = 84B44807A12996D487A4A591A481D6A0 /* YYModel */; + targetProxy = 102CF63D1527996153FACA2901E9FDDD /* PBXContainerItemProxy */; }; - 71F1254661E630C7D0121A7774D4A8D6 /* PBXTargetDependency */ = { + 99308C6585B2DD76656974AF1B8FE2DA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Masonry; - target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = B1758BF6EEB6192CA49B1D95E92E494A /* PBXContainerItemProxy */; + name = CocoaAsyncSocket; + target = 6083682834ABE0AE7BD1CBF06CADD036 /* CocoaAsyncSocket */; + targetProxy = 821F4789AED2002FD8A049EC4E41C762 /* PBXContainerItemProxy */; }; - 76D11B645B21FA0B02084E8D7D0975A7 /* PBXTargetDependency */ = { + A4F33EEFC8592A62AF81AFA4C2F432B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SJUIKit; target = 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */; - targetProxy = E7A4398FC7BF0286B54953732E999BD0 /* PBXContainerItemProxy */; + targetProxy = AE828F2E82119419B239BAE01E0E48CF /* PBXContainerItemProxy */; }; - 815533B74B79192F3D559ED0E45ECA62 /* PBXTargetDependency */ = { + A725DC2E02399C73D16EC7A8E3265567 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SJVideoPlayer; target = 9D30A64C17E5B9AF4D9239A2C2A7630F /* SJVideoPlayer */; - targetProxy = 9502DCBFBB1ED919AD0FC01366C242F1 /* PBXContainerItemProxy */; + targetProxy = B187579CF12664772E89A3D38A21FDD8 /* PBXContainerItemProxy */; }; - 8494EA4D32B262C0E281AC1B7E0F3684 /* PBXTargetDependency */ = { + B12B1F3EFA181B1CFF919BDB91180350 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Masonry; - target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = B556A3B7DB78158718C5CE21203AED21 /* PBXContainerItemProxy */; + name = MJRefresh; + target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; + targetProxy = 0FD6FFA4230602127E34426B4F496E4B /* PBXContainerItemProxy */; }; - 8AF5CFB963F5853F3731E9FCCEF5DD98 /* PBXTargetDependency */ = { + B9E28C83CA3207F4AA07CAD8C6C6F4F2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = YYModel; - target = 84B44807A12996D487A4A591A481D6A0 /* YYModel */; - targetProxy = 4D8313D6C6FABC08B25D91814FEEAD91 /* PBXContainerItemProxy */; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 00BF988DCFCEB05BB2FFA5937C5F511D /* PBXContainerItemProxy */; }; - 9EBAAB84CBBE4B7D2F6D686E672F3CC5 /* PBXTargetDependency */ = { + C7BF34FB93CCA9D049FE2A0B6E157777 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MJRefresh; - target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; - targetProxy = 259F36A1556860D1E9286B15C9BBD6DC /* PBXContainerItemProxy */; + name = SJPlaybackListController; + target = 6E1E1EC205B84668230348082E3FD9A8 /* SJPlaybackListController */; + targetProxy = 76BAA2A1EDAA936F962846E9599DC042 /* PBXContainerItemProxy */; }; - B2163BD40EB1757DF62516E4BB4AA14B /* PBXTargetDependency */ = { + D3BDC12DE3BB77800EE374DC140D86D5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SJBaseVideoPlayer; target = 76A445C38D13436849B0EAD21F555034 /* SJBaseVideoPlayer */; - targetProxy = 5128337D40FD547914D8A63E3EAC07FF /* PBXContainerItemProxy */; + targetProxy = EE09B0C4237B8310C68949195DF0D219 /* PBXContainerItemProxy */; }; - BAC1BEA3491CD61132DCAE9D78F7DB12 /* PBXTargetDependency */ = { + D9EAF1247488B0CC78B1ADAC0D4B0366 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Masonry; - target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = DC2A527AFFAD90AA265A68A83CA86677 /* PBXContainerItemProxy */; + name = MJRefresh; + target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; + targetProxy = BFB5B8D02D63CB6FBFA40B95C58848DC /* PBXContainerItemProxy */; }; - BECD67359322A4EAE2C7703C4A75B49B /* PBXTargetDependency */ = { + DFB520F43D05479E1C11640D5C0E03A8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CocoaAsyncSocket; target = 6083682834ABE0AE7BD1CBF06CADD036 /* CocoaAsyncSocket */; - targetProxy = 2E221229AF2444348DD8414800E99230 /* PBXContainerItemProxy */; + targetProxy = 75B28AF2644CD7C15DD5DB1BD580204C /* PBXContainerItemProxy */; }; - E74B10AB00EC8AC9B19930FDB9085E20 /* PBXTargetDependency */ = { + EDC734FDDBF42D79A1EE72DD2763D939 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SJUIKit; - target = 66EF777DAC384165A40F94DC7D0BD98F /* SJUIKit */; - targetProxy = 2C13E2174D6D0083FEAE6F51E67A5E9C /* PBXContainerItemProxy */; + name = Masonry; + target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; + targetProxy = 9AA4819493AFC1F9F032887FD0F6053B /* PBXContainerItemProxy */; }; - E85B0C5C28EEC8A7FF30F7C8BFE05536 /* PBXTargetDependency */ = { + EF39553E61163914E85120444FFA9D30 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = YYModel; - target = 84B44807A12996D487A4A591A481D6A0 /* YYModel */; - targetProxy = 6FB23DBC005CD3882EC31E3B815F7684 /* PBXContainerItemProxy */; + name = SJFullscreenPopGesture; + target = A19FC1B5D5F291312B4944B9B7DBF0A0 /* SJFullscreenPopGesture */; + targetProxy = B0A25DCF9ED2E82CF0F3564230DA604A /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -4644,88 +4672,63 @@ }; name = Release; }; - 0FA9EC49FE4FC247DBFC45AE4A2FB988 /* Debug */ = { + 0A6684DC6B9FE7B62895F9DF287AC9F5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B58F7685B09D52DE1C8E68983579AB99 /* MJRefresh.debug.xcconfig */; + baseConfigurationReference = 09FAD31258382D3E1171F30A6A61D033 /* Pods-SJVideoPlayer_Example.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/MJRefresh/MJRefresh-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MJRefresh; - PRODUCT_NAME = MJRefresh; - PUBLIC_HEADERS_FOLDER_PATH = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 1346F5D06EC59584D04DB4BD470C154E /* Release */ = { + 0CA8130C73B10D8215DD5A0F33C1417A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9F59BEA752C73D8454DFD7E54D5C947E /* SJRouter.release.xcconfig */; + baseConfigurationReference = 5FE4C6691D14EDF6DCAD3770E82856AB /* SJMediaCacheServer.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJRouter/SJRouter-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJMediaCacheServer/SJMediaCacheServer-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJRouter; - PRODUCT_NAME = SJRouter; + PRODUCT_MODULE_NAME = SJMediaCacheServer; + PRODUCT_NAME = SJMediaCacheServer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 2788EBA0F9C5C37882AB6B8F33664BD5 /* Release */ = { + 0FA9EC49FE4FC247DBFC45AE4A2FB988 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FA8DEC450867E35DA133A685740E291F /* SJBaseVideoPlayer.release.xcconfig */; + baseConfigurationReference = B58F7685B09D52DE1C8E68983579AB99 /* MJRefresh.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJBaseVideoPlayer/SJBaseVideoPlayer-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/MJRefresh/MJRefresh-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJBaseVideoPlayer; - PRODUCT_NAME = SJBaseVideoPlayer; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 27E2325CC9679DB5646A88BD0B79FE79 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6C139C3F7676C8DEA669E6510C61CEF1 /* CocoaAsyncSocket.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaAsyncSocket; - PRODUCT_NAME = CocoaAsyncSocket; + PRODUCT_MODULE_NAME = MJRefresh; + PRODUCT_NAME = MJRefresh; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -4734,112 +4737,155 @@ }; name = Debug; }; - 2911C19FBA05F06BE52E8826776F3F4A /* Debug */ = { + 1346F5D06EC59584D04DB4BD470C154E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 727DB2283D544FDCEB69CB998DEF72BD /* SJFullscreenPopGesture.debug.xcconfig */; + baseConfigurationReference = 9F59BEA752C73D8454DFD7E54D5C947E /* SJRouter.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJFullscreenPopGesture/SJFullscreenPopGesture-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJRouter/SJRouter-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJFullscreenPopGesture; - PRODUCT_NAME = SJFullscreenPopGesture; + PRODUCT_MODULE_NAME = SJRouter; + PRODUCT_NAME = SJRouter; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 2C6C38C7BBB514A9F76D082C31C513B4 /* Release */ = { + 18BAA58A5038ED46D99DFB97FEEE8C6B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9DFE326F84B719D440676E11775E3B93 /* SJFullscreenPopGesture.release.xcconfig */; + baseConfigurationReference = ADDAFB2AA4F7FF403F49E10A71A853F0 /* SJUIKit.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJFullscreenPopGesture/SJFullscreenPopGesture-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJUIKit/SJUIKit-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJFullscreenPopGesture; - PRODUCT_NAME = SJFullscreenPopGesture; + PRODUCT_MODULE_NAME = SJUIKit; + PRODUCT_NAME = SJUIKit; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 38157752B0C08F9285B88B5D1BD95926 /* Debug */ = { + 1F6386D77D6310F61FACB8504C1DD0B7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6434FD3A05EBAA2DCB456F4C40929543 /* Masonry.debug.xcconfig */; + baseConfigurationReference = 4EB47E14F6FC4F6E6110BC444D7EA851 /* YYModel.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/YYModel/YYModel-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Masonry; - PRODUCT_NAME = Masonry; + PRODUCT_MODULE_NAME = YYModel; + PRODUCT_NAME = YYModel; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 432B369FE75F6915D80A0B34462DFE84 /* Release */ = { + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B49C9C421A2389B673870CBC0281AFDB /* SJVideoPlayer.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJVideoPlayer/SJVideoPlayer-prefix.pch"; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJVideoPlayer; - PRODUCT_NAME = SJVideoPlayer; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; }; - name = Release; + name = Debug; }; - 432C8CBD87F5191DAF859E20110A7689 /* Debug */ = { + 27E2325CC9679DB5646A88BD0B79FE79 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 61A83E8FC20655506AE9FAA4D95DFFF9 /* SJPlaybackListController.debug.xcconfig */; + baseConfigurationReference = 6C139C3F7676C8DEA669E6510C61CEF1 /* CocoaAsyncSocket.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJPlaybackListController/SJPlaybackListController-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJPlaybackListController; - PRODUCT_NAME = SJPlaybackListController; + PRODUCT_MODULE_NAME = CocoaAsyncSocket; + PRODUCT_NAME = CocoaAsyncSocket; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -4848,42 +4894,43 @@ }; name = Debug; }; - 450F10ECF3C6C4834FF5E7DF283D8805 /* Debug */ = { + 2911C19FBA05F06BE52E8826776F3F4A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B7CA7CFFF421A8403C5E7A8D4280A941 /* SJRouter.debug.xcconfig */; + baseConfigurationReference = 727DB2283D544FDCEB69CB998DEF72BD /* SJFullscreenPopGesture.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJRouter/SJRouter-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJFullscreenPopGesture/SJFullscreenPopGesture-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJRouter; - PRODUCT_NAME = SJRouter; + PRODUCT_MODULE_NAME = SJFullscreenPopGesture; + PRODUCT_NAME = SJFullscreenPopGesture; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 557C05C78C22A3851A0009ABCDF048E2 /* Release */ = { + 2BD286A7FCBB2976A7814C602DC04753 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4EB47E14F6FC4F6E6110BC444D7EA851 /* YYModel.release.xcconfig */; + baseConfigurationReference = B49C9C421A2389B673870CBC0281AFDB /* SJVideoPlayer.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/YYModel/YYModel-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJVideoPlayer/SJVideoPlayer-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = YYModel; - PRODUCT_NAME = YYModel; + PRODUCT_MODULE_NAME = SJVideoPlayer; + PRODUCT_NAME = SJVideoPlayer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -4893,32 +4940,33 @@ }; name = Release; }; - 5991B5C42D11B17E49D3B3355AAE33A8 /* Release */ = { + 2C6C38C7BBB514A9F76D082C31C513B4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ADDAFB2AA4F7FF403F49E10A71A853F0 /* SJUIKit.release.xcconfig */; + baseConfigurationReference = 9DFE326F84B719D440676E11775E3B93 /* SJFullscreenPopGesture.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJUIKit/SJUIKit-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJFullscreenPopGesture/SJFullscreenPopGesture-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJUIKit; - PRODUCT_NAME = SJUIKit; + PRODUCT_MODULE_NAME = SJFullscreenPopGesture; + PRODUCT_NAME = SJFullscreenPopGesture; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 5CE6F49CA900338CD15302FAC4F398B9 /* Release */ = { + 38157752B0C08F9285B88B5D1BD95926 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70554F02CEAF2EF39E0271C14A2C6B4D /* Masonry.release.xcconfig */; + baseConfigurationReference = 6434FD3A05EBAA2DCB456F4C40929543 /* Masonry.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4935,24 +4983,23 @@ SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 5DE630FB78E4B3B3EC9E52F3827315E4 /* Debug */ = { + 432C8CBD87F5191DAF859E20110A7689 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5AA174BA60C14D69580351B098515D1 /* SDWebImage.debug.xcconfig */; + baseConfigurationReference = 61A83E8FC20655506AE9FAA4D95DFFF9 /* SJPlaybackListController.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJPlaybackListController/SJPlaybackListController-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + PRODUCT_MODULE_NAME = SJPlaybackListController; + PRODUCT_NAME = SJPlaybackListController; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -4961,103 +5008,46 @@ }; name = Debug; }; - 6CA980D9226C83A757468CC263F01147 /* Release */ = { + 450F10ECF3C6C4834FF5E7DF283D8805 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 09FAD31258382D3E1171F30A6A61D033 /* Pods-SJVideoPlayer_Example.release.xcconfig */; + baseConfigurationReference = B7CA7CFFF421A8403C5E7A8D4280A941 /* SJRouter.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SJRouter/SJRouter-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SJRouter; + PRODUCT_NAME = SJRouter; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 6D42DC62C4F2E194221DF89C48496C98 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; }; - name = Release; + name = Debug; }; - 96E20DB87887657D5668606227AF375F /* Debug */ = { + 489826CB57F823D795569C4C26BB2209 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B66BAE0E6D2328E826BBB9F6D9B80B34 /* SJVideoPlayer.debug.xcconfig */; + baseConfigurationReference = D26B68DF9D9AD97C69EDD590CC2822DE /* SJBaseVideoPlayer.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJVideoPlayer/SJVideoPlayer-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJBaseVideoPlayer/SJBaseVideoPlayer-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + SJDEBUG, + ); IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJVideoPlayer; - PRODUCT_NAME = SJVideoPlayer; + PRODUCT_MODULE_NAME = SJBaseVideoPlayer; + PRODUCT_NAME = SJBaseVideoPlayer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -5066,46 +5056,43 @@ }; name = Debug; }; - B35DCB3796954FD16BEBB1013DE6A81B /* Debug */ = { + 5CE6F49CA900338CD15302FAC4F398B9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D26B68DF9D9AD97C69EDD590CC2822DE /* SJBaseVideoPlayer.debug.xcconfig */; + baseConfigurationReference = 70554F02CEAF2EF39E0271C14A2C6B4D /* Masonry.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJBaseVideoPlayer/SJBaseVideoPlayer-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - SJDEBUG, - ); + GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJBaseVideoPlayer; - PRODUCT_NAME = SJBaseVideoPlayer; + PRODUCT_MODULE_NAME = Masonry; + PRODUCT_NAME = Masonry; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - B6BE594D197007AC5026321C5D14A18E /* Debug */ = { + 5DE630FB78E4B3B3EC9E52F3827315E4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E90570A98BEB9F98A1FC6647230C26BF /* SJUIKit.debug.xcconfig */; + baseConfigurationReference = E5AA174BA60C14D69580351B098515D1 /* SDWebImage.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJUIKit/SJUIKit-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJUIKit; - PRODUCT_NAME = SJUIKit; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -5114,32 +5101,31 @@ }; name = Debug; }; - B88DADAC76CD700D4198329B519E6C49 /* Release */ = { + 69A63359CD786F7C70D9685F692F6D63 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 26924A8C00020902B231A2402CC2DFA2 /* SJPlaybackListController.release.xcconfig */; + baseConfigurationReference = B66BAE0E6D2328E826BBB9F6D9B80B34 /* SJVideoPlayer.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJPlaybackListController/SJPlaybackListController-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJVideoPlayer/SJVideoPlayer-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJPlaybackListController; - PRODUCT_NAME = SJPlaybackListController; + PRODUCT_MODULE_NAME = SJVideoPlayer; + PRODUCT_NAME = SJVideoPlayer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - C28244E8D1682A6762FF2ACC005E0479 /* Release */ = { + 801ABBD3DFE67DD1095BF20FB152D4A3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5084EF22EE0C12706C7EAEC6CA599D08 /* SJMediaCacheServer.release.xcconfig */; + baseConfigurationReference = A9F545D09F3D8A98F0E5D82AAA59285B /* SJMediaCacheServer.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5160,7 +5146,7 @@ }; name = Release; }; - C32E19A8DD7C8EC56BF05E3FC3EC56A4 /* Debug */ = { + 87C20307F9CE0DCE281305D919B0B94A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 8E699C6793319573FB00A3BDE42AAA4C /* YYModel.debug.xcconfig */; buildSettings = { @@ -5182,42 +5168,43 @@ }; name = Debug; }; - C50EA62244FE1AF3C3991664FA6EB9F4 /* Debug */ = { + B34804096415DDFA0E2B6BF19D8358CC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B46A2496D6110BDEB4B45A411FCE7D15 /* SJMediaCacheServer.debug.xcconfig */; + baseConfigurationReference = FA8DEC450867E35DA133A685740E291F /* SJBaseVideoPlayer.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SJMediaCacheServer/SJMediaCacheServer-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJBaseVideoPlayer/SJBaseVideoPlayer-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SJMediaCacheServer; - PRODUCT_NAME = SJMediaCacheServer; + PRODUCT_MODULE_NAME = SJBaseVideoPlayer; + PRODUCT_NAME = SJBaseVideoPlayer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - D0E37D433D8D53B9D8041261A5CED1CD /* Release */ = { + B88DADAC76CD700D4198329B519E6C49 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 49D88F3249DF866E193A506FDF76EBFF /* SDWebImage.release.xcconfig */; + baseConfigurationReference = 26924A8C00020902B231A2402CC2DFA2 /* SJPlaybackListController.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SJPlaybackListController/SJPlaybackListController-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + PRODUCT_MODULE_NAME = SJPlaybackListController; + PRODUCT_NAME = SJPlaybackListController; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -5227,27 +5214,29 @@ }; name = Release; }; - E411B834C72C84FE6A493CF2A2F4C697 /* Debug */ = { + C18A59E32D786032D300EC4F155F5B3A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 780634E729C4D79FBA038A7CA9ED0127 /* Pods-SJVideoPlayer_Example.debug.xcconfig */; + baseConfigurationReference = E90570A98BEB9F98A1FC6647230C26BF /* SJUIKit.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SJUIKit/SJUIKit-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACH_O_TYPE = staticlib; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SJUIKit; + PRODUCT_NAME = SJUIKit; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - E4D0D44B090D4284607EBBC4E71A96C1 /* Debug */ = { + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -5282,16 +5271,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -5300,17 +5286,59 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; + name = Release; + }; + D0E37D433D8D53B9D8041261A5CED1CD /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 49D88F3249DF866E193A506FDF76EBFF /* SDWebImage.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E27D77F7C6917A00F6A4E167BDC064C6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 780634E729C4D79FBA038A7CA9ED0127 /* Pods-SJVideoPlayer_Example.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; name = Debug; }; F7D027652B5EDA6EB34612D3495F2921 /* Release */ = { @@ -5342,8 +5370,8 @@ 03BD6C09CDDF8C0268B88A029D6DB71A /* Build configuration list for PBXNativeTarget "SJBaseVideoPlayer" */ = { isa = XCConfigurationList; buildConfigurations = ( - B35DCB3796954FD16BEBB1013DE6A81B /* Debug */, - 2788EBA0F9C5C37882AB6B8F33664BD5 /* Release */, + 489826CB57F823D795569C4C26BB2209 /* Debug */, + B34804096415DDFA0E2B6BF19D8358CC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -5369,17 +5397,26 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - E4D0D44B090D4284607EBBC4E71A96C1 /* Debug */, - 6D42DC62C4F2E194221DF89C48496C98 /* Release */, + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */, + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 48EF5458907358E058F201E73BBAD998 /* Build configuration list for PBXNativeTarget "SJMediaCacheServer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0CA8130C73B10D8215DD5A0F33C1417A /* Debug */, + 801ABBD3DFE67DD1095BF20FB152D4A3 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 513CF42211370984B927727AEEF876BB /* Build configuration list for PBXNativeTarget "YYModel" */ = { + 55A5DCF17473306A5CD8C751E68023AE /* Build configuration list for PBXNativeTarget "SJUIKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - C32E19A8DD7C8EC56BF05E3FC3EC56A4 /* Debug */, - 557C05C78C22A3851A0009ABCDF048E2 /* Release */, + C18A59E32D786032D300EC4F155F5B3A /* Debug */, + 18BAA58A5038ED46D99DFB97FEEE8C6B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -5396,8 +5433,8 @@ 73EBF9ACCAC16FA97A3BC5BA8A123D31 /* Build configuration list for PBXNativeTarget "SJVideoPlayer" */ = { isa = XCConfigurationList; buildConfigurations = ( - 96E20DB87887657D5668606227AF375F /* Debug */, - 432B369FE75F6915D80A0B34462DFE84 /* Release */, + 69A63359CD786F7C70D9685F692F6D63 /* Debug */, + 2BD286A7FCBB2976A7814C602DC04753 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -5420,15 +5457,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8EAFB731B3AAA5DD2F7563A906DC9152 /* Build configuration list for PBXNativeTarget "SJUIKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B6BE594D197007AC5026321C5D14A18E /* Debug */, - 5991B5C42D11B17E49D3B3355AAE33A8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; B1FA491365904802AD9D5BF4683066A6 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -5447,11 +5475,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EC292DBF810346C86DF1A7127E14EBB2 /* Build configuration list for PBXNativeTarget "SJMediaCacheServer" */ = { + EEC872754C01D8639E96286984CEE380 /* Build configuration list for PBXNativeTarget "YYModel" */ = { isa = XCConfigurationList; buildConfigurations = ( - C50EA62244FE1AF3C3991664FA6EB9F4 /* Debug */, - C28244E8D1682A6762FF2ACC005E0479 /* Release */, + 87C20307F9CE0DCE281305D919B0B94A /* Debug */, + 1F6386D77D6310F61FACB8504C1DD0B7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -5459,8 +5487,8 @@ F1A7F864AE356CBE569623E9160E8DB2 /* Build configuration list for PBXNativeTarget "Pods-SJVideoPlayer_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - E411B834C72C84FE6A493CF2A2F4C697 /* Debug */, - 6CA980D9226C83A757468CC263F01147 /* Release */, + E27D77F7C6917A00F6A4E167BDC064C6 /* Debug */, + 0A6684DC6B9FE7B62895F9DF287AC9F5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/SJBaseVideoPlayer/README.md b/Example/Pods/SJBaseVideoPlayer/README.md index 2001370b2..991def1cf 100644 --- a/Example/Pods/SJBaseVideoPlayer/README.md +++ b/Example/Pods/SJBaseVideoPlayer/README.md @@ -22,28 +22,43 @@ pod 'SJVideoPlayer', :git => 'https://gitee.com/changsanjiang/SJVideoPlayer.git' $ pod update --no-repo-update (不要用 pod install 了, 用这个命令安装) ``` -## Wiki -[Welcome to the SJVideoPlayer wiki!](https://github.com/changsanjiang/SJVideoPlayer/wiki) +## [Wiki](https://github.com/changsanjiang/SJVideoPlayer/wiki) -- [Getting Started](https://github.com/changsanjiang/SJVideoPlayer/wiki/Getting-Started) +### FAQs +- 旋转 + - [点击旋转卡死或者旋转出现异常?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E7%82%B9%E5%87%BB%E6%97%8B%E8%BD%AC%E5%8D%A1%E6%AD%BB%E6%88%96%E8%80%85%E6%97%8B%E8%BD%AC%E5%87%BA%E7%8E%B0%E5%BC%82%E5%B8%B8%3F) + - [怎样直接弹出全屏的播放器?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%A6%82%E4%BD%95%E7%9B%B4%E6%8E%A5%E5%BC%B9%E5%87%BA%E5%85%A8%E5%B1%8F%E7%9A%84%E6%92%AD%E6%94%BE%E5%99%A8%3F) +- 控制层 + - [怎样一直显示控制层?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%A6%82%E4%BD%95%E4%B8%80%E7%9B%B4%E6%98%BE%E7%A4%BA%E6%8E%A7%E5%88%B6%E5%B1%82%3F) + - [控制层上的按钮 怎样添加 删除 修改?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E6%8E%A7%E5%88%B6%E5%B1%82%E4%B8%8A%E7%9A%84%E6%8C%89%E9%92%AE%E5%A6%82%E4%BD%95-%E6%B7%BB%E5%8A%A0-%E5%88%A0%E9%99%A4-%E4%BF%AE%E6%94%B9%3F) + - [控制层上的标题 怎样居中显示?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E6%A0%87%E9%A2%98%E5%B1%85%E4%B8%AD%E6%98%BE%E7%A4%BA%3F) + - [控制层上 Adapter 的视图约束 怎样修改? (如何 在控制层的其他区域添加自定义视图?)](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9%E6%8E%A7%E5%88%B6%E5%B1%82%E4%B8%8A%60Adapter%60%E7%9A%84%E8%A7%86%E5%9B%BE%E7%BA%A6%E6%9D%9F%3F-(%E5%A6%82%E4%BD%95%E5%9C%A8%E6%8E%A7%E5%88%B6%E5%B1%82%E7%9A%84%E5%85%B6%E4%BB%96%E5%8C%BA%E5%9F%9F%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A7%86%E5%9B%BE%3F)) + - [控制层上的按钮点击事件 如何监听?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%A6%82%E4%BD%95%E7%9B%91%E5%90%AC%E6%8E%A7%E5%88%B6%E5%B1%82%E4%B8%8A%E7%9A%84%E6%8C%89%E9%92%AE%E7%82%B9%E5%87%BB%E4%BA%8B%E4%BB%B6%3F) +- 其他 + - [怎样隐藏亮度和音量的提示视图?](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%A6%82%E4%BD%95-%E9%9A%90%E8%97%8F%E4%BA%AE%E5%BA%A6%E5%92%8C%E9%9F%B3%E9%87%8F%E7%9A%84%E6%8F%90%E7%A4%BA%E8%A7%86%E5%9B%BE%3F) + - [在 iOS 14 播放 m3u8 时, 从后台进入前台后无法继续播放](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%9C%A8-iOS-14-%E6%92%AD%E6%94%BE-m3u8-%E6%97%B6,-%E4%BB%8E%E5%90%8E%E5%8F%B0%E8%BF%9B%E5%85%A5%E5%89%8D%E5%8F%B0%E5%90%8E%E6%97%A0%E6%B3%95%E7%BB%A7%E7%BB%AD%E6%92%AD%E6%94%BE) + +### 介绍 +- [文档](https://github.com/changsanjiang/SJVideoPlayer/wiki/Documents) - [快速开始](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B) - [旋转和直接全屏](https://github.com/changsanjiang/SJVideoPlayer/wiki/旋转和直接全屏) - [播放记录](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E6%92%AD%E6%94%BE%E8%AE%B0%E5%BD%95) - [长按快进](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E9%95%BF%E6%8C%89%E5%BF%AB%E8%BF%9B) - [弹幕](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%BC%B9%E5%B9%95) +- [画中画(iOS 14.0)](https://github.com/changsanjiang/SJVideoPlayer/wiki/iOS-14-%E7%94%BB%E4%B8%AD%E7%94%BB) +- [水印视图](https://github.com/changsanjiang/SJVideoPlayer/wiki/水印视图) +- [切换清晰度](https://github.com/changsanjiang/SJVideoPlayer/wiki/%E5%88%87%E6%8D%A2%E6%B8%85%E6%99%B0%E5%BA%A6) - [UITableView及UICollectionView中播放的解决方案](https://github.com/changsanjiang/SJVideoPlayer/wiki/UITableView%E5%8F%8AUICollectionView%E4%B8%AD%E6%92%AD%E6%94%BE%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88v2) - 切换到第三方SDK - [切换至 ijkplayer](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-ijkplayer) - - [切换至 AliPlayer](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-AliPlayer) - - [切换至 AliyunVodPlayer](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-AliVodPlayer) - - [切换至 PLPlayerKit](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-PLPlayerKit) -- 控制层 - - [Control Layer Views](https://github.com/changsanjiang/SJVideoPlayer/wiki/Control-Layer-Views) - - [Setup Control Layer View](https://github.com/changsanjiang/SJVideoPlayer/wiki/Setup-Control-Layer-View) - - [Use AriaContorlLayer](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-AriaContorlLayer) -- [Setup Placeholder Image](https://github.com/changsanjiang/SJVideoPlayer/wiki/Setup-Placeholder-Image) -- [Setup Progress Slider](https://github.com/changsanjiang/SJVideoPlayer/wiki/Setup-Progress-Slider) - + - [切换至 AliPlayer](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-AliPlayer) + - [切换至 AliyunVodPlayer](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-AliVodPlayer) + - [切换至 PLPlayerKit](https://github.com/changsanjiang/SJVideoPlayer/wiki/Use-PLPlayerKit) +- 控制层介绍 + - [控制层视图介绍](https://github.com/changsanjiang/SJVideoPlayer/wiki/Control-Layer-Views) + - [控制层上的item介绍](https://github.com/changsanjiang/SJVideoPlayer/wiki/Setup-Control-Layer-View) +- [设置占位图](https://github.com/changsanjiang/SJVideoPlayer/wiki/Setup-Placeholder-Image) +- [设置进度条](https://github.com/changsanjiang/SJVideoPlayer/wiki/Setup-Progress-Slider) ## Author @@ -51,1287 +66,8 @@ Email: changsanjiang@gmail.com QQGroup: 930508201 (iOS 开发) -[请我喝咖啡☕️](#赞助) - -## Documents - -v2.6.5 往后的版本, 请[配置旋转 !!](https://github.com/changsanjiang/SJVideoPlayer/issues/148) - -#### [1. 视图层次结构](#1) - -该部分内容已迁移至[wiki](https://github.com/changsanjiang/SJVideoPlayer/wiki/UITableView%E5%8F%8AUICollectionView%E4%B8%AD%E6%92%AD%E6%94%BE%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88v2) - -#### [2. URLAsset](#2) -* [2.1 播放 URL(本地文件或远程资源)](#2.1) -* [2.2 播放 AVAsset 或其子类](#2.2) -* [2.3 从指定的位置开始播放](#2.3) -* [2.4 续播(进入下个页面时, 继续播放)](#2.4) -* [2.5 播放记录](#2.5) - -#### [3. 播放控制](#3) -* [3.1 播放](#3.1) -* [3.2 暂停](#3.2) -* [3.3 刷新 ](#3.3) -* [3.4 重播](#3.4) -* [3.5 停止](#3.5) -* [3.6 静音](#3.6) -* [3.7 调速](#3.7) -* [3.8 报错](#3.8) -* [3.9 跳转](#3.9) -* [3.10 切换清晰度](#3.10) -* [3.11 当前时间](#3.11) -* [3.12 总时长](#3.12) -* [3.13 缓冲时长](#3.13) -* [3.14 是否已播放完毕](#3.14) -* [3.15 是否调用过播放](#3.15) -* [3.16 是否调用过重播](#3.16) -* [3.17 设置新资源时, 是否自动播放](#3.17) -* [3.18 进入后台, 是否暂停播放](#3.18) -* [3.19 进入前台, 是否恢复播放](#3.19) -* [3.20 跳转完成, 是否恢复播放](#3.20) -* [3.21 资源准备状态](#3.21) -* [3.22 播放控制状态](#3.22) -* [3.23 播放等待的原因](#3.23) -* [3.24 监听状态改变🔥](#3.24) -* [3.25 已观看的时长(当前资源)](#3.25) -* [3.26 接入别的视频 SDK, 自己动手撸一个 SJVideoPlayerPlaybackController, 替换作者原始实现](#3.26) - -#### [4. 控制层的显示和隐藏](#4) -* [4.1 让控制层显示](#4.1) -* [4.2 让控制层隐藏](#4.2) -* [4.3 控制层是否显示中](#4.3) -* [4.4 是否在暂停时保持控制层显示](#4.4) -* [4.5 监听状态改变🔥](#4.5) -* [4.6 自己动手撸一个 SJControlLayerAppearManager, 替换作者原始实现](#4.6) - -#### [5. 设备亮度和音量](#5) -* [5.1 调整设备亮度](#5.1) -* [5.2 调整设备声音](#5.2) -* [5.3 监听状态改变🔥](#5.3) -* [5.4 禁止播放器设置](#5.4) -* [5.5 自己动手撸一个 SJDeviceVolumeAndBrightnessManager, 替换作者原始实现](#5.5) - -#### [6. 旋转](#6) -内容已经迁移至[Wiki](https://github.com/changsanjiang/SJVideoPlayer/wiki/旋转和直接全屏) - -#### [7. 直接全屏而不旋转](#7) -内容已经迁移至[Wiki](https://github.com/changsanjiang/SJVideoPlayer/wiki/旋转和直接全屏) - -#### [8. 镜像翻转](#8) -* [8.1 翻转和恢复](#8.1) -* [8.2 监听状态改变🔥](#8.2) -* [8.3 自己动手撸一个 SJFlipTransitionManager, 替换作者原始实现](#8.3) - -#### [9. 网络状态](#9) -* [9.1 当前的网络状态](#9.1) -* [9.2 监听状态改变🔥](#9.2) -* [9.3 自己动手撸一个 SJReachability, 替换作者原始实现](#9.3) - -#### [10. 手势](#10) -* [10.1 单击手势](#10.1) -* [10.2 双击手势](#10.2) -* [10.3 移动手势](#10.3) -* [10.4 捏合手势](#10.4) -* [10.5 设置支持的手势](#10.5) -* [10.6 自定义某个手势的处理](#10.6) - -#### [11. 占位图](#11) -* [11.1 设置本地占位图](#11.1) -* [11.2 设置网络占位图](#11.2) -* [11.3 是否隐藏占位图 - 播放器准备好显示时](#11.3) - -#### [12. 显示提示文本](#12) -* [12.1 显示管理类](#12.1) -* [12.2 配置提示文本](#12.2) - -#### [13. 一些固定代码](#13) -* [13.4 - (BOOL)vc_prefersStatusBarHidden;](#13.4) -* [13.5 - (UIStatusBarStyle)vc_preferredStatusBarStyle;](#13.5) -* [13.6 - 临时显示状态栏](#13.6) -* [13.7 - 临时隐藏状态栏](#13.7) - -#### [14. 截屏](#14) -* [14.1 当前时间截图](#14.1) -* [14.2 指定时间截图](#14.2) - -#### [15. 导出视频或GIF](#15) -* [15.1 导出视频](#15.1) -* [15.2 导出GIF](#15.2) -* [15.3 取消操作](#15.3) - -#### [16. 滚动相关](#16) -* [16.1 是否在 UICollectionView 或者 UITableView 中播放](#16.1) -* [16.2 是否已显示](#16.2) -* [16.3 播放器视图将要滚动显示和消失的回调](#16.3) -* [16.4 滚动出去后, 是否暂停](#16.4) -* [16.5 滚动进入时, 是否恢复播放](#16.5) -* [16.6 滚动出去后, 是否隐藏播放器视图](#16.6) - -#### [17. 自动播放 - 在 UICollectionView 或者 UITableView 中](#17) -* [17.1 开启](#17.1) -* [17.2 配置](#17.2) -* [17.3 关闭](#17.3) -* [17.4 主动调用播放下一个资源](#17.4) - -#### [18. 对控制层上的Item的操作](#18) -* [18.1 添加](#18.1) -* [18.2 删除](#18.2) -* [18.3 调整位置](#18.3) - -#### [19. 对控制层上的Item的一些补充](#19) -* [19.1 设置与前后item的间距](#19.1) -* [19.2 设置隐藏](#19.2) -* [19.3 填充剩余空间](#19.3) - -#### [20. SJEdgeControlLayer 的补充](#20) -* [20.1 是否竖屏时隐藏返回按钮](#20.1) -* [20.2 是否禁止网络状态变化提示](#20.2) -* [20.3 是否使返回按钮常驻](#20.3) -* [20.4 是否隐藏底部进度条](#20.4) -* [20.5 是否在loadingView上显示网速](#20.5) -* [20.6 自定义loadingView](#20.6) -* [20.7 调整边距](#20.7) -* [20.8 取消控制层上下视图的阴影](#20.8) - -___ - - -## 以下为详细介绍: - -

2. URLAsset

- -

- -播放器 播放的资源是通过 SJVideoPlayerURLAsset 创建的. SJVideoPlayerURLAsset 由两部分组成: - -视图层次 (第一部分中的SJPlayModel) -资源地址 (可以是本地资源/URL/AVAsset) - -默认情况下, 创建了 SJVideoPlayerURLAsset , 赋值给播放器后即可播放. - -

- -___ - -

2.1 播放 URL(本地文件或远程资源)

- -```Objective-C -NSURL *URL = [NSURL URLWithString:@"https://...example.mp4"]; -_player.URLAsset = [[SJVideoPlayerURLAsset alloc] initWithURL:URL]; -``` - -

2.2 播放 AVAsset 或其子类

- -```Objective-C -_player.URLAsset = [[SJVideoPlayerURLAsset alloc] initWithAVAsset:avAsset]; -``` - -

2.3 从指定的位置开始播放

- -```Objective-C -NSTimeInterval secs = 20.0; -_player.URLAsset = [[SJVideoPlayerURLAsset alloc] initWithURL:URL startPosition:secs]; // 直接从20秒处开始播放 -``` - -

2.4 续播(进入下个页面时, 继续播放)

- -

- -我们可能需要切换界面时, 希望视频能够在下一个界面无缝的进行播放. 使用如下方法, 传入正在播放的资源, 将新的资源赋值给播放器播放即可. - -

- -```Objective-C -// otherAsset 即为上一个页面播放的Asset -// 除了需要一个otherAsset, 其他方面同以上的示例一模一样 -_player.URLAsset = [SJVideoPlayerURLAsset.alloc initWithOtherAsset:otherAsset]; -``` - -

2.5 播放记录

- -

-内容已迁移至wiki: https://github.com/changsanjiang/SJVideoPlayer/wiki/%E6%92%AD%E6%94%BE%E8%AE%B0%E5%BD%95 -

- -___ - - -

3. 播放控制

- -

-播放控制: 对播放进行的操作. 此部分的内容由 "id <SJMediaPlaybackController> playbackController" 提供支持. - -大多数对播放进行的操作, 均在协议 SJMediaPlaybackController 进行了声明. - -正常来说实现了此协议的任何对象, 均可赋值给 player.playbackController 来替换原始实现. -

- -

3.1 播放

- -```Objective-C -[_player play]; -``` - -

3.2 暂停

- -```Objective-C -[_player pause]; -``` - -

3.3 刷新

- -

-在播放一个资源时, 可能有一些意外情况导致播放失败(如网络环境差). - -此时当用户点击刷新按钮, 我们需要对当前的资源(Asset)进行刷新. - -SJBaseVideoPlayer提供了直接的方法去刷新, 不需要开发者再重复的去创建新的Asset. -

- -```Objective-C -[_player refresh]; -``` - -

3.4 重播

- -

-从头开始重新播放 -

- -```Objective-C -[_player replay]; -``` - -

3.5 停止

- -

-停止播放, 请注意: 当前资源将会被清空, 如需重播, 请重新设置新资源 -

- -```Objective-C -[_player stop]; -``` - -

3.6 静音

- -```Objective-C -_player.muted = YES; -``` - -

3.7 调速

- -```Objective-C -// 默认值为 1.0 -_player.rate = 1.0; -``` - -

3.8 报错

- -

- -当播放发生错误时, 可以通过它来获取错误信息 - -

- -```Objective-C -_player.error -``` - -

3.9 跳转

- -```Objective-C -/// -/// 是否精确跳转, default value is NO. -/// -@property (nonatomic) BOOL accurateSeeking; - -/// -/// 跳转到指定位置播放 -/// -- (void)seekToTime:(NSTimeInterval)secs completionHandler:(void (^ __nullable)(BOOL finished))completionHandler; -- (void)seekToTime:(CMTime)time toleranceBefore:(CMTime)toleranceBefore toleranceAfter:(CMTime)toleranceAfter completionHandler:(void (^ __nullable)(BOOL finished))completionHandler; -``` - -

3.10 切换清晰度

- -```Objective-C -/// -/// 切换清晰度 -/// -- (void)switchVideoDefinition:(SJVideoPlayerURLAsset *)URLAsset; - -/// -/// 当前清晰度切换的信息 -/// -@property (nonatomic, strong, readonly) SJVideoDefinitionSwitchingInfo *definitionSwitchingInfo; - -/// 以下为设置 SJVideoPlayer.definitionURLAssets, 将会在清晰度切换控制层中显示这些资源项. - -SJVideoPlayerURLAsset *asset1 = [[SJVideoPlayerURLAsset alloc] initWithURL:VideoURL_Level4]; -asset1.definition_fullName = @"超清 1080P"; -asset1.definition_lastName = @"超清"; - -SJVideoPlayerURLAsset *asset2 = [[SJVideoPlayerURLAsset alloc] initWithURL:VideoURL_Level3]; -asset2.definition_fullName = @"高清 720P"; -asset2.definition_lastName = @"AAAAAAA"; - -SJVideoPlayerURLAsset *asset3 = [[SJVideoPlayerURLAsset alloc] initWithURL:VideoURL_Level2]; -asset3.definition_fullName = @"清晰 480P"; -asset3.definition_lastName = @"480P"; -_player.definitionURLAssets = @[asset1, asset2, asset3]; - -// 先播放asset1. (asset2 和 asset3 将会在用户选择后进行切换) -_player.URLAsset = asset1; -``` - -

3.11 当前时间

- -```Objective-C -@property (nonatomic, readonly) NSTimeInterval currentTime; ///< 当前播放到的时间 -``` - -

3.12 总时长

- -```Objective-C -@property (nonatomic, readonly) NSTimeInterval duration; ///< 总时长 -``` - -

3.13 缓冲时长

- -```Objective-C -@property (nonatomic, readonly) NSTimeInterval playableDuration; ///< 缓冲到的时间 -``` - -

3.14 是否已播放完毕

- -```Objective-C -@property (nonatomic, readonly) BOOL isPlaybackFinished; ///< 当前资源是否已播放结束 -``` - -

3.15 是否调用过播放

- -```Objective-C -@property (nonatomic, readonly) BOOL isPlayed; ///< 是否播放过当前的资源 -``` -

3.16 是否调用过重播

- -```Objective-C -@property (nonatomic, readonly) BOOL isReplayed; ///< 是否重播过当前的资源 -``` - -

3.17 设置新资源时, 是否自动播放

- -```Objective-C -@property (nonatomic) BOOL autoplayWhenSetNewAsset; ///< 设置新的资源后, 是否自动调用播放. 默认为 YES -``` - -

3.18 进入后台, 是否暂停播放

- -

-关于后台播放视频, 引用自: 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` -

- -```Objective-C -_player.pauseWhenAppDidEnterBackground = NO; // 默认值为 YES, 即进入后台后 暂停. -``` - -

3.19 进入前台, 是否恢复播放

- -```Objective-C -@property (nonatomic) BOOL resumePlaybackWhenAppDidEnterForeground; ///< 进入前台时, 是否恢复播放. 默认为 NO -``` - -

3.20 跳转完成, 是否恢复播放

- -```Objective-C -@property (nonatomic) BOOL resumePlaybackWhenPlayerHasFinishedSeeking; ///< 当`seekToTime:`操作完成后, 是否恢复播放. 默认为 YES -``` - -

3.21 资源准备状态

- -

- -资源准备(或初始化)的状态 - -当未设置资源时, 此时 player.assetStatus = .unknown -当设置新资源时, 此时 player.assetStatus = .preparing -当准备好播放时, 此时 player.assetStatus = .readyToPlay -当初始化失败时, 此时 player.assetStatus = .failed - -

- -```Objective-C -typedef NS_ENUM(NSInteger, SJAssetStatus) { -/// -/// 未知状态 -/// -SJAssetStatusUnknown, - -/// -/// 准备中 -/// -SJAssetStatusPreparing, - -/// -/// 当前资源可随时进行播放(播放控制请查看`timeControlStatus`) -/// -SJAssetStatusReadyToPlay, - -/// -/// 发生错误 -/// -SJAssetStatusFailed -}; -``` - -

3.22 播放控制状态

- -

- -暂停或播放的控制状态 - -当调用了暂停时, 此时 player.timeControlStatus = .paused - -当调用了播放时, 此时 将可能处于以下两种状态中的任意一个: -- player.timeControlStatus = .playing -正在播放中. - -- player.timeControlStatus = .waitingToPlay -等待播放, 等待的原因请查看 player.reasonForWaitingToPlay - -

- -```Objective-C -typedef NS_ENUM(NSInteger, SJPlaybackTimeControlStatus) { -/// -/// 暂停状态(已调用暂停或未执行任何操作的状态) -/// -SJPlaybackTimeControlStatusPaused, - -/// -/// 播放状态(已调用播放), 当前正在缓冲或正在评估能否播放. 可以通过`reasonForWaitingToPlay`来获取原因, UI层可以根据原因来控制loading视图的状态. -/// -SJPlaybackTimeControlStatusWaitingToPlay, - -/// -/// 播放状态(已调用播放), 当前播放器正在播放 -/// -SJPlaybackTimeControlStatusPlaying -}; -``` - -

3.23 播放等待的原因

- -

- -当调用了播放, 播放器未能播放处于等待状态时的原因 - -等待原因有以下3种状态: -1.未设置资源, 此时设置资源后, 当`player.assetStatus = .readyToPlay`, 播放器将自动进行播放. -2.可能是由于缓冲不足, 播放器在等待缓存足够时自动恢复播放, 此时可以显示loading视图. -3.可能是正在评估缓冲中, 这个过程会进行的很快, 不需要显示loading视图. - -

- -```Objective-C -/// -/// 缓冲中, UI层建议显示loading视图 -/// -extern SJWaitingReason const SJWaitingToMinimizeStallsReason; - -/// -/// 正在评估能否播放, 处于此状态时, 不建议UI层显示loading视图 -/// -extern SJWaitingReason const SJWaitingWhileEvaluatingBufferingRateReason; - -/// -/// 未设置资源 -/// -extern SJWaitingReason const SJWaitingWithNoAssetToPlayReason; -``` - -

3.24 监听状态改变🔥

- -```Objective-C -/// -/// 观察者 -/// -/// 可以如下设置block, 来监听某个状态的改变 -/// 了解更多请前往头文件查看 -/// player.playbackObserver.currentTimeDidChangeExeBlock = ...; -/// player.playbackObserver.durationDidChangeExeBlock = ...; -/// player.playbackObserver.timeControlStatusDidChangeExeBlock = ...; -/// -@property (nonatomic, strong, readonly) SJPlaybackObservation *playbackObserver; -``` - -

3.25 已观看的时长(当前资源)

- -```Objective-C -@property (nonatomic, readonly) NSTimeInterval durationWatched; ///< 已观看的时长(当前资源) -``` - -

3.26 接入别的视频 SDK, 自己动手撸一个 SJVideoPlayerPlaybackController, 替换作者原始实现

- -

-某些时候, 我们需要接入第三方的视频SDK, 但是又想使用 SJBaseVideoPlayer 封装的其他的功能. - -这个时候, 我们可以自己动手, 将第三方的SDK封装一下, 实现 SJVideoPlayerPlaybackController 协议, 管理 SJBaseVideoPlayer 中的播放操作. - -示例: - -- 可以参考 SJAVMediaPlaybackController 中的实现. -- 封装 ijkplayer 的示例: https://gitee.com/changsanjiang/SJIJKMediaPlaybackController -

- -```Objective-C -_player.playbackController = Your PlaybackController. -``` - -___ - -

4. 控制层的显示和隐藏

- -

-控制层的显示和隐藏, 此部分的内容由 "id <SJControlLayerAppearManager> controlLayerAppearManager" 提供支持. - -controlLayerAppearManager 内部存在一个定时器, 当控制层显示时, 会开启此定时器. 一定间隔后, 会尝试隐藏控制层. - -其他相关操作, 请见以下内容. -

- -

4.1 让控制层显示

- -

-当控制层需要显示时, 可以调用下面方法. - - -```Objective-C -[_player controlLayerNeedAppear]; -``` - -此方法将会回调控制层的代理方法: - -"- (void)controlLayerNeedAppear:(__kindof SJBaseVideoPlayer *)videoPlayer;" - -代理将会对当前的控制层进行显示处理. -

- -

4.2 让控制层隐藏

- -

-当控制层需要隐藏时, 可以调用下面方法. - -```Objective-C -[_player controlLayerNeedDisappear]; -``` - -此方法将会回调控制层的代理方法: - -"- (void)controlLayerNeedDisappear:(__kindof SJBaseVideoPlayer *)videoPlayer;" - -代理将会对当前的控制层进行隐藏处理. -

- - -

4.3 控制层是否显示中

- -```Objective-C -/// -/// 控制层的显示状态(是否已显示) -/// -@property (nonatomic, getter=isControlLayerAppeared) BOOL controlLayerAppeared; -``` - -

4.4 是否在暂停时保持控制层显示

- -```Objective-C -/// -/// 暂停的时候是否保持控制层显示 -/// -/// default value is NO -/// -@property (nonatomic) BOOL pausedToKeepAppearState; -``` - -

4.5 监听状态改变🔥

- -```Objective-C -/// -/// 观察者 -/// -/// 当需要监听控制层的显示和隐藏时, 可以设置`player.controlLayerAppearObserver.appearStateDidChangeExeBlock = ...;` -/// -@property (nonatomic, strong, readonly) id controlLayerAppearObserver; -``` - -

4.6 自己动手撸一个 SJControlLayerAppearManager, 替换作者原始实现

- -

-同样的, 协议 "SJControlLayerAppearManager" 定义了一系列的操作, 只要实现了这些协议方法的对象, 就可以管理控制层的显示和隐藏. -

- -```Objective-C -_player.controlLayerAppearManager = Your controlLayerAppearManager; -``` - -___ - -

5. 设备亮度和音量

- -

-设备亮度和音量的调整, 此部分的内容由 "id <SJDeviceVolumeAndBrightnessManager> deviceVolumeAndBrightnessManager" 提供支持. -

- -

5.1 调整设备亮度

- -```Objective-C -// 0 到 1 -_player.deviceVolumeAndBrightnessManager.brightness = 1.0; -``` - -

5.2 调整设备声音

- -```Objective-C -// 0 到 1 -_player.deviceVolumeAndBrightnessManager.volume = 1.0; -``` - -

5.3 监听状态改变🔥

- -```Objective-C -/// -/// 观察者 -/// -@property (nonatomic, strong, readonly) id deviceVolumeAndBrightnessObserver; -``` - -

5.4 禁止播放器设置

- -```Objective-C -_player.disableBrightnessSetting = YES; -_player.disableVolumeSetting = YES; -``` - -

5.5 自己动手撸一个 SJDeviceVolumeAndBrightnessManager, 替换作者原始实现

- -

-当需要对设备音量视图进行自定义时, 可以自己动手撸一个 SJDeviceVolumeAndBrightnessManager. -

- -```Objective-C -_player.deviceVolumeAndBrightnessManager = Your deviceVolumeAndBrightnessManager; -``` -___ - -

8. 镜像翻转

- -

-此部分内容由 id<SJFlipTransitionManager> flipTransitionManager 提供支持 - -目前镜像翻转只写了 水平翻转, 未来可能会加入更多的翻转类型. -

- -```Objective-C -typedef enum : NSUInteger { -SJViewFlipTransition_Identity, -SJViewFlipTransition_Horizontally, // 水平翻转 -} SJViewFlipTransition; -``` - -

8.1 翻转和恢复

- -```Objective-C -/// 当前的翻转类型 -_player.flipTransition - -/// 翻转相关方法 -[_player setFlipTransition:SJViewFlipTransition_Horizontally]; -[_player setFlipTransition:SJViewFlipTransition_Horizontally animated:YES]; -[_player setFlipTransition:SJViewFlipTransition_Identity animated:YES completionHandler:^(__kindof SJBaseVideoPlayer * _Nonnull player) { -/// ... -}]; -``` - -

8.2 监听状态改变🔥

- -```Objective-C -/// -/// 观察者 -/// -/// 可以如下设置block, 来监听某个状态的改变 -/// -/// player.flipTransitionObserver.flipTransitionDidStartExeBlock = ...; -/// player.flipTransitionObserver.flipTransitionDidStopExeBlock = ...; -/// -@property (nonatomic, strong, readonly) id flipTransitionObserver; -``` - -

8.3 自己动手撸一个 SJFlipTransitionManager, 替换作者原始实现

- -

-该部分管理类的协议定义在 SJFlipTransitionManagerProtocol 中, 实现该协议的任何对象, 均可赋值给播放器, 替换原始实现. -

- -___ - -

9. 网络状态

- -

-此部分内容由 id<SJReachability> reachability 提供支持 - -默认的 reachability 是个单例, 在App生命周期中, 仅创建一次. 因此每个播放器对象持有的 reachability 都是相同的. -

- -

9.1 当前的网络状态

- -```Objective-C -@property (nonatomic, readonly) SJNetworkStatus networkStatus; -``` - -

9.2 监听状态改变🔥

- -```Objective-C -/// -/// 观察者 -/// -@property (nonatomic, strong, readonly) id reachabilityObserver; -``` - -

9.3 自己动手撸一个 SJReachability, 替换作者原始实现

- -

-该部分管理类的协议定义在 SJNetworkStatus 中, 实现该协议的任何对象, 均可赋值给播放器, 替换原始实现. -

- -___ - -

10. 手势

-

-此部分内容由 id<SJPlayerGestureControl> gestureControl 提供支持 - -播放器默认存在四种手势, 每个手势触发的回调均定义在 SJPlayerGestureControl 中, 当想改变某个手势的处理时, 可以直接修改对应手势触发的 block 即可. - -具体请看以下部分. -

- -

10.1 单击手势

- -当用户单击播放器时, 播放器会调用 [显示或隐藏控制层的操作](#4) - -以下为默认实现: - -```Objective-C -__weak typeof(self) _self = self; -_gestureControl.singleTapHandler = ^(id _Nonnull control, CGPoint location) { -__strong typeof(_self) self = _self; -if ( !self ) return ; -/// 让控制层显示或隐藏 -[self.controlLayerAppearManager switchAppearState]; -}; -``` - -

10.2 双击手势

- -

-双击会触发暂停或播放的操作 -

- -```Objective-C -__weak typeof(self) _self = self; -_gestureControl.doubleTapHandler = ^(id _Nonnull control, CGPoint location) { -__strong typeof(_self) self = _self; -if ( !self ) return ; -if ( [self playStatus_isPlaying] ) -[self pause]; -else -[self play]; -}; -``` - -

10.3 移动手势

- -- 垂直滑动时, 默认情况下如果在屏幕左边, 则会触发调整亮度的操作, 并显示亮度提示视图. 如果在屏幕右边, 则会触发调整声音的操作, 并显示系统音量提示视图 -- 水平滑动时, 会触发控制层相应的代理方法 - -```Objective-C -__weak typeof(self) _self = self; -_gestureControl.panHandler = ^(id _Nonnull control, SJPanGestureTriggeredPosition position, SJPanGestureMovingDirection direction, SJPanGestureRecognizerState state, CGPoint translate) { -__strong typeof(_self) self = _self; -if ( !self ) return ; -/// .... -}; -``` - -

10.4 捏合手势

- -

-当用户做放大或收缩触发该手势时, 会设置播放器显示模式`Aspect`或`AspectFill`. -

- -```Objective-C -__weak typeof(self) _self = self; -_gestureControl.pinchHandler = ^(id _Nonnull control, CGFloat scale) { -__strong typeof(_self) self = _self; -if ( !self ) return ; -self.playbackController.videoGravity = scale > 1 ?AVLayerVideoGravityResizeAspectFill:AVLayerVideoGravityResizeAspect; -}; -``` - -

10.5 设置支持的手势

- -```Objective-C -_player.gestureControl.supportedGestureTypes = SJPlayerGestureTypeMask_Default - -typedef enum : NSUInteger { - SJPlayerGestureTypeMask_None, - SJPlayerGestureTypeMask_SingleTap = 1 << 0, - SJPlayerGestureTypeMask_DoubleTap = 1 << 1, - SJPlayerGestureTypeMask_Pan_H = 1 << 2, // 水平方向 - SJPlayerGestureTypeMask_Pan_V = 1 << 3, // 垂直方向 - SJPlayerGestureTypeMask_Pinch = 1 << 4, - SJPlayerGestureTypeMask_LongPress = 1 << 5, - - SJPlayerGestureTypeMask_Pan = SJPlayerGestureTypeMask_Pan_H | SJPlayerGestureTypeMask_Pan_V, - SJPlayerGestureTypeMask_Default = SJPlayerGestureTypeMask_SingleTap | SJPlayerGestureTypeMask_DoubleTap | SJPlayerGestureTypeMask_Pan | SJPlayerGestureTypeMask_Pinch, - SJPlayerGestureTypeMask_All = SJPlayerGestureTypeMask_Default | SJPlayerGestureTypeMask_LongPress, -} SJPlayerGestureTypeMask; -``` - -

10.6 自定义某个手势的处理

- -```Objective-C -/// 例如 替换单击手势的处理 -__weak typeof(self) _self = self; -_player.gestureControl.singleTapHandler = ^(id _Nonnull control, CGPoint location) { -__strong typeof(_self) self = _self; -if ( !self ) return ; -/// .....你的处理 -}; -``` - -___ - -

11. 占位图

- -

-资源在初始化时, 由于暂时没有画面可以呈现, 会出现短暂的黑屏. 在此期间, 建议大家设置一下占位图. -

- -

11.1 设置本地占位图

- -```Objective-C -_player.presentView.placeholderImageView.image = [UIImage imageNamed:@"..."]; -``` - -

11.2 设置网络占位图

- -```Objective-C -[_player.presentView.placeholderImageView sd_setImageWithURL:URL placeholderImage:img]; -``` - -

11.3 是否隐藏占位图 - 播放器准备好显示时

- -```Objective-C -/// 播放器准备好显示时, 是否隐藏占位图 -/// - 默认为YES -@property (nonatomic) BOOL hiddenPlaceholderImageViewWhenPlayerIsReadyForDisplay; -``` - -___ - -

12. 显示提示文本

- -

-目前仅支持 NSAttributedString. -

- -

12.1 显示管理类

- -```Objective-C -/// -/// 中心弹出文本提示 -/// -/// 了解更多请前往协议头文件查看 -/// -@property (nonatomic, strong, null_resettable) id prompt; - -/// -/// 左下角弹出提示 -/// -/// 了解更多请前往协议头文件查看 -/// -@property (nonatomic, strong, null_resettable) id promptPopupController; -``` - -

12.2 配置提示文本

- -```Objective-C -_player.prompt.backgroundColor = ...; -_player.prompt.contentInset = ...; -``` - -___ - -

13. 一些固定代码

- -

-接入播放器的 ViewController 中, 会写一些固定的代码, 我将这些固定代码都封装在了以下方法中. - -在适当的时候直接调用即可, 以下为内部实现: - -

13.4 - (BOOL)vc_prefersStatusBarHidden;

- -

-状态栏是否可以隐藏 - -实现如下: -

- -```Objective-C -- (BOOL)vc_prefersStatusBarHidden { -if ( _tmpShowStatusBar ) return NO; // 临时显示 -if ( _tmpHiddenStatusBar ) return YES; // 临时隐藏 -if ( self.lockedScreen ) return YES; // 锁屏时, 不显示 -if ( self.rotationManager.isTransitioning ) { // 旋转时, 不显示 -if ( !self.disabledControlLayerAppearManager && self.isControlLayerAppeared ) return NO; -return YES; -} -// 全屏播放时, 使状态栏根据控制层显示或隐藏 -if ( self.isFullScreen ) return !self.isControlLayerAppeared; -return NO; -} -``` - -

13.5 - (UIStatusBarStyle)vc_preferredStatusBarStyle;

- -

-状态栏显示白色还是黑色 - -实现如下: -

- -```Objective-C -- (UIStatusBarStyle)vc_preferredStatusBarStyle { -// 全屏播放时, 使状态栏变成白色 -if ( self.isFullScreen || self.fitOnScreen ) return UIStatusBarStyleLightContent; -return UIStatusBarStyleDefault; -} -``` - -

13.6 - 临时显示状态栏

- -

-有时候, 可能会希望临时显示状态栏, 例如全屏转回小屏时, 旋转之前, 需要将状态栏显示. -

- -```Objective-C -[_player needShowStatusBar]; -``` - -

13.7 - 临时隐藏状态栏

- -

-有时候, 可能会希望临时隐藏状态栏, 例如某个播放器控制层不需要显示状态栏. -

- -```Objective-C -[_player needHiddenStatusBar]; -``` - -___ - -

14. 截屏

- -

14.1 当前时间截图

- -```Objective-C -UIImage *img = [_player screenshot]; -``` - -

14.2 指定时间截图

- -```Objective-C -- (void)screenshotWithTime:(NSTimeInterval)secs -completion:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, UIImage * __nullable image, NSError *__nullable error))block; - -/// 可以通过 _player.playbackController.presentationSize 来获取当前视频宽高 -- (void)screenshotWithTime:(NSTimeInterval)secs -size:(CGSize)size -completion:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, UIImage * __nullable image, NSError *__nullable error))block; -``` - -

15. 导出视频或GIF

- -

15.1 导出视频

- -```Objective-C -- (void)exportWithBeginTime:(NSTimeInterval)beginTime -duration:(NSTimeInterval)duration -presetName:(nullable NSString *)presetName -progress:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, float progress))progressBlock -completion:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, NSURL *fileURL, UIImage *thumbnailImage))completion -failure:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, NSError *error))failure; -``` - -

15.2 导出GIF

- -```Objective-C -- (void)generateGIFWithBeginTime:(NSTimeInterval)beginTime -duration:(NSTimeInterval)duration -progress:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, float progress))progressBlock -completion:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, UIImage *imageGIF, UIImage *thumbnailImage, NSURL *filePath))completion -failure:(void(^)(__kindof SJBaseVideoPlayer *videoPlayer, NSError *error))failure; -``` - -

15.3 取消操作

- -```Objective-C -/// 取消导出操作 -/// 播放器 dealloc 时, 会调用一次 -- (void)cancelExportOperation; - -/// 取消GIF操作 -/// 播放器 dealloc 时, 会调用一次 -- (void)cancelGenerateGIFOperation; -``` - -

16. 滚动相关

- -

-此部分的内容由 SJPlayModelPropertiesObserver 提供支持. -

- - -

16.1 是否在 UICollectionView 或者 UITableView 中播放

- -```Objective-C -/// 是否是在 UICollectionView 或者 UITableView 中播放 -_player.isPlayOnScrollView -``` - -

16.2 是否已显示

- -```Objective-C -/// -/// 播放器视图是否显示 -/// -/// Whether the player is appeared when playing on scrollView. Because scrollview may be scrolled. -/// -@property (nonatomic, readonly) BOOL isScrollAppeared; -``` - -

16.3 播放器视图将要滚动显示和消失的回调

- -```Objective-C -@property (nonatomic, copy, nullable) void(^playerViewWillAppearExeBlock)(__kindof SJBaseVideoPlayer *videoPlayer); -@property (nonatomic, copy, nullable) void(^playerViewWillDisappearExeBlock)(__kindof SJBaseVideoPlayer *videoPlayer); -``` - -

16.4 滚动出去后, 是否暂停

- -```Objective-C -/// -/// 滚动出去后, 是否暂停. 默认为YES -/// -/// - default value is YES. -/// -@property (nonatomic) BOOL pauseWhenScrollDisappeared; -``` - -

16.5 滚动进入时, 是否恢复播放

- -```Objective-C -/// -/// 滚动进入时, 是否恢复播放. 默认为YES -/// -/// - default values is YES. -/// -@property (nonatomic) BOOL resumePlaybackWhenScrollAppeared; -``` - -

16.6 滚动出去后, 是否隐藏播放器视图

- -```Objective-C -/// -/// 滚动出去后, 是否隐藏播放器视图. 默认为YES -/// -/// - default value is YES. -/// -@property (nonatomic) BOOL hiddenViewWhenScrollDisappeared; -``` - -

17. 自动播放 - 在 UICollectionView 或者 UITableView 中

- -

-目前支持在 UICollectionViewCell 和 UITableViewCell 中自动播放. - -使用之前, 请导入头文件 `#import "UIScrollView+ListViewAutoplaySJAdd.h"` -

- -

17.1 开启

- -```Objective-C -/// 配置列表自动播放 -[_tableView sj_enableAutoplayWithConfig:[SJPlayerAutoplayConfig configWithPlayerSuperviewTag:101 autoplayDelegate:self]]; - - -/// Delegate method -- (void)sj_playerNeedPlayNewAssetAtIndexPath:(NSIndexPath *)indexPath { - -} -``` - -

17.2 配置

- -```Objective-C -typedef NS_ENUM(NSUInteger, SJAutoplayScrollAnimationType) { -SJAutoplayScrollAnimationTypeNone, -SJAutoplayScrollAnimationTypeTop, -SJAutoplayScrollAnimationTypeMiddle, -}; - -@interface SJPlayerAutoplayConfig : NSObject -+ (instancetype)configWithPlayerSuperviewTag:(NSInteger)playerSuperviewTag -autoplayDelegate:(id)autoplayDelegate; - -/// 滚动的动画类型 -/// default is .Middle; -@property (nonatomic) SJAutoplayScrollAnimationType animationType; - -@property (nonatomic, readonly) NSInteger playerSuperviewTag; -@property (nonatomic, weak, nullable, readonly) id autoplayDelegate; -@end - -@protocol SJPlayerAutoplayDelegate -- (void)sj_playerNeedPlayNewAssetAtIndexPath:(NSIndexPath *)indexPath; -@end -``` - -

17.3 关闭

- -```Objective-C -[_tableView sj_disenableAutoplay]; -``` - -

17.4 主动调用播放下一个资源

- -```Objective-C -[_tableView sj_needPlayNextAsset]; -``` - -

18. 对控制层上面的Item的操作

- -

18.1 添加

- -```Objective-C -SJEdgeControlButtonItem *item = [[SJEdgeControlButtonItem alloc] initWithImage:[UIImage imageNamed:@"test"] target:self action:@selector(test) tag:SJTestImageItemTag]; -[_player.defaultEdgeControlLayer.topAdapter addItem:item]; -[_player.defaultEdgeControlLayer.topAdapter reload]; -``` - -

18.2 删除

- -```Objective-C -[_player.defaultEdgeControlLayer.bottomAdapter removeItemForTag:SJEdgeControlLayerBottomItem_Separator]; -[_player.defaultEdgeControlLayer.bottomAdapter reload]; -``` - -

18.3 调整位置

- -```Objective-C -[_player.defaultEdgeControlLayer.bottomAdapter exchangeItemForTag:SJEdgeControlLayerBottomItem_DurationTime withItemForTag:SJEdgeControlLayerBottomItem_Progress]; -[_player.defaultEdgeControlLayer.bottomAdapter reload]; -``` - -

19. 对控制层上的Item的一些补充

- -

19.1 设置与前后item的间距

- -```Objective-C -SJEdgeControlButtonItem *titleItem = [_player.defaultEdgeControlLayer.topAdapter itemForTag:SJEdgeControlLayerTopItem_Title]; -titleItem.insets = SJEdgeInsetsMake(16, 16); -[_player.defaultEdgeControlLayer.topAdapter reload]; -``` - -

19.2 设置隐藏

- -```Objective-C -SJEdgeControlButtonItem *titleItem = [_player.defaultEdgeControlLayer.topAdapter itemForTag:SJEdgeControlLayerTopItem_Title]; -titleItem.hidden = YES; -[_player.defaultEdgeControlLayer.topAdapter reload]; -``` - -

19.3 填充剩余空间

- -```Objective-C -SJEdgeControlButtonItem *titleItem = [_player.defaultEdgeControlLayer.topAdapter itemForTag:SJEdgeControlLayerTopItem_Title]; -titleItem.fill = YES; -[_player.defaultEdgeControlLayer.topAdapter reload]; -``` - -

20. SJEdgeControlLayer 的补充

- -

20.1 是否竖屏时隐藏返回按钮

- -```Objective-C -_player.defaultEdgeControlLayer.hiddenBackButtonWhenOrientationIsPortrait = YES; -``` - -

20.2 是否禁止网络状态变化提示

- -```Objective-C -_player.defaultEdgeControlLayer.disabledPromptWhenNetworkStatusChanges = YES; -``` - -

20.3 是否使返回按钮常驻

- -```Objective-C -_player.defaultEdgeControlLayer.showResidentBackButton = YES; -``` - -

20.4 是否隐藏底部进度条

- -```Objective-C -_player.defaultEdgeControlLayer.hiddenBottomProgressIndicator = YES; -``` - -

20.5 是否在loadingView上显示网速

- -```Objective-C -_player.defaultEdgeControlLayer.showNetworkSpeedToLoadingView = YES; -``` - -

20.6 自定义loadingView

- -```Objective-C -// 实现协议`SJLoadingView`即可, 然后赋值给控制层 -_player.defaultEdgeControlLayer.loadingView = Your Loading View; -``` - -

20.7 调整边距

- -```Objective-C -_player.defaultEdgeControlLayer.leftMargin = 16; -_player.defaultEdgeControlLayer.rightMargin = 16; -``` - -

20.8 取消控制层上下视图的阴影

- -```Objective-C -[_player.defaultEdgeControlLayer.topContainerView cleanColors]; -[_player.defaultEdgeControlLayer.bottomContainerView cleanColors]; -``` - ## 赞助 如果对您有所帮助,欢迎您的赞赏 - diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLoader.m b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLoader.m index b992bbae1..81c751973 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLoader.m +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/AVPlayer/Core/SJAVMediaPlayerLoader.m @@ -17,6 +17,8 @@ + (nullable SJAVMediaPlayer *)loadPlayerForMedia:(SJVideoPlayerURLAsset *)media #ifdef DEBUG NSParameterAssert(media); #endif + if ( media == nil ) + return nil; SJVideoPlayerURLAsset *target = media.original ?: media; SJAVMediaPlayer *__block _Nullable player = objc_getAssociatedObject(target, kPlayer); diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFitOnScreenManager.m b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFitOnScreenManager.m index bc1313c77..dfa840c7b 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFitOnScreenManager.m +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFitOnScreenManager.m @@ -57,6 +57,10 @@ - (BOOL)shouldAutorotate { - (BOOL)prefersHomeIndicatorAutoHidden { return YES; } + +- (UIStatusBarStyle)preferredStatusBarStyle { + return UIStatusBarStyleLightContent; +} @end @interface SJFitOnScreenModeNavigationController : UINavigationController @@ -87,7 +91,7 @@ - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return self.topViewController.preferredInterfaceOrientationForPresentation; } - (UIStatusBarStyle)preferredStatusBarStyle { - return _viewControllerManager.preferredStatusBarStyle; + return self.topViewController.preferredStatusBarStyle; } - (BOOL)prefersStatusBarHidden { return _viewControllerManager.prefersStatusBarHidden; @@ -157,6 +161,10 @@ - (void)setFitOnScreen:(BOOL)fitOnScreen animated:(BOOL)animated completionHandl }); } +- (UIView *)superviewInFitOnScreen { + return self.viewController.view; +} + - (UIViewController *)topMostController { UIViewController *topController = UIApplication.sharedApplication.keyWindow.rootViewController; while( topController.presentedViewController != nil ) { diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.h b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.h index 34b61f69c..eb6a8d863 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.h +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.h @@ -23,5 +23,6 @@ typedef NS_ENUM(NSInteger, SJFloatViewLayoutPosition) { @property (nonatomic) UIEdgeInsets layoutInsets; @property (nonatomic) CGSize layoutSize; @property (nonatomic) BOOL ignoreSafeAreaInsets API_AVAILABLE(ios(11.0)); +@property (nonatomic) BOOL addFloatViewToKeyWindow; @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.m b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.m index b2841fc14..ea81e7bc2 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.m +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJFloatSmallViewController.m @@ -103,7 +103,6 @@ @implementation SJFloatSmallViewController @synthesize target = _target; @synthesize layoutInsets = _layoutInsets; @synthesize layoutPosition = _layoutPosition; -@synthesize addFloatViewToKeyWindow = _addFloatViewToKeyWindow; @synthesize layoutSize = _layoutSize; - (instancetype)init { diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJMediaPlaybackController.m b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJMediaPlaybackController.m index 33b56297a..26c92212e 100644 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJMediaPlaybackController.m +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJMediaPlaybackController.m @@ -197,6 +197,8 @@ - (void)receivedApplicationDidEnterBackgroundNotification { } - (void)prepareToPlay { + if ( _media == nil ) return; + SJVideoPlayerURLAsset *media = _media; __weak typeof(self) _self = self; [self playerWithMedia:media completionHandler:^(id _Nullable player) { @@ -262,6 +264,7 @@ - (void)play { self.reasonForWaitingToPlay = SJWaitingWhileEvaluatingBufferingRateReason; self.timeControlStatus = SJPlaybackTimeControlStatusWaitingToPlay; self.isPlaybackFinished ? [self.currentPlayer replay] : [self.currentPlayer play]; + if ( self.currentPlayer.rate != self.rate ) self.currentPlayer.rate = self.rate; [self _toEvaluating]; } } @@ -470,8 +473,7 @@ - (void)setPeriodicTimeInterval:(NSTimeInterval)periodicTimeInterval { - (void)setRate:(float)rate { _rate = rate; - if ( self.timeControlStatus == SJPlaybackTimeControlStatusPaused ) [self play]; - _currentPlayer.rate = rate; + if ( self.timeControlStatus != SJPlaybackTimeControlStatusPaused ) _currentPlayer.rate = rate; } - (void)setVolume:(float)volume { @@ -513,8 +515,65 @@ - (void)setTimeControlStatus:(SJPlaybackTimeControlStatus)timeControlStatus { [self.delegate playbackController:self timeControlStatusDidChange:timeControlStatus]; } }); + +#ifdef DEBUG + [self showLog_TimeControlStatus]; +#endif +} +#ifdef DEBUG +- (void)showLog_TimeControlStatus { + SJPlaybackTimeControlStatus status = self.timeControlStatus; + NSString *statusStr = nil; + switch ( status ) { + case SJPlaybackTimeControlStatusPaused: { + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.TimeControlStatus.Paused\n", self]; + } + break; + case SJPlaybackTimeControlStatusWaitingToPlay: { + NSString *reasonStr = nil; + if ( self.reasonForWaitingToPlay == SJWaitingToMinimizeStallsReason ) { + reasonStr = @"WaitingToMinimizeStallsReason"; + } + else if ( self.reasonForWaitingToPlay == SJWaitingWhileEvaluatingBufferingRateReason ) { + reasonStr = @"WaitingWhileEvaluatingBufferingRateReason"; + } + else if ( self.reasonForWaitingToPlay == SJWaitingWithNoAssetToPlayReason ) { + reasonStr = @"WaitingWithNoAssetToPlayReason"; + } + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.TimeControlStatus.WaitingToPlay(Reason: %@)\n", self, reasonStr]; + } + break; + case SJPlaybackTimeControlStatusPlaying: { + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.TimeControlStatus.Playing\n", self]; + } + break; + } + + printf("%s", statusStr.UTF8String); } +- (void)showLog_AssetStatus { + SJAssetStatus status = self.assetStatus; + NSString *statusStr = nil; + switch ( status ) { + case SJAssetStatusUnknown: + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.assetStatus.Unknown\n", self]; + break; + case SJAssetStatusPreparing: + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.assetStatus.Preparing\n", self]; + break; + case SJAssetStatusReadyToPlay: + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.assetStatus.ReadyToPlay\n", self]; + break; + case SJAssetStatusFailed: + statusStr = [NSString stringWithFormat:@"SJMediaPlaybackController<%p>.assetStatus.Failed\n", self]; + break; + } + + printf("%s", statusStr.UTF8String); +} +#endif + #pragma mark - - (void)_toEvaluating { @@ -649,6 +708,10 @@ - (void)playerAssetStatusDidChange:(NSNotification *)note { [self.delegate playbackController:self assetStatusDidChange:self.assetStatus]; } }); + +#ifdef DEBUG + [self showLog_AssetStatus]; +#endif } } diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJWatermarkView.m b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJWatermarkView.m index 308ebcab0..a5765dd3f 100644 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJWatermarkView.m +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Implements/SJWatermarkView.m @@ -11,13 +11,33 @@ @implementation SJWatermarkView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; - if (self) { - _layoutPosition = SJWatermarkLayoutPositionTopRight; - _layoutInsets = UIEdgeInsetsMake(20, 20, 20, 20); + if ( self ) { + [self _setup]; } return self; } +- (instancetype)initWithImage:(UIImage *)image { + self = [super initWithImage:image]; + if ( self ) { + [self _setup]; + } + return self; +} + +- (instancetype)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage { + self = [super initWithImage:image highlightedImage:highlightedImage]; + if ( self ) { + [self _setup]; + } + return self; +} + +- (void)_setup { + _layoutPosition = SJWatermarkLayoutPositionBottomLeft; + _layoutInsets = UIEdgeInsetsMake(20, 20, 20, 20); +} + - (void)layoutWatermarkInRect:(CGRect)rect videoPresentationSize:(CGSize)vSize videoGravity:(SJVideoGravity)videoGravity { CGSize imageSize = self.image.size; self.hidden = CGSizeEqualToSize(vSize, CGSizeZero) || @@ -28,10 +48,20 @@ - (void)layoutWatermarkInRect:(CGRect)rect videoPresentationSize:(CGSize)vSize v CGSize videoDisplayedSize = CGSizeZero; if ( videoGravity == AVLayerVideoGravityResizeAspect ) { - videoDisplayedSize = CGSizeMake(vSize.width * rect.size.height / vSize.height, rect.size.height); + // 等比例模式 + // 16/9 的会将宽度进行等比缩放, 以显示全部高度 + // 9/16 的会将高度进行等比缩放, 以显示全部宽度 + videoDisplayedSize = vSize.width > vSize.height ? + CGSizeMake(rect.size.width, vSize.height * rect.size.width / vSize.width) : + CGSizeMake(vSize.width * rect.size.height / vSize.height, rect.size.height); } else if ( videoGravity == AVLayerVideoGravityResizeAspectFill ) { - videoDisplayedSize = CGSizeMake(rect.size.width, vSize.height * rect.size.width / vSize.width); + // 填充模式 + // 16/9 的会将宽度进行等比拉伸, 以显示全部高度 + // 9/16 的会将高度进行等比拉伸, 以显示全部宽度 + videoDisplayedSize = vSize.width > vSize.height ? + CGSizeMake(vSize.width * rect.size.height / vSize.height, rect.size.height) : + CGSizeMake(rect.size.width, vSize.height * rect.size.width / vSize.width); } else if ( videoGravity == AVLayerVideoGravityResizeAspect ) { videoDisplayedSize = rect.size; diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFitOnScreenManagerDefines.h b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFitOnScreenManagerDefines.h index 17df17215..3b3e07ba3 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFitOnScreenManagerDefines.h +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFitOnScreenManagerDefines.h @@ -25,6 +25,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)setFitOnScreen:(BOOL)fitOnScreen animated:(BOOL)animated; - (void)setFitOnScreen:(BOOL)fitOnScreen animated:(BOOL)animated completionHandler:(nullable void(^)(id mgr))completionHandler; +@property (nonatomic, strong, readonly) UIView *superviewInFitOnScreen; + - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; @end diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFloatSmallViewControllerDefines.h b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFloatSmallViewControllerDefines.h index f63443000..d31c58446 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFloatSmallViewControllerDefines.h +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/Common/Interfaces/SJFloatSmallViewControllerDefines.h @@ -51,12 +51,7 @@ NS_ASSUME_NONNULL_BEGIN /// /// - default value is YES. @property (nonatomic) BOOL slidable; - -/// 是否将小浮窗添加到window中. (注意: 小浮窗默认会添加到播放器同级的控制器视图上) -/// -/// - default value is NO. -@property (nonatomic) BOOL addFloatViewToKeyWindow; - + @property (nonatomic, strong, readonly) __kindof UIView *floatView; ///< float view /// 以下属性由播放器维护 diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h index 414cbb90f..44d6e8eee 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.h @@ -57,7 +57,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, weak, nullable) id controlLayerDataSource; @property (nonatomic, weak, nullable) id controlLayerDelegate; @end - + #pragma mark - present view @interface SJBaseVideoPlayer (Placeholder) @@ -523,36 +523,13 @@ NS_ASSUME_NONNULL_BEGIN @end - -#pragma mark - 自动管理 旋转和充满全屏 - -@interface SJBaseVideoPlayer (AutoManageViewToFitOnScreenOrRotation) - -/// -/// 自动管理 旋转和充满全屏 -/// -/// 自动管理: 当视频宽>高时, 将触发旋转. 当视频宽<高时, 将触发充满全屏 -/// -@property (nonatomic) BOOL autoManageViewToFitOnScreenOrRotation; // default value is YES. - -@end - - -#pragma mark - 充满全屏, 禁止旋转 +#pragma mark - 竖屏小屏 到 竖屏全屏 /// -/// 全屏或小屏, 但不触发旋转 -/// v1.3.1 新增 +/// 全屏或小屏, 不会触发旋转 /// @interface SJBaseVideoPlayer (FitOnScreen) -/// -/// 使用充满全屏并且禁止旋转 -/// -/// 当调用[player.fitOnScreenManager setFitOnScreen:... animated:...]时, 将自动设置为YES -/// -@property (nonatomic) BOOL useFitOnScreenAndDisableRotation; - /// /// 使播放器充满屏幕并且禁止旋转 /// @@ -587,8 +564,11 @@ NS_ASSUME_NONNULL_BEGIN - (void)setFitOnScreen:(BOOL)fitOnScreen animated:(BOOL)animated completionHandler:(nullable void(^)(__kindof SJBaseVideoPlayer *player))completionHandler; @end -#pragma mark - 旋转 +#pragma mark - 竖屏小屏 旋转到 横屏全屏 +/// +/// 全屏或小屏, 会触发旋转 +/// @interface SJBaseVideoPlayer (Rotation) /// @@ -614,6 +594,14 @@ NS_ASSUME_NONNULL_BEGIN /// @property (nonatomic, copy, nullable) BOOL(^shouldTriggerRotation)(__kindof SJBaseVideoPlayer *player); +/// 竖屏全屏后, 是否允许旋转 +/// +/// 默认为 NO. +/// +/// 竖屏全屏的状态下(`_player.isFitOnScreen == YES`), 如果想继续触发旋转, 请设置`allowsRotationInFitOnScreen`为YES即可. +/// +@property (nonatomic) BOOL allowsRotationInFitOnScreen; + /** Autorotation. Animated. */ @@ -870,6 +858,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)updateWatermarkViewLayout; @end + #pragma mark - 已弃用 @interface SJBaseVideoPlayer (Deprecated) diff --git a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m index 6b0a3d099..9d0738e00 100755 --- a/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m +++ b/Example/Pods/SJBaseVideoPlayer/SJBaseVideoPlayer/SJBaseVideoPlayer.m @@ -138,8 +138,6 @@ @implementation SJBaseVideoPlayer { /// Fit on screen manager id _fitOnScreenManager; id _fitOnScreenManagerObserver; - BOOL _useFitOnScreenAndDisableRotation; - BOOL _autoManageViewToFitOnScreenOrRotation; /// Flip Transition manager id _flipTransitionManager; @@ -161,7 +159,7 @@ + (instancetype)player { } + (NSString *)version { - return @"v3.5.0"; + return @"v3.6.0"; } - (void)setVideoGravity:(SJVideoGravity)videoGravity { @@ -178,13 +176,7 @@ - (SJVideoGravity)videoGravity { } - (nullable __kindof UIViewController *)atViewController { - UIView *view = nil; - if ( self.useFitOnScreenAndDisableRotation ) - view = _view; - else - view = _presentView; - - return [view lookupResponderForClass:UIViewController.class]; + return [_presentView lookupResponderForClass:UIViewController.class]; } - (instancetype)init { @@ -201,7 +193,6 @@ - (instancetype)init { _controlInfo->floatSmallViewControl.hiddenFloatSmallViewWhenPlaybackFinished = YES; _controlInfo->gestureControl.rateWhenLongPressGestureTriggered = 2.0; _controlInfo->pan.factor = 667; - self.autoManageViewToFitOnScreenOrRotation = YES; [self _setupViews]; [self fitOnScreenManager]; @@ -541,29 +532,17 @@ - (void)_configGestureControl:(id)gestureControl { return NO; if ( self.isPlayOnScrollView ) { - if ( NO == self.controlInfo->gestureControl.allowHorizontalTriggeringOfPanGesturesInCells ) { - if ( YES == self.useFitOnScreenAndDisableRotation ) { - if ( NO == self.isFitOnScreen ) - return NO; - } - else { - if ( NO == self.isFullScreen ) - return NO; - } + if ( !self.controlInfo->gestureControl.allowHorizontalTriggeringOfPanGesturesInCells ) { + if ( !self.isFitOnScreen && !self.isFullScreen ) + return NO; } } } break; case SJPanGestureMovingDirection_V: { if ( self.isPlayOnScrollView ) { - if ( YES == self.useFitOnScreenAndDisableRotation ) { - if ( NO == self.isFitOnScreen ) - return NO; - } - else { - if ( NO == self.isFullScreen ) - return NO; - } + if ( !self.isFitOnScreen && !self.isFullScreen ) + return NO; } switch ( control.triggeredPosition ) { /// Brightness @@ -1188,10 +1167,6 @@ - (void)playbackController:(id)controller playb } - (void)playbackController:(id)controller presentationSizeDidChange:(CGSize)presentationSize { - if ( _autoManageViewToFitOnScreenOrRotation && !self.isFullScreen && !self.isFitOnScreen ) { - _useFitOnScreenAndDisableRotation = presentationSize.width < presentationSize.height; - } - [self updateWatermarkViewLayout]; if ( self.presentationSizeDidChangeExeBlock ) @@ -1597,26 +1572,10 @@ - (BOOL)pausedToKeepAppearState { @end -@implementation SJBaseVideoPlayer (AutoManageViewToFitOnScreenOrRotation) -- (void)setAutoManageViewToFitOnScreenOrRotation:(BOOL)autoManageViewToFitOnScreenOrRotation { - _autoManageViewToFitOnScreenOrRotation = autoManageViewToFitOnScreenOrRotation; -} -- (BOOL)autoManageViewToFitOnScreenOrRotation { - return _autoManageViewToFitOnScreenOrRotation; -} -@end - - #pragma mark - 充满屏幕 @implementation SJBaseVideoPlayer (FitOnScreen) -- (void)setUseFitOnScreenAndDisableRotation:(BOOL)useFitOnScreenAndDisableRotation { - _useFitOnScreenAndDisableRotation = useFitOnScreenAndDisableRotation; -} -- (BOOL)useFitOnScreenAndDisableRotation { - return _useFitOnScreenAndDisableRotation; -} - (void)setFitOnScreenManager:(id _Nullable)fitOnScreenManager { _fitOnScreenManager = fitOnScreenManager; @@ -1650,7 +1609,8 @@ - (void)_setupFitOnScreenManager { _fitOnScreenManagerObserver.fitOnScreenWillBeginExeBlock = ^(id mgr) { __strong typeof(_self) self = _self; if ( !self ) return; - self.useFitOnScreenAndDisableRotation = YES; + self.rotationManager.superview = mgr.isFitOnScreen ? self.fitOnScreenManager.superviewInFitOnScreen : self.view; + [self controlLayerNeedDisappear]; if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:willFitOnScreen:)] ) { @@ -1665,10 +1625,7 @@ - (void)_setupFitOnScreenManager { _fitOnScreenManagerObserver.fitOnScreenDidEndExeBlock = ^(id mgr) { __strong typeof(_self) self = _self; if ( !self ) return; - if ( self.autoManageViewToFitOnScreenOrRotation && !mgr.isFitOnScreen ) { - CGSize presentationSize = self.playbackController.presentationSize; - self.useFitOnScreenAndDisableRotation = presentationSize.width < presentationSize.height; - } + if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:didCompleteFitOnScreen:)] ) { [self.controlLayerDelegate videoPlayer:self didCompleteFitOnScreen:mgr.isFitOnScreen]; } @@ -1689,6 +1646,8 @@ - (void)setFitOnScreen:(BOOL)fitOnScreen animated:(BOOL)animated { [self setFitOnScreen:fitOnScreen animated:animated completionHandler:nil]; } - (void)setFitOnScreen:(BOOL)fitOnScreen animated:(BOOL)animated completionHandler:(nullable void(^)(__kindof SJBaseVideoPlayer *player))completionHandler { + NSAssert(!self.isFullScreen, @"横屏全屏状态下, 无法执行竖屏全屏!"); + __weak typeof(self) _self = self; [self.fitOnScreenManager setFitOnScreen:fitOnScreen animated:animated completionHandler:^(id mgr) { __strong typeof(_self) self = _self; @@ -1754,7 +1713,10 @@ - (void)_setupRotationManager:(id)rotationManager { if ( self.touchedOnTheScrollView ) return NO; } if ( self.isLockedScreen ) return NO; - if ( self.useFitOnScreenAndDisableRotation ) return NO; + + if ( self.isFitOnScreen ) + return self.allowsRotationInFitOnScreen; + if ( self.viewControllerManager.isViewDisappeared ) return NO; if ( [self.controlLayerDelegate respondsToSelector:@selector(canTriggerRotationOfVideoPlayer:)] ) { if ( ![self.controlLayerDelegate canTriggerRotationOfVideoPlayer:self] ) @@ -1794,10 +1756,6 @@ - (void)_setupRotationManager:(id)rotationManager { _rotationManagerObserver.rotationDidEndExeBlock = ^(id _Nonnull mgr) { __strong typeof(_self) self = _self; if ( !self ) return ; - if ( self.autoManageViewToFitOnScreenOrRotation && !mgr.isFullscreen ) { - CGSize presentationSize = self.playbackController.presentationSize; - self.useFitOnScreenAndDisableRotation = presentationSize.width < presentationSize.height; - } [self.playModelObserver refreshAppearState]; if ( [self.controlLayerDelegate respondsToSelector:@selector(videoPlayer:didEndRotation:)] ) { [self.controlLayerDelegate videoPlayer:self didEndRotation:mgr.isFullscreen]; @@ -1814,6 +1772,13 @@ - (void)_setupRotationManager:(id)rotationManager { }; } +- (void)setAllowsRotationInFitOnScreen:(BOOL)allowsRotationInFitOnScreen { + objc_setAssociatedObject(self, @selector(allowsRotationInFitOnScreen), @(allowsRotationInFitOnScreen), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} +- (BOOL)allowsRotationInFitOnScreen { + return [objc_getAssociatedObject(self, _cmd) boolValue]; +} + - (void)rotate { [self.rotationManager rotate]; } @@ -2304,7 +2269,6 @@ - (void)playerWillDisappearForObserver:(nonnull SJPlayModelPropertiesObserver *) } @end - #pragma mark - @implementation SJBaseVideoPlayer (Deprecated) diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.h index 43f0a7699..a61b24780 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.h @@ -17,10 +17,11 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, copy, readonly, nullable) NSString *pathExtension; // notify @property (nonatomic, copy, readonly, nullable) NSString *contentType; // notify @property (nonatomic, readonly) NSUInteger totalLength; // notify -@property (nonatomic, readonly) BOOL isStored; +@property (nonatomic, readonly) BOOL isStored; -- (nullable FILEContent *)createContentWithResponse:(NSHTTPURLResponse *)response; +- (nullable FILEContent *)createContentReadwriteWithResponse:(id)response; - (nullable NSArray *)contents; - (nullable NSString *)contentFilePathForFilename:(NSString *)filename; +- (nullable NSString *)contentFileRelativePathForFilename:(NSString *)filename; @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.m index 935b6dd90..940ad1ea3 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEAsset.m @@ -15,8 +15,6 @@ #import "NSFileHandle+MCS.h" #import "MCSUtils.h" -static NSString *kLength = @"length"; -static NSString *kReadwriteCount = @"readwriteCount"; static dispatch_queue_t mcs_queue; @interface FILEAsset () { @@ -27,7 +25,7 @@ @interface FILEAsset () { @property (nonatomic, copy) NSString *name; @property (nonatomic, copy, nullable) NSString *pathExtension; @property (nonatomic, copy, nullable) NSString *contentType; -@property (nonatomic) NSUInteger totalLength; +@property (nonatomic) NSUInteger totalLength; @end @implementation FILEAsset @@ -123,12 +121,12 @@ - (NSUInteger)totalLength { return totalLength; } -- (nullable FILEContent *)createContentWithResponse:(NSHTTPURLResponse *)response { - NSString *pathExtension = MCSSuggestedFilePathExtension(response); - NSString *contentType = MCSResponseGetContentType(response); - MCSResponseContentRange range = MCSResponseGetContentRange(response); - NSUInteger totalLength = range.totalLength; - NSUInteger offset = range.start; +/// 该操作将会对 content 进行一次 readwriteRetain, 请在不需要时, 调用一次 readwriteRelease. +- (nullable FILEContent *)createContentReadwriteWithResponse:(id)response { + NSString *pathExtension = response.pathExtension; + NSString *contentType = response.contentType; + NSUInteger totalLength = response.totalLength; + NSUInteger offset = response.range.location; __block FILEContent *content = nil; __block BOOL isUpdated = NO; dispatch_barrier_sync(mcs_queue, ^{ @@ -140,6 +138,7 @@ - (nullable FILEContent *)createContentWithResponse:(NSHTTPURLResponse *)respons } content = [_provider createContentAtOffset:offset pathExtension:_pathExtension]; + [content readwriteRetain]; [_contents addObject:content]; }); @@ -152,6 +151,10 @@ - (nullable NSString *)contentFilePathForFilename:(NSString *)filename { return [_provider contentFilePathForFilename:filename]; } +- (nullable NSString *)contentFileRelativePathForFilename:(NSString *)filename { + return [_provider contentFileRelativePathForFilename:filename]; +} + #pragma mark - readwrite - (NSInteger)readwriteCount { diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContent.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContent.m index e5c4aeab0..108453d65 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContent.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContent.m @@ -27,6 +27,10 @@ - (instancetype)initWithFilename:(NSString *)filename atOffset:(NSUInteger)offse return self; } +- (NSString *)description { + return [NSString stringWithFormat:@"%@: <%p> { filename: %@, readwriteCount: %ld };\n", NSStringFromClass(self.class), self, _filename, _readwriteCount]; +} + - (void)didWriteDataWithLength:(NSUInteger)length { [self willChangeValueForKey:@"length"]; dispatch_semaphore_wait(_lock, DISPATCH_TIME_FOREVER); diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.h index f4e87c914..4a29281ee 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.h @@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN - (nullable NSArray *)contents; - (nullable FILEContent *)createContentAtOffset:(NSUInteger)offset pathExtension:(nullable NSString *)pathExtension; - (nullable NSString *)contentFilePathForFilename:(NSString *)filename; +- (nullable NSString *)contentFileRelativePathForFilename:(NSString *)filename; - (void)removeContentForFilename:(NSString *)filename; @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.m index 8d938b3da..562522279 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentProvider.m @@ -58,6 +58,10 @@ - (nullable NSString *)contentFilePathForFilename:(NSString *)filename { return filename.length != 0 ? [_directory stringByAppendingPathComponent:filename] : nil; } +- (nullable NSString *)contentFileRelativePathForFilename:(NSString *)filename { + return filename.length != 0 ? filename : nil; +} + - (void)removeContentForFilename:(NSString *)filename { NSString *filePath = [self contentFilePathForFilename:filename]; [NSFileManager.defaultManager removeItemAtPath:filePath error:NULL]; diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.m index e0e3c2d63..331d60e98 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEContentReader.m @@ -22,7 +22,7 @@ @interface FILEContentReader () @property (nonatomic, strong) NSURLRequest *request; @property (nonatomic) NSRange range; -@property (nonatomic, strong, nullable) NSURLSessionTask *task; +@property (nonatomic, strong, nullable) id task; @property (nonatomic, strong, nullable) NSFileHandle *reader; @property (nonatomic, strong, nullable) NSFileHandle *writer; @@ -64,7 +64,6 @@ - (instancetype)initWithAsset:(__weak FILEAsset *)asset request:(NSURLRequest *) - (void)dealloc { if ( !_isClosed ) [self _close]; - if ( _content != nil ) [_content readwriteRelease]; MCSContentReaderDebugLog(@"%@: <%p>.dealloc;\n", NSStringFromClass(self.class), self); } @@ -182,17 +181,14 @@ - (BOOL)isDone { #pragma mark - MCSDownloadTaskDelegate -- (void)downloadTask:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request { - -} +- (void)downloadTask:(id)task willPerformHTTPRedirectionWithNewRequest:(NSURLRequest *)request { } -- (void)downloadTask:(NSURLSessionTask *)task didReceiveResponse:(NSHTTPURLResponse *)response { +- (void)downloadTask:(id)task didReceiveResponse:(id)response { dispatch_barrier_sync(mcs_queue, ^{ if ( _isClosed ) return; - _range = MCSResponseRange(MCSResponseGetContentRange(response)); - _content = [_asset createContentWithResponse:response]; - [_content readwriteRetain]; + _range = response.range; + _content = [_asset createContentReadwriteWithResponse:response]; NSString *filePath = [_asset contentFilePathForFilename:_content.filename]; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; @@ -217,7 +213,7 @@ - (void)downloadTask:(NSURLSessionTask *)task didReceiveResponse:(NSHTTPURLRespo }); } -- (void)downloadTask:(NSURLSessionTask *)task didReceiveData:(NSData *)data { +- (void)downloadTask:(id)task didReceiveData:(NSData *)data { dispatch_barrier_sync(mcs_queue, ^{ if ( _isClosed ) return; @@ -244,7 +240,7 @@ - (void)downloadTask:(NSURLSessionTask *)task didReceiveData:(NSData *)data { }); } -- (void)downloadTask:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { +- (void)downloadTask:(id)task didCompleteWithError:(NSError *)error { dispatch_barrier_sync(mcs_queue, ^{ if ( _isClosed ) return; @@ -288,6 +284,8 @@ - (void)_close { _reader = nil; _isClosed = YES; + if ( _content != nil ) [_content readwriteRelease]; + MCSContentReaderDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); } @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEReader.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEReader.m index 4398d6ebb..3fbb03aa6 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEReader.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/FILE/FILEReader.m @@ -70,7 +70,6 @@ - (instancetype)initWithAsset:(__weak FILEAsset *)asset request:(NSURLRequest *) - (void)dealloc { [NSNotificationCenter.defaultCenter removeObserver:self]; if ( !_isClosed ) [self _close]; - [_asset readwriteRelease]; MCSAssetReaderDebugLog(@"%@: <%p>.dealloc;\n", NSStringFromClass(self.class), self); } @@ -336,6 +335,8 @@ - (void)_close { _subreaders = nil; _isClosed = YES; + [_asset readwriteRelease]; + MCSAssetReaderDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); } diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.h index 928231b76..849685395 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.h @@ -18,13 +18,14 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, copy, readonly, nullable) NSString *TsContentType; @property (nonatomic, readonly) NSUInteger tsCount; @property (nonatomic, readonly) BOOL isStored; -@property (nonatomic, strong, nullable) HLSParser *parser; +@property (nonatomic, strong, nullable) HLSParser *parser; - (NSString *)indexFilePath; +- (NSString *)indexFileRelativePath; - (NSString *)AESKeyFilePathWithURL:(NSURL *)URL; -- (nullable id)createTsContentWithResponse:(NSHTTPURLResponse *)response; - (nullable NSArray> *)TsContents; - (nullable NSString *)TsContentFilePathForFilename:(NSString *)filename; -- (nullable id)TsContentForRequest:(NSURLRequest *)request; +- (nullable id)createTsContentReadwriteWithResponse:(id)response; +- (nullable id)TsContentReadwriteForRequest:(NSURLRequest *)request; @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.m index 7ebaee6af..887d6f9e3 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSAsset.m @@ -15,8 +15,6 @@ #import "HLSReader.h" #import "MCSRootDirectory.h" -static NSString *kLength = @"length"; -static NSString *kReadwriteCount = @"readwriteCount"; static dispatch_queue_t mcs_queue; @interface HLSAsset () { @@ -118,6 +116,10 @@ - (NSString *)indexFilePath { return [_provider indexFilePath]; } +- (NSString *)indexFileRelativePath { + return [_provider indexFileRelativePath]; +} + - (NSString *)AESKeyFilePathWithURL:(NSURL *)URL { return [_provider AESKeyFilePathWithName:[MCSURL.shared nameWithUrl:URL.absoluteString suffix:HLS_SUFFIX_AES_KEY]]; } @@ -149,8 +151,8 @@ - (nullable HLSAsset *)root { return root; } -- (nullable id)createTsContentWithResponse:(NSHTTPURLResponse *)response { - NSString *TsContentType = MCSResponseGetContentType(response); +- (nullable id)createTsContentWithResponse:(id)response { + NSString *TsContentType = response.contentType; __block BOOL isUpdated = NO; __block HLSContentTs *content = nil; dispatch_barrier_sync(mcs_queue, ^{ @@ -160,17 +162,12 @@ - (nullable HLSAsset *)root { } NSString *name = [MCSURL.shared nameWithUrl:response.URL.absoluteString suffix:HLS_SUFFIX_TS]; - MCSResponseContentRange range = MCSResponseContentRangeUndefined; - if ( response.statusCode == MCS_RESPONSE_CODE_PARTIAL_CONTENT ) { - range = MCSResponseGetContentRange(response); - } - if ( MCSResponseRangeIsUndefined(range) ) { - NSUInteger totalLength = response.expectedContentLength; - content = [_provider createTsContentWithName:name totalLength:totalLength]; + if ( response.statusCode == MCS_RESPONSE_CODE_PARTIAL_CONTENT ) { + content = [_provider createTsContentWithName:name totalLength:response.totalLength inRange:response.range]; } else { - content = [_provider createTsContentWithName:name totalLength:range.totalLength inRange:MCSResponseRange(range)]; + content = [_provider createTsContentWithName:name totalLength:response.totalLength]; } [_contents addObject:content]; @@ -211,6 +208,81 @@ - (nullable NSString *)TsContentFilePathForFilename:(NSString *)filename { return ts; } +/// 该操作将会对 content 进行一次 readwriteRetain, 请在不需要时, 调用一次 readwriteRelease. +- (nullable id)createTsContentReadwriteWithResponse:(id)response { + NSString *TsContentType = response.contentType; + __block BOOL isUpdated = NO; + __block HLSContentTs *content = nil; + dispatch_barrier_sync(mcs_queue, ^{ + if ( ![TsContentType isEqualToString:_TsContentType] ) { + _TsContentType = TsContentType; + isUpdated = YES; + } + + NSString *name = [MCSURL.shared nameWithUrl:response.URL.absoluteString suffix:HLS_SUFFIX_TS]; + + if ( response.statusCode == MCS_RESPONSE_CODE_PARTIAL_CONTENT ) { + content = [_provider createTsContentWithName:name totalLength:response.totalLength inRange:response.range]; + } + else { + content = [_provider createTsContentWithName:name totalLength:response.totalLength]; + } + [content readwriteRetain]; + [_contents addObject:content]; + }); + + if ( isUpdated ) + [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetMetadataDidLoadNotification object:self]; + return content; +} + +/// 将返回如下两种content, 如果未满足条件, 则返回nil +/// +/// - 如果ts已缓存完毕, 则返回完整的content +/// +/// - 如果ts被缓存了一部分(可能存在多个), 则将返回长度最长的并且readwrite为0的content +/// +/// 该操作将会对 content 进行一次 readwriteRetain, 请在不需要时, 调用一次 readwriteRelease. +/// +- (nullable id)TsContentReadwriteForRequest:(NSURLRequest *)request { + NSString *name = [MCSURL.shared nameWithUrl:request.URL.absoluteString suffix:HLS_SUFFIX_TS]; + __block HLSContentTs *_ts = nil; + dispatch_barrier_sync(mcs_queue, ^{ + // range + BOOL isRangeRequest = MCSRequestIsRangeRequest(request); + NSRange requestRange = NSMakeRange(0, 0); + if ( isRangeRequest ) { + MCSRequestContentRange contentRange = MCSRequestGetContentRange(request.allHTTPHeaderFields); + requestRange = MCSRequestRange(contentRange); + } + + for ( HLSContentTs *cur in _contents ) { + if ( ![cur.name isEqualToString:name] ) + continue; + if ( isRangeRequest && !NSEqualRanges(requestRange, cur.range) ) + continue; + + // 已缓存完毕 + if ( cur.length == cur.range.length ) { + _ts = cur; + break; + } + + // 未缓存完成的, 则返回length最长的content + if ( cur.readwriteCount == 0 ) { + if ( _ts.length < cur.length ) { + _ts = cur; + } + } + } + + if ( _ts != nil ) { + [_ts readwriteRetain]; + } + }); + return _ts; +} + #pragma mark - readwrite - (NSInteger)readwriteCount { diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.h index 4e5008016..53602470e 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.h @@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithDirectory:(NSString *)directory; - (NSString *)indexFilePath; - +- (NSString *)indexFileRelativePath; - (NSString *)AESKeyFilePathWithName:(NSString *)AESKeyName; - (nullable NSArray *)TsContents; diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.m index efbcd7c85..1c2a8a129 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentProvider.m @@ -29,7 +29,11 @@ - (instancetype)initWithDirectory:(NSString *)directory { } - (NSString *)indexFilePath { - return [_directory stringByAppendingPathComponent:[NSString stringWithFormat:@"index%@", HLS_SUFFIX_INDEX]]; + return [_directory stringByAppendingPathComponent:self.indexFileRelativePath]; +} + +- (NSString *)indexFileRelativePath { + return [NSString stringWithFormat:@"index%@", HLS_SUFFIX_INDEX]; } - (NSString *)AESKeyFilePathWithName:(NSString *)AESKeyName { diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.m index e09c63ab9..231e7c9d4 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSContentTSReader.m @@ -36,7 +36,7 @@ @interface HLSContentTSReader () @property (nonatomic) NSUInteger availableLength; @property (nonatomic) NSUInteger readLength; -@property (nonatomic, strong, nullable) NSURLSessionTask *task; +@property (nonatomic, strong, nullable) id task; @property (nonatomic, strong, nullable) NSFileHandle *reader; @property (nonatomic, strong, nullable) NSFileHandle *writer; @property (nonatomic) float networkTaskPriority; @@ -66,7 +66,6 @@ - (instancetype)initWithAsset:(HLSAsset *)asset request:(NSURLRequest *)request - (void)dealloc { if ( !_isClosed ) [self _close]; - if ( _content != nil ) [_content readwriteRelease]; MCSContentReaderDebugLog(@"%@: <%p>.dealloc;\n", NSStringFromClass(self.class), self); } @@ -83,16 +82,18 @@ - (void)prepare { _isCalledPrepare = YES; - HLSContentTs *content = [_asset TsContentForRequest:_request]; - + HLSContentTs *content = [_asset TsContentReadwriteForRequest:_request]; if ( content != nil ) { - // go to read the content [self _prepareForContent:content]; + // broken point download + if ( content.range.length != content.length ) { + NSRange requestRange = NSMakeRange(content.range.location + content.length, content.range.length - content.length); + NSMutableURLRequest *newRequest = [_request mcs_requestWithRange:requestRange]; + _task = [MCSDownload.shared downloadWithRequest:[newRequest mcs_requestWithHTTPAdditionalHeaders:[_asset.configuration HTTPAdditionalHeadersForDataRequestsOfType:MCSDataTypeHLSTs]] priority:_networkTaskPriority delegate:self]; + } return; } - MCSContentReaderDebugLog(@"%@: <%p>.download { request: %@\n };\n", NSStringFromClass(self.class), self, _request.mcs_description); - // download the content _task = [MCSDownload.shared downloadWithRequest:[_request mcs_requestWithHTTPAdditionalHeaders:[_asset.configuration HTTPAdditionalHeadersForDataRequestsOfType:MCSDataTypeHLSTs]] priority:_networkTaskPriority delegate:self]; }); @@ -197,7 +198,7 @@ - (NSUInteger)offset { - (NSUInteger)totalLength { __block NSUInteger totalLength = 0; dispatch_sync(mcs_queue, ^{ - totalLength = _content.totalLength; + totalLength = (NSUInteger)_content.totalLength; }); return totalLength; } @@ -220,21 +221,21 @@ - (BOOL)isDone { #pragma mark - MCSDownloadTaskDelegate -- (void)downloadTask:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request { - -} +- (void)downloadTask:(id)task willPerformHTTPRedirectionWithNewRequest:(NSURLRequest *)request { } -- (void)downloadTask:(NSURLSessionTask *)task didReceiveResponse:(NSHTTPURLResponse *)response { +- (void)downloadTask:(id)task didReceiveResponse:(id)response { dispatch_barrier_sync(mcs_queue, ^{ if ( _isClosed ) return; - HLSContentTs *content = [_asset createTsContentWithResponse:response]; - [self _prepareForContent:content]; + if ( _content == nil ) { + HLSContentTs *content = [_asset createTsContentReadwriteWithResponse:response]; + [self _prepareForContent:content]; + } }); } -- (void)downloadTask:(NSURLSessionTask *)task didReceiveData:(NSData *)data { +- (void)downloadTask:(id)task didReceiveData:(NSData *)data { dispatch_barrier_sync(mcs_queue, ^{ if ( _isClosed ) return; @@ -259,7 +260,7 @@ - (void)downloadTask:(NSURLSessionTask *)task didReceiveData:(NSData *)data { }); } -- (void)downloadTask:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { +- (void)downloadTask:(id)task didCompleteWithError:(NSError *)error { dispatch_barrier_sync(mcs_queue, ^{ if ( _isClosed ) return; @@ -290,7 +291,6 @@ - (void)_onError:(NSError *)error { - (void)_prepareForContent:(HLSContentTs *)content { _content = content; - [_content readwriteRetain]; NSString *filePath = [_asset TsContentFilePathForFilename:content.filename]; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; NSError *error = nil; @@ -307,6 +307,11 @@ - (void)_prepareForContent:(HLSContentTs *)content { return; } + if ( ![_writer mcs_seekToEndReturningOffset:NULL error:&error] ) { + [self _onError:error]; + return; + } + NSUInteger availableLength = (NSUInteger)[NSFileManager.defaultManager mcs_fileSizeAtPath:filePath]; _availableLength = availableLength; @@ -339,6 +344,7 @@ - (void)_close { _isClosed = YES; + if ( _content != nil ) [_content readwriteRelease]; MCSContentReaderDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); } @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSParser.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSParser.m index 518d9c0d7..5d205b594 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSParser.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSParser.m @@ -280,7 +280,7 @@ - (void)_start { __block NSURLRequest *currRequest = _request; __weak typeof(self) _self = self; - [MCSContents request:currRequest networkTaskPriority:_networkTaskPriority willPerformHTTPRedirection:^(NSHTTPURLResponse * _Nonnull response, NSURLRequest * _Nonnull newRequest) { + [MCSContents request:currRequest networkTaskPriority:_networkTaskPriority willPerformHTTPRedirection:^(NSURLRequest * _Nonnull newRequest) { currRequest = newRequest; } completed:^(NSData * _Nullable data, NSError * _Nullable error) { dispatch_barrier_sync(mcs_queue, ^{ @@ -483,13 +483,13 @@ - (NSString *)mcs_convertToUrlByContentsURL:(NSURL *)URL { url = [rootDir mcs_URLByAppendingPathComponent:subpath].absoluteString; } else if ( [self hasPrefix:HLS_PREFIX_DIR_PARENT] ) { - NSURL *curDir = URL.URLByDeletingLastPathComponent; - NSURL *parentDir = curDir.URLByDeletingLastPathComponent; + NSURL *curDir = URL.mcs_URLByDeletingLastPathComponentAndQuery; + NSURL *parentDir = curDir.mcs_URLByDeletingLastPathComponentAndQuery; NSString *subpath = [self substringFromIndex:HLS_PREFIX_DIR_PARENT.length]; url = [parentDir mcs_URLByAppendingPathComponent:subpath].absoluteString; } else if ( [self hasPrefix:HLS_PREFIX_DIR_CURRENT] ) { - NSURL *curDir = URL.URLByDeletingLastPathComponent; + NSURL *curDir = URL.mcs_URLByDeletingLastPathComponentAndQuery; NSString *subpath = [self substringFromIndex:HLS_PREFIX_DIR_CURRENT.length]; url = [curDir mcs_URLByAppendingPathComponent:subpath].absoluteString; } @@ -502,7 +502,7 @@ - (NSString *)mcs_convertToUrlByContentsURL:(NSURL *)URL { url = self; } else { - NSURL *curDir = URL.URLByDeletingLastPathComponent; + NSURL *curDir = URL.mcs_URLByDeletingLastPathComponentAndQuery; NSString *subpath = self; url = [curDir mcs_URLByAppendingPathComponent:subpath].absoluteString; } diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.h index ef564eba4..5273aeadb 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.h @@ -13,7 +13,7 @@ NS_ASSUME_NONNULL_BEGIN @interface HLSReader : NSObject -- (instancetype)initWithAsset:(__weak HLSAsset *)asset request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority readDataDecoder:(NSData *(^_Nullable)(NSURLRequest *request, NSUInteger offset, NSData *data))readDataDecoder delegate:(id)delegate; +- (instancetype)initWithAsset:(__weak HLSAsset *)asset request:(NSURLRequest *)request dataType:(MCSDataType)dataType networkTaskPriority:(float)networkTaskPriority readDataDecoder:(NSData *(^_Nullable)(NSURLRequest *request, NSUInteger offset, NSData *data))readDataDecoder delegate:(id)delegate; - (void)prepare; @property (nonatomic, copy, readonly, nullable) NSData *(^readDataDecoder)(NSURLRequest *request, NSUInteger offset, NSData *data); diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.m index ebcc957f5..63a99dc40 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/HLS/HLSReader.m @@ -9,7 +9,7 @@ #import "HLSReader.h" #import "HLSContentIndexReader.h" #import "HLSContentAESKeyReader.h" -#import "HLSContentTSReader.h" +#import "HLSContentTSReader.h" #import "MCSLogger.h" #import "HLSAsset.h" #import "MCSError.h" @@ -20,7 +20,9 @@ static dispatch_queue_t mcs_queue; -@interface HLSReader () +@interface HLSReader () { + MCSDataType _dataType; +} @property (nonatomic) BOOL isCalledPrepare; @property (nonatomic, weak, nullable) HLSAsset *asset; @property (nonatomic, strong, nullable) NSURLRequest *request; @@ -42,7 +44,7 @@ + (void)initialize { }); } -- (instancetype)initWithAsset:(__weak HLSAsset *)asset request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority readDataDecoder:(NSData *(^_Nullable)(NSURLRequest *request, NSUInteger offset, NSData *data))readDataDecoder delegate:(id)delegate { +- (instancetype)initWithAsset:(__weak HLSAsset *)asset request:(NSURLRequest *)request dataType:(MCSDataType)dataType networkTaskPriority:(float)networkTaskPriority readDataDecoder:(NSData *(^_Nullable)(NSURLRequest *request, NSUInteger offset, NSData *data))readDataDecoder delegate:(id)delegate { self = [super init]; if ( self ) { #ifdef DEBUG @@ -54,6 +56,7 @@ - (instancetype)initWithAsset:(__weak HLSAsset *)asset request:(NSURLRequest *)r _networkTaskPriority = networkTaskPriority; _readDataDecoder = readDataDecoder; _delegate = delegate; + _dataType = dataType; [_asset readwriteRetain]; @@ -65,7 +68,6 @@ - (instancetype)initWithAsset:(__weak HLSAsset *)asset request:(NSURLRequest *)r - (void)dealloc { [NSNotificationCenter.defaultCenter removeObserver:self]; if ( !_isClosed ) [self _close]; - [_asset readwriteRelease]; MCSAssetReaderDebugLog(@"%@: <%p>.dealloc;\n", NSStringFromClass(self.class), self); } @@ -91,13 +93,8 @@ - (void)prepare { MCSAssetReaderDebugLog(@"%@: <%p>.prepare { asset: %@, request: %@ };\n", NSStringFromClass(self.class), self, _asset.name, _request); NSParameterAssert(_asset); - - _isCalledPrepare = YES; - if ( [_request.URL.lastPathComponent containsString:HLS_SUFFIX_INDEX] ) { - _reader = [HLSContentIndexReader.alloc initWithAsset:_asset request:_request networkTaskPriority:_networkTaskPriority delegate:self]; - } - else { + if ( _dataType == MCSDataTypeHLSTs || _dataType == MCSDataTypeHLSAESKey ) { if ( _asset.parser == nil ) { [self _onError:[NSError mcs_errorWithCode:MCSUnknownError userInfo:@{ MCSErrorUserInfoObjectKey : _request, @@ -105,14 +102,31 @@ - (void)prepare { }]]; return; } - - if ( [_request.URL.lastPathComponent containsString:HLS_SUFFIX_AES_KEY] ) { + } + + switch ( _dataType ) { + case MCSDataTypeHLSPlaylist: { + _reader = [HLSContentIndexReader.alloc initWithAsset:_asset request:_request networkTaskPriority:_networkTaskPriority delegate:self]; + } + break; + case MCSDataTypeHLSAESKey: { _reader = [HLSContentAESKeyReader.alloc initWithAsset:_asset request:_request networkTaskPriority:_networkTaskPriority delegate:self]; } - else { + break; + case MCSDataTypeHLSTs: { _reader = [HLSContentTSReader.alloc initWithAsset:_asset request:_request networkTaskPriority:_networkTaskPriority delegate:self]; } + break; + default: { + [self _onError:[NSError mcs_errorWithCode:MCSFileError userInfo:@{ + MCSErrorUserInfoObjectKey : _request, + MCSErrorUserInfoReasonKey : @"不支持的格式!" + }]]; + } + return; } + + _isCalledPrepare = YES; [_reader prepare]; }); @@ -230,6 +244,8 @@ - (void)_close { _isClosed = YES; + [_asset readwriteRelease]; + MCSAssetReaderDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); } diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetFileRead.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetFileRead.m index 80009dcb3..b416a2dff 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetFileRead.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetFileRead.m @@ -61,7 +61,6 @@ - (instancetype)initWithAsset:(id)asset inRange:(NSRange)range referen - (void)dealloc { if ( !_isClosed ) [self _close]; - [_reference readwriteRelease]; MCSContentReaderDebugLog(@"%@: <%p>.dealloc;\n", NSStringFromClass(self.class), self); } @@ -207,6 +206,8 @@ - (void)_close { _isClosed = YES; + [_reference readwriteRelease]; + MCSContentReaderDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); } diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.h index 25d597b26..179d59b8b 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.h @@ -7,55 +7,23 @@ // #import "MCSInterfaces.h" -#import "MCSURL.h" -@class FILEAsset, FILEReader, MCSAssetContent; +#import "MCSURL.h" @class MCSAsset; +typedef NSNumber MCSAssetTypeNumber; +typedef NSNumber MCSAssetIDNumber; + NS_ASSUME_NONNULL_BEGIN @interface MCSAssetManager : NSObject + (instancetype)shared; -/// The maximum number of assets the cache should hold. -/// -/// If 0, there is no count limit. The default value is 0. -/// -/// This is not a strict limit—if the cache goes over the limit, an asset in the cache could be removed instantly, later, or possibly never, depending on the usage details of the asset. -/// -@property (nonatomic) NSUInteger cacheCountLimit; // 个数限制 - -/// The maximum length of time to keep an asset in the cache, in seconds. -/// -/// If 0, there is no expiring limit. The default value is 0. -/// -@property (nonatomic) NSTimeInterval maxDiskAgeForCache; // 保存时长限制 - -/// The maximum size of the disk cache, in bytes. -/// -/// If 0, there is no cache size limit. The default value is 0. -/// -@property (nonatomic) NSUInteger maxDiskSizeForCache; // 缓存占用的磁盘空间限制 - -/// The maximum length of free disk space the device should reserved, in bytes. -/// -/// When the free disk space of device is less than or equal to this value, some assets will be removed. -/// -/// If 0, there is no disk space limit. The default value is 0. -/// -@property (nonatomic) NSUInteger reservedFreeDiskSpace; // 剩余磁盘空间限制 +- (nullable __kindof id)assetWithURL:(NSURL *)URL; -/// Empties the cache. This method may blocks the calling thread until file delete finished. -/// -- (void)removeAllAssets; +- (nullable __kindof id)assetWithName:(NSString *)name type:(MCSAssetType)type; -- (void)removeAssetForURL:(NSURL *)URL; +- (nullable __kindof id)assetForAssetId:(NSInteger)assetId type:(MCSAssetType)type; -/// The auto trim check time interval in seconds. -/// -/// The manager holds an internal timer to check whether the cache reaches. The default value is 30. -/// -@property (nonatomic) NSTimeInterval checkInterval; - -@property (nonatomic, readonly) unsigned long long cachedSizeForAssets; +- (BOOL)isAssetStoredForURL:(NSURL *)URL; /// Decode the read data. /// @@ -63,19 +31,29 @@ NS_ASSUME_NONNULL_BEGIN /// @property (nonatomic, copy, nullable) NSData *(^readDataDecoder)(NSURLRequest *request, NSUInteger offset, NSData *data); +- (nullable id)readerWithRequest:(NSURLRequest *)proxyRequest networkTaskPriority:(float)networkTaskPriority delegate:(nullable id)delegate; -- (nullable __kindof id )assetWithURL:(NSURL *)URL; +@property (nonatomic, readonly) UInt64 countOfBytesAllAssets; -- (BOOL)isAssetStoredForURL:(NSURL *)URL; +@property (nonatomic, readonly) NSInteger countOfAllAssets; -- (nullable id)readerWithRequest:(NSURLRequest *)proxyRequest networkTaskPriority:(float)networkTaskPriority delegate:(nullable id)delegate; +- (UInt64)countOfBytesNotIn:(nullable NSDictionary *> *)assets; -- (void)willReadAssetForURL:(NSURL *)URL; -@end +- (void)removeAssetsNotIn:(nullable NSDictionary *> *)assets; +- (void)removeAssetForURL:(NSURL *)URL; +- (void)removeAsset:(id)asset; +- (void)removeAssetsInArray:(NSArray> *)array; +- (void)removeAssetsForLastReadingTime:(NSTimeInterval)timeLimit notIn:(nullable NSDictionary *> *)assets; +- (void)removeAssetsForLastReadingTime:(NSTimeInterval)timeLimit notIn:(nullable NSDictionary *> *)assets countLimit:(NSInteger)maxCount; +@end NS_ASSUME_NONNULL_END -// 缓存的资源个数超出限制时, 可能会移除某些资源 -// 保存的资源过期时, 可能会移除某些资源 -// 缓存占用的磁盘空间超出限制时, 可能会移除某些资源 -// 剩余磁盘空间小于限制时, 可能会移除某些资源 + +#import "HLSAsset.h" + +NS_ASSUME_NONNULL_BEGIN +@interface HLSAsset (MCSAssetManagerExtended) +@property (nonatomic, readonly, nullable) NSArray *subAssets; +@end +NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.m index d5c27ae8e..9a6b6aed4 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Asset/MCSAssetManager.m @@ -8,11 +8,8 @@ #import "MCSAssetManager.h" #import -#import -#import -#import -#import +#import "MCSDatabase.h" #import "MCSUtils.h" #import "MCSAssetUsageLog.h" #import "NSFileManager+MCS.h" @@ -25,18 +22,10 @@ #import "MCSRootDirectory.h" #import "MCSConsts.h" - -static NSString *kReadwriteCount = @"readwriteCount"; - + static dispatch_queue_t mcs_queue; -typedef NS_ENUM(NSUInteger, MCSLimit) { - MCSLimitNone, - MCSLimitCount, - MCSLimitCacheDiskSpace, - MCSLimitFreeDiskSpace, - MCSLimitExpires, -}; +#pragma mark - Private @interface MCSAssetUsageLog (MCSPrivate) @property (nonatomic) NSInteger id; @@ -48,23 +37,22 @@ @interface MCSAssetUsageLog (MCSPrivate) @property (nonatomic) NSInteger asset; @property (nonatomic) MCSAssetType assetType; @end - -#pragma mark - HLS - + @interface HLSAsset (HLSPrivate) @property (nonatomic, weak, nullable) HLSAsset *root; @end +//@interface FILEAsset (FILEPrivate) +//@end + #pragma mark - @interface MCSAssetManager () { - unsigned long long _cacheSize; - unsigned long long _freeSize; + NSUInteger _countOfAllAssets; } @property (nonatomic, strong) NSMutableDictionary > *assets; @property (nonatomic, strong) NSMutableDictionary *usageLogs; @property (nonatomic, strong) SJSQLite3 *sqlite3; -@property (nonatomic) NSUInteger count; @end @implementation MCSAssetManager @@ -81,119 +69,44 @@ + (instancetype)shared { - (instancetype)init { self = [super init]; if ( self ) { - _sqlite3 = [SJSQLite3.alloc initWithDatabasePath:[MCSRootDirectory databasePath]]; - _count = [_sqlite3 countOfObjectsForClass:MCSAssetUsageLog.class conditions:nil error:NULL]; + _sqlite3 = MCSDatabase(); + _countOfAllAssets = [_sqlite3 countOfObjectsForClass:MCSAssetUsageLog.class conditions:nil error:NULL]; _assets = NSMutableDictionary.dictionary; _usageLogs = NSMutableDictionary.dictionary; - _checkInterval = 30; - [self _checkRecursively]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_assetMetadataDidLoadWithNote:) name:MCSAssetMetadataDidLoadNotification object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_fileWriteOutOfSpaceErrorWithNote:) name:MCSFileWriteOutOfSpaceErrorNotification object:nil]; + + [self _syncUsageLogsRecursively]; } return self; } - + #pragma mark - -@synthesize cacheCountLimit = _cacheCountLimit; -- (void)setCacheCountLimit:(NSUInteger)cacheCountLimit { - dispatch_barrier_sync(mcs_queue, ^{ - _cacheCountLimit = cacheCountLimit; - }); -} - -- (NSUInteger)cacheCountLimit { - __block NSUInteger cacheCountLimit = 0; - dispatch_sync(mcs_queue, ^{ - cacheCountLimit = self->_cacheCountLimit; - }); - return cacheCountLimit; -} - -@synthesize maxDiskAgeForCache = _maxDiskAgeForCache; -- (void)setMaxDiskAgeForCache:(NSTimeInterval)maxDiskAgeForCache { - dispatch_barrier_sync(mcs_queue, ^{ - _maxDiskAgeForCache = maxDiskAgeForCache; - }); -} - -- (NSTimeInterval)maxDiskAgeForCache { - __block NSTimeInterval maxDiskAgeForCache = 0; - dispatch_sync(mcs_queue, ^{ - maxDiskAgeForCache = _maxDiskAgeForCache; - }); - return maxDiskAgeForCache; -} - -@synthesize maxDiskSizeForCache = _maxDiskSizeForCache; -- (void)setMaxDiskSizeForCache:(NSUInteger)maxDiskSizeForCache { - dispatch_barrier_sync(mcs_queue, ^{ - _maxDiskSizeForCache = maxDiskSizeForCache; - }); -} -- (NSUInteger)maxDiskSizeForCache { - __block NSUInteger maxDiskSizeForCache = 0; - dispatch_sync(mcs_queue, ^{ - maxDiskSizeForCache = self->_maxDiskSizeForCache; - }); - return maxDiskSizeForCache; -} - -@synthesize reservedFreeDiskSpace = _reservedFreeDiskSpace; -- (void)setReservedFreeDiskSpace:(NSUInteger)reservedFreeDiskSpace { - dispatch_barrier_sync(mcs_queue, ^{ - _reservedFreeDiskSpace = reservedFreeDiskSpace; - }); +- (nullable __kindof id )assetWithURL:(NSURL *)URL { + MCSAssetType type = [MCSURL.shared assetTypeForURL:URL]; + NSString *name = [MCSURL.shared assetNameForURL:URL]; + return [self _assetWithName:name type:type]; } -- (NSUInteger)reservedFreeDiskSpace { - __block NSUInteger reservedFreeDiskSpace = 0; - dispatch_sync(mcs_queue, ^{ - reservedFreeDiskSpace = self->_reservedFreeDiskSpace; - }); - return reservedFreeDiskSpace; +- (nullable __kindof id)assetWithName:(NSString *)name type:(MCSAssetType)type { + return [self _assetWithName:name type:type]; } -@synthesize checkInterval = _checkInterval; -- (void)setCheckInterval:(NSTimeInterval)checkInterval { +- (nullable __kindof id)assetForAssetId:(NSInteger)assetId type:(MCSAssetType)type { + __block id asset = nil; dispatch_barrier_sync(mcs_queue, ^{ - if ( checkInterval != self->_checkInterval ) { - self->_checkInterval = checkInterval; - } - }); -} - -- (NSTimeInterval)checkInterval { - __block NSUInteger checkInterval = 0; - dispatch_sync(mcs_queue, ^{ - checkInterval = self->_checkInterval; + asset = [self _assetForAssetId:assetId type:type]; }); - return checkInterval; -} - -#pragma mark - - -- (nullable __kindof id )assetWithURL:(NSURL *)URL { - MCSAssetType type = [MCSURL.shared assetTypeForURL:URL]; - NSString *name = [MCSURL.shared assetNameForURL:URL]; - return [self _assetWithName:name type:type]; + return asset; } - (BOOL)isAssetStoredForURL:(NSURL *)URL { __block id asset = nil; dispatch_barrier_sync(mcs_queue, ^{ NSString *name = [MCSURL.shared assetNameForURL:URL]; - asset = _assets[name]; - if ( asset != nil ) return; MCSAssetType type = [MCSURL.shared assetTypeForURL:URL]; - Class cls = [self _assetClassForType:type]; - if ( cls == nil ) return; - asset = (id)[_sqlite3 objectsForClass:cls conditions:@[ - [SJSQLite3Condition conditionWithColumn:@"name" value:name] - ] orderBy:nil error:NULL].firstObject; - [asset prepare]; - if ( asset != nil ) _assets[name] = asset; + asset = [self _assetForName:name type:type]; }); return asset.isStored; } @@ -217,126 +130,236 @@ - (BOOL)isAssetStoredForURL:(NSURL *)URL { BOOL isRootAsset = root != asset; if ( isRootAsset ) asset.root = root; } - return [HLSReader.alloc initWithAsset:asset request:request networkTaskPriority:networkTaskPriority readDataDecoder:_readDataDecoder delegate:delegate]; + MCSDataType dataType = [MCSURL.shared dataTypeForProxyURL:proxyURL]; + return [HLSReader.alloc initWithAsset:asset request:request dataType:dataType networkTaskPriority:networkTaskPriority readDataDecoder:_readDataDecoder delegate:delegate]; } } return nil; } -- (void)removeAllAssets { - dispatch_barrier_sync(mcs_queue, ^{ - NSArray *FILEAssets = [_sqlite3 objectsForClass:FILEAsset.class conditions:nil orderBy:nil error:NULL]; - [self _removeAssets:FILEAssets]; - NSArray *HLSAssets = [_sqlite3 objectsForClass:HLSAsset.class conditions:nil orderBy:nil error:NULL]; - [self _removeAssets:HLSAssets]; - }); -} - - (void)removeAssetForURL:(NSURL *)URL { if ( URL.absoluteString.length == 0 ) return; dispatch_barrier_sync(mcs_queue, ^{ MCSAssetType type = [MCSURL.shared assetTypeForURL:URL]; NSString *name = [MCSURL.shared assetNameForURL:URL]; - Class cls = [self _assetClassForType:type]; - if ( cls == nil ) return; - id asset = (id)[_sqlite3 objectsForClass:cls conditions:@[ - [SJSQLite3Condition conditionWithColumn:@"name" value:name] - ] orderBy:nil error:NULL].firstObject; - if ( asset != nil ) [self _removeAssets:@[asset]]; + id asset = [self _assetForName:name type:type]; + if ( asset != nil ) { + [self _removeAssetsInArray:@[asset]]; + } }); } -- (unsigned long long)cachedSizeForAssets { - return MCSRootDirectory.size; +- (void)removeAsset:(id)asset { + if ( asset == nil ) + return; + dispatch_barrier_sync(mcs_queue, ^{ + [self _removeAssetsInArray:@[asset]]; + }); } -- (void)willReadAssetForURL:(NSURL *)URL { - id asset = [self assetWithURL:URL]; - if ( asset != nil ) { - dispatch_barrier_async(mcs_queue, ^{ - MCSAssetUsageLog *log = self->_usageLogs[asset.name]; - if ( log != nil ) { - log.usageCount += 1; - log.updatedTime = NSDate.date.timeIntervalSince1970; - } - [self _syncToDatabase:log]; - }); - } +- (void)removeAssetsInArray:(NSArray> *)array { + if ( array.count == 0 ) + return; + dispatch_barrier_sync(mcs_queue, ^{ + [self _removeAssetsInArray:array]; + }); } -#pragma mark - mark +- (UInt64)countOfBytesAllAssets { + return MCSRootDirectory.size - MCSRootDirectory.databaseSize; +} -- (void)_checkRecursively { - if ( _checkInterval == 0 ) return; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_checkInterval * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ - dispatch_barrier_sync(mcs_queue, ^{ - [self _syncDiskSpace]; - [self _removeAssetsForLimit:MCSLimitFreeDiskSpace]; - [self _removeAssetsForLimit:MCSLimitCacheDiskSpace]; - [self _removeAssetsForLimit:MCSLimitExpires]; - [self _removeAssetsForLimit:MCSLimitCount]; - }); +- (NSInteger)countOfAllAssets { + __block NSInteger count = 0; + dispatch_sync(mcs_queue, ^{ + count = _countOfAllAssets; + }); + return count; +} + +- (UInt64)countOfBytesNotIn:(nullable NSDictionary *> *)assets { + __block UInt64 size = 0; + dispatch_sync(mcs_queue, ^{ + NSArray > *results = [self _assetsNotIn:assets]; + for ( id asset in results ) { + size += [NSFileManager.defaultManager mcs_directorySizeAtPath:asset.path]; + } + }); + return size; +} + +/// 读取中的资源不会被删除 +/// +- (void)removeAssetsForLastReadingTime:(NSTimeInterval)timeLimit notIn:(nullable NSDictionary *> *)assets { + [self removeAssetsForLastReadingTime:timeLimit notIn:assets countLimit:NSNotFound]; +} + +/// 读取中的资源不会被删除 +/// +- (void)removeAssetsForLastReadingTime:(NSTimeInterval)timeLimit notIn:(nullable NSDictionary *> *)assets countLimit:(NSInteger)countLimit { + dispatch_barrier_sync(mcs_queue, ^{ + // 过滤被使用中的资源 + NSMutableSet *readwriteFileAssets = NSMutableSet.set; + NSMutableSet *readwriteHLSAssets = NSMutableSet.set; + [_assets enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, id _Nonnull asset, BOOL * _Nonnull stop) { + if ( asset.readwriteCount > 0 ) { + NSMutableSet *set = (asset.type == MCSAssetTypeFILE ? readwriteFileAssets : readwriteHLSAssets); + [set addObject:@(asset.id)]; + } + }]; + + // not in + [assets enumerateKeysAndObjectsUsingBlock:^(MCSAssetTypeNumber * _Nonnull key, NSArray * _Nonnull obj, BOOL * _Nonnull stop) { + NSMutableSet *set = (key.integerValue == MCSAssetTypeFILE ? readwriteFileAssets : readwriteHLSAssets); + [set addObjectsFromArray:obj]; + }]; - [self _checkRecursively]; + // 全部处于使用中 + NSInteger count = readwriteFileAssets.count + readwriteHLSAssets.count; + if ( count == _countOfAllAssets ) + return; + + [self _syncUsageLogs]; + + [readwriteFileAssets addObject:@(0)]; + [readwriteHLSAssets addObject:@(0)]; + + NSString *s0 = [readwriteFileAssets.allObjects componentsJoinedByString:@","]; + NSString *s1 = [readwriteHLSAssets.allObjects componentsJoinedByString:@","]; + + NSArray *rows = nil; + if ( countLimit != NSNotFound ) { + rows = [_sqlite3 exec:[NSString stringWithFormat: + @"SELECT * FROM MCSAssetUsageLog WHERE (asset NOT IN (%@) AND assetType = 0) \ + OR (asset NOT IN (%@) AND assetType = 1) \ + AND updatedTime <= %lf \ + ORDER BY updatedTime ASC, usageCount ASC \ + LIMIT 0, %ld;", s0, s1, timeLimit, (long)countLimit] error:NULL]; + } + else { + rows = [_sqlite3 exec:[NSString stringWithFormat: + @"SELECT * FROM MCSAssetUsageLog WHERE (asset NOT IN (%@) AND assetType = 0) \ + OR (asset NOT IN (%@) AND assetType = 1) \ + AND updatedTime <= %lf;", s0, s1, timeLimit] error:NULL]; + } + NSArray *logs = [_sqlite3 objectsForClass:MCSAssetUsageLog.class rowDatas:rows error:NULL]; + if ( logs.count == 0 ) + return; + + // 删除 + NSMutableArray > *results = NSMutableArray.array; + [logs enumerateObjectsUsingBlock:^(MCSAssetUsageLog * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + id asset = [self _assetForAssetId:obj.asset type:obj.assetType]; + if ( asset != nil ) [results addObject:asset]; + }]; + + [self _removeAssetsInArray:results]; + }); +} + +- (void)removeAssetsNotIn:(nullable NSDictionary *> *)assets { + dispatch_barrier_sync(mcs_queue, ^{ + NSArray > *results = [self _assetsNotIn:assets]; + // 删除 + [self _removeAssetsInArray:results]; }); } -- (void)_syncUsageLogsToDatabase { +#pragma mark - mark + +- (void)_syncToDatabase:(id)saveable { + if ( saveable != nil ) { + [_sqlite3 save:saveable error:NULL]; + } +} + +- (void)_syncUsageLogs { if ( _usageLogs.count != 0 ) { - [_sqlite3 updateObjects:self->_usageLogs.allValues forKeys:@[@"usageCount", @"updatedTime"] error:NULL]; + [_sqlite3 updateObjects:_usageLogs.allValues forKeys:@[@"usageCount", @"updatedTime"] error:NULL]; [_usageLogs removeAllObjects]; } } -- (void)_syncDiskSpace { - _freeSize = [NSFileManager.defaultManager mcs_freeDiskSpace]; - _cacheSize = [MCSRootDirectory size]; +- (void)_syncUsageLogsRecursively { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ + dispatch_barrier_sync(mcs_queue, ^{ + [self _syncUsageLogs]; + }); + [self _syncUsageLogsRecursively]; + }); +} + +#pragma mark - mark + +- (nullable __kindof id)_assetForName:(NSString *)name type:(MCSAssetType)type { + id asset = _assets[name]; + if ( asset == nil ) { + asset = [self _assetInTableForType:type conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"name" value:name] + ]]; + } + return asset; } -- (void)_syncToDatabase:(id)saveable { - [_sqlite3 save:saveable error:NULL]; +- (nullable __kindof id)_assetForAssetId:(NSInteger)assetId type:(MCSAssetType)type { + __block id asset = nil; + [_assets enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { + if ( obj.type == type && obj.id == assetId ) { + asset = obj; + *stop = YES; + } + }]; + + if ( asset == nil ) { + asset = [self _assetInTableForType:type conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"id" value:@(assetId)] + ]]; + } + return asset; } -#pragma mark - mark +- (nullable __kindof id)_assetInTableForType:(MCSAssetType)type conditions:(NSArray *)conditions { + Class cls = [self _assetClassForType:type]; + if ( cls == nil ) + return nil; + __block id asset = (id)[_sqlite3 objectsForClass:cls conditions:conditions orderBy:nil error:NULL].firstObject; + + if ( asset != nil ) { + [asset prepare]; + [self _registerAsObserverForAsset:asset]; + _assets[asset.name] = asset; + } + return asset; +} - (nullable __kindof id )_assetWithName:(NSString *)name type:(MCSAssetType)type { __block id asset = nil; dispatch_barrier_sync(mcs_queue, ^{ - if ( _assets[name] == nil ) { + asset = [self _assetForName:name type:type]; + if ( asset == nil ) { Class cls = [self _assetClassForType:type]; if ( cls == nil ) return; - - // query - id r = (id)[_sqlite3 objectsForClass:cls conditions:@[ - [SJSQLite3Condition conditionWithColumn:@"name" value:name] - ] orderBy:nil error:NULL].firstObject; - - // create - if ( r == nil ) { - r = [cls.alloc initWithName:name]; - [self _syncToDatabase:r]; // save asset - _count += 1; + // create asset + if ( asset == nil ) { + asset = [cls.alloc initWithName:name]; + [self _syncToDatabase:asset]; // save asset + _countOfAllAssets += 1; } - - [r prepare]; - _assets[name] = r; - } - - asset = _assets[name]; - - if ( _usageLogs[name] == nil ) { - MCSAssetUsageLog *log = (id)[_sqlite3 objectsForClass:MCSAssetUsageLog.class conditions:@[ + + [asset prepare]; + [self _registerAsObserverForAsset:asset]; + _assets[name] = asset; + + MCSAssetUsageLog *log = [_sqlite3 objectsForClass:MCSAssetUsageLog.class conditions:@[ [SJSQLite3Condition conditionWithColumn:@"asset" value:@(asset.id)], - [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(asset.type)] + [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(type)], ] orderBy:nil error:NULL].firstObject; - + // create log if ( log == nil ) { log = [MCSAssetUsageLog.alloc initWithAsset:asset]; [self _syncToDatabase:log]; // save log } - _usageLogs[name] = log; } }); @@ -348,155 +371,14 @@ - (void)_assetMetadataDidLoadWithNote:(NSNotification *)note { [self _syncToDatabase:note.object]; }); } - -// 空间不足 -// 删除部分缓存, 优先保留`_reservedFreeDiskSpace`, 否则将删除大于500M的数据 -// 当前使用的资源也可能会删除 -- (void)_fileWriteOutOfSpaceErrorWithNote:(NSNotification *)note { - dispatch_barrier_async(mcs_queue, ^{ - [self _syncDiskSpace]; - unsigned long long reservedFreeDiskSpace = self->_reservedFreeDiskSpace != 0 ? self->_reservedFreeDiskSpace : 500 * 1024 * 1024; - if ( self->_freeSize >= reservedFreeDiskSpace ) return; - - NSInteger curIdx = 0; - unsigned long long length = self->_freeSize; - NSMutableArray> *assets = NSMutableArray.array; - do { - NSRange range = NSMakeRange(curIdx * 10, 10); - NSArray *logs = [self->_sqlite3 objectsForClass:MCSAssetUsageLog.class conditions:nil orderBy:@[ - [SJSQLite3ColumnOrder orderWithColumn:@"updatedTime" ascending:YES] - ] range:range error:NULL]; - - if ( logs.count == 0 ) break; - - for ( MCSAssetUsageLog *log in logs ) { - id asset = [self->_sqlite3 objectForClass:[self _assetClassForType:log.assetType] primaryKeyValue:@(log.asset) error:NULL]; - if ( asset != nil ) { - length += [NSFileManager.defaultManager mcs_directorySizeAtPath:asset.path]; - [assets addObject:asset]; - } - if ( length > reservedFreeDiskSpace ) break; - } - - curIdx += 1; - } while ( YES ); - [self _removeAssets:assets]; - }); -} - -#pragma mark - - -- (void)_removeAssetsForLimit:(MCSLimit)limit { - switch ( limit ) { - case MCSLimitNone: - return; - case MCSLimitCount: { - if ( _cacheCountLimit == 0 ) - return; - - if ( _count == 1 ) - return; - - // 资源数量少于限制的个数 - if ( _cacheCountLimit > _count ) - return; - } - break; - case MCSLimitFreeDiskSpace: { - if ( _reservedFreeDiskSpace == 0 ) - return; - - if ( _freeSize > _reservedFreeDiskSpace ) - return; - } - break; - case MCSLimitExpires: { - if ( _maxDiskAgeForCache == 0 ) - return; - } - break; - case MCSLimitCacheDiskSpace: { - if ( _maxDiskSizeForCache == 0 ) - return; - - // 获取已缓存的数据大小 - if ( _maxDiskSizeForCache > _cacheSize ) - return; - } - break; - } - - // 过滤被使用中的资源 - NSMutableArray *arr0 = NSMutableArray.array; - NSMutableArray *arr1 = NSMutableArray.array; - [_assets enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, id _Nonnull asset, BOOL * _Nonnull stop) { - if ( asset.readwriteCount > 0 ) { - NSMutableArray *m = (asset.type == MCSAssetTypeFILE ? arr0 : arr1); - [m addObject:@(asset.id)]; - } - }]; - - // 全部处于使用中 - NSInteger count = arr0.count + arr1.count; - if ( count == _count ) - return; - - [arr0 addObject:@(0)]; - [arr1 addObject:@(0)]; - - NSString *s0 = [arr0 componentsJoinedByString:@","]; - NSString *s1 = [arr1 componentsJoinedByString:@","]; - - NSArray *logs = nil; - switch ( limit ) { - case MCSLimitNone: - break; - case MCSLimitCount: - case MCSLimitCacheDiskSpace: - case MCSLimitFreeDiskSpace: { - // 清理60s之前的 - // 清理一半 - NSTimeInterval time = NSDate.date.timeIntervalSince1970 - 60; - NSInteger length = (NSInteger)ceil(_cacheCountLimit != 0 ? (_count - _cacheCountLimit * 0.5) : (_count - count) * 0.5); - NSArray *rows = [_sqlite3 exec:[NSString stringWithFormat: - @"SELECT * FROM MCSAssetUsageLog WHERE (asset NOT IN (%@) AND assetType = 0) \ - OR (asset NOT IN (%@) AND assetType = 1) \ - AND updatedTime <= %lf \ - ORDER BY updatedTime ASC, usageCount ASC \ - LIMIT 0, %ld;", s0, s1, time, (long)length] error:NULL]; - logs = [_sqlite3 objectsForClass:MCSAssetUsageLog.class rowDatas:rows error:NULL]; - } - break; - case MCSLimitExpires: { - NSTimeInterval time = NSDate.date.timeIntervalSince1970 - _maxDiskAgeForCache; - NSArray *rows = [_sqlite3 exec:[NSString stringWithFormat: - @"SELECT * FROM MCSAssetUsageLog WHERE (asset NOT IN (%@) AND assetType = 0) \ - OR (asset NOT IN (%@) AND assetType = 1) \ - AND updatedTime <= %lf;", s0, s1, time] error:NULL]; - logs = [_sqlite3 objectsForClass:MCSAssetUsageLog.class rowDatas:rows error:NULL]; - } - break; - } - - if ( logs.count == 0 ) - return; - - // 删除 - NSMutableArray > *results = NSMutableArray.array; - [logs enumerateObjectsUsingBlock:^(MCSAssetUsageLog * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - id asset = [self.sqlite3 objectForClass:[self _assetClassForType:obj.assetType] primaryKeyValue:@(obj.asset) error:NULL]; - if ( asset != nil ) [results addObject:asset]; - }]; - - [self _removeAssets:results]; -} - -- (void)_removeAssets:(NSArray > *)assets { + +- (void)_removeAssetsInArray:(NSArray > *)assets { if ( assets.count == 0 ) return; [assets enumerateObjectsUsingBlock:^(id _Nonnull r, NSUInteger idx, BOOL * _Nonnull stop) { [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetWillRemoveAssetNotification object:r]; + [self _unregisterAsObserverForAsset:r]; [NSFileManager.defaultManager removeItemAtPath:r.path error:NULL]; [self.sqlite3 removeObjectForClass:r.class primaryKeyValue:@(r.id) error:NULL]; [self.sqlite3 removeAllObjectsForClass:MCSAssetUsageLog.class conditions:@[ @@ -508,10 +390,102 @@ - (void)_removeAssets:(NSArray > *)assets { [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetDidRemoveAssetNotification object:r]; }]; - _count -= assets.count; + _countOfAllAssets -= assets.count; } - (Class)_assetClassForType:(MCSAssetType)type { return type == MCSAssetTypeFILE ? FILEAsset.class : HLSAsset.class; } + +- (nullable NSArray> *)_assetsNotIn:(nullable NSDictionary *> *)assets { + + NSMutableSet *FILEAssets = NSMutableSet.set; + NSMutableSet *HLSAssets = NSMutableSet.set; + // not in + [assets enumerateKeysAndObjectsUsingBlock:^(MCSAssetTypeNumber * _Nonnull key, NSArray * _Nonnull obj, BOOL * _Nonnull stop) { + NSMutableSet *set = (key.integerValue == MCSAssetTypeFILE ? FILEAssets : HLSAssets); + [set addObjectsFromArray:obj]; + }]; + + [FILEAssets addObject:@(0)]; + [HLSAssets addObject:@(0)]; + + NSString *s0 = [FILEAssets.allObjects componentsJoinedByString:@","]; + NSString *s1 = [HLSAssets.allObjects componentsJoinedByString:@","]; + + NSArray *rows = [_sqlite3 exec:[NSString stringWithFormat: + @"SELECT * FROM MCSAssetUsageLog WHERE (asset NOT IN (%@) AND assetType = 0) \ + OR (asset NOT IN (%@) AND assetType = 1);", s0, s1] error:NULL]; + NSArray *logs = [_sqlite3 objectsForClass:MCSAssetUsageLog.class rowDatas:rows error:NULL]; + if ( logs.count == 0 ) + return nil; + + NSMutableArray > *results = NSMutableArray.array; + [logs enumerateObjectsUsingBlock:^(MCSAssetUsageLog * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + id asset = asset = [self _assetForAssetId:obj.asset type:obj.assetType]; + if ( asset != nil ) [results addObject:asset]; + }]; + return results; +} + +- (void)_registerAsObserverForAsset:(id)asset { + [asset addObserver:self forKeyPath:kReadwriteCount options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL]; +} + +- (void)_unregisterAsObserverForAsset:(id)asset { + [asset removeObserver:self forKeyPath:kReadwriteCount]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)asset change:(NSDictionary *)change context:(void *)context { + NSInteger oldValue = [change[NSKeyValueChangeOldKey] integerValue]; + NSInteger newValue = [change[NSKeyValueChangeNewKey] integerValue]; + if ( newValue > oldValue ) { + dispatch_barrier_async(mcs_queue, ^{ + MCSAssetUsageLog *log = self->_usageLogs[asset.name]; + if ( log == nil ) { + log = (id)[self->_sqlite3 objectsForClass:MCSAssetUsageLog.class conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"asset" value:@(asset.id)], + [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(asset.type)] + ] orderBy:nil error:NULL].firstObject; + self->_usageLogs[asset.name] = log; + } + + if ( log != nil ) { + log.usageCount += 1; + log.updatedTime = NSDate.date.timeIntervalSince1970; + } + }); + } +} +@end + +@implementation HLSAsset (MCSAssetManagerExtended) +- (nullable NSArray *)subAssets { + HLSParser *parser = self.parser; + if ( parser != nil ) { + NSMutableArray *subAssets = nil; + for ( NSInteger i = 0 ; i < parser.allItemsCount ; ++ i ) { + id item = [parser itemAtIndex:i]; + if ( [parser isVariantItem:item] ) { + subAssets = NSMutableArray.array; + + NSURL *URL = [MCSURL.shared HLS_URLWithProxyURI:item.URI]; + HLSAsset *asset = [MCSAssetManager.shared assetWithURL:URL]; + if ( asset != nil ) [subAssets addObject:asset]; + + NSArray> *renditionsItems = [parser renditionsItemsForVariantItem:item]; + for ( id item in renditionsItems ) { + NSURL *URL = [MCSURL.shared HLS_URLWithProxyURI:item.URI]; + HLSAsset *asset = [MCSAssetManager.shared assetWithURL:URL]; + if ( asset != nil ) [subAssets addObject:asset]; + } + + // break + break; + } + } + return subAssets.copy; + } + return nil; +} @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.h new file mode 100644 index 000000000..de37e7d1b --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.h @@ -0,0 +1,80 @@ +// +// MCSAssetCacheManager.h +// Pods-SJMediaCacheServer_Example +// +// Created by BlueDancer on 2021/3/26. +// + +#import "MCSInterfaces.h" + +NS_ASSUME_NONNULL_BEGIN +@interface MCSAssetCacheManager : NSObject ++ (instancetype)shared; + +/// The maximum number of assets the cache should hold. +/// +/// If 0, there is no count limit. The default value is 0. +/// +/// This is not a strict limit—if the cache goes over the limit, an asset in the cache could be removed instantly, later, or possibly never, depending on the usage details of the asset. +/// +@property (nonatomic) NSUInteger cacheCountLimit; // 个数限制 + +/// The maximum length of time to keep an asset in the cache, in seconds. +/// +/// If 0, there is no expiring limit. The default value is 0. +/// +@property (nonatomic) NSTimeInterval maxDiskAgeForCache; // 保存时长限制 + +/// The maximum size of the disk cache, in bytes. +/// +/// If 0, there is no cache size limit. The default value is 0. +/// +@property (nonatomic) NSUInteger maxDiskSizeForCache; // 缓存占用的磁盘空间限制 + +/// The maximum length of free disk space the device should reserved, in bytes. +/// +/// When the free disk space of device is less than or equal to this value, some assets will be removed. +/// +/// If 0, there is no disk space limit. The default value is 0. +/// +@property (nonatomic) NSUInteger reservedFreeDiskSpace; // 剩余磁盘空间限制 + +/// The auto trim check time interval in seconds. +/// +/// The manager holds an internal timer to check whether the cache reaches. The default value is 30. +/// +@property (nonatomic) NSTimeInterval checkInterval; + +/// When checking the cache for asset removing, filters out assets that are read within a specified time. +/// +/// The default value is 60s. +/// +@property (nonatomic) NSTimeInterval lastTimeLimit; // 在删除资源时, 过滤掉指定的时间内读取过的资源 + +- (void)setProtected:(BOOL)isProtected forCacheWithURL:(NSURL *)URL; +- (void)setProtected:(BOOL)isProtected forCacheWithAsset:(id)asset; + +/// All caches, includes protected caches +@property (nonatomic, readonly) UInt64 countOfBytesAllCaches; +/// Protected caches are not included +@property (nonatomic, readonly) UInt64 countOfBytesRemovableCaches; + +/// Return NO if the cache is protected +- (BOOL)isRemovableForCacheWithURL:(NSURL *)URL; +/// Return NO if the cache is protected +- (BOOL)isRemovableForCacheWithAsset:(id)asset; + +/// If the cache for asset is protected, it will not be removed +- (BOOL)removeCacheForURL:(NSURL *)URL; +/// If the cache for asset is protected, it will not be removed +- (BOOL)removeCacheForAsset:(id)asset; +/// If the cache for asset is protected, it will not be removed +- (void)removeAllRemovableCaches; +@end +NS_ASSUME_NONNULL_END + + +// 缓存的资源个数超出限制时, 可能会移除某些资源 +// 保存的资源过期时, 可能会移除某些资源 +// 缓存占用的磁盘空间超出限制时, 可能会移除某些资源 +// 剩余磁盘空间小于限制时, 可能会移除某些资源 diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.m new file mode 100644 index 000000000..d5c957307 --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Cache/MCSAssetCacheManager.m @@ -0,0 +1,395 @@ +// +// MCSAssetCacheManager.m +// Pods-SJMediaCacheServer_Example +// +// Created by BlueDancer on 2021/3/26. +// + +#import "MCSAssetCacheManager.h" +#import "NSFileManager+MCS.h" +#import "MCSRootDirectory.h" +#import "MCSConsts.h" +#import "MCSUtils.h" +#import "MCSAssetManager.h" +#import "MCSDatabase.h" + +static dispatch_queue_t mcs_queue; + +typedef NS_ENUM(NSUInteger, MCSLimit) { + MCSLimitNone, + MCSLimitCount, + MCSLimitCacheDiskSpace, + MCSLimitFreeDiskSpace, + MCSLimitExpires, +}; + +@interface MCSAssetCacheTmpProtectedItem : NSObject +- (instancetype)initWithAsset:(id)asset; +@property (nonatomic) NSInteger id; +@property (nonatomic) NSInteger asset; +@property (nonatomic) MCSAssetType assetType; +@end + +@implementation MCSAssetCacheTmpProtectedItem ++ (NSString *)sql_primaryKey { + return @"id"; +} + ++ (NSArray *)sql_autoincrementlist { + return @[@"id"]; +} + +- (instancetype)initWithAsset:(id)asset { + self = [super init]; + if ( self ) { + _asset = asset.id; + _assetType = asset.type; + } + return self; +} +@end + +@interface MCSAssetCacheManager () { + unsigned long long _cacheSize; + unsigned long long _freeSize; + NSInteger _countOfProtectedAssets; + SJSQLite3 *_sqlite3; +} + +@end + +@implementation MCSAssetCacheManager ++ (instancetype)shared { + static id obj = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mcs_queue = mcs_dispatch_queue_create("queue.MCSAssetCacheManager", DISPATCH_QUEUE_CONCURRENT); + obj = [[self alloc] init]; + }); + return obj; +} + +- (instancetype)init { + self = [super init]; + if ( self ) { + _checkInterval = 30; + _lastTimeLimit = 60; + _sqlite3 = MCSDatabase(); + _countOfProtectedAssets = [_sqlite3 countOfObjectsForClass:MCSAssetCacheTmpProtectedItem.class conditions:nil error:NULL]; + [self _checkCachesRecursively]; + + [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_fileWriteOutOfSpaceErrorWithNote:) name:MCSFileWriteOutOfSpaceErrorNotification object:nil]; + } + return self; +} + +#pragma mark - + +@synthesize cacheCountLimit = _cacheCountLimit; +- (void)setCacheCountLimit:(NSUInteger)cacheCountLimit { + dispatch_barrier_sync(mcs_queue, ^{ + _cacheCountLimit = cacheCountLimit; + }); +} + +- (NSUInteger)cacheCountLimit { + __block NSUInteger cacheCountLimit = 0; + dispatch_sync(mcs_queue, ^{ + cacheCountLimit = self->_cacheCountLimit; + }); + return cacheCountLimit; +} + +@synthesize maxDiskAgeForCache = _maxDiskAgeForCache; +- (void)setMaxDiskAgeForCache:(NSTimeInterval)maxDiskAgeForCache { + dispatch_barrier_sync(mcs_queue, ^{ + _maxDiskAgeForCache = maxDiskAgeForCache; + }); +} + +- (NSTimeInterval)maxDiskAgeForCache { + __block NSTimeInterval maxDiskAgeForCache = 0; + dispatch_sync(mcs_queue, ^{ + maxDiskAgeForCache = _maxDiskAgeForCache; + }); + return maxDiskAgeForCache; +} + +@synthesize maxDiskSizeForCache = _maxDiskSizeForCache; +- (void)setMaxDiskSizeForCache:(NSUInteger)maxDiskSizeForCache { + dispatch_barrier_sync(mcs_queue, ^{ + _maxDiskSizeForCache = maxDiskSizeForCache; + }); +} +- (NSUInteger)maxDiskSizeForCache { + __block NSUInteger maxDiskSizeForCache = 0; + dispatch_sync(mcs_queue, ^{ + maxDiskSizeForCache = self->_maxDiskSizeForCache; + }); + return maxDiskSizeForCache; +} + +@synthesize reservedFreeDiskSpace = _reservedFreeDiskSpace; +- (void)setReservedFreeDiskSpace:(NSUInteger)reservedFreeDiskSpace { + dispatch_barrier_sync(mcs_queue, ^{ + _reservedFreeDiskSpace = reservedFreeDiskSpace; + }); +} + +- (NSUInteger)reservedFreeDiskSpace { + __block NSUInteger reservedFreeDiskSpace = 0; + dispatch_sync(mcs_queue, ^{ + reservedFreeDiskSpace = self->_reservedFreeDiskSpace; + }); + return reservedFreeDiskSpace; +} + +@synthesize checkInterval = _checkInterval; +- (void)setCheckInterval:(NSTimeInterval)checkInterval { + dispatch_barrier_sync(mcs_queue, ^{ + if ( checkInterval != self->_checkInterval ) { + self->_checkInterval = checkInterval; + } + }); +} + +- (NSTimeInterval)checkInterval { + __block NSUInteger checkInterval = 0; + dispatch_sync(mcs_queue, ^{ + checkInterval = self->_checkInterval; + }); + return checkInterval; +} + +- (UInt64)countOfBytesAllCaches { + return MCSAssetManager.shared.countOfBytesAllAssets; +} + +- (UInt64)countOfBytesRemovableCaches { + __block UInt64 size = 0; + dispatch_sync(mcs_queue, ^{ + size = [MCSAssetManager.shared countOfBytesNotIn:[self _allProtectedAssets]]; + }); + return size; +} + +- (BOOL)isRemovableForCacheWithURL:(NSURL *)URL { + if ( URL == nil ) + return NO; + return [self isRemovableForCacheWithAsset:[MCSAssetManager.shared assetWithURL:URL]]; +} + +- (BOOL)isRemovableForCacheWithAsset:(id)asset { + __block BOOL isRemovable = NO; + if ( asset != nil ) { + dispatch_sync(mcs_queue, ^{ + isRemovable = [self _isRemovableForCacheWithAsset:asset]; + }); + } + return isRemovable; +} + +- (BOOL)removeCacheForURL:(NSURL *)URL { + if ( URL == nil ) + return NO; + return [self removeCacheForAsset:[MCSAssetManager.shared assetWithURL:URL]]; +} + +- (BOOL)removeCacheForAsset:(id)asset { + __block BOOL isRemoved = NO; + if ( asset != nil ) { + dispatch_barrier_sync(mcs_queue, ^{ + BOOL isRemovable = [self _isRemovableForCacheWithAsset:asset]; + if ( isRemovable ) { + [MCSAssetManager.shared removeAsset:asset]; + isRemoved = YES; + } + }); + } + return isRemoved; +} + +- (void)removeAllRemovableCaches { + dispatch_barrier_sync(mcs_queue, ^{ + NSDictionary *> *protectedAssets = [self _allProtectedAssets]; + [MCSAssetManager.shared removeAssetsNotIn:protectedAssets]; + _countOfProtectedAssets = protectedAssets.count; + }); +} + +- (void)setProtected:(BOOL)isProtected forCacheWithURL:(NSURL *)URL { + [self setProtected:isProtected forCacheWithAsset:[MCSAssetManager.shared assetWithURL:URL]]; +} + +- (void)setProtected:(BOOL)isProtected forCacheWithAsset:(id)asset { + if ( asset == nil ) + return; + dispatch_barrier_sync(mcs_queue, ^{ + MCSAssetCacheTmpProtectedItem *item = (id)[_sqlite3 objectsForClass:MCSAssetCacheTmpProtectedItem.class conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(asset.type)], + [SJSQLite3Condition conditionWithColumn:@"asset" value:@(asset.id)] + ] orderBy:nil error:NULL].firstObject; + + if ( isProtected ) { + // save + if ( item == nil ) { + _countOfProtectedAssets += 1; + item = [MCSAssetCacheTmpProtectedItem.alloc initWithAsset:asset]; + [_sqlite3 save:item error:NULL]; + } + + // return + return; + } + + // delete + if ( item != nil ) { + _countOfProtectedAssets -= 1; + [_sqlite3 removeObjectForClass:MCSAssetCacheTmpProtectedItem.class primaryKeyValue:@(item.id) error:NULL]; + } + }); +} + +#pragma mark - + +- (void)_checkCachesRecursively { + if ( _checkInterval == 0 ) return; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_checkInterval * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ + dispatch_barrier_sync(mcs_queue, ^{ + [self _trim]; + }); + + [self _checkCachesRecursively]; + }); +} + +- (void)_syncDiskSpace { + _freeSize = [NSFileManager.defaultManager mcs_freeDiskSpace]; + _cacheSize = [MCSRootDirectory size]; +} + +- (void)_trim { + [self _syncDiskSpace]; + [self _removeAssetsForLimit:MCSLimitFreeDiskSpace]; + [self _removeAssetsForLimit:MCSLimitCacheDiskSpace]; + [self _removeAssetsForLimit:MCSLimitExpires]; + [self _removeAssetsForLimit:MCSLimitCount]; +} + +// 空间不足 +- (void)_fileWriteOutOfSpaceErrorWithNote:(NSNotification *)note { + dispatch_barrier_async(mcs_queue, ^{ + [self _trim]; + }); +} + +- (BOOL)_isRemovableForCacheWithAsset:(id)asset { + return [_sqlite3 objectsForClass:MCSAssetCacheTmpProtectedItem.class conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(asset.type)], + [SJSQLite3Condition conditionWithColumn:@"asset" value:@(asset.id)] + ] orderBy:nil error:NULL].count == 0; +} + +- (void)_removeAssetsForLimit:(MCSLimit)limit { + NSInteger count = MCSAssetManager.shared.countOfAllAssets - _countOfProtectedAssets; + + switch ( limit ) { + case MCSLimitNone: + return; + case MCSLimitCount: { + if ( _cacheCountLimit == 0 ) + return; + + + if ( count == 1 ) + return; + + // 资源数量少于限制的个数 + if ( _cacheCountLimit > count ) + return; + } + break; + case MCSLimitFreeDiskSpace: { + if ( _reservedFreeDiskSpace == 0 ) + return; + + if ( _freeSize > _reservedFreeDiskSpace ) + return; + } + break; + case MCSLimitExpires: { + if ( _maxDiskAgeForCache == 0 ) + return; + } + break; + case MCSLimitCacheDiskSpace: { + if ( _maxDiskSizeForCache == 0 ) + return; + + // 获取已缓存的数据大小 + if ( _maxDiskSizeForCache > _cacheSize ) + return; + } + break; + } + + NSDictionary *> *protectedAssets = [self _allProtectedAssets]; + switch ( limit ) { + case MCSLimitNone: + break; + case MCSLimitCount: + case MCSLimitCacheDiskSpace: + case MCSLimitFreeDiskSpace: { + // 清理`lastTimeLimit`之前的 + // 清理一半 + NSTimeInterval timeLimit = NSDate.date.timeIntervalSince1970 - _lastTimeLimit; + NSInteger countLimit = (NSInteger)ceil(_cacheCountLimit != 0 ? (count - _cacheCountLimit * 0.5) : (count * 0.5)); + [MCSAssetManager.shared removeAssetsForLastReadingTime:timeLimit notIn:protectedAssets countLimit:countLimit]; + } + break; + case MCSLimitExpires: { + NSTimeInterval timeLimit = NSDate.date.timeIntervalSince1970 - _maxDiskAgeForCache; + [MCSAssetManager.shared removeAssetsForLastReadingTime:timeLimit notIn:protectedAssets]; + } + break; + } +} + +#pragma mark - mark + +- (NSDictionary *> *)_allProtectedAssets { + NSArray *protectedHLSAssets = [_sqlite3 queryDataForClass:MCSAssetCacheTmpProtectedItem.class resultColumns:@[@"asset"] conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(MCSAssetTypeHLS)] + ] orderBy:nil error:NULL]; + NSArray *protectedFILEAssets = [_sqlite3 queryDataForClass:MCSAssetCacheTmpProtectedItem.class resultColumns:@[@"asset"] conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"assetType" value:@(MCSAssetTypeFILE)] + ] orderBy:nil error:NULL]; + + NSMutableDictionary *> *protectedAssets = nil; + if ( protectedHLSAssets.count != 0 || protectedFILEAssets.count != 0 ) { + protectedAssets = NSMutableDictionary.dictionary; + } + + if ( protectedHLSAssets.count != 0 ) { + NSArray *rootAssets = SJFoundationExtendedValuesForKey(@"asset", protectedHLSAssets); + NSMutableArray *array = rootAssets.mutableCopy; + for ( NSNumber *root in rootAssets ) { + HLSAsset *asset = [MCSAssetManager.shared assetForAssetId:root.integerValue type:MCSAssetTypeHLS]; + NSArray *subAssets = asset.subAssets; + if ( subAssets != nil ) { + for ( HLSAsset *subAsset in subAssets ) { + [array addObject:@(subAsset.id)]; + } + } + } + protectedAssets[@(MCSAssetTypeHLS)] = array.copy; + } + + if ( protectedFILEAssets.count != 0 ) { + protectedAssets[@(MCSAssetTypeFILE)] = SJFoundationExtendedValuesForKey(@"asset", protectedFILEAssets); + } + return protectedAssets.copy; +} + +@end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.h index d6362cd00..e6f512623 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.h @@ -23,4 +23,7 @@ FOUNDATION_EXPORT NSString *const HLS_SUFFIX_AES_KEY; FOUNDATION_EXPORT NSInteger const MCS_RESPONSE_CODE_OK; FOUNDATION_EXPORT NSInteger const MCS_RESPONSE_CODE_PARTIAL_CONTENT; FOUNDATION_EXPORT NSInteger const MCS_RESPONSE_CODE_BAD; + +FOUNDATION_EXPORT NSString *const kReadwriteCount; +FOUNDATION_EXPORT NSString *const kLength; NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.m index c9bccdaea..4ed1b71b7 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSConsts.m @@ -21,3 +21,6 @@ NSInteger const MCS_RESPONSE_CODE_OK = 200; NSInteger const MCS_RESPONSE_CODE_PARTIAL_CONTENT = 206; NSInteger const MCS_RESPONSE_CODE_BAD = 400; + +NSString *const kReadwriteCount = @"readwriteCount"; +NSString *const kLength = @"length"; diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.h new file mode 100644 index 000000000..405500639 --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.h @@ -0,0 +1,18 @@ +// +// MCSDatabase.h +// SJMediaCacheServer +// +// Created by BD on 2021/3/20. +// + +#import +#import +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN +FOUNDATION_EXPORT SJSQLite3 * +MCSDatabase(void); +NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.m new file mode 100644 index 000000000..3c613e02b --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSDatabase.m @@ -0,0 +1,19 @@ +// +// MCSDatabase.m +// SJMediaCacheServer +// +// Created by BD on 2021/3/20. +// + +#import "MCSDatabase.h" +#import "MCSRootDirectory.h" + +SJSQLite3 * +MCSDatabase(void) { + static SJSQLite3 *sqlite3; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sqlite3 = [SJSQLite3.alloc initWithDatabasePath:[MCSRootDirectory databasePath]]; + }); + return sqlite3; +} diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSInterfaces.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSInterfaces.h index d39a0ca90..2534b8963 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSInterfaces.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSInterfaces.h @@ -49,6 +49,7 @@ NS_ASSUME_NONNULL_BEGIN @end + @protocol MCSReadwriteReference @property (nonatomic, readonly) NSInteger readwriteCount; // kvo @@ -81,7 +82,6 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - @protocol MCSAssetReader -- (instancetype)initWithAsset:(id)asset request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority readDataDecoder:(NSData *(^_Nullable)(NSURLRequest *request, NSUInteger offset, NSData *data))readDataDecoder delegate:(id)delegate; - (void)prepare; @property (nonatomic, copy, readonly, nullable) NSData *(^readDataDecoder)(NSURLRequest *request, NSUInteger offset, NSData *data); @@ -110,6 +110,32 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) long long length; - (void)didWriteDataWithLength:(NSUInteger)length; @end + + +#pragma mark - Download + +@protocol MCSDownloadResponse +@property (nonatomic, readonly) NSInteger statusCode; +@property (nonatomic, copy, readonly) NSString *pathExtension; +@property (nonatomic, copy, readonly) NSURL *URL; +@end + +@protocol MCSDownloadTask +- (void)cancel; +@end + +@protocol MCSDownloadTaskDelegate +- (void)downloadTask:(id)task didReceiveResponse:(id)response; +- (void)downloadTask:(id)task didReceiveData:(NSData *)data; +- (void)downloadTask:(id)task didCompleteWithError:(NSError *)error; +- (void)downloadTask:(id)task willPerformHTTPRedirectionWithNewRequest:(NSURLRequest *)request; +@end + +@protocol MCSDownloader +- (nullable id)downloadWithRequest:(NSURLRequest *)request priority:(float)priority delegate:(id)delegate; +- (void)cancelAllDownloadTasks; +@end + NS_ASSUME_NONNULL_END #endif /* MCSInterfaces_h */ diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.h index ad73d1ff7..58864feaf 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.h @@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MCSRootDirectory : NSObject @property (class, readonly) NSString *path; @property (class, readonly) unsigned long long size; +@property (class, readonly) unsigned long long databaseSize; + (NSString *)assetPathForFilename:(NSString *)filename; + (NSString *)databasePath; @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.m index 81488225a..d99139fe4 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSRootDirectory.m @@ -5,8 +5,7 @@ // Created by BlueDancer on 2020/11/26. // -#import "MCSRootDirectory.h" -#import +#import "MCSRootDirectory.h" #import "NSFileManager+MCS.h" @implementation MCSRootDirectory @@ -15,13 +14,7 @@ + (void)initialize { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ mcs_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"com.SJMediaCacheServer.cache"]; - if ( ![NSFileManager.defaultManager fileExistsAtPath:mcs_path] ) { - [NSFileManager.defaultManager createDirectoryAtPath:mcs_path withIntermediateDirectories:YES attributes:nil error:NULL]; - const char *filePath = [mcs_path fileSystemRepresentation]; - const char *attrName = "com.apple.MobileBackup"; - u_int8_t attrValue = 1; - setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); - } + [NSFileManager.defaultManager mcs_createDirectoryAtPath:mcs_path backupable:NO]; }); } @@ -33,6 +26,10 @@ + (unsigned long long)size { return [NSFileManager.defaultManager mcs_directorySizeAtPath:mcs_path]; } ++ (unsigned long long)databaseSize { + return [NSFileManager.defaultManager mcs_fileSizeAtPath:self.databasePath]; +} + + (NSString *)assetPathForFilename:(NSString *)filename { return [mcs_path stringByAppendingPathComponent:filename]; } diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.h index 21007a805..7320c1b46 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.h @@ -22,9 +22,11 @@ NS_ASSUME_NONNULL_BEGIN - (NSString *)assetNameForURL:(NSURL *)URL; - (MCSAssetType)assetTypeForURL:(NSURL *)URL; - +- (MCSDataType)dataTypeForProxyURL:(NSURL *)proxyURL; - (NSString *)nameWithUrl:(NSString *)url suffix:(NSString *)suffix; + +- (NSURL *)proxyURLWithRelativePath:(NSString *)path inAsset:(NSString *)assetName; @end @@ -37,5 +39,6 @@ NS_ASSUME_NONNULL_BEGIN @interface NSURL (MCSExtended) - (NSURL *)mcs_URLByAppendingPathComponent:(NSString *)pathComponent; +- (NSURL *)mcs_URLByDeletingLastPathComponentAndQuery; @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.m index 3aac5bba7..18c8a55b7 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSURL.m @@ -61,6 +61,10 @@ + (instancetype)shared { return instance; } +- (NSString *)proxyPath { + return mcsproxy; +} + - (NSURL *)proxyURLWithURL:(NSURL *)URL { NSAssert(_serverURL != nil, @"The serverURL can't be nil!"); @@ -99,7 +103,7 @@ - (NSString *)assetNameForURL:(NSURL *)URL { // 包含 mcsproxy 为 HLS 内部资源的请求, 此处返回path后面资源的名字 if ( [url containsString:mcsproxy] ) { // format: mcsproxy/asset/name.extension?url=base64EncodedUrl - return url.stringByDeletingLastPathComponent.lastPathComponent; + return URL.path.stringByDeletingLastPathComponent.lastPathComponent; } else { // 不包含 mcsproxy 时, 将代理URL转换为原始的URL @@ -119,6 +123,20 @@ - (MCSAssetType)assetTypeForURL:(NSURL *)URL { [URL.path containsString:HLS_SUFFIX_AES_KEY] ? MCSAssetTypeHLS : MCSAssetTypeFILE; } +- (MCSDataType)dataTypeForProxyURL:(NSURL *)proxyURL { + NSString *last = proxyURL.lastPathComponent; + if ( [last containsString:HLS_SUFFIX_INDEX] ) + return MCSDataTypeHLSPlaylist; + + if ( [last containsString:HLS_SUFFIX_AES_KEY] ) + return MCSDataTypeHLSAESKey; + + if ( [last containsString:HLS_SUFFIX_TS] ) + return MCSDataTypeHLSTs; + + return MCSDataTypeFILE; +} + - (NSString *)nameWithUrl:(NSString *)url suffix:(NSString *)suffix { NSString *filename = url.mcs_fname; // 添加扩展名 @@ -127,6 +145,11 @@ - (NSString *)nameWithUrl:(NSString *)url suffix:(NSString *)suffix { return filename; } +- (NSURL *)proxyURLWithRelativePath:(NSString *)path inAsset:(NSString *)assetName { + // format: mcsproxy/asset/path + return [_serverURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@/%@/%@", mcsproxy, assetName, path]]; +} + - (NSString *)encodeUrl:(NSString *)url { return [[url dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0]; } @@ -169,7 +192,17 @@ - (NSURL *)mcs_URLByAppendingPathComponent:(NSString *)pathComponent { NSString *url = self.absoluteString; while ( [url hasSuffix:@"/"] ) url = [url substringToIndex:url.length - 1]; NSString *path = pathComponent; - while ( [path hasSuffix:@"/"] ) path = [path substringFromIndex:1]; + while ( [path hasPrefix:@"/"] ) path = [path substringFromIndex:1]; return [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", url, path]]; } + +- (NSURL *)mcs_URLByDeletingLastPathComponentAndQuery { + NSString *query = self.query; + if ( query.length != 0 ) { + NSString *absoluteString = self.absoluteString; + NSString *url = [absoluteString substringToIndex:absoluteString.length - query.length - 1]; + return [NSURL URLWithString:url].URLByDeletingLastPathComponent; + } + return self.URLByDeletingLastPathComponent; +} @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.h index 2b54f981c..d7f8b8c78 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.h @@ -92,4 +92,8 @@ __mcs_dispatch_queue_create(const char *_Nullable label, dispatch_queue_attr_t _ #else #define mcs_dispatch_queue_create(__label__, __attr__) dispatch_queue_create(__label__, __attr__) #endif + + +FOUNDATION_EXPORT NSArray *_Nullable +MCSAllHashTableObjects(NSHashTable *table); NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.m index ec00aaf4d..df2b0849b 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/MCSUtils.m @@ -295,3 +295,9 @@ o Other valid (but not canonical) specifications of the second 500 return queue; } #endif + + +NSArray *_Nullable +MCSAllHashTableObjects(NSHashTable *table) { + return table.count != 0 ? NSAllHashTableObjects(table) : nil; +} diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.h index 11b1c0ec4..75920aa66 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.h @@ -17,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN - (BOOL)mcs_seekToOffset:(NSUInteger)offset error:(out NSError **)error; +- (BOOL)mcs_seekToEndReturningOffset:(out unsigned long long *_Nullable)offsetInFile error:(out NSError **)error; + - (nullable NSData *)mcs_readDataUpToLength:(NSUInteger)length error:(out NSError **)error; - (BOOL)mcs_writeData:(NSData *)data error:(out NSError **)error; diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.m index 2ed71cedb..6da9ac9df 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileHandle+MCS.m @@ -39,7 +39,7 @@ + (nullable instancetype)mcs_fileHandleForWritingToURL:(NSURL *)url error:(out N - (BOOL)mcs_seekToOffset:(NSUInteger)offset error:(out NSError **)outError { NSError *error = nil; BOOL result = NO; - if ( @available(iOS 13.0, *) ) { + if ( @available(iOS 13.0, tvOS 13.0, *) ) { result = [self seekToOffset:offset error:&error]; } else { @@ -60,10 +60,38 @@ - (BOOL)mcs_seekToOffset:(NSUInteger)offset error:(out NSError **)outError { return result; } +- (BOOL)mcs_seekToEndReturningOffset:(out unsigned long long *_Nullable)outOffsetInFile error:(out NSError **)outError { + NSError *error = nil; + unsigned long long offsetInFile = 0; + BOOL result = NO; + if ( @available(iOS 13.0, tvOS 13.0, *) ) { + result = [self seekToEndReturningOffset:&offsetInFile error:&error]; + } + else { + @try { + offsetInFile = [self seekToEndOfFile]; + result = YES; + } @catch (NSException *exception) { + error = [NSError mcs_errorWithCode:MCSExceptionError userInfo:@{ + MCSErrorUserInfoExceptionKey : exception + }]; + } + } + + if ( error != nil && outError != NULL ) *outError = [NSError mcs_errorWithCode:MCSFileError userInfo:@{ + MCSErrorUserInfoErrorKey : error, + MCSErrorUserInfoReasonKey : @"文件跳转失败!" + }]; + + if ( error == nil && outOffsetInFile != NULL ) + *outOffsetInFile = offsetInFile; + return result; +} + - (nullable NSData *)mcs_readDataUpToLength:(NSUInteger)length error:(out NSError **)outError { NSError *error = nil; NSData *data = nil; - if ( @available(iOS 13.0, *) ) { + if ( @available(iOS 13.0, tvOS 13.0, *) ) { data = [self readDataUpToLength:length error:&error]; } else { @@ -85,7 +113,7 @@ - (nullable NSData *)mcs_readDataUpToLength:(NSUInteger)length error:(out NSErro - (BOOL)mcs_writeData:(NSData *)data error:(out NSError **)outError { NSError *error = nil; BOOL result = NO; - if ( @available(iOS 13.0, *) ) { + if ( @available(iOS 13.0, tvOS 13.0, *) ) { result = [self writeData:data error:&error]; } else { @@ -133,7 +161,7 @@ - (BOOL)mcs_writeData:(NSData *)data error:(out NSError **)outError { - (BOOL)mcs_synchronizeAndReturnError:(out NSError **)outError { NSError *error = nil; BOOL result = NO; - if ( @available(iOS 13.0, *) ) { + if ( @available(iOS 13.0, tvOS 13.0, *) ) { result = [self synchronizeAndReturnError:&error]; } else { @@ -157,7 +185,7 @@ - (BOOL)mcs_synchronizeAndReturnError:(out NSError **)outError { - (BOOL)mcs_closeAndReturnError:(out NSError **)outError { NSError *error = nil; BOOL result = NO; - if ( @available(iOS 13.0, *) ) { + if ( @available(iOS 13.0, tvOS 13.0, *) ) { result = [self closeAndReturnError:&error]; } else { diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.h index 4466066d7..aa253f622 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.h @@ -16,6 +16,9 @@ NS_ASSUME_NONNULL_BEGIN - (unsigned long long)mcs_directorySizeAtPath:(NSString *)path; - (unsigned long long)mcs_freeDiskSpace; + +- (void)mcs_createDirectoryAtPath:(NSString *)path backupable:(BOOL)backupable; + @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.m index 86d7af6d6..26ed89760 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Common/NSFileManager+MCS.m @@ -5,7 +5,7 @@ // Created by BlueDancer on 2020/11/26. // -#import "NSFileManager+MCS.h" +#import "NSFileManager+MCS.h" @implementation NSFileManager (MCS) @@ -26,4 +26,19 @@ - (unsigned long long)mcs_freeDiskSpace { return [[self attributesOfFileSystemForPath:NSHomeDirectory() error:NULL][NSFileSystemFreeSize] unsignedLongLongValue]; } +- (void)mcs_createDirectoryAtPath:(NSString *)path backupable:(BOOL)backupable { + if ( ![NSFileManager.defaultManager fileExistsAtPath:path] ) { + [NSFileManager.defaultManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:NULL]; + if ( !backupable ) { + NSURL *fileURL = [NSURL fileURLWithPath:path]; + NSError *error = nil; + [fileURL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:&error]; + if ( error != nil ) { +#ifdef DEBUG + NSLog(@"mcs_error: %@", error); +#endif + } + } + } +} @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.h index 4a93852b6..eaf115afa 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.h @@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MCSContents : NSObject -+ (void)request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority willPerformHTTPRedirection:(void(^_Nullable)(NSHTTPURLResponse *response, NSURLRequest *newRequest))block completed:(void(^)(NSData *_Nullable data, NSError *_Nullable error))completionHandler; ++ (void)request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority willPerformHTTPRedirection:(void(^_Nullable)(NSURLRequest *newRequest))block completed:(void(^)(NSData *_Nullable data, NSError *_Nullable error))completionHandler; @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.m index 1da710ab4..edc50ebe4 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSContents.m @@ -11,10 +11,10 @@ @implementation MCSContents { dispatch_semaphore_t _semaphore; NSMutableData *_m; NSError *_error; - void(^_willPerformHTTPRedirection)(NSHTTPURLResponse *response, NSURLRequest *newRequest); + void(^_willPerformHTTPRedirection)(NSURLRequest *newRequest); } -+ (void)request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority willPerformHTTPRedirection:(void(^_Nullable)(NSHTTPURLResponse *response, NSURLRequest *newRequest))block completed:(void(^)(NSData *_Nullable data, NSError *_Nullable error))completionHandler { ++ (void)request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority willPerformHTTPRedirection:(void(^_Nullable)(NSURLRequest *newRequest))block completed:(void(^)(NSData *_Nullable data, NSError *_Nullable error))completionHandler { dispatch_async(dispatch_get_global_queue(0, 0), ^{ @autoreleasepool { NSError *error = nil; @@ -24,12 +24,12 @@ + (void)request:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPr }); } -+ (NSData *)dataWithContentsOfRequest:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority error:(NSError **)error willPerformHTTPRedirection:(void(^_Nullable)(NSHTTPURLResponse *response, NSURLRequest *newRequest))block { ++ (NSData *)dataWithContentsOfRequest:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority error:(NSError **)error willPerformHTTPRedirection:(void(^_Nullable)(NSURLRequest *newRequest))block { MCSContents *contents = [MCSContents.alloc initWithContentsOfRequest:request networkTaskPriority:networkTaskPriority error:error willPerformHTTPRedirection:block]; return contents != nil ? contents->_m : nil; } -- (instancetype)initWithContentsOfRequest:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority error:(NSError **)error willPerformHTTPRedirection:(void(^)(NSHTTPURLResponse *response, NSURLRequest *newRequest))block { +- (instancetype)initWithContentsOfRequest:(NSURLRequest *)request networkTaskPriority:(float)networkTaskPriority error:(NSError **)error willPerformHTTPRedirection:(void(^)(NSURLRequest *newRequest))block { self = [super init]; if ( self ) { _willPerformHTTPRedirection = block; @@ -42,17 +42,17 @@ - (instancetype)initWithContentsOfRequest:(NSURLRequest *)request networkTaskPri return self; } -- (void)downloadTask:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request { - if ( _willPerformHTTPRedirection != nil ) _willPerformHTTPRedirection(response, request); +- (void)downloadTask:(id)task willPerformHTTPRedirectionWithNewRequest:(NSURLRequest *)request { + if ( _willPerformHTTPRedirection != nil ) _willPerformHTTPRedirection(request); } -- (void)downloadTask:(NSURLSessionTask *)task didReceiveResponse:(NSURLResponse *)response { } +- (void)downloadTask:(id)task didReceiveResponse:(id)response { } -- (void)downloadTask:(NSURLSessionTask *)task didReceiveData:(NSData *)data { +- (void)downloadTask:(id)task didReceiveData:(NSData *)data { [_m appendData:data]; } -- (void)downloadTask:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { +- (void)downloadTask:(id)task didCompleteWithError:(NSError *)error { _error = error; dispatch_semaphore_signal(_semaphore); } diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.h index 22e40df63..28d1b4d36 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.h @@ -6,20 +6,23 @@ // Copyright © 2020 changsanjiang@gmail.com. All rights reserved. // -#import -@protocol MCSDownloadTaskDelegate; +#import "MCSInterfaces.h" +#import "MCSResponse.h" + NS_ASSUME_NONNULL_BEGIN -@interface MCSDownload : NSObject +@interface MCSDownload : NSObject + (instancetype)shared; @property (nonatomic) NSTimeInterval timeoutInterval; @property (nonatomic, copy, nullable) NSMutableURLRequest *_Nullable(^requestHandler)(NSMutableURLRequest *request); -- (nullable NSURLSessionTask *)downloadWithRequest:(NSURLRequest *)request priority:(float)priority delegate:(id)delegate; +- (nullable id)downloadWithRequest:(NSURLRequest *)request priority:(float)priority delegate:(id)delegate; @property (nonatomic, copy, nullable) NSData *(^dataEncoder)(NSURLRequest *request, NSUInteger offset, NSData *data); +@property (nonatomic, copy, nullable) void(^errorCallback)(NSURLRequest *request, NSError *error); + - (void)cancelAllDownloadTasks; @property (nonatomic, readonly) NSInteger taskCount; @@ -28,10 +31,11 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; @end -@protocol MCSDownloadTaskDelegate -- (void)downloadTask:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request; -- (void)downloadTask:(NSURLSessionTask *)task didReceiveResponse:(NSURLResponse *)response; -- (void)downloadTask:(NSURLSessionTask *)task didReceiveData:(NSData *)data; -- (void)downloadTask:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error; + +@interface MCSDownloadResponse : MCSResponse +- (instancetype)initWithHTTPResponse:(NSHTTPURLResponse *)response; +@property (nonatomic, readonly) NSInteger statusCode; +@property (nonatomic, copy, readonly) NSString *pathExtension; +@property (nonatomic, copy, readonly) NSURL *URL; @end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.m index eb4e24f13..811e836ab 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Download/MCSDownload.m @@ -14,6 +14,10 @@ #import "MCSLogger.h" #import "NSURLRequest+MCS.h" +@interface NSURLSessionTask (MCSDownloadExtended) + +@end + static dispatch_queue_t mcs_queue; @interface MCSDownload () @@ -71,7 +75,7 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } -- (nullable NSURLSessionTask *)downloadWithRequest:(NSURLRequest *)requestParam priority:(float)priority delegate:(id)delegate { +- (nullable id)downloadWithRequest:(NSURLRequest *)requestParam priority:(float)priority delegate:(id)delegate { NSURLRequest *request = [self _requestWithParam:requestParam]; if ( request == nil ) return nil; @@ -114,7 +118,7 @@ - (NSInteger)taskCount { - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler { __auto_type delegate = [self _delegateForTask:task]; - [delegate downloadTask:task willPerformHTTPRedirection:response newRequest:request]; + [delegate downloadTask:task willPerformHTTPRedirectionWithNewRequest:request]; completionHandler(request); } @@ -142,7 +146,7 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task NSRange range1 = MCSRequestRange(MCSRequestGetContentRange(task.currentRequest.allHTTPHeaderFields)); NSRange range2 = MCSResponseRange(MCSResponseGetContentRange(res)); if ( !MCSNSRangeIsUndefined(range1) && !NSEqualRanges(range1, range2)) { - if ( !MCSNSRangeIsUndefined(range2) && NSMaxRange(range1) <= NSMaxRange(range2) ) { + if ( !MCSNSRangeIsUndefined(range2) && NSMaxRange(range2) <= NSMaxRange(range1) ) { error = [NSError mcs_errorWithCode:MCSInvalidResponseError userInfo:@{ MCSErrorUserInfoObjectKey : response, MCSErrorUserInfoReasonKey : [NSString stringWithFormat:@"响应无效: requestRange(%@), responseRange(%@) range无效!", NSStringFromRange(range1), NSStringFromRange(range2)] @@ -160,7 +164,7 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task id delegate = [self _delegateForTask:task]; if ( delegate != nil ) { - [delegate downloadTask:task didReceiveResponse:response]; + [delegate downloadTask:task didReceiveResponse:[MCSDownloadResponse.alloc initWithHTTPResponse:response]]; completionHandler(NSURLSessionResponseAllow); } } @@ -187,6 +191,10 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp __auto_type delegate = [self _delegateForTask:task]; [delegate downloadTask:task didCompleteWithError:error]; + if ( error != nil && error.code != NSUserCancelledError ) { + if ( _errorCallback != nil ) _errorCallback(task.originalRequest, error); + } + [self _setDelegate:nil forTask:task]; [self _setError:nil forTask:task]; } @@ -271,3 +279,27 @@ - (nullable NSError *)_errorForTask:(NSURLSessionTask *)task { return error; } @end + + +@implementation MCSDownloadResponse +- (instancetype)initWithHTTPResponse:(NSHTTPURLResponse *)response { + NSString *contentType = MCSResponseGetContentType(response); + if ( response.statusCode == MCS_RESPONSE_CODE_PARTIAL_CONTENT ) { + MCSResponseContentRange contentRange = MCSResponseGetContentRange(response); + NSUInteger totalLength = contentRange.totalLength; + NSRange range = MCSResponseRange(contentRange); + self = [super initWithTotalLength:totalLength range:range contentType:contentType]; + } + else { + NSUInteger totalLength = response.expectedContentLength != NSURLResponseUnknownLength ? response.expectedContentLength : MCSResponseGetContentLength(response); + self = [super initWithTotalLength:totalLength contentType:contentType]; + } + + if ( self ) { + _statusCode = response.statusCode; + _pathExtension = MCSSuggestedFilePathExtension(response); + _URL = response.URL; + } + return self; +} +@end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterDefines.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterDefines.h new file mode 100644 index 000000000..ce71b70f7 --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterDefines.h @@ -0,0 +1,68 @@ +// +// MCSAssetExporterDefines.h +// Pods +// +// Created by BD on 2021/3/20. +// + +#ifndef MCSAssetExporterDefines_h +#define MCSAssetExporterDefines_h + +#import +@protocol MCSAssetExporter, MCSAssetExportObserver, MCSAssetExporterManager; + +typedef NS_ENUM(NSUInteger, MCSAssetExportStatus) { + MCSAssetExportStatusUnknown, + MCSAssetExportStatusWaiting, + MCSAssetExportStatusExporting, + MCSAssetExportStatusFinished, + MCSAssetExportStatusFailed, + MCSAssetExportStatusSuspended, + MCSAssetExportStatusCancelled, +}; + +NS_ASSUME_NONNULL_BEGIN +@protocol MCSAssetExporterManager +- (void)registerObserver:(id)observer; +- (void)removeObserver:(id)observer; + +@property (nonatomic) NSInteger maxConcurrentExportCount; + +@property (nonatomic, strong, readonly, nullable) NSArray> *allExporters; + +- (nullable id)exportAssetWithURL:(NSURL *)URL; +- (void)removeAssetWithURL:(NSURL *)URL; +- (void)removeAllAssets; + +- (MCSAssetExportStatus)statusWithURL:(NSURL *)URL; +- (float)progressWithURL:(NSURL *)URL; +- (nullable NSURL *)playbackURLForExportedAssetWithURL:(NSURL *)URL; + +- (void)synchronizeForExporterWithAssetURL:(NSURL *)URL; +- (void)synchronize; +@end + +@protocol MCSAssetExporter +@property (nonatomic, strong, readonly) NSURL *URL; +@property (nonatomic, readonly) MCSAssetExportStatus status; +@property (nonatomic, readonly) float progress; +- (void)synchronize; // 同步进度(由于存在边播边缓存, 导出进度可能会发生变动) +- (void)resume; // 恢复 +- (void)suspend; // 暂停, 缓存文件不会被删除 +- (void)cancel; // 取消, 缓存可能会被资源管理器删除 + +@property (nonatomic, copy, nullable) void(^progressDidChangeExecuteBlock)(id exporter); +@property (nonatomic, copy, nullable) void(^statusDidChangeExecuteBlock)(id exporter); +@end + +@protocol MCSAssetExportObserver +@optional +- (void)exporter:(id)exporter statusDidChange:(MCSAssetExportStatus)status; +- (void)exporter:(id)exporter progressDidChange:(float)progress; +- (void)exporterManager:(id)manager didRemoveAssetWithURL:(NSURL *)URL; +- (void)exporterManagerDidRemoveAllAssets:(id)manager; +@end + + +NS_ASSUME_NONNULL_END +#endif /* MCSAssetExporterDefines_h */ diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.h new file mode 100644 index 000000000..2716b2adb --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.h @@ -0,0 +1,36 @@ +// +// MCSAssetExporterManager.h +// SJMediaCacheServer +// +// Created by BD on 2021/3/10. +// + +#import +#import "MCSInterfaces.h" +#import "MCSAssetExporterDefines.h" + +NS_ASSUME_NONNULL_BEGIN +@interface MCSAssetExporterManager : NSObject ++ (instancetype)shared; + +- (void)registerObserver:(id)observer; +- (void)removeObserver:(id)observer; + +@property (nonatomic) NSInteger maxConcurrentExportCount; + +@property (nonatomic, strong, readonly, nullable) NSArray> *allExporters; + +@property (nonatomic, readonly) UInt64 countOfBytesAllExportedAssets; + +- (nullable id)exportAssetWithURL:(NSURL *)URL; +- (void)removeAssetWithURL:(NSURL *)URL; +- (void)removeAllAssets; + +- (MCSAssetExportStatus)statusWithURL:(NSURL *)URL; +- (float)progressWithURL:(NSURL *)URL; +- (nullable NSURL *)playbackURLForExportedAssetWithURL:(NSURL *)URL; + +- (void)synchronizeForExporterWithAssetURL:(NSURL *)URL; +- (void)synchronize; +@end +NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.m new file mode 100644 index 000000000..81c04c534 --- /dev/null +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Export/MCSAssetExporterManager.m @@ -0,0 +1,770 @@ +// +// MCSAssetExporterManager.m +// SJMediaCacheServer +// +// Created by BD on 2021/3/10. +// + +#import "MCSAssetExporterManager.h" +#import "MCSAssetCacheManager.h" +#import "MCSAssetManager.h" +#import "MCSPrefetcherManager.h" +#import "NSFileManager+MCS.h" +#import "MCSDatabase.h" +#import "MCSURL.h" +#import "MCSUtils.h" +#import "FILEAsset.h" +#import "HLSAsset.h" + +static NSNotificationName const MCSAssetExporterProgressDidChangeNotification = @"MCSAssetExporterProgressDidChangeNotification"; +static NSNotificationName const MCSAssetExporterStatusDidChangeNotification = @"MCSAssetExporterStatusDidChangeNotification"; + +@interface MCSAssetExporter : NSObject +- (instancetype)initWithURLString:(NSString *)URLStr name:(NSString *)name type:(MCSAssetType)type; +@property (nonatomic, strong, readonly) NSURL *URL; +@property (nonatomic) MCSAssetExportStatus status; +@property (nonatomic) float progress; +- (void)synchronize; +- (void)resume; +- (void)suspend; +- (void)cancel; +- (void)willBeRemoved; +@end + +@interface MCSAssetExporter () { + dispatch_semaphore_t _semaphore; + id _task; +} +@property (nonatomic) NSInteger id; +@property (nonatomic, strong) NSString *name; // asset name +@property (nonatomic, strong) NSString *URLString; +@property (nonatomic) MCSAssetType type; +@end + +@implementation MCSAssetExporter +@synthesize URL = _URL; +@synthesize status = _status; +@synthesize progress = _progress; +@synthesize progressDidChangeExecuteBlock = _progressDidChangeExecuteBlock; +@synthesize statusDidChangeExecuteBlock = _statusDidChangeExecuteBlock; + +- (instancetype)initWithURLString:(NSString *)URLStr name:(NSString *)name type:(MCSAssetType)type { + self = [self init]; + if ( self ) { + _URLString = URLStr; + _name = name; + _type = type; + } + return self; +} + +- (instancetype)init { + self = [super init]; + if ( self ) { + _semaphore = dispatch_semaphore_create(1); + _status = MCSAssetExportStatusSuspended; + } + return self; +} + ++ (NSString *)sql_primaryKey { + return @"id"; +} + ++ (NSArray *)sql_autoincrementlist { + return @[self.sql_primaryKey]; +} + ++ (NSArray *)sql_blacklist { + return @[@"URL", @"progress"]; +} + +- (NSURL *)URL { + __block NSURL *URL = nil; + [self _lockInBlock:^{ + if ( _URL == nil ) + _URL = [NSURL URLWithString:_URLString]; + URL = _URL; + }]; + return URL; +} + +- (MCSAssetExportStatus)status { + __block MCSAssetExportStatus status; + [self _lockInBlock:^{ + status = _status; + }]; + return status; +} + +- (float)progress { + __block float progress = 0; + [self _lockInBlock:^{ + progress = _status == MCSAssetExportStatusFinished ? 1.0 : _progress; + }]; + return progress; +} + +- (void)synchronize { + __kindof id asset = [MCSAssetManager.shared assetWithName:_name type:_type]; + switch ( _type ) { + case MCSAssetTypeFILE: + [self _synchronizeForFILEAsset:asset]; + break; + case MCSAssetTypeHLS: + [self _synchronizeForHLSAsset:asset]; + break; + } +} + +- (void)resume { + __block BOOL isChanged = NO; + [self _lockInBlock:^{ + switch ( _status ) { + case MCSAssetExportStatusFinished: + case MCSAssetExportStatusWaiting: + case MCSAssetExportStatusExporting: + case MCSAssetExportStatusCancelled: + return; + case MCSAssetExportStatusUnknown: + case MCSAssetExportStatusFailed: + case MCSAssetExportStatusSuspended: { + if ( _URL == nil ) + _URL = [NSURL URLWithString:_URLString]; + if ( _task != nil ) + return; + + __weak typeof(self) _self = self; + _task = [MCSPrefetcherManager.shared prefetchWithURL:_URL progress:nil completed:^(NSError * _Nullable error) { + __strong typeof(_self) self = _self; + if ( self == nil ) return; + [self _prefetchTaskDidCompleteWithError:error]; + }]; + + _task.startedExecuteBlock = ^(id _Nonnull task) { + __strong typeof(_self) self = _self; + if ( self == nil ) return; + [self _prefetchTaskDidStart]; + }; + + _status = MCSAssetExportStatusWaiting; + isChanged = YES; + } + return; + } + }]; + if ( isChanged ) [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterStatusDidChangeNotification object:self]; +} + +- (void)suspend { + __block BOOL isChanged = NO; + [self _lockInBlock:^{ + switch ( _status ) { + case MCSAssetExportStatusFinished: + case MCSAssetExportStatusFailed: + case MCSAssetExportStatusCancelled: + case MCSAssetExportStatusSuspended: + return; + case MCSAssetExportStatusUnknown: + case MCSAssetExportStatusWaiting: + case MCSAssetExportStatusExporting: { + if ( _task != nil ) { + [_task cancel]; + _task = nil; + } + + _status = MCSAssetExportStatusSuspended; + isChanged = YES; + } + } + }]; + if ( isChanged ) [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterStatusDidChangeNotification object:self]; +} + +- (void)cancel { + __block BOOL isChanged = NO; + [self _lockInBlock:^{ + switch ( _status ) { + case MCSAssetExportStatusFinished: + case MCSAssetExportStatusCancelled: + return; + case MCSAssetExportStatusUnknown: + case MCSAssetExportStatusFailed: + case MCSAssetExportStatusSuspended: + case MCSAssetExportStatusWaiting: + case MCSAssetExportStatusExporting: { + if ( _task != nil ) { + [_task cancel]; + _task = nil; + } + + _status = MCSAssetExportStatusCancelled; + isChanged = YES; + } + } + }]; + if ( isChanged ) [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterStatusDidChangeNotification object:self]; +} + +- (void)willBeRemoved { + [self _lockInBlock:^{ + if ( _task != nil ) { + [_task cancel]; + _task = nil; + } + }]; +} + +#pragma mark - mark + +- (void)_syncProgress { + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + switch ( self->_status ) { + case MCSAssetExportStatusUnknown: + case MCSAssetExportStatusWaiting: + case MCSAssetExportStatusFailed: + case MCSAssetExportStatusSuspended: + case MCSAssetExportStatusCancelled: + case MCSAssetExportStatusFinished: + break; + case MCSAssetExportStatusExporting: { + [self synchronize]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self performSelector:@selector(_syncProgress) withObject:nil afterDelay:0.5 inModes:@[NSRunLoopCommonModes]]; + }); + } + break; + } + }); +} + +- (void)_prefetchTaskDidStart { + [self _lockInBlock:^{ + _status = MCSAssetExportStatusExporting; + }]; + [self _syncProgress]; + [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterStatusDidChangeNotification object:self]; +} + +- (void)_prefetchTaskDidCompleteWithError:(NSError *_Nullable)error { + [self synchronize]; + [self _lockInBlock:^{ + _status = error != nil ? MCSAssetExportStatusFailed : MCSAssetExportStatusFinished; + }]; + [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterStatusDidChangeNotification object:self]; +} + +- (void)_lockInBlock:(void(^NS_NOESCAPE)(void))task { + dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER); + task(); + dispatch_semaphore_signal(_semaphore); +} + +- (void)_synchronizeForFILEAsset:(FILEAsset *)asset { + __block BOOL isChanged = NO; + [self _lockInBlock:^{ + if ( _status == MCSAssetExportStatusFinished ) + return; + + float progress = _progress; + NSUInteger totalLength = asset.totalLength; + if ( totalLength != 0 ) { + NSMutableArray *contents = [asset.contents mutableCopy]; + [contents sortUsingComparator:^NSComparisonResult(FILEContent *obj1, FILEContent *obj2) { + NSRange range1 = NSMakeRange(obj1.offset, obj1.length); + NSRange range2 = NSMakeRange(obj2.offset, obj2.length); + if ( range1.location == range2.location ) { + if ( obj1.length == obj2.length ) + return NSOrderedSame; + return obj1.length > obj2.length ? NSOrderedAscending : NSOrderedDescending; + } + return range1.location < range2.location ? NSOrderedAscending : NSOrderedDescending; + }]; + + NSUInteger current = 0; + FILEContent *pre = nil; + for ( FILEContent *content in contents ) { + if ( pre == nil || pre.offset != content.offset ) { + current += content.length; + } + pre = content; + } + progress = current * 1.0 / totalLength; + } + isChanged = progress != _progress; + if ( isChanged ) _progress = progress; + }]; + + if ( isChanged ) [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterProgressDidChangeNotification object:self]; +} + +- (void)_synchronizeForHLSAsset:(HLSAsset *)asset { + __block BOOL isChanged = NO; + [self _lockInBlock:^{ + if ( _status == MCSAssetExportStatusFinished ) + return; + + float progress = _progress; + HLSParser *parser = asset.parser; + if ( parser != nil ) { + // 获取所有相关的asset, 计算进度 + NSMutableArray *allAssets = [NSMutableArray arrayWithObject:asset]; + NSArray *subAssets = asset.subAssets; + if ( subAssets != nil ) { + [allAssets addObjectsFromArray:subAssets]; + } + + float all = 0; + for ( HLSAsset *asset in allAssets ) { + all += [self _calculateProgressWithHLSAsset:asset]; + } + progress = all / allAssets.count; + } + + isChanged = progress != _progress; + if ( isChanged ) _progress = progress; + }]; + + if ( isChanged ) [NSNotificationCenter.defaultCenter postNotificationName:MCSAssetExporterProgressDidChangeNotification object:self]; +} + +- (float)_calculateProgressWithHLSAsset:(HLSAsset *)asset { + if ( asset.parser != nil && asset.tsCount == 0 ) + return 1.0f; + + if ( asset.TsContents.count != 0 ) { + NSMutableArray *contents = [asset.TsContents mutableCopy]; + [contents sortUsingComparator:^NSComparisonResult(HLSContentTs *obj1, HLSContentTs *obj2) { + if ( [obj1.name isEqualToString:obj2.name] && NSEqualRanges(obj1.range, obj2.range) ) { + if ( obj1.length == obj2.length ) + return NSOrderedSame; + return obj1.length > obj2.length ? NSOrderedAscending : NSOrderedDescending; + } + return NSOrderedSame; + }]; + + float progress = 0; + HLSContentTs *pre = nil; + for ( HLSContentTs *content in contents ) { + if ( pre == nil || !([content.name isEqualToString:pre.name] && NSEqualRanges(content.range, pre.range)) ) { + progress += content.length * 1.0 / content.range.length; + } + pre = content; + } + + return progress / asset.tsCount; + } + return 0.0f; +} +@end + + +@interface MCSAssetExporterManager () { + SJSQLite3 *_sqlite3; + NSHashTable> *_Nullable _observers; + dispatch_semaphore_t _semaphore; + NSMutableArray *_exporters; + + id _progressDidChangeToken; + id _statusDidChangeToken; +} +@end + +@implementation MCSAssetExporterManager ++ (instancetype)shared { + static id obj = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + obj = [[self alloc] init]; + }); + return obj; +} + +- (instancetype)init { + self = [super init]; + if ( self ) { + _semaphore = dispatch_semaphore_create(1); + _exporters = NSMutableArray.array; + + _sqlite3 = MCSDatabase(); + + __weak typeof(self) _self = self; + _progressDidChangeToken = [NSNotificationCenter.defaultCenter addObserverForName:MCSAssetExporterProgressDidChangeNotification object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + __strong typeof(_self) self = _self; + if ( self == nil ) return; + [self _progressDidChange:note.object]; + }); + }]; + _statusDidChangeToken = [NSNotificationCenter.defaultCenter addObserverForName:MCSAssetExporterStatusDidChangeNotification object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + __strong typeof(_self) self = _self; + if ( self == nil ) return; + [self _statusDidChange:note.object]; + }); + }]; + } + return self; +} + +- (void)dealloc { + [NSNotificationCenter.defaultCenter removeObserver:_progressDidChangeToken]; + [NSNotificationCenter.defaultCenter removeObserver:_statusDidChangeToken]; +} + +- (void)setMaxConcurrentExportCount:(NSInteger)maxConcurrentExportCount { + MCSPrefetcherManager.shared.maxConcurrentPrefetchCount = maxConcurrentExportCount; +} + +- (NSInteger)maxConcurrentExportCount { + return MCSPrefetcherManager.shared.maxConcurrentPrefetchCount; +} + +- (nullable NSArray> *)allExporters { + __block NSArray> *allExporters = nil; + [self _lockInBlock:^{ + // memory + NSMutableArray *exporterIdsInMemory = _exporters.count != 0 ? ([NSMutableArray arrayWithCapacity:_exporters.count]) : nil; + for ( MCSAssetExporter *exporter in _exporters ) { + [exporterIdsInMemory addObject:@(exporter.id)]; + } + + // disk + NSArray *conditions = nil; + if ( exporterIdsInMemory.count != 0 ) { + conditions = @[[SJSQLite3Condition conditionWithColumn:@"id" notIn:exporterIdsInMemory]]; + } + NSArray *exportersInDisk = [_sqlite3 objectsForClass:MCSAssetExporter.class conditions:conditions orderBy:nil error:NULL]; + if ( exportersInDisk.count != 0 ) { + [_exporters addObjectsFromArray:exportersInDisk]; + } + + // results + if ( _exporters.count != 0 ) { + allExporters = _exporters.copy; + } + }]; + return allExporters; +} + +- (UInt64)countOfBytesAllExportedAssets { + return MCSAssetCacheManager.shared.countOfBytesAllCaches - MCSAssetCacheManager.shared.countOfBytesRemovableCaches; +} + +/// 注册观察者 +/// +/// 导出的相关回调会通知该观察者. +/// +- (void)registerObserver:(id)observer { + if ( observer == nil ) + return; + [self _lockInBlock:^{ + if ( _observers == nil ) { + _observers = NSHashTable.weakObjectsHashTable; + } + [_observers addObject:observer]; + }]; +} + +/// 移除观察 +/// +/// 当不需要监听时, 可以调用该方法移除监听. +/// +/// 监听是自动移除的, 在观察者释放时并不需要显示的调用该方法 +/// +- (void)removeObserver:(id)observer { + if ( observer == nil ) + return; + [self _lockInBlock:^{ + [_observers removeObject:observer]; + }]; +} + +/// 添加一个导出任务 +/// +/// \code +/// id exporter = [session exportAssetWithURL:URL]; +/// // 开启 +/// [exporter resume]; +/// \endcode +/// +- (nullable id)exportAssetWithURL:(NSURL *)URL { + if ( URL.absoluteString.length == 0 ) + return nil; + __block MCSAssetExporter *exporter = nil; + [self _lockInBlock:^{ + exporter = [self _exportAssetWithURL:URL]; + }]; + [exporter synchronize]; + return exporter; +} + +/// 删除导出的资源 +/// +- (void)removeAssetWithURL:(NSURL *)URL { + if ( URL.absoluteString.length == 0 ) + return; + + __block BOOL isRemoved = NO; + [self _lockInBlock:^{ + NSString *name = [MCSURL.shared assetNameForURL:URL]; + MCSAssetExporter *_Nullable exporter = [self _exporterInCachesForName:name]; + if ( exporter != nil ) { + [exporter willBeRemoved]; + [_exporters removeObject:exporter]; + [_sqlite3 removeObjectForClass:MCSAssetExporter.class primaryKeyValue:@(exporter.id) error:NULL]; + [MCSAssetCacheManager.shared setProtected:NO forCacheWithURL:URL]; + [MCSAssetCacheManager.shared removeCacheForURL:URL]; + isRemoved = YES; + } + }]; + + if ( isRemoved ) { + for ( id observer in MCSAllHashTableObjects(_observers) ) { + if ( [observer respondsToSelector:@selector(exporterManager:didRemoveAssetWithURL:)] ) { + [observer exporterManager:self didRemoveAssetWithURL:URL]; + } + } + } +} + +/// 删除全部 +/// +- (void)removeAllAssets { + __block BOOL isRemoved = NO; + [self _lockInBlock:^{ + NSMutableArray *exporterIdsInMemory = _exporters.count != 0 ? ([NSMutableArray arrayWithCapacity:_exporters.count]) : nil; + for ( MCSAssetExporter *exporter in _exporters ) { + [exporterIdsInMemory addObject:@(exporter.id)]; + } + + NSArray *conditions = nil; + if ( exporterIdsInMemory.count != 0 ) { + conditions = @[[SJSQLite3Condition conditionWithColumn:@"id" notIn:exporterIdsInMemory]]; + } + NSArray *exportersInDisk = [_sqlite3 objectsForClass:MCSAssetExporter.class conditions:conditions orderBy:nil error:NULL]; + NSArray *exportersInMemory = _exporters; + + NSMutableArray *allExporters = [NSMutableArray arrayWithCapacity:exportersInDisk.count + exportersInMemory.count]; + if ( exportersInDisk.count != 0 ) { + [allExporters addObjectsFromArray:exportersInDisk]; + } + + if ( exportersInMemory.count != 0 ) { + [allExporters addObjectsFromArray:exportersInMemory]; + } + + if ( allExporters.count != 0 ) { + [_exporters removeAllObjects]; + [_sqlite3 removeAllObjectsForClass:MCSAssetExporter.class error:NULL]; + for ( MCSAssetExporter *exporter in allExporters ) { + [exporter willBeRemoved]; + id asset = [MCSAssetManager.shared assetWithName:exporter.name type:exporter.type]; + [MCSAssetCacheManager.shared setProtected:NO forCacheWithAsset:asset]; + [MCSAssetCacheManager.shared removeCacheForAsset:asset]; + } + isRemoved = YES; + } + }]; + + if ( isRemoved ) { + for ( id observer in MCSAllHashTableObjects(_observers) ) { + if ( [observer respondsToSelector:@selector(exporterManagerDidRemoveAllAssets:)] ) { + [observer exporterManagerDidRemoveAllAssets:self]; + } + } + } +} + +/// 查询状态 +/// +- (MCSAssetExportStatus)statusWithURL:(NSURL *)URL { + __block MCSAssetExportStatus status = MCSAssetExportStatusUnknown; + if ( URL.absoluteString.length != 0 ) { + [self _lockInBlock:^{ + NSString *name = [MCSURL.shared assetNameForURL:URL]; + MCSAssetExporter *exporter = [self _exporterInCachesForName:name]; + status = exporter.status; + }]; + } + return status; +} + +/// 查询进度 +/// +- (float)progressWithURL:(NSURL *)URL { + __block float progress = 0.0f; + if ( URL.absoluteString.length != 0 ) { + [self _lockInBlock:^{ + NSString *name = [MCSURL.shared assetNameForURL:URL]; + MCSAssetExporter *exporter = [self _exporterInCachesForName:name]; + progress = exporter.progress; + }]; + } + return progress; +} + +/// 获取已导出的资源的播放地址 +/// +- (nullable NSURL *)playbackURLForExportedAssetWithURL:(NSURL *)URL { + if ( URL.absoluteString.length == 0 ) + return nil; + + __block NSURL *playbackURL = nil; + [self _lockInBlock:^{ + NSString *name = [MCSURL.shared assetNameForURL:URL]; + MCSAssetExporter *exporter = [self _exporterInCachesForName:name]; + if ( exporter.status == MCSAssetExportStatusFinished ) { + __kindof id a = [MCSAssetManager.shared assetWithName:exporter.name type:exporter.type]; + switch ( a.type ) { + case MCSAssetTypeFILE: { + FILEAsset *asset = a; + FILEContent *content = asset.contents.firstObject; + playbackURL = [MCSURL.shared proxyURLWithRelativePath:[asset contentFileRelativePathForFilename:content.filename] inAsset:asset.name]; + } + break; + case MCSAssetTypeHLS: { + HLSAsset *asset = a; + playbackURL = [MCSURL.shared proxyURLWithRelativePath:asset.indexFileRelativePath inAsset:asset.name]; + } + break; + } + } + }]; + return playbackURL; +} + +/// 同步缓存, 更新缓存进度 +/// +- (void)synchronizeForExporterWithAssetURL:(NSURL *)URL { + if ( URL.absoluteString.length != 0 ) { + [self _lockInBlock:^{ + NSString *name = [MCSURL.shared assetNameForURL:URL]; + MCSAssetExporter *exporter = [self _exporterInCachesForName:name]; + [exporter synchronize]; + }]; + } +} + +- (void)synchronize { + [self _lockInBlock:^{ + for ( MCSAssetExporter *exporter in _exporters ) { + [exporter synchronize]; + } + }]; +} + +#pragma mark - mark + +- (void)_lockInBlock:(void(^NS_NOESCAPE)(void))task { + dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER); + task(); + dispatch_semaphore_signal(_semaphore); +} + +- (MCSAssetExporter *)_exportAssetWithURL:(NSURL *)URL { + NSString *name = [MCSURL.shared assetNameForURL:URL]; + MCSAssetExporter *exporter = [self _exporterInCachesForName:name]; + if ( exporter == nil ) { + MCSAssetType type = [MCSURL.shared assetTypeForURL:URL]; + exporter = [MCSAssetExporter.alloc initWithURLString:URL.absoluteString name:name type:type]; + [MCSAssetCacheManager.shared setProtected:YES forCacheWithURL:URL]; + [_sqlite3 save:exporter error:NULL]; + [_exporters addObject:exporter]; + } + return exporter; +} + +- (nullable MCSAssetExporter *)_exporterInCachesForName:(NSString *)name { + // memory + MCSAssetExporter *exporter = [self _exporterInMemoryForName:name]; + if ( exporter == nil ) { + // disk + exporter = [_sqlite3 objectsForClass:MCSAssetExporter.class conditions:@[ + [SJSQLite3Condition conditionWithColumn:@"name" value:name] + ] orderBy:nil error:NULL].firstObject; + // add into memory + if ( exporter != nil ) { + [_exporters addObject:exporter]; + } + } + return exporter; +} + +- (nullable MCSAssetExporter *)_exporterInMemoryForName:(NSString *)name { + for ( MCSAssetExporter *exporter in _exporters ) { + if ( [exporter.name isEqualToString:name] ) + return exporter; + } + return nil; +} + +- (void)_statusDidChange:(MCSAssetExporter *)exporter { + MCSAssetExportStatus status = exporter.status; + if ( status == MCSAssetExportStatusCancelled ) { + [self _lockInBlock:^{ + id asset = [MCSAssetManager.shared assetWithName:exporter.name type:exporter.type]; + [MCSAssetCacheManager.shared setProtected:NO forCacheWithAsset:asset]; + [_exporters removeObject:exporter]; + [_sqlite3 removeObjectForClass:MCSAssetExporter.class primaryKeyValue:@(exporter.id) error:NULL]; + }]; + } + else { + /// 将状态同步数据库 + /// + /// 状态处于 Waiting, Exporting 时不需要同步至数据库, 仅维护 expoter 在内存中的状态即可. + /// 当再次启动App时, 状态将在 Suspended, Failed, Finished 之间. + /// + switch ( exporter.status ) { + case MCSAssetExportStatusFinished: + case MCSAssetExportStatusFailed: + case MCSAssetExportStatusSuspended: + [_sqlite3 updateObjects:@[exporter] forKeys:@[@"status"] error:NULL]; + break; + case MCSAssetExportStatusUnknown: + case MCSAssetExportStatusCancelled: + case MCSAssetExportStatusWaiting: + case MCSAssetExportStatusExporting: + break; + } + } + dispatch_async(dispatch_get_main_queue(), ^{ + if ( exporter.statusDidChangeExecuteBlock != nil ) { + exporter.statusDidChangeExecuteBlock(exporter); + } + + for ( id observer in MCSAllHashTableObjects(self->_observers) ) { + if ( [observer respondsToSelector:@selector(exporter:statusDidChange:)] ) { + [observer exporter:exporter statusDidChange:status]; + } + } + }); +} + +- (void)_progressDidChange:(MCSAssetExporter *)exporter { + dispatch_async(dispatch_get_main_queue(), ^{ + if ( exporter.progressDidChangeExecuteBlock != nil ) { + exporter.progressDidChangeExecuteBlock(exporter); + } + + for ( id observer in MCSAllHashTableObjects(self->_observers) ) { + if ( [observer respondsToSelector:@selector(exporter:progressDidChange:)] ) { + [observer exporter:exporter progressDidChange:exporter.progress]; + } + } + }); +} +@end + +/* + v2: + - 需要对缓存管理进行改造 + - asset增加常驻标记 + - removeAllCaches 将不可用 + - 需要重新提供删除相关的方法 + - 需要提供常驻资源占用的缓存 + - 需要提供正常请求占用的缓存 + - 增加syncFromCache方法, 用于同步进度 + - 增加自己的状态 + */ diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.m index 3c21223e9..2faa8bdf2 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/FILEPrefetcher.m @@ -50,7 +50,7 @@ - (instancetype)initWithURL:(NSURL *)URL preloadSize:(NSUInteger)bytes delegate: } - (instancetype)initWithURL:(NSURL *)URL delegate:(nullable id)delegate delegateQueue:(dispatch_queue_t)queue { - return [self initWithURL:URL preloadSize:NSUIntegerMax delegate:delegate delegateQueue:queue]; + return [self initWithURL:URL preloadSize:NSNotFound delegate:delegate delegateQueue:queue]; } - (NSString *)description { @@ -179,6 +179,7 @@ - (void)_close { return; [_reader close]; + _reader = nil; _isClosed = YES; MCSPrefetcherDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.m index 2ccc69014..c1b1154cf 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/HLSPrefetcher.m @@ -165,7 +165,7 @@ - (instancetype)initWithURL:(NSURL *)URL numberOfPreloadedFiles:(NSUInteger)num } - (instancetype)initWithURL:(NSURL *)URL delegate:(nullable id)delegate delegateQueue:(dispatch_queue_t)delegateQueue { - return [self initWithURL:URL numberOfPreloadedFiles:NSUIntegerMax delegate:delegate delegateQueue:delegateQueue]; + return [self initWithURL:URL numberOfPreloadedFiles:NSNotFound delegate:delegate delegateQueue:delegateQueue]; } - (NSString *)description { @@ -410,7 +410,8 @@ - (void)_close { [_reader close]; _isClosed = YES; - + + _reader = nil; MCSPrefetcherDebugLog(@"%@: <%p>.close;\n", NSStringFromClass(self.class), self); } @end diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherDefines.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherDefines.h index 6e8609cf5..847db34d2 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherDefines.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherDefines.h @@ -28,6 +28,13 @@ NS_ASSUME_NONNULL_BEGIN - (void)prefetcher:(id)prefetcher progressDidChange:(float)progress; - (void)prefetcher:(id)prefetcher didCompleteWithError:(NSError *_Nullable)error; @end + +@protocol MCSPrefetchTask +@property (nonatomic, readonly) NSUInteger preloadSize; +@property (nonatomic, strong, readonly) NSURL *URL; +@property (nonatomic, copy, nullable) void(^startedExecuteBlock)(id task); +- (void)cancel; +@end NS_ASSUME_NONNULL_END #endif /* MCSPrefetcherDefines_h */ diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.h index 055bf5ee4..1c09b3a37 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.h @@ -5,7 +5,7 @@ // Created by BlueDancer on 2020/6/12. // -#import +#import "MCSPrefetcherDefines.h" @protocol MCSPrefetchTask; NS_ASSUME_NONNULL_BEGIN @@ -21,11 +21,4 @@ NS_ASSUME_NONNULL_BEGIN - (void)cancelAllPrefetchTasks; @end - -@protocol MCSPrefetchTask -@property (nonatomic, readonly) NSUInteger preloadSize; -@property (nonatomic, strong, readonly) NSURL *URL; - -- (void)cancel; -@end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.m index 1403e11c5..b9f1ce79b 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/Core/Prefetch/MCSPrefetcherManager.m @@ -37,6 +37,7 @@ @interface MCSPrefetchOperation () { @end @implementation MCSPrefetchOperation +@synthesize startedExecuteBlock = _startedExecuteBlock; - (instancetype)initWithURL:(NSURL *)URL preloadSize:(NSUInteger)bytes progress:(void(^_Nullable)(float progress))progressBlock completed:(void(^_Nullable)(NSError *_Nullable error))completionBlock { self = [super init]; if ( self ) { @@ -123,6 +124,8 @@ - (void)start { break; } [_prefetcher prepare]; + + if ( _startedExecuteBlock != nil ) _startedExecuteBlock(self); } - (void)cancel { diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.h b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.h index a437a2ba9..aa80c76db 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.h +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.h @@ -11,7 +11,8 @@ // #import -#import "MCSPrefetcherManager.h" +#import "MCSPrefetcherDefines.h" +#import "MCSAssetExporterDefines.h" #import "MCSDefines.h" NS_ASSUME_NONNULL_BEGIN @@ -28,7 +29,11 @@ NS_ASSUME_NONNULL_BEGIN /// @note return nil if URL is nil. /// - (nullable NSURL *)playbackURLWithURL:(NSURL *)URL; // 获取播放地址 - +@end + + +@interface SJMediaCacheServer (Prefetch) + /// The maximum number of queued prefetch tasks that can execute at same time. /// /// The default value is 1. @@ -92,6 +97,7 @@ NS_ASSUME_NONNULL_BEGIN /// Cancels all queued and executing prefetch tasks. /// - (void)cancelAllPrefetchTasks; // 取消所有的预加载任务 + @end @@ -196,19 +202,85 @@ NS_ASSUME_NONNULL_BEGIN /// @property (nonatomic) NSUInteger reservedFreeDiskSpace; // 剩余磁盘空间限制 -/// Empties the cache. This method may blocks the calling thread until file delete finished. +/// Protected caches are not included. /// -- (void)removeAllCaches; // 删除全部缓存 +@property (nonatomic, readonly) UInt64 countOfBytesRemovableCaches; // 可被删除的缓存所占用的大小 /// Removes the cache of the specified URL. /// -- (void)removeCacheForURL:(NSURL *)URL; // 删除某个缓存 +/// If the cache for asset is protected, it will not be removed. +/// +- (BOOL)removeCacheForURL:(NSURL *)URL; // 删除某个缓存 -/// Returns the total cache size (in bytes). +/// Remove all unprotected caches for assets. +/// +/// If the cache for asset is protected, it will not be removed. /// -@property (nonatomic, readonly) unsigned long long cachedSize; // 返回已占用的缓存大小 +/// This method may blocks the calling thread until file delete finished. +/// +- (void)removeAllRemovableCaches; // 删除缓存 - (BOOL)isStoredForURL:(NSURL *)URL; -@end +@end + + +/// What's the difference between export and prefetch? +/// +/// The MCSAssetExporterManager manages the exported assets. +/// +/// The MCSAssetCacheManager manages the cache generated during playback and the prefetched assets. +/// +/// So, if you want to remove the an exported asset, you must use MCSAssetExporterManager to remove it. +/// +@interface SJMediaCacheServer (Export) + +/// Register an observer to listen for export events +/// +/// You do not need to unregister the observer. if you forget or are unable to remove the observer, the manager cleans up automatically. +/// +- (void)registerExportObserver:(id)observer; // 监听导出相关的事件 + +/// Remove the listening. +/// +/// You do not need to unregister the observer. if you forget or are unable to remove the observer, the manager cleans up automatically. +/// +- (void)removeExportObserver:(id)observer; // 移除监听 + +/// The maximum number of queued export tasks that can execute at same time. +/// +/// The default value is 1. +/// +/// In fact, it is a variant of `maxConcurrentPrefetchCount`, which will indirectly set `maxConcurrentPrefetchCount`. +/// +@property (nonatomic) NSInteger maxConcurrentExportCount; + +@property (nonatomic, strong, readonly, nullable) NSArray> *allExporters; + +/// +/// +/// \code +/// [SJMediaCacheServer.shared registerExportObserver:self]; +/// +/// id exporter = [SJMediaCacheServer.shared exportAssetWithURL:URL]; +/// [exporter resume]; +/// \endcode +/// +- (nullable id)exportAssetWithURL:(NSURL *)URL; +- (nullable id)exportAssetWithURL:(NSURL *)URL resumes:(BOOL)resumes; + +- (MCSAssetExportStatus)exportStatusWithURL:(NSURL *)URL; +- (float)exportProgressWithURL:(NSURL *)URL; +- (nullable NSURL *)playbackURLForExportedAssetWithURL:(NSURL *)URL; + +/// Synchronize the cache to the exporter. +/// +- (void)synchronizeForExporterWithAssetURL:(NSURL *)URL; +- (void)synchronizeForExporters; + +@property (nonatomic, readonly) UInt64 countOfBytesAllExportedAssets; // 返回导出资源占用的缓存大小 + +- (void)removeExportAssetWithURL:(NSURL *)URL; +- (void)removeAllExportAssets; +@end NS_ASSUME_NONNULL_END diff --git a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.m b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.m index 4da73e483..12810ad36 100644 --- a/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.m +++ b/Example/Pods/SJMediaCacheServer/SJMediaCacheServer/SJMediaCacheServer.m @@ -9,10 +9,13 @@ #import "SJMediaCacheServer.h" #import "MCSProxyServer.h" #import "MCSAssetManager.h" +#import "MCSAssetCacheManager.h" +#import "MCSAssetExporterManager.h" #import "MCSURL.h" #import "MCSProxyTask.h" #import "MCSLogger.h" #import "MCSDownload.h" +#import "MCSPrefetcherManager.h" @interface SJMediaCacheServer () @property (nonatomic, strong, readonly) MCSProxyServer *server; @@ -48,15 +51,23 @@ - (nullable NSURL *)playbackURLWithURL:(NSURL *)URL { return URL; // proxy URL - if ( _server.isRunning ) { - [MCSAssetManager.shared willReadAssetForURL:URL]; + if ( _server.isRunning ) return [MCSURL.shared proxyURLWithURL:URL]; - } // param URL return URL; } +#pragma mark - MCSProxyServerDelegate + +- (id)server:(MCSProxyServer *)server taskWithRequest:(NSURLRequest *)request delegate:(id)delegate { + return [MCSProxyTask.alloc initWithRequest:request delegate:delegate]; +} +@end + + +@implementation SJMediaCacheServer (Prefetch) + - (void)setMaxConcurrentPrefetchCount:(NSInteger)maxConcurrentPrefetchCount { MCSPrefetcherManager.shared.maxConcurrentPrefetchCount = maxConcurrentPrefetchCount; } @@ -93,11 +104,6 @@ - (void)cancelAllPrefetchTasks { [MCSPrefetcherManager.shared cancelAllPrefetchTasks]; } -#pragma mark - MCSProxyServerDelegate - -- (id)server:(MCSProxyServer *)server taskWithRequest:(NSURLRequest *)request delegate:(id)delegate { - return [MCSProxyTask.alloc initWithRequest:request delegate:delegate]; -} @end @@ -179,48 +185,45 @@ - (MCSLogLevel)logLevel { @implementation SJMediaCacheServer (Cache) - (void)setCacheCountLimit:(NSUInteger)cacheCountLimit { - MCSAssetManager.shared.cacheCountLimit = cacheCountLimit; + MCSAssetCacheManager.shared.cacheCountLimit = cacheCountLimit; } - (NSUInteger)cacheCountLimit { - return MCSAssetManager.shared.cacheCountLimit; + return MCSAssetCacheManager.shared.cacheCountLimit; } - (void)setMaxDiskAgeForCache:(NSTimeInterval)maxDiskAgeForCache { - MCSAssetManager.shared.maxDiskAgeForCache = maxDiskAgeForCache; + MCSAssetCacheManager.shared.maxDiskAgeForCache = maxDiskAgeForCache; } - (NSTimeInterval)maxDiskAgeForCache { - return MCSAssetManager.shared.maxDiskAgeForCache; + return MCSAssetCacheManager.shared.maxDiskAgeForCache; } - (void)setMaxDiskSizeForCache:(NSUInteger)maxDiskSizeForCache { - MCSAssetManager.shared.maxDiskSizeForCache = maxDiskSizeForCache; + MCSAssetCacheManager.shared.maxDiskSizeForCache = maxDiskSizeForCache; } - (NSUInteger)maxDiskSizeForCache { - return MCSAssetManager.shared.maxDiskSizeForCache; + return MCSAssetCacheManager.shared.maxDiskSizeForCache; } - (void)setReservedFreeDiskSpace:(NSUInteger)reservedFreeDiskSpace { - MCSAssetManager.shared.reservedFreeDiskSpace = reservedFreeDiskSpace; + MCSAssetCacheManager.shared.reservedFreeDiskSpace = reservedFreeDiskSpace; } - (NSUInteger)reservedFreeDiskSpace { - return MCSAssetManager.shared.reservedFreeDiskSpace; + return MCSAssetCacheManager.shared.reservedFreeDiskSpace; } -- (void)removeAllCaches { - [MCSDownload.shared cancelAllDownloadTasks]; +- (void)removeAllRemovableCaches { [MCSPrefetcherManager.shared cancelAllPrefetchTasks]; - [MCSAssetManager.shared removeAllAssets]; + [MCSAssetCacheManager.shared removeAllRemovableCaches]; } -- (void)removeCacheForURL:(NSURL *)URL { - if ( URL == nil ) - return; - [MCSAssetManager.shared removeAssetForURL:URL]; +- (BOOL)removeCacheForURL:(NSURL *)URL { + return [MCSAssetCacheManager.shared removeCacheForURL:URL]; } -- (unsigned long long)cachedSize { - return [MCSAssetManager.shared cachedSizeForAssets]; +- (UInt64)countOfBytesRemovableCaches { + return MCSAssetCacheManager.shared.countOfBytesRemovableCaches; } - (BOOL)isStoredForURL:(NSURL *)URL { @@ -229,3 +232,68 @@ - (BOOL)isStoredForURL:(NSURL *)URL { return [MCSAssetManager.shared isAssetStoredForURL:URL]; } @end + +@implementation SJMediaCacheServer (Export) + +- (void)registerExportObserver:(id)observer { + [MCSAssetExporterManager.shared registerObserver:observer]; +} + +- (void)removeExportObserver:(id)observer { + [MCSAssetExporterManager.shared removeObserver:observer]; +} + +- (void)setMaxConcurrentExportCount:(NSInteger)maxConcurrentExportCount { + MCSAssetExporterManager.shared.maxConcurrentExportCount = maxConcurrentExportCount; +} + +- (NSInteger)maxConcurrentExportCount { + return MCSAssetExporterManager.shared.maxConcurrentExportCount; +} + +- (nullable NSArray> *)allExporters { + return MCSAssetExporterManager.shared.allExporters; +} + +- (nullable id)exportAssetWithURL:(NSURL *)URL { + return [self exportAssetWithURL:URL resumes:NO]; +} + +- (nullable id)exportAssetWithURL:(NSURL *)URL resumes:(BOOL)resumes { + id exporter = [MCSAssetExporterManager.shared exportAssetWithURL:URL]; + if ( resumes ) [exporter resume]; + return exporter; +} + +- (MCSAssetExportStatus)exportStatusWithURL:(NSURL *)URL { + return [MCSAssetExporterManager.shared statusWithURL:URL]; +} + +- (float)exportProgressWithURL:(NSURL *)URL { + return [MCSAssetExporterManager.shared progressWithURL:URL]; +} + +- (nullable NSURL *)playbackURLForExportedAssetWithURL:(NSURL *)URL { + return [MCSAssetExporterManager.shared playbackURLForExportedAssetWithURL:URL]; +} + +- (void)synchronizeForExporterWithAssetURL:(NSURL *)URL { + [MCSAssetExporterManager.shared synchronizeForExporterWithAssetURL:URL]; +} + +- (void)synchronizeForExporters { + [MCSAssetExporterManager.shared synchronize]; +} + +- (UInt64)countOfBytesAllExportedAssets { + return [MCSAssetExporterManager.shared countOfBytesAllExportedAssets]; +} + +- (void)removeExportAssetWithURL:(NSURL *)URL { + [MCSAssetExporterManager.shared removeAssetWithURL:URL]; +} + +- (void)removeAllExportAssets { + [MCSAssetExporterManager.shared removeAllAssets]; +} +@end diff --git a/Example/Pods/Target Support Files/Pods-SJVideoPlayer_Example/Pods-SJVideoPlayer_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-SJVideoPlayer_Example/Pods-SJVideoPlayer_Example-frameworks.sh index 38264b648..2ecdcd768 100755 --- a/Example/Pods/Target Support Files/Pods-SJVideoPlayer_Example/Pods-SJVideoPlayer_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-SJVideoPlayer_Example/Pods-SJVideoPlayer_Example-frameworks.sh @@ -177,13 +177,11 @@ code_sign_if_enabled() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/AliyunPlayer.framework" install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/alivcffmpeg.framework" - install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/AlivcConan.framework" install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/AliyunMediaDownloader.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/AliyunPlayer.framework" install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/alivcffmpeg.framework" - install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/AlivcConan.framework" install_framework "${PODS_ROOT}/AliPlayerSDK_iOS/AliyunMediaDownloader.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/Example/SJVideoPlayer.xcodeproj/project.pbxproj b/Example/SJVideoPlayer.xcodeproj/project.pbxproj index d600c2004..b652f45ff 100644 --- a/Example/SJVideoPlayer.xcodeproj/project.pbxproj +++ b/Example/SJVideoPlayer.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 13FEB85DCAAE0D2C731299D6 /* libPods-SJVideoPlayer_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCD2CA6C02217556CFBFA7AB /* libPods-SJVideoPlayer_Example.a */; }; 3B070E8C25FC88C300960506 /* SJBaseVideoPlayer+ListPlaybackExtended.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B070E8B25FC88C300960506 /* SJBaseVideoPlayer+ListPlaybackExtended.m */; }; - 3B070EA225FC916300960506 /* SJFloatSmallViewTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B070EA025FC916300960506 /* SJFloatSmallViewTransitionController.m */; }; 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; @@ -82,6 +81,7 @@ 77D0CFBA235727D90081C855 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 77D0CFB9235727D80081C855 /* MediaPlayer.framework */; }; 77E87F6622E84D4E0047A253 /* SJViewController10.m in Sources */ = {isa = PBXBuildFile; fileRef = 77E87F6422E84D4E0047A253 /* SJViewController10.m */; }; 77E87F6722E84D4E0047A253 /* SJViewController10.xib in Resources */ = {isa = PBXBuildFile; fileRef = 77E87F6522E84D4E0047A253 /* SJViewController10.xib */; }; + 77EEC765262417A00066B57D /* SJFloatSmallViewTransitionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 77EEC763262417A00066B57D /* SJFloatSmallViewTransitionController.m */; }; 77F2F5DC22FAC43000EA0B91 /* SJViewController11.m in Sources */ = {isa = PBXBuildFile; fileRef = 77F2F5DA22FAC43000EA0B91 /* SJViewController11.m */; }; 77F2F5DD22FAC43000EA0B91 /* SJViewController11.xib in Resources */ = {isa = PBXBuildFile; fileRef = 77F2F5DB22FAC43000EA0B91 /* SJViewController11.xib */; }; 815EB5632535A55D002DAFF4 /* SJUIScrollViewDemoViewController2.m in Sources */ = {isa = PBXBuildFile; fileRef = 815EB5622535A55D002DAFF4 /* SJUIScrollViewDemoViewController2.m */; }; @@ -134,8 +134,6 @@ 0913D8D9BFC4EE68E3F1EF64 /* Pods-SJVideoPlayer_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SJVideoPlayer_Example.release.xcconfig"; path = "Target Support Files/Pods-SJVideoPlayer_Example/Pods-SJVideoPlayer_Example.release.xcconfig"; sourceTree = ""; }; 3B070E8A25FC88C300960506 /* SJBaseVideoPlayer+ListPlaybackExtended.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SJBaseVideoPlayer+ListPlaybackExtended.h"; sourceTree = ""; }; 3B070E8B25FC88C300960506 /* SJBaseVideoPlayer+ListPlaybackExtended.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SJBaseVideoPlayer+ListPlaybackExtended.m"; sourceTree = ""; }; - 3B070EA025FC916300960506 /* SJFloatSmallViewTransitionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SJFloatSmallViewTransitionController.m; sourceTree = ""; }; - 3B070EA125FC916300960506 /* SJFloatSmallViewTransitionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SJFloatSmallViewTransitionController.h; sourceTree = ""; }; 3DE6356926AEF70F060F33F3 /* SJVideoPlayer.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SJVideoPlayer.podspec; path = ../SJVideoPlayer.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 6003F58A195388D20070C39A /* 播放器.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "播放器.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -261,6 +259,8 @@ 77E87F6322E84D4E0047A253 /* SJViewController10.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SJViewController10.h; sourceTree = ""; }; 77E87F6422E84D4E0047A253 /* SJViewController10.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SJViewController10.m; sourceTree = ""; }; 77E87F6522E84D4E0047A253 /* SJViewController10.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SJViewController10.xib; sourceTree = ""; }; + 77EEC763262417A00066B57D /* SJFloatSmallViewTransitionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SJFloatSmallViewTransitionController.m; sourceTree = ""; }; + 77EEC764262417A00066B57D /* SJFloatSmallViewTransitionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SJFloatSmallViewTransitionController.h; sourceTree = ""; }; 77F2F5D922FAC43000EA0B91 /* SJViewController11.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SJViewController11.h; sourceTree = ""; }; 77F2F5DA22FAC43000EA0B91 /* SJViewController11.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SJViewController11.m; sourceTree = ""; }; 77F2F5DB22FAC43000EA0B91 /* SJViewController11.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SJViewController11.xib; sourceTree = ""; }; @@ -501,8 +501,8 @@ children = ( 771BFDB925AFE1EC0026C277 /* SJFloatModeDemoViewController1.h */, 771BFDBA25AFE1EC0026C277 /* SJFloatModeDemoViewController1.m */, - 3B070EA125FC916300960506 /* SJFloatSmallViewTransitionController.h */, - 3B070EA025FC916300960506 /* SJFloatSmallViewTransitionController.m */, + 77EEC764262417A00066B57D /* SJFloatSmallViewTransitionController.h */, + 77EEC763262417A00066B57D /* SJFloatSmallViewTransitionController.m */, ); path = 1; sourceTree = ""; @@ -1143,7 +1143,7 @@ A6C5D23422AC249800D63D1C /* SJRemoteCommandHandler.m in Sources */, 77357E622375523C00B81EE4 /* SJSubtitlesTestViewController.m in Sources */, 7784A7FA237D3860000BA67E /* SJBarrageTestViewController.m in Sources */, - 3B070EA225FC916300960506 /* SJFloatSmallViewTransitionController.m in Sources */, + 77EEC765262417A00066B57D /* SJFloatSmallViewTransitionController.m in Sources */, 77788FDF22C36CF300E26599 /* SJRecommendVideosTableViewCell.m in Sources */, 771BFDBB25AFE1EC0026C277 /* SJFloatModeDemoViewController1.m in Sources */, 3B070E8C25FC88C300960506 /* SJBaseVideoPlayer+ListPlaybackExtended.m in Sources */, diff --git a/Example/SJVideoPlayer.xcworkspace/xcuserdata/bluedancer.xcuserdatad/UserInterfaceState.xcuserstate b/Example/SJVideoPlayer.xcworkspace/xcuserdata/bluedancer.xcuserdatad/UserInterfaceState.xcuserstate index dfcbd5536..766e657b1 100644 Binary files a/Example/SJVideoPlayer.xcworkspace/xcuserdata/bluedancer.xcuserdatad/UserInterfaceState.xcuserstate and b/Example/SJVideoPlayer.xcworkspace/xcuserdata/bluedancer.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Example/SJVideoPlayer/Demos/DY/List/SJDYTableViewCell.m b/Example/SJVideoPlayer/Demos/DY/List/SJDYTableViewCell.m index 1c499fd84..d95e092f1 100644 --- a/Example/SJVideoPlayer/Demos/DY/List/SJDYTableViewCell.m +++ b/Example/SJVideoPlayer/Demos/DY/List/SJDYTableViewCell.m @@ -99,7 +99,6 @@ - (instancetype)init { self.presentView.backgroundColor = UIColor.clearColor; self.videoGravity = AVLayerVideoGravityResizeAspectFill; self.autoplayWhenSetNewAsset = NO; - self.autoManageViewToFitOnScreenOrRotation = NO; self.rotationManager.disabledAutorotation = YES; self.pauseWhenAppDidEnterBackground = YES; self.resumePlaybackWhenScrollAppeared = NO; diff --git a/Example/SJVideoPlayer/Demos/iPad Demo/SJiPadDemoViewController1.m b/Example/SJVideoPlayer/Demos/iPad Demo/SJiPadDemoViewController1.m index af5314963..ed6b444b5 100644 --- a/Example/SJVideoPlayer/Demos/iPad Demo/SJiPadDemoViewController1.m +++ b/Example/SJVideoPlayer/Demos/iPad Demo/SJiPadDemoViewController1.m @@ -44,8 +44,7 @@ - (void)_setupViews { make.edges.offset(0); }]; - _player.autoManageViewToFitOnScreenOrRotation = NO; - _player.useFitOnScreenAndDisableRotation = YES; + _player.onlyUsedFitOnScreen = YES; _player.assetURL = SourceURL0; } diff --git "a/Example/SJVideoPlayer/Demos/iPhone Demo/App\345\206\205\345\260\217\347\252\227\346\202\254\346\265\256/.DS_Store" "b/Example/SJVideoPlayer/Demos/iPhone Demo/App\345\206\205\345\260\217\347\252\227\346\202\254\346\265\256/.DS_Store" index 0ce08b24b..44af8d5cc 100644 Binary files "a/Example/SJVideoPlayer/Demos/iPhone Demo/App\345\206\205\345\260\217\347\252\227\346\202\254\346\265\256/.DS_Store" and "b/Example/SJVideoPlayer/Demos/iPhone Demo/App\345\206\205\345\260\217\347\252\227\346\202\254\346\265\256/.DS_Store" differ diff --git a/Example/SJVideoPlayer/SJAppDelegate.m b/Example/SJVideoPlayer/SJAppDelegate.m index 51bcf6182..91e28cc3f 100644 --- a/Example/SJVideoPlayer/SJAppDelegate.m +++ b/Example/SJVideoPlayer/SJAppDelegate.m @@ -51,6 +51,11 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( resources.progressThumbSize = 8; resources.progressTrackColor = [UIColor colorWithWhite:0.8 alpha:1]; resources.progressBufferColor = [UIColor whiteColor]; + + resources.progressThumbImage = [UIImage imageNamed:@"thumb"]; + // or + // resources.progressThumbSize = 8; + // resources.progressThumbColor = UIColor.blueColor; }); // Override point for customization after application launch. diff --git a/SJVideoPlayer.podspec b/SJVideoPlayer.podspec index 0f1721ec2..e20d462ac 100644 --- a/SJVideoPlayer.podspec +++ b/SJVideoPlayer.podspec @@ -1,16 +1,16 @@ Pod::Spec.new do |s| s.name = 'SJVideoPlayer' - s.version = '3.3.1' + s.version = '3.3.2' s.summary = 'video player.' s.description = 'https://github.com/changsanjiang/SJVideoPlayer/blob/master/README.md' s.homepage = 'https://github.com/changsanjiang/SJVideoPlayer' s.license = { :type => 'MIT', :file => 'LICENSE.md' } s.author = { 'SanJiang' => 'changsanjiang@gmail.com' } - s.platform = :ios, '8.0' + s.platform = :ios, '9.0' s.source = { :git => 'https://github.com/changsanjiang/SJVideoPlayer.git', :tag => "v#{s.version}" } s.requires_arc = true - s.dependency 'SJBaseVideoPlayer', '>= 3.5.0' + s.dependency 'SJBaseVideoPlayer', '>= 3.6.0' s.source_files = 'SJVideoPlayer/*.{h,m}' diff --git a/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.h b/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.h index cbbb3e4e3..dc90db36d 100644 --- a/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.h +++ b/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.h @@ -101,6 +101,30 @@ NS_ASSUME_NONNULL_BEGIN /// @property (nonatomic, copy, null_resettable) BOOL(^shouldShowCustomStatusBar)(SJEdgeControlLayer *controlLayer) NS_AVAILABLE_IOS(11.0); +/// +/// 是否自动选择`Rotation(旋转)`或`FitOnScreen(充满全屏)` +/// +/// - Rotation(旋转): 播放器视图将会在横屏(全屏)与竖屏(小屏)之间切换 +/// +/// - FitOnScreen(充满全屏): 播放器视图将会在竖屏全屏与竖屏小屏之间切换 +/// +/// 当视频`宽 > 高`时, 将执行 Rotation 相关方法. +/// 当视频`宽 < 高`时, 将执行 FitOnScreen 相关方法. +/// +@property (nonatomic) BOOL automaticallyPerformRotationOrFitOnScreen; + +/// +/// 是否仅在竖屏全屏与竖屏小屏之间切换, 不触发旋转. +/// +/// 设置为YES后, 将会禁止旋转. +/// +@property (nonatomic) BOOL onlyUsedFitOnScreen; + +/// +/// 处于小屏时, 当点击全屏按钮后, 是否先竖屏撑满全屏. +/// +@property (nonatomic) BOOL usesFitOnScreenFirst; + @property (nonatomic, weak, nullable) id delegate; @end diff --git a/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.m b/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.m index 272881525..2181c6a9a 100644 --- a/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.m +++ b/SJVideoPlayer/ControlLayers/SJEdgeControlLayer/SJEdgeControlLayer.m @@ -67,6 +67,7 @@ - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if ( !self ) return nil; _bottomProgressIndicatorHeight = 1; + _automaticallyPerformRotationOrFitOnScreen = YES; [self _setupView]; self.autoAdjustTopSpacing = YES; self.hiddenBottomProgressIndicator = YES; @@ -143,7 +144,17 @@ - (void)_playItemWasTapped { } - (void)_fullItemWasTapped { - _videoPlayer.useFitOnScreenAndDisableRotation ? _videoPlayer.fitOnScreen = !_videoPlayer.fitOnScreen : [self.videoPlayer rotate]; + if ( _onlyUsedFitOnScreen ) { + [_videoPlayer setFitOnScreen:!_videoPlayer.isFitOnScreen]; + return; + } + + if ( _usesFitOnScreenFirst && !_videoPlayer.isFitOnScreen ) { + [_videoPlayer setFitOnScreen:YES]; + return; + } + + [_videoPlayer rotate]; } - (void)_replayItemWasTapped { @@ -321,6 +332,15 @@ - (void)videoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer playbackTypeDidCha [self _showOrRemoveBottomProgressIndicator]; } +- (BOOL)canTriggerRotationOfVideoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer { + if ( _onlyUsedFitOnScreen ) + return NO; + if ( _usesFitOnScreenFirst ) + return videoPlayer.isFitOnScreen; + + return YES; +} + - (void)videoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer willRotateView:(BOOL)isFull { [self _updateAppearStateForResidentBackButtonIfNeeded]; [self _updateAppearStateForContainerViews]; @@ -409,6 +429,12 @@ - (void)videoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer longPressGestureSt } } +- (void)videoPlayer:(__kindof SJBaseVideoPlayer *)videoPlayer presentationSizeDidChange:(CGSize)size { + if ( _automaticallyPerformRotationOrFitOnScreen && !videoPlayer.isFullScreen && !videoPlayer.isFitOnScreen ) { + _onlyUsedFitOnScreen = size.width < size.height; + } +} + /// 这是一个只有在播放器锁屏状态下, 才会回调的方法 /// 当播放器锁屏后, 用户每次点击都会回调这个方法 - (void)tappedPlayerOnTheLockedState:(__kindof SJBaseVideoPlayer *)videoPlayer { @@ -567,6 +593,15 @@ - (void)setAutomaticallyShowsPictureInPictureItem:(BOOL)automaticallyShowsPictur } } +- (void)setOnlyUsedFitOnScreen:(BOOL)onlyUsedFitOnScreen { + if ( onlyUsedFitOnScreen != _onlyUsedFitOnScreen ) { + _onlyUsedFitOnScreen = onlyUsedFitOnScreen; + if ( _onlyUsedFitOnScreen ) { + _automaticallyPerformRotationOrFitOnScreen = NO; + } + } +} + #pragma mark - setup view - (void)_setupView { diff --git a/SJVideoPlayer/SJVideoPlayer.h b/SJVideoPlayer/SJVideoPlayer.h index 55232cf8c..dc8d83a07 100644 --- a/SJVideoPlayer/SJVideoPlayer.h +++ b/SJVideoPlayer/SJVideoPlayer.h @@ -102,28 +102,6 @@ NS_ASSUME_NONNULL_BEGIN + (NSString *)version; @end -@interface SJEdgeControlLayer (SJVideoPlayerExtended) -/// -/// 是否在Top栏上显示`more item`(三个点). default value is YES -/// -/// 如果需要关闭, 可以设置: player.defaultEdgeControlLayer.showsMoreItem = NO; -/// -@property (nonatomic) BOOL showsMoreItem; - -/// -/// 是否开启剪辑功能 -/// - 默认是NO -/// - 不支持剪辑m3u8(如果开启, 将会自动隐藏剪辑按钮) -/// -@property (nonatomic, getter=isEnabledClips) BOOL enabledClips; - -/// -/// 剪辑功能配置 -/// -@property (nonatomic, strong, null_resettable) SJVideoPlayerClipsConfig *clipsConfig; - -@end - @interface SJVideoPlayer (CommonSettings) /// /// Note: The `block` runs on the sub thread. @@ -193,6 +171,55 @@ NS_ASSUME_NONNULL_BEGIN @end +@interface SJVideoPlayer (RotationOrFitOnScreen) +/// +/// 当视频`宽 > 高`时, 将执行 Rotation(旋转至横屏全屏) 相关方法. +/// +/// 当视频`宽 < 高`时, 将执行 FitOnScreen(竖屏全屏) 相关方法. +/// +/// - Rotation: 播放器视图将会在横屏(全屏)与竖屏(小屏)之间切换 +/// +/// - FitOnScreen: 播放器视图将会在竖屏全屏与竖屏小屏之间切换 +/// +@property (nonatomic) BOOL automaticallyPerformRotationOrFitOnScreen; + +/// +/// 是否仅在竖屏全屏与竖屏小屏之间切换, 不触发旋转. +/// +/// 设置为YES后, 将会禁止旋转. +/// +@property (nonatomic) BOOL onlyUsedFitOnScreen; + +/// +/// 处于小屏时, 当点击全屏按钮后, 是否先竖屏撑满全屏. +/// +@property (nonatomic) BOOL usesFitOnScreenFirst; + +@end + + +@interface SJEdgeControlLayer (SJVideoPlayerExtended) +/// +/// 是否在Top栏上显示`more item`(三个点). default value is YES +/// +/// 如果需要关闭, 可以设置: player.defaultEdgeControlLayer.showsMoreItem = NO; +/// +@property (nonatomic) BOOL showsMoreItem; + +/// +/// 是否开启剪辑功能 +/// - 默认是NO +/// - 不支持剪辑m3u8(如果开启, 将会自动隐藏剪辑按钮) +/// +@property (nonatomic, getter=isEnabledClips) BOOL enabledClips; + +/// +/// 剪辑功能配置 +/// +@property (nonatomic, strong, null_resettable) SJVideoPlayerClipsConfig *clipsConfig; + +@end + @interface SJVideoPlayer (SJExtendedControlLayerSwitcher) /// diff --git a/SJVideoPlayer/SJVideoPlayer.m b/SJVideoPlayer/SJVideoPlayer.m index 14bdcf980..7f03d8896 100644 --- a/SJVideoPlayer/SJVideoPlayer.m +++ b/SJVideoPlayer/SJVideoPlayer.m @@ -97,7 +97,7 @@ - (void)dealloc { } + (NSString *)version { - return @"v3.3.1"; + return @"v3.3.2"; } + (instancetype)player { @@ -679,6 +679,30 @@ - (BOOL)isDisabledDefinitionSwitchingPrompt { @end +@implementation SJVideoPlayer (RotationOrFitOnScreen) +- (void)setAutomaticallyPerformRotationOrFitOnScreen:(BOOL)automaticallyPerformRotationOrFitOnScreen { + self.defaultEdgeControlLayer.automaticallyPerformRotationOrFitOnScreen = automaticallyPerformRotationOrFitOnScreen; +} +- (BOOL)automaticallyPerformRotationOrFitOnScreen { + return self.defaultEdgeControlLayer.automaticallyPerformRotationOrFitOnScreen; +} + +- (void)setOnlyUsedFitOnScreen:(BOOL)onlyUsedFitOnScreen { + self.defaultEdgeControlLayer.onlyUsedFitOnScreen = onlyUsedFitOnScreen; +} +- (BOOL)onlyUsedFitOnScreen { + return self.defaultEdgeControlLayer.onlyUsedFitOnScreen; +} + +- (void)setUsesFitOnScreenFirst:(BOOL)usesFitOnScreenFirst { + self.defaultEdgeControlLayer.usesFitOnScreenFirst = usesFitOnScreenFirst; +} +- (BOOL)usesFitOnScreenFirst { + return self.defaultEdgeControlLayer.usesFitOnScreenFirst; +} +@end + + @implementation SJVideoPlayer (SJExtendedControlLayerSwitcher) - (void)switchControlLayerForIdentifier:(SJControlLayerIdentifier)identifier { [self.switcher switchControlLayerForIdentifier:identifier];