Przeglądaj źródła

Watch extension: translate extension delegate from swift 2 to ObjC

This way, we can link MLKit without turning it to a framework, we dramatically improve the storage footprint on the watch and launch time
Felix Paul Kühne 9 lat temu
rodzic
commit
0cb9384b0d

+ 0 - 84
VLC WatchKit Native Extension/Classes/ExtensionDelegate.swift

@@ -1,84 +0,0 @@
-/*****************************************************************************
-* ExtensionDelegate.swift
-* VLC for iOS
-*****************************************************************************
-* Copyright (c) 2015 VideoLAN. All rights reserved.
-* $Id$
-*
-* Authors: Tobias Conradi <videolan # tobias-conradi.de>
-*
-* Refer to the COPYING file of the official project for license.
-*****************************************************************************/
-
-import WatchKit
-import WatchConnectivity
-import CoreData
-import MediaLibraryKit
-
-class ExtensionDelegate: NSObject, WKExtensionDelegate, WCSessionDelegate, NSFileManagerDelegate {
-
-    func applicationDidFinishLaunching() {
-        // Perform any final initialization of your application.
-
-        let additionalOptions = [NSReadOnlyPersistentStoreOption : NSNumber(bool: true)]
-
-        let library = MLMediaLibrary.sharedMediaLibrary() as! MLMediaLibrary
-        library.additionalPersitentStoreOptions = additionalOptions
-
-        WCSession.defaultSession().delegate = self;
-        WCSession.defaultSession().activateSession()
-    }
-
-    func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
-        let msg = VLCWatchMessage(dictionary: message)
-        if msg.name == VLCWatchMessageNameNotification, let payloadDict = msg.payload as? [String : AnyObject] {
-            if let name = payloadDict["name"] as? String {
-                handleRemoteNotification(name, userInfo: payloadDict["userInfo"] as? [String : AnyObject])
-            }
-        }
-    }
-
-    func handleRemoteNotification(name:String, userInfo: [String: AnyObject]?) {
-        NSNotificationCenter.defaultCenter().postNotificationName(name, object: self, userInfo: userInfo)
-    }
-
-
-    func session(session: WCSession, didReceiveFile file: WCSessionFile) {
-        let fileType = file.metadata?["filetype"] as? String ?? ""
-        switch (fileType) {
-        case "coredata":
-            dispatch_sync(dispatch_get_main_queue())
-                {
-                    self.copyUpdatedCoreDataDBFromURL(file.fileURL)
-            }
-
-        case "thumbnail":
-            if let data = NSData(contentsOfURL: file.fileURL),
-                let image = UIImage(data: data),
-                let URIRepresentation = file.metadata?["URIRepresentation"] as? String,
-                let objectIDURL = NSURL(string: URIRepresentation) {
-                    setImage(image, forObjectIDURL: objectIDURL)
-            }
-
-        default:
-            NSLog("unandled file with meta data \(file.metadata)")
-        }
-    }
-
-    func copyUpdatedCoreDataDBFromURL(url:NSURL) {
-        let library = MLMediaLibrary.sharedMediaLibrary() as! MLMediaLibrary
-        library.overrideLibraryWithLibraryFromURL(url)
-        NSNotificationCenter.defaultCenter().postNotificationName(VLCDBUpdateNotification, object: self)
-    }
-
-    func setImage(image: UIImage, forObjectIDURL objectIDURL: NSURL) {
-        let library = MLMediaLibrary.sharedMediaLibrary()
-        if let file = library.objectForURIRepresentation(objectIDURL) as? MLFile {
-            file.managedObjectContext?.performBlock({ () -> Void in
-                file.computedThumbnail = image
-            })
-        }
-
-    }
-
-}

+ 18 - 0
VLC WatchKit Native Extension/Classes/VLCExtensionDelegate.h

@@ -0,0 +1,18 @@
+/*****************************************************************************
+ * VLCExtensionDelegate.h
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2015-2016 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Tobias Conradi <videolan # tobias-conradi.de>
+ *          Felix Paul Kühne <fkuehne # videolan.org>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+#import <WatchKit/WatchKit.h>
+
+@interface VLCExtensionDelegate : NSObject <WKExtensionDelegate>
+
+@end

+ 91 - 0
VLC WatchKit Native Extension/Classes/VLCExtensionDelegate.m

@@ -0,0 +1,91 @@
+/*****************************************************************************
+ * VLCExtensionDelegate.m
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2015-2016 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Tobias Conradi <videolan # tobias-conradi.de>
+ *          Felix Paul Kühne <fkuehne # videolan.org>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+#import "VLCExtensionDelegate.h"
+#import <WatchConnectivity/WatchConnectivity.h>
+#import <CoreData/CoreData.h>
+#import <MediaLibraryKit/MediaLibraryKit.h>
+#import "VLCWatchMessage.h"
+#import "VLCBaseInterfaceController.h"
+
+@interface VLCExtensionDelegate() <NSFileManagerDelegate, WCSessionDelegate>
+
+@end
+
+@implementation VLCExtensionDelegate 
+
+- (void)applicationDidFinishLaunching
+{
+    MLMediaLibrary *library = [MLMediaLibrary sharedMediaLibrary];
+    library.additionalPersitentStoreOptions = @{ NSReadOnlyPersistentStoreOption : @(YES) };
+
+    WCSession *wcsession = [WCSession defaultSession];
+    wcsession.delegate = self;
+    [wcsession activateSession];
+}
+
+- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message
+{
+    VLCWatchMessage *msg = [[VLCWatchMessage alloc] initWithDictionary:message];
+    if ([msg.name isEqualToString: VLCWatchMessageNameNotification]) {
+        NSDictionary *payloadDict = (NSDictionary *)msg.payload;
+        NSString *name = payloadDict[@"name"];
+        if (name) {
+            [[NSNotificationCenter defaultCenter] postNotificationName:name
+                                                                object:self
+                                                              userInfo:payloadDict[@"userInfo"]];
+        }
+    }
+}
+
+- (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file
+{
+    NSString *fileType = file.metadata[@"filetype"];
+    if ([fileType isEqualToString:@"coredata"]) {
+        dispatch_sync(dispatch_get_main_queue(), ^{
+            [self copyUpdatedCoreDataDBFromURL:file.fileURL];
+        });
+    }
+    if ([fileType isEqualToString:@"thumbnail"]) {
+        [self copyThumbnailToDatabase:file];
+    }
+}
+
+- (void)copyUpdatedCoreDataDBFromURL:(NSURL *)url
+{
+    MLMediaLibrary *library = [MLMediaLibrary sharedMediaLibrary];
+    [library overrideLibraryWithLibraryFromURL:url];
+    [[NSNotificationCenter defaultCenter] postNotificationName:VLCDBUpdateNotification
+                                                        object:self];
+}
+
+- (void)copyThumbnailToDatabase:(WCSessionFile *)file
+{
+    NSData *data = [NSData dataWithContentsOfURL:file.fileURL];
+    if (!data) {
+        return;
+    }
+    UIImage *image = [UIImage imageWithData:data];
+    if (!image) {
+        return;
+    }
+    NSString *uriRepresentation = file.metadata[@"URIRepresentation"];
+    NSURL *objectIDURL = [NSURL URLWithString:uriRepresentation];
+    if (objectIDURL) {
+        MLMediaLibrary *library = [MLMediaLibrary sharedMediaLibrary];
+        MLFile *file = (MLFile *)[library objectForURIRepresentation:objectIDURL];
+        file.computedThumbnail = image;
+    }
+}
+
+@end

+ 1 - 1
VLC WatchKit Native Extension/Info.plist

@@ -37,6 +37,6 @@
 	<key>RemoteInterfacePrincipalClass</key>
 	<string>$(PRODUCT_MODULE_NAME).InterfaceController</string>
 	<key>WKExtensionDelegateClassName</key>
-	<string>$(PRODUCT_MODULE_NAME).ExtensionDelegate</string>
+	<string>VLCExtensionDelegate</string>
 </dict>
 </plist>

+ 12 - 36
VLC.xcodeproj/project.pbxproj

@@ -464,6 +464,7 @@
 		7D787FE71D40FDE70003CFA1 /* VLCFirstStepsSixthPageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7D63C1981877504B00BD5256 /* VLCFirstStepsSixthPageViewController~ipad.xib */; };
 		7D787FE81D40FDE70003CFA1 /* web-download-fixed.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DF04F491961F2B8004A5429 /* web-download-fixed.png */; };
 		7D787FE91D40FDE70003CFA1 /* VLCDownloadViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7D89786E185DED88009BAB5D /* VLCDownloadViewController.xib */; };
+		7D7BD28D1D424532000CE8DC /* VLCTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D7BD28C1D424532000CE8DC /* VLCTime.m */; };
 		7D7EF3DA1BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D7EF3D81BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.m */; };
 		7D7EF3DB1BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7D7EF3D91BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib */; };
 		7D7EF3DD1BD5779F00CD4CEE /* VLCPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE56C191AD93F9100E8CA00 /* VLCPlaybackController.m */; };
@@ -743,6 +744,7 @@
 		7DF90B4A1BE7A8110059C0E3 /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B471BE7A8110059C0E3 /* IASKSettingsReader.m */; };
 		7DF90B4B1BE7A8110059C0E3 /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B491BE7A8110059C0E3 /* IASKSpecifier.m */; };
 		7DF9352F1958AB0600E60FD4 /* UIColor+Presets.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */; };
+		7DFFD4071D42436B00A41B0A /* VLCExtensionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DFFD4061D42436B00A41B0A /* VLCExtensionDelegate.m */; };
 		8F91EC79195CEC7900F5BCBA /* VLCOpenInActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F91EC78195CEC7900F5BCBA /* VLCOpenInActivity.m */; };
 		8F91EC7F195E1DAB00F5BCBA /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F91EC7E195E1DAB00F5BCBA /* AssetsLibrary.framework */; };
 		9B088308183D7BEC004B5C2A /* VLCCloudStorageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B088307183D7BEC004B5C2A /* VLCCloudStorageTableViewController.m */; };
@@ -752,7 +754,6 @@
 		9FD8417AA2C6306D76519229 /* libPods-VLC-iOS-no-watch-Debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A3EA27A14A54C78CBB17BC6D /* libPods-VLC-iOS-no-watch-Debug.a */; };
 		A79246C8170F11DF0036AAF2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A79246C6170F11DF0036AAF2 /* Localizable.strings */; };
 		C5C027C7696428123B3AB144 /* libPods-VLC-iOS-no-watch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DD533B1D45EEA70099433D8 /* libPods-VLC-iOS-no-watch.a */; };
-		C7E12487F4C2ADB76385245B /* libPods-vlc-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DEAD87A672248D0A6790405 /* libPods-vlc-ios.a */; };
 		CC1BBC461704938300A20CBF /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1BBC451704938300A20CBF /* libiconv.dylib */; };
 		CC1BBC4C1704939B00A20CBF /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1BBC4B1704939B00A20CBF /* libsqlite3.dylib */; };
 		CC1BBC4E170493A300A20CBF /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1BBC4D170493A300A20CBF /* libbz2.dylib */; };
@@ -784,8 +785,6 @@
 		DD35678A1B67618F00338947 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD3567891B67618F00338947 /* CoreData.framework */; };
 		DD35678C1B67619700338947 /* WatchKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD35678B1B67619700338947 /* WatchKit.framework */; };
 		DD3567901B6761CE00338947 /* WatchConnectivity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD35678F1B6761CD00338947 /* WatchConnectivity.framework */; };
-		DD3567B41B67674700338947 /* VLCTime.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3567B31B67674700338947 /* VLCTime.m */; };
-		DD3567EF1B6768FC00338947 /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3567D91B6768FC00338947 /* ExtensionDelegate.swift */; };
 		DD3567F21B6768FC00338947 /* VLCBaseInterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3567E01B6768FC00338947 /* VLCBaseInterfaceController.m */; };
 		DD3567F31B6768FC00338947 /* VLCDetailInterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3567E21B6768FC00338947 /* VLCDetailInterfaceController.m */; };
 		DD3567F51B6768FC00338947 /* VLCNowPlayingInterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3567E61B6768FC00338947 /* VLCNowPlayingInterfaceController.m */; };
@@ -852,7 +851,6 @@
 		DD510B701B14E564003BA71C /* VLCPlayerDisplayController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD510B6F1B14E564003BA71C /* VLCPlayerDisplayController.m */; };
 		DD7110F01AF38B2B00854776 /* MLMediaLibrary+playlist.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7110EF1AF38B2B00854776 /* MLMediaLibrary+playlist.m */; };
 		DD729EB7E7F949CBECE29930 /* libPods-VLC-tvOS-Debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB3C4D1992DBF2B53F985CE /* libPods-VLC-tvOS-Debug.a */; };
-		DD7BA2641B680C8E002D9F54 /* MediaLibraryKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DD7BA2601B680C1B002D9F54 /* MediaLibraryKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		DD8095D61BE3C3BA0065D8E1 /* VLCTransportBar.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095D51BE3C3BA0065D8E1 /* VLCTransportBar.m */; };
 		DD8095DB1BE3C42F0065D8E1 /* VLCBufferingBar.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095DA1BE3C42F0065D8E1 /* VLCBufferingBar.m */; };
 		DD8095E01BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095DE1BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m */; };
@@ -1053,17 +1051,6 @@
 			name = "Embed Watch Content";
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		DD7BA2651B680C8E002D9F54 /* Embed Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				DD7BA2641B680C8E002D9F54 /* MediaLibraryKit.framework in Embed Frameworks */,
-			);
-			name = "Embed Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
@@ -1333,6 +1320,8 @@
 		7D787F121D40FDD90003CFA1 /* VLC-iOS-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "VLC-iOS-Debug-Info.plist"; path = "/Users/fkuehne/Desktop/videolan/gits/ios-unstable/VLC-iOS-Debug-Info.plist"; sourceTree = "<absolute>"; };
 		7D787FEE1D40FDE70003CFA1 /* VLC-iOS-no-watch-Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "VLC-iOS-no-watch-Debug.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		7D787FEF1D40FDE70003CFA1 /* VLC-iOS-no-watch-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "VLC-iOS-no-watch-Debug-Info.plist"; path = "/Users/fkuehne/Desktop/videolan/gits/ios-unstable/VLC-iOS-no-watch-Debug-Info.plist"; sourceTree = "<absolute>"; };
+		7D7BD28B1D424532000CE8DC /* VLCTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCTime.h; sourceTree = "<group>"; };
+		7D7BD28C1D424532000CE8DC /* VLCTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCTime.m; sourceTree = "<group>"; };
 		7D7DA52F1768A53200C7E95D /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; lineEnding = 0; name = id; path = id.lproj/Localizable.strings; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.simpleColoring; };
 		7D7EF3D71BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCOpenNetworkStreamTVViewController.h; sourceTree = "<group>"; };
 		7D7EF3D81BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCOpenNetworkStreamTVViewController.m; sourceTree = "<group>"; };
@@ -1475,6 +1464,8 @@
 		7DF90B491BE7A8110059C0E3 /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSpecifier.m; path = Pods/InAppSettingsKit/InAppSettingsKit/Models/IASKSpecifier.m; sourceTree = SOURCE_ROOT; };
 		7DF9352D1958AB0600E60FD4 /* UIColor+Presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIColor+Presets.h"; path = "Sources/UIColor+Presets.h"; sourceTree = SOURCE_ROOT; };
 		7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Presets.m"; path = "Sources/UIColor+Presets.m"; sourceTree = SOURCE_ROOT; };
+		7DFFD4051D42436B00A41B0A /* VLCExtensionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCExtensionDelegate.h; sourceTree = "<group>"; };
+		7DFFD4061D42436B00A41B0A /* VLCExtensionDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCExtensionDelegate.m; sourceTree = "<group>"; };
 		7F82CE64560C0AD3059DAAFC /* libPods-VLC-watchOS-Extension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VLC-watchOS-Extension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
 		88E35CB83D336559A656FDA3 /* Pods-VLC-iOS-no-watch.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-iOS-no-watch.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-iOS-no-watch/Pods-VLC-iOS-no-watch.distribution.xcconfig"; sourceTree = "<group>"; };
 		8939257D0D04F9AFF766DEA5 /* libPods-VLC-TV.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VLC-TV.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1541,9 +1532,6 @@
 		DD3567891B67618F00338947 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS2.0.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; };
 		DD35678B1B67619700338947 /* WatchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WatchKit.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS2.0.sdk/System/Library/Frameworks/WatchKit.framework; sourceTree = DEVELOPER_DIR; };
 		DD35678F1B6761CD00338947 /* WatchConnectivity.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WatchConnectivity.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS2.0.sdk/System/Library/Frameworks/WatchConnectivity.framework; sourceTree = DEVELOPER_DIR; };
-		DD3567B31B67674700338947 /* VLCTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCTime.m; path = ImportedSources/VLCKit/Sources/VLCTime.m; sourceTree = SOURCE_ROOT; };
-		DD3567B51B67675400338947 /* VLCTime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VLCTime.h; path = ImportedSources/VLCKit/Headers/Public/VLCTime.h; sourceTree = SOURCE_ROOT; };
-		DD3567D91B6768FC00338947 /* ExtensionDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = "<group>"; };
 		DD3567DD1B6768FC00338947 /* VLC for iOS WatchKit Extension-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VLC for iOS WatchKit Extension-Prefix.pch"; sourceTree = "<group>"; };
 		DD3567DF1B6768FC00338947 /* VLCBaseInterfaceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCBaseInterfaceController.h; sourceTree = "<group>"; };
 		DD3567E01B6768FC00338947 /* VLCBaseInterfaceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCBaseInterfaceController.m; sourceTree = "<group>"; };
@@ -1832,7 +1820,6 @@
 				7D94FCDF16DE7D1000F2623B /* UIKit.framework in Frameworks */,
 				7D94FCE116DE7D1000F2623B /* Foundation.framework in Frameworks */,
 				7D94FCE316DE7D1000F2623B /* CoreGraphics.framework in Frameworks */,
-				C7E12487F4C2ADB76385245B /* libPods-vlc-ios.a in Frameworks */,
 				D7FBC862832B766D0E814251 /* libPods-VLC-iOS.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -2872,7 +2859,6 @@
 		DD3567741B6760BF00338947 /* VLC WatchKit Native Extension */ = {
 			isa = PBXGroup;
 			children = (
-				DD3567B11B67672600338947 /* Linked from VLCKit */,
 				DD3567D81B6768FC00338947 /* Classes */,
 				DD3567791B6760BF00338947 /* Assets.xcassets */,
 				DD35677B1B6760BF00338947 /* Info.plist */,
@@ -2883,19 +2869,11 @@
 			path = "VLC WatchKit Native Extension";
 			sourceTree = "<group>";
 		};
-		DD3567B11B67672600338947 /* Linked from VLCKit */ = {
-			isa = PBXGroup;
-			children = (
-				DD3567B51B67675400338947 /* VLCTime.h */,
-				DD3567B31B67674700338947 /* VLCTime.m */,
-			);
-			name = "Linked from VLCKit";
-			sourceTree = "<group>";
-		};
 		DD3567D81B6768FC00338947 /* Classes */ = {
 			isa = PBXGroup;
 			children = (
-				DD3567D91B6768FC00338947 /* ExtensionDelegate.swift */,
+				7DFFD4051D42436B00A41B0A /* VLCExtensionDelegate.h */,
+				7DFFD4061D42436B00A41B0A /* VLCExtensionDelegate.m */,
 				DD3567DF1B6768FC00338947 /* VLCBaseInterfaceController.h */,
 				DD3567E01B6768FC00338947 /* VLCBaseInterfaceController.m */,
 				DD3567E11B6768FC00338947 /* VLCDetailInterfaceController.h */,
@@ -2912,6 +2890,8 @@
 				DD3567EE1B6768FC00338947 /* WKInterfaceObject+VLCProgress.m */,
 				DD9FBE751BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.h */,
 				DD9FBE761BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.m */,
+				7D7BD28B1D424532000CE8DC /* VLCTime.h */,
+				7D7BD28C1D424532000CE8DC /* VLCTime.m */,
 			);
 			path = Classes;
 			sourceTree = "<group>";
@@ -3290,7 +3270,6 @@
 				DD35676C1B6760BF00338947 /* Sources */,
 				DD35676D1B6760BF00338947 /* Frameworks */,
 				DD35676E1B6760BF00338947 /* Resources */,
-				DD7BA2651B680C8E002D9F54 /* Embed Frameworks */,
 				C3FF685CCF4274D0E761AEDC /* [CP] Embed Pods Frameworks */,
 				706871891E2E53274143218F /* [CP] Copy Pods Resources */,
 			);
@@ -4646,16 +4625,16 @@
 			buildActionMask = 2147483647;
 			files = (
 				DD3567F91B6768FC00338947 /* WKInterfaceObject+VLCProgress.m in Sources */,
-				DD3567EF1B6768FC00338947 /* ExtensionDelegate.swift in Sources */,
+				7D7BD28D1D424532000CE8DC /* VLCTime.m in Sources */,
 				DD3567F81B6768FC00338947 /* VLCWatchTableController.m in Sources */,
 				DD3567F61B6768FC00338947 /* VLCPlaylistInterfaceController.m in Sources */,
 				DD2789E51B67A8F000CED769 /* MLMediaLibrary+playlist.m in Sources */,
 				DDB7C6A41BAEB28200E6570E /* WKInterfaceController+VLCConnectionAlert.m in Sources */,
+				7DFFD4071D42436B00A41B0A /* VLCExtensionDelegate.m in Sources */,
 				DD3567F31B6768FC00338947 /* VLCDetailInterfaceController.m in Sources */,
 				DD2789DE1B67A5CD00CED769 /* VLCWatchMessage.m in Sources */,
 				DD3567F71B6768FC00338947 /* VLCRowController.m in Sources */,
 				DD3567F21B6768FC00338947 /* VLCBaseInterfaceController.m in Sources */,
-				DD3567B41B67674700338947 /* VLCTime.m in Sources */,
 				DD2789DD1B67A5C400CED769 /* VLCThumbnailsCache.m in Sources */,
 				DD3567F51B6768FC00338947 /* VLCNowPlayingInterfaceController.m in Sources */,
 			);
@@ -5706,7 +5685,6 @@
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				DEBUG_INFORMATION_FORMAT = dwarf;
-				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_OPTIMIZATION_LEVEL = 0;
@@ -5745,7 +5723,6 @@
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
 				ENABLE_NS_ASSERTIONS = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_NO_COMMON_BLOCKS = YES;
@@ -5783,7 +5760,6 @@
 				"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
 				ENABLE_NS_ASSERTIONS = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_NO_COMMON_BLOCKS = YES;