Explorar el Código

DynamicMobileVLCKit: add missing headers and add to tests

Signed-off-by: Felix Paul Kühne <felix@feepk.net>
Dmitriy Grachev hace 6 años
padre
commit
216ca08409

+ 2 - 1
.circleci/config.yml

@@ -36,15 +36,16 @@ jobs:
           name: Run Tests
           command: |
             rake test:ios
+            rake test:ios_dynamic
             rake test:tv
             rake test:mac
       - run:
           name: Generate Coverage Reports
           command: |
             rake codecov:ios
+            rake codecov:ios_dynamic
             rake codecov:tv
             rake codecov:mac
       - store_artifacts:
           path: Tests/Coverage
           destination: Coverage
-

+ 6 - 1
Headers/Public/DynamicMobileVLCKit.h

@@ -39,9 +39,11 @@ FOUNDATION_EXPORT const unsigned char DynamicMobileVLCKitVersionString[];
 #import <DynamicMobileVLCKit/VLCMediaPlayer.h>
 #import <DynamicMobileVLCKit/VLCMediaListPlayer.h>
 #import <DynamicMobileVLCKit/VLCMediaThumbnailer.h>
+#import <DynamicMobileVLCKit/VLCDialogProvider.h>
 #import <DynamicMobileVLCKit/VLCTime.h>
 #import <DynamicMobileVLCKit/VLCTranscoder.h>
-#import <DynamicMobileVLCKit/VLCDialogProvider.h>
+#import <DynamicMobileVLCKit/VLCRendererDiscoverer.h>
+#import <DynamicMobileVLCKit/VLCRendererItem.h>
 
 @class VLCMedia;
 @class VLCMediaLibrary;
@@ -53,3 +55,6 @@ FOUNDATION_EXPORT const unsigned char DynamicMobileVLCKitVersionString[];
 @class VLCMediaListPlayer;
 @class VLCMediaPlayer;
 @class VLCDialogProvider;
+@class VLCRendererDiscoverer;
+@class VLCRendererDiscovererDescription;
+@class VLCRendererItem;

+ 300 - 3
MobileVLCKit.xcodeproj/project.pbxproj

@@ -222,12 +222,12 @@
 		CAA03D2520C8DE7B001764DA /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAA03D2420C8DE7A001764DA /* CoreMedia.framework */; };
 		CAA9F00320D254AB00CDBB2C /* VLCTimeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA9F00120D254A600CDBB2C /* VLCTimeTest.swift */; };
 		CAA9F00420D254AC00CDBB2C /* VLCTimeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA9F00120D254A600CDBB2C /* VLCTimeTest.swift */; };
+		CABCBAE220EB0B080040E2F5 /* VLCAudioTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */; };
+		CABCBAE320EB0B080040E2F5 /* VLCAudioTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */; };
 		CABEDAB821095242005FED09 /* VLCLibraryTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABEDAB721095242005FED09 /* VLCLibraryTest.swift */; };
 		CABEDAB921095242005FED09 /* VLCLibraryTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABEDAB721095242005FED09 /* VLCLibraryTest.swift */; };
 		CABF4D4120D8DBA900FCCE29 /* VLCMediaTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABF4D4020D8DBA900FCCE29 /* VLCMediaTest.swift */; };
 		CABF4D4220D8DBA900FCCE29 /* VLCMediaTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABF4D4020D8DBA900FCCE29 /* VLCMediaTest.swift */; };
-		CABCBAE220EB0B080040E2F5 /* VLCAudioTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */; };
-		CABCBAE320EB0B080040E2F5 /* VLCAudioTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */; };
 		CABF4D4520D8DCDD00FCCE29 /* libMobileVLCKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libMobileVLCKit.a */; };
 		CABF4D4620D8DD1B00FCCE29 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D797FC31DF41F9100AD93ED /* libc++.tbd */; };
 		CABF4D4720D8DD2000FCCE29 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D24C2B51EC0A3390047E700 /* libbz2.tbd */; };
@@ -237,6 +237,42 @@
 		CABF4D4D20D8DD7300FCCE29 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8938F71B5009BE008F2B14 /* VideoToolbox.framework */; };
 		CABF4D4E20D8DD7B00FCCE29 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8938F51B5009B4008F2B14 /* CoreMedia.framework */; };
 		CABF4D4F20D8DD7F00FCCE29 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8938F01B5009A2008F2B14 /* AudioToolbox.framework */; };
+		ED25608A21F39FD100396F9B /* VLCTranscoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E1959821BEA2AF00F10277 /* VLCTranscoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED25608E21F3A0F200396F9B /* VLCTranscoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E1959621BEA28F00F10277 /* VLCTranscoder.m */; };
+		ED25609321F3A3E800396F9B /* VLCRendererDiscoverer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D2CE648203DCC48004BB7F6 /* VLCRendererDiscoverer.m */; };
+		ED25609421F3A3E800396F9B /* VLCRendererItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D2CE64F203EEA47004BB7F6 /* VLCRendererItem.m */; };
+		ED25609521F3A3F800396F9B /* VLCRendererDiscoverer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2CE647203DCC48004BB7F6 /* VLCRendererDiscoverer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED25609621F3A3F800396F9B /* VLCRendererItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2CE64E203EEA47004BB7F6 /* VLCRendererItem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED25609C21F3A9FE00396F9B /* DynamicMobileVLCKitTests-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = ED25609A21F3A9FE00396F9B /* DynamicMobileVLCKitTests-Bridging-Header.h */; };
+		ED2560A221F3AA4600396F9B /* VLCMediaTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABF4D4020D8DBA900FCCE29 /* VLCMediaTest.swift */; };
+		ED2560A321F3AA4600396F9B /* XCTestHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7BC88720F4418000C86820 /* XCTestHelper.swift */; };
+		ED2560A421F3AA4600396F9B /* VLCMediaThumbnailerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA5D5787210B16960099D6D0 /* VLCMediaThumbnailerTest.swift */; };
+		ED2560A521F3AA4600396F9B /* VLCTimeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA9F00120D254A600CDBB2C /* VLCTimeTest.swift */; };
+		ED2560A621F3AA4600396F9B /* VLCAudioTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */; };
+		ED2560A721F3AA4600396F9B /* VLCLibraryTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CABEDAB721095242005FED09 /* VLCLibraryTest.swift */; };
+		ED2560A821F3AA4600396F9B /* Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1E134D21087D750066F32F /* Video.swift */; };
+		ED2560AA21F3AA4600396F9B /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D6C891F1C0CA81F00321894 /* AVFoundation.framework */; };
+		ED2560AB21F3AA4600396F9B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8939011B5009DD008F2B14 /* CoreFoundation.framework */; };
+		ED2560AC21F3AA4600396F9B /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8938F71B5009BE008F2B14 /* VideoToolbox.framework */; };
+		ED2560AD21F3AA4600396F9B /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8938F51B5009B4008F2B14 /* CoreMedia.framework */; };
+		ED2560AE21F3AA4600396F9B /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8938F01B5009A2008F2B14 /* AudioToolbox.framework */; };
+		ED2560AF21F3AA4600396F9B /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D797FC51DF41F9500AD93ED /* libiconv.tbd */; };
+		ED2560B021F3AA4600396F9B /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D24C2B51EC0A3390047E700 /* libbz2.tbd */; };
+		ED2560B121F3AA4600396F9B /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D797FC31DF41F9100AD93ED /* libc++.tbd */; };
+		ED2560B421F3AA4600396F9B /* english.srt in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135F21087D8E0066F32F /* english.srt */; };
+		ED2560B521F3AA4600396F9B /* salmon.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135921087D8E0066F32F /* salmon.mp4 */; };
+		ED2560B621F3AA4600396F9B /* bunny.avi in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135721087D8E0066F32F /* bunny.avi */; };
+		ED2560B721F3AA4600396F9B /* portuguese.srt in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135421087D8E0066F32F /* portuguese.srt */; };
+		ED2560B821F3AA4600396F9B /* sea_lions.mov in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135821087D8E0066F32F /* sea_lions.mov */; };
+		ED2560B921F3AA4600396F9B /* chinese-traditional.srt in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135E21087D8E0066F32F /* chinese-traditional.srt */; };
+		ED2560BA21F3AA4600396F9B /* german.srt in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135221087D8E0066F32F /* german.srt */; };
+		ED2560BB21F3AA4600396F9B /* french.srt in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135D21087D8E0066F32F /* french.srt */; };
+		ED2560BC21F3AA4600396F9B /* raspberry.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135521087D8E0066F32F /* raspberry.mp4 */; };
+		ED2560BD21F3AA4600396F9B /* bird.m4v in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135A21087D8E0066F32F /* bird.m4v */; };
+		ED2560BE21F3AA4600396F9B /* browser.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135C21087D8E0066F32F /* browser.mp4 */; };
+		ED2560BF21F3AA4600396F9B /* slovak.srt in Resources */ = {isa = PBXBuildFile; fileRef = CA1E135321087D8E0066F32F /* slovak.srt */; };
+		ED2560C721F3C72700396F9B /* DynamicMobileVLCKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D8939271B500D1C008F2B14 /* DynamicMobileVLCKit.framework */; };
+		ED2560C821F3CD7900396F9B /* libStaticLibVLC.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D89394E1B500DBC008F2B14 /* libStaticLibVLC.a */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -254,6 +290,13 @@
 			remoteGlobalIDString = 7D1329581BA304D900BE647E;
 			remoteInfo = TVVLCKit;
 		};
+		ED2560C521F3AA6500396F9B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 7D8939261B500D1C008F2B14;
+			remoteInfo = DynamicMobileVLCKit;
+		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -489,10 +532,13 @@
 		CAA9EFFE20D2549300CDBB2C /* TVVLCKitTests-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "TVVLCKitTests-Bridging-Header.h"; sourceTree = "<group>"; };
 		CAA9EFFF20D2549300CDBB2C /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		CAA9F00120D254A600CDBB2C /* VLCTimeTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VLCTimeTest.swift; sourceTree = "<group>"; };
+		CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VLCAudioTest.swift; sourceTree = "<group>"; };
 		CABEDAB721095242005FED09 /* VLCLibraryTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VLCLibraryTest.swift; sourceTree = "<group>"; };
 		CABF4D4020D8DBA900FCCE29 /* VLCMediaTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VLCMediaTest.swift; sourceTree = "<group>"; };
-		CABCBADD20EB0B080040E2F5 /* VLCAudioTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VLCAudioTest.swift; sourceTree = "<group>"; };
 		D2AAC07E0554694100DB518D /* libMobileVLCKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMobileVLCKit.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		ED25609A21F3A9FE00396F9B /* DynamicMobileVLCKitTests-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "DynamicMobileVLCKitTests-Bridging-Header.h"; path = "Tests/DynamicMobileVLCKitTests/DynamicMobileVLCKitTests-Bridging-Header.h"; sourceTree = SOURCE_ROOT; };
+		ED25609B21F3A9FE00396F9B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Tests/DynamicMobileVLCKitTests/Info.plist; sourceTree = SOURCE_ROOT; };
+		ED2560C321F3AA4600396F9B /* DynamicMobileVLCKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DynamicMobileVLCKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -598,6 +644,23 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		ED2560A921F3AA4600396F9B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED2560AA21F3AA4600396F9B /* AVFoundation.framework in Frameworks */,
+				ED2560AB21F3AA4600396F9B /* CoreFoundation.framework in Frameworks */,
+				ED2560AC21F3AA4600396F9B /* VideoToolbox.framework in Frameworks */,
+				ED2560AD21F3AA4600396F9B /* CoreMedia.framework in Frameworks */,
+				ED2560AE21F3AA4600396F9B /* AudioToolbox.framework in Frameworks */,
+				ED2560AF21F3AA4600396F9B /* libiconv.tbd in Frameworks */,
+				ED2560B021F3AA4600396F9B /* libbz2.tbd in Frameworks */,
+				ED2560B121F3AA4600396F9B /* libc++.tbd in Frameworks */,
+				ED2560C821F3CD7900396F9B /* libStaticLibVLC.a in Frameworks */,
+				ED2560C721F3C72700396F9B /* DynamicMobileVLCKit.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
@@ -612,6 +675,7 @@
 				7DB683C61C995E9A000C70BE /* libStaticTVLibvlc.a */,
 				CA0301CB20ADFD2500452BB8 /* MobileVLCKitTests.xctest */,
 				CAA03D0720C8DCDA001764DA /* TVVLCKitTests.xctest */,
+				ED2560C321F3AA4600396F9B /* DynamicMobileVLCKitTests.xctest */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -903,6 +967,7 @@
 				CA7BC88520F4418000C86820 /* Helper */,
 				CAA9F00020D254A600CDBB2C /* Sources */,
 				CAA9EFFD20D2549300CDBB2C /* TVVLCKitTests */,
+				ED25609921F3A98E00396F9B /* DynamicMobileVLCKitTests */,
 				CA0301CC20ADFD2500452BB8 /* MobileVLCKitTests */,
 			);
 			path = Tests;
@@ -929,6 +994,16 @@
 			path = Sources;
 			sourceTree = "<group>";
 		};
+		ED25609921F3A98E00396F9B /* DynamicMobileVLCKitTests */ = {
+			isa = PBXGroup;
+			children = (
+				ED25609A21F3A9FE00396F9B /* DynamicMobileVLCKitTests-Bridging-Header.h */,
+				ED25609B21F3A9FE00396F9B /* Info.plist */,
+			);
+			name = DynamicMobileVLCKitTests;
+			path = MobileVLCKitTests;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
@@ -941,12 +1016,16 @@
 				7DDC020C1B501ECF0078FC84 /* VLCMedia.h in Headers */,
 				7DDC020D1B501ECF0078FC84 /* VLCMediaThumbnailer.h in Headers */,
 				7DDC020E1B501ECF0078FC84 /* VLCMediaList.h in Headers */,
+				ED25609C21F3A9FE00396F9B /* DynamicMobileVLCKitTests-Bridging-Header.h in Headers */,
 				7DDC020F1B501ECF0078FC84 /* VLCMediaPlayer.h in Headers */,
 				7DDC02101B501ECF0078FC84 /* VLCMediaListPlayer.h in Headers */,
 				7DDC02111B501ECF0078FC84 /* VLCMediaDiscoverer.h in Headers */,
 				7DFDF4EB1C9AF27A00BA86A6 /* VLCDialogProvider.h in Headers */,
 				7DDC02121B501ECF0078FC84 /* VLCTime.h in Headers */,
+				ED25608A21F39FD100396F9B /* VLCTranscoder.h in Headers */,
 				7DDC02151B501ED70078FC84 /* VLCLibVLCBridging.h in Headers */,
+				ED25609521F3A3F800396F9B /* VLCRendererDiscoverer.h in Headers */,
+				ED25609621F3A3F800396F9B /* VLCRendererItem.h in Headers */,
 				7DDC02161B501ED70078FC84 /* VLCEventManager.h in Headers */,
 				7DFDF4E81C9AF25600BA86A6 /* VLCEmbeddedDialogProvider.h in Headers */,
 				7DFDF4E91C9AF25600BA86A6 /* VLCiOSLegacyDialogProvider.h in Headers */,
@@ -1125,6 +1204,25 @@
 			productReference = D2AAC07E0554694100DB518D /* libMobileVLCKit.a */;
 			productType = "com.apple.product-type.library.static";
 		};
+		ED25609D21F3AA4600396F9B /* DynamicMobileVLCKitTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = ED2560C021F3AA4600396F9B /* Build configuration list for PBXNativeTarget "DynamicMobileVLCKitTests" */;
+			buildPhases = (
+				ED2560A021F3AA4600396F9B /* ShellScript */,
+				ED2560A121F3AA4600396F9B /* Sources */,
+				ED2560A921F3AA4600396F9B /* Frameworks */,
+				ED2560B321F3AA4600396F9B /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				ED2560C621F3AA6500396F9B /* PBXTargetDependency */,
+			);
+			name = DynamicMobileVLCKitTests;
+			productName = "MobileVLCKit-iOSTests";
+			productReference = ED2560C321F3AA4600396F9B /* DynamicMobileVLCKitTests.xctest */;
+			productType = "com.apple.product-type.bundle.unit-test";
+		};
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
@@ -1159,6 +1257,9 @@
 						LastSwiftMigration = 0940;
 						ProvisioningStyle = Automatic;
 					};
+					ED25609D21F3AA4600396F9B = {
+						ProvisioningStyle = Automatic;
+					};
 				};
 			};
 			buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "MobileVLCKit" */;
@@ -1180,6 +1281,7 @@
 				7DB6837E1C995D39000C70BE /* DynamicTVVLCKit */,
 				7DB683C51C995E9A000C70BE /* StaticTVLibvlc */,
 				CA0301CA20ADFD2500452BB8 /* MobileVLCKitTests */,
+				ED25609D21F3AA4600396F9B /* DynamicMobileVLCKitTests */,
 				CAA03D0620C8DCDA001764DA /* TVVLCKitTests */,
 			);
 		};
@@ -1224,6 +1326,25 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		ED2560B321F3AA4600396F9B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED2560B421F3AA4600396F9B /* english.srt in Resources */,
+				ED2560B521F3AA4600396F9B /* salmon.mp4 in Resources */,
+				ED2560B621F3AA4600396F9B /* bunny.avi in Resources */,
+				ED2560B721F3AA4600396F9B /* portuguese.srt in Resources */,
+				ED2560B821F3AA4600396F9B /* sea_lions.mov in Resources */,
+				ED2560B921F3AA4600396F9B /* chinese-traditional.srt in Resources */,
+				ED2560BA21F3AA4600396F9B /* german.srt in Resources */,
+				ED2560BB21F3AA4600396F9B /* french.srt in Resources */,
+				ED2560BC21F3AA4600396F9B /* raspberry.mp4 in Resources */,
+				ED2560BD21F3AA4600396F9B /* bird.m4v in Resources */,
+				ED2560BE21F3AA4600396F9B /* browser.mp4 in Resources */,
+				ED2560BF21F3AA4600396F9B /* slovak.srt in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
@@ -1253,6 +1374,19 @@
 			shellPath = /bin/sh;
 			shellScript = "sh Tests/downloadTestAssets.sh\n";
 		};
+		ED2560A021F3AA4600396F9B /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "sh Tests/downloadTestAssets.sh\n";
+		};
 /* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -1281,6 +1415,9 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				ED25609321F3A3E800396F9B /* VLCRendererDiscoverer.m in Sources */,
+				ED25609421F3A3E800396F9B /* VLCRendererItem.m in Sources */,
+				ED25608E21F3A0F200396F9B /* VLCTranscoder.m in Sources */,
 				7D803EC11C8F2AB400864A9C /* VLCEmbeddedDialogProvider.m in Sources */,
 				7D6C89211C0CA90000321894 /* VLCAudio.m in Sources */,
 				7D8939401B500D50008F2B14 /* VLCEventManager.m in Sources */,
@@ -1389,6 +1526,20 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
+		ED2560A121F3AA4600396F9B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED2560A221F3AA4600396F9B /* VLCMediaTest.swift in Sources */,
+				ED2560A321F3AA4600396F9B /* XCTestHelper.swift in Sources */,
+				ED2560A421F3AA4600396F9B /* VLCMediaThumbnailerTest.swift in Sources */,
+				ED2560A521F3AA4600396F9B /* VLCTimeTest.swift in Sources */,
+				ED2560A621F3AA4600396F9B /* VLCAudioTest.swift in Sources */,
+				ED2560A721F3AA4600396F9B /* VLCLibraryTest.swift in Sources */,
+				ED2560A821F3AA4600396F9B /* Video.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
@@ -1402,6 +1553,11 @@
 			target = 7D1329581BA304D900BE647E /* TVVLCKit */;
 			targetProxy = CAA03D0D20C8DCDB001764DA /* PBXContainerItemProxy */;
 		};
+		ED2560C621F3AA6500396F9B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 7D8939261B500D1C008F2B14 /* DynamicMobileVLCKit */;
+			targetProxy = ED2560C521F3AA6500396F9B /* PBXContainerItemProxy */;
+		};
 /* End PBXTargetDependency section */
 
 /* Begin XCBuildConfiguration section */
@@ -1417,6 +1573,7 @@
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_OBJC_ARC = YES;
 				DSTROOT = /tmp/MobileVLCKit.dst;
+				ENABLE_BITCODE = YES;
 				ENABLE_NS_ASSERTIONS = NO;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				GCC_OPTIMIZATION_LEVEL = s;
@@ -1568,6 +1725,7 @@
 				CLANG_ENABLE_OBJC_ARC = YES;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DSTROOT = /tmp/MobileVLCKit.dst;
+				ENABLE_BITCODE = YES;
 				ENABLE_NS_ASSERTIONS = NO;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				GCC_OPTIMIZATION_LEVEL = 0;
@@ -1664,6 +1822,7 @@
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
@@ -2259,6 +2418,135 @@
 			};
 			name = Debug;
 		};
+		ED2560C121F3AA4600396F9B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++11";
+				CLANG_CXX_LIBRARY = "libstdc++";
+				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_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;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				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_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;
+				INFOPLIST_FILE = "Tests/$(PRODUCT_NAME)/Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 11.3;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				OTHER_LDFLAGS = "";
+				PRODUCT_BUNDLE_IDENTIFIER = "org.videolan.$(PRODUCT_NAME)";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_OBJC_BRIDGING_HEADER = "Tests/$(TARGET_NAME)/$(TARGET_NAME)-Bridging-Header.h";
+				SWIFT_OPTIMIZATION_LEVEL = "-O";
+				SWIFT_VERSION = 4.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		ED2560C221F3AA4600396F9B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++11";
+				CLANG_CXX_LIBRARY = "libstdc++";
+				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_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;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				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 = (
+					"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;
+				INFOPLIST_FILE = "Tests/$(PRODUCT_NAME)/Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 11.3;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = "";
+				PRODUCT_BUNDLE_IDENTIFIER = "org.videolan.$(PRODUCT_NAME)";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OBJC_BRIDGING_HEADER = "Tests/$(TARGET_NAME)/$(TARGET_NAME)-Bridging-Header.h";
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_VERSION = 4.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
@@ -2343,6 +2631,15 @@
 			defaultConfigurationIsVisible = 0;
 			defaultConfigurationName = Release;
 		};
+		ED2560C021F3AA4600396F9B /* Build configuration list for PBXNativeTarget "DynamicMobileVLCKitTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED2560C121F3AA4600396F9B /* Release */,
+				ED2560C221F3AA4600396F9B /* Debug */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 /* End XCConfigurationList section */
 	};
 	rootObject = 0867D690FE84028FC02AAC07 /* Project object */;

+ 56 - 0
MobileVLCKit.xcodeproj/xcshareddata/xcschemes/DynamicMobileVLCKitTests.xcscheme

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1010"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "ED25609D21F3AA4600396F9B"
+               BuildableName = "DynamicMobileVLCKitTests.xctest"
+               BlueprintName = "DynamicMobileVLCKitTests"
+               ReferencedContainer = "container:MobileVLCKit.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 13 - 0
Rakefile

@@ -34,6 +34,7 @@ SDK_SIM_DEST_TV = "'platform=tvOS Simulator,name=Apple TV,OS=11.3'"
 SDK_SIM_DEST_MAC = "'platform=OS X,arch=x86_64'"
 
 SCHEME_IOS = 'MobileVLCKitTests'
+SCHEME_IOS_DYNAMIC = 'DynamicMobileVLCKitTests'
 SCHEME_TV = 'TVVLCKitTests'
 SCHEME_MAC = 'VLCKitTests'
 
@@ -96,6 +97,12 @@ task 'test:ios' do
   sh "xcodebuild -derivedDataPath #{DERIVED_DATA_PATH}/#{SCHEME_IOS} -project #{PROJECT_IOS} -scheme #{SCHEME_IOS} -sdk #{SDK_SIM_IOS} -destination #{SDK_SIM_DEST_IOS} test | #{XCPRETTY}"
 end
 
+desc 'Run DynamicMobileVLCKit tests'
+task 'test:ios_dynamic' do
+  puts 'Running tests for DynamicMobileVLCKit'
+  sh "xcodebuild -derivedDataPath #{DERIVED_DATA_PATH}/#{SCHEME_IOS_DYNAMIC} -project #{PROJECT_IOS} -scheme #{SCHEME_IOS_DYNAMIC} -sdk #{SDK_SIM_IOS} -destination #{SDK_SIM_DEST_IOS} -UseModernBuildSystem=NO test | #{XCPRETTY}"
+end
+
 desc 'Run TVVLCKit tests'
 task 'test:tv' do
   puts 'Running tests for TVVLCKit'
@@ -114,6 +121,12 @@ task 'codecov:ios' do
   generate_coverage(SCHEME_IOS)
 end
 
+desc 'Generate DynamicMobileVLCKit coverage reports'
+task 'codecov:ios_dynamic' do
+  puts 'Generating DynamicMobileVLCKit code coverage reports'
+  generate_coverage(SCHEME_IOS_DYNAMIC)
+end
+
 desc 'Generate TVVLCKit code coverage reports'
 task 'codecov:tv' do
   puts 'Generating TVVLCKit code coverage reports'

+ 1 - 0
Tests/DynamicMobileVLCKitTests/DynamicMobileVLCKitTests-Bridging-Header.h

@@ -0,0 +1 @@
+#import <DynamicMobileVLCKit/DynamicMobileVLCKit.h>

+ 22 - 0
Tests/DynamicMobileVLCKitTests/Info.plist

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>

+ 1 - 1
Tests/Helper/Video.swift

@@ -32,7 +32,7 @@ struct Video {
     #if os(OSX)
         let bundle = Bundle(identifier: "org.videolan.VLCKitTests")!
     #elseif os(iOS)
-        let bundle = Bundle(identifier: "org.videolan.MobileVLCKitTests")!
+    let bundle = Bundle(identifier: "org.videolan.MobileVLCKitTests") != nil ? Bundle(identifier: "org.videolan.MobileVLCKitTests")! : Bundle(identifier: "org.videolan.DynamicMobileVLCKitTests")!
     #elseif os(tvOS)
         let bundle = Bundle(identifier: "org.videolan.TVVLCKitTests")!
     #endif