diff --git a/multimedia/VLC/Portfile b/multimedia/VLC/Portfile
index 6d859d8..1b9d0c1 100644
--- a/multimedia/VLC/Portfile
+++ b/multimedia/VLC/Portfile
@@ -450,9 +450,12 @@ if {(${subport} eq ${name}) || (${subport} eq "lib${name}")} {
     # update 2.2.2 : lua 5.3 gives compiler syntax errors so we stick with 5.2 for now.
     patchfiles-append           patch-for-lua52.diff
 
+    # make 10.12 and later ignore all QTKit code in modules/gui/macosx/open.m
+    patchfiles-append           patch-really-no-qtkit.diff
+
     platform macosx {
         default_variants-append +quartz
-        if {[variant_exists qtkit]} {
+        if {${os.major} <= 15} {
             default_variants-append +qtkit
         }
 
diff --git a/multimedia/VLC/files/patch-really-no-qtkit.diff b/multimedia/VLC/files/patch-really-no-qtkit.diff
new file mode 100644
index 0000000..ff55b3a
--- /dev/null
+++ b/multimedia/VLC/files/patch-really-no-qtkit.diff
@@ -0,0 +1,197 @@
+--- modules/gui/macosx/orig.open.m	2016-12-17 19:55:54.000000000 +0100
++++ modules/gui/macosx/open.m	2016-12-17 20:26:12.000000000 +0100
+@@ -40,7 +40,14 @@
+ #import <IOKit/storage/IODVDMedia.h>
+ #import <IOKit/storage/IOBDMedia.h>
+ #import <Cocoa/Cocoa.h>
++#import <AvailabilityMacros.h>
++#if defined(MAC_OS_X_VERSION_10_12) \
++    && ((MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12) || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12))
++#warning "Excluding all code and features based on QTKit"
++#else
+ #import <QTKit/QTKit.h>
++#define HAVE_QTKIT
++#endif
+ 
+ #import "intf.h"
+ #import "playlist.h"
+@@ -51,8 +58,10 @@
+ 
+ #import <vlc_url.h>
+ 
++#ifdef HAVE_QTKIT
+ NSArray *qtkvideoDevices;
+ NSArray *qtkaudioDevices;
++#endif
+ #define setEyeTVUnconnected \
+ [o_capture_lbl setStringValue: _NS("No device is selected")]; \
+ [o_capture_long_lbl setStringValue: _NS("No device is selected.\n\nChoose available device in above pull-down menu.\n")]; \
+@@ -207,7 +216,9 @@
+     [o_screen_width_lbl setStringValue: [NSString stringWithFormat:@"%@:",_NS("Subscreen width")]];
+     [o_screen_height_lbl setStringValue: [NSString stringWithFormat:@"%@:",_NS("Subscreen height")]];
+     [o_screen_follow_mouse_ckb setTitle: _NS("Follow the mouse")];
++#ifdef HAVE_QTKIT
+     [o_screen_qtk_audio_ckb setTitle: _NS("Capture Audio")];
++#endif
+     [o_eyetv_currentChannel_lbl setStringValue: _NS("Current channel:")];
+     [o_eyetv_previousProgram_btn setTitle: _NS("Previous Channel")];
+     [o_eyetv_nextProgram_btn setTitle: _NS("Next Channel")];
+@@ -223,6 +234,7 @@
+     [o_file_starttime_fld setFormatter:[[[PositionFormatter alloc] init] autorelease]];
+     [o_file_stoptime_fld setFormatter:[[[PositionFormatter alloc] init] autorelease]];
+ 
++#ifdef HAVE_QTKIT
+     [self qtkvideoDevices];
+     [o_qtk_video_device_pop removeAllItems];
+     msg_Dbg(VLCIntf, "Found %lu video capture devices", [qtkvideoDevices count]);
+@@ -275,6 +287,7 @@
+         [o_screen_qtk_audio_pop addItemWithTitle: _NS("None")];
+         [qtkaudio_currdevice_uid release];
+     }
++#endif
+ 
+     [self setSubPanel];
+ 
+@@ -321,7 +334,9 @@
+     [[sharedWorkspace notificationCenter] addObserver:self selector:@selector(scanOpticalMedia:) name:NSWorkspaceDidMountNotification object:nil];
+     [[sharedWorkspace notificationCenter] addObserver:self selector:@selector(scanOpticalMedia:) name:NSWorkspaceDidUnmountNotification object:nil];
+ 
++#ifdef HAVE_QTKIT
+     [self qtkToggleUIElements:nil];
++#endif
+     [self scanOpticalMedia:nil];
+ 
+     [self setMRL: @""];
+@@ -504,16 +519,20 @@
+                     [o_options addObject: @"screen-follow-mouse"];
+                 else
+                     [o_options addObject: @"no-screen-follow-mouse"];
++#ifdef HAVE_QTKIT
+                 if ([o_screen_qtk_audio_ckb state] && qtkaudio_currdevice_uid)
+                    [o_options addObject: [NSString stringWithFormat: @"input-slave=qtsound://%@", qtkaudio_currdevice_uid]];
++#endif
+             }
+             else if ([[[o_capture_mode_pop selectedItem] title] isEqualToString: _NS("Input Devices")]) {
++#ifdef HAVE_QTKIT
+                 if ([o_qtk_video_ckb state]) {
+                     [o_options addObject: [NSString stringWithFormat: @"qtcapture-width=%i", [o_capture_width_fld intValue]]];
+                     [o_options addObject: [NSString stringWithFormat: @"qtcapture-height=%i", [o_capture_height_fld intValue]]];
+                     if ([o_qtk_audio_ckb state] && qtkaudio_currdevice_uid)
+                        [o_options addObject: [NSString stringWithFormat: @"input-slave=qtsound://%@", qtkaudio_currdevice_uid]];
+                 }
++#endif
+             }
+         }
+ 
+@@ -539,11 +558,14 @@
+     [o_screen_width_stp setMaxValue: item->rect.size.width];
+     [o_screen_height_stp setMaxValue: item->rect.size.height];
+ 
++#ifdef HAVE_QTKIT
+     [o_screen_qtk_audio_pop setEnabled: [o_screen_qtk_audio_ckb state]];
++#endif
+ }
+ 
+ - (IBAction)qtkChanged:(id)sender
+ {
++#ifdef HAVE_QTKIT
+     NSInteger i_selectedDevice = [o_qtk_video_device_pop indexOfSelectedItem];
+     if ([qtkvideoDevices count] >= 1) {
+         NSValue *sizes = [[[[qtkvideoDevices objectAtIndex:i_selectedDevice] formatDescriptions] objectAtIndex:0] attributeForKey: QTFormatDescriptionVideoEncodedPixelsSizeAttribute];
+@@ -554,20 +576,24 @@
+         [o_capture_height_stp setIntValue: [o_capture_height_fld intValue]];
+         qtk_currdevice_uid = [[(QTCaptureDevice *)[qtkvideoDevices objectAtIndex:i_selectedDevice] uniqueID] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
+     }
++#endif
+ }
+ 
+ - (IBAction)qtkAudioChanged:(id)sender
+ {
++#ifdef HAVE_QTKIT
+     NSInteger i_selectedDevice = [o_qtk_audio_device_pop indexOfSelectedItem];
+     if ([qtkaudioDevices count] >= 1) {
+         qtkaudio_currdevice_uid = [[(QTCaptureDevice *)[qtkaudioDevices objectAtIndex:i_selectedDevice] uniqueID] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
+     }
+     [o_screen_qtk_audio_pop selectItemAtIndex: i_selectedDevice];
+     [o_qtk_audio_device_pop selectItemAtIndex: i_selectedDevice];
++#endif
+ }
+ 
+ - (IBAction)qtkToggleUIElements:(id)sender
+ {
++#ifdef HAVE_QTKIT
+     [o_qtk_audio_device_pop setEnabled:[o_qtk_audio_ckb state]];
+     BOOL b_state = [o_qtk_video_ckb state];
+     [o_qtk_video_device_pop setEnabled:b_state];
+@@ -578,6 +604,7 @@
+     [self qtkAudioChanged:sender];
+     [self qtkChanged:sender];
+     [self openCaptureModeChanged:sender];
++#endif
+ }
+ 
+ #pragma mark -
+@@ -1402,18 +1429,22 @@
+         }
+     }
+     else if ([[[o_capture_mode_pop selectedItem] title] isEqualToString: _NS("Input Devices")]) {
++#ifdef HAVE_QTKIT
+         [self showCaptureView: o_qtk_view];
+         if ([o_capture_width_fld intValue] <= 0)
+             [self qtkChanged:nil];
+ 
+         [self qtkAudioChanged:nil];
++#endif
+ 
+         [self setMRL: @""];
+ 
++#ifdef HAVE_QTKIT
+         if ([o_qtk_video_ckb state] && qtk_currdevice_uid)
+             [self setMRL:[NSString stringWithFormat:@"qtcapture://%@", qtk_currdevice_uid]];
+         else if ([o_qtk_audio_ckb state] && qtkaudio_currdevice_uid)
+             [self setMRL:[NSString stringWithFormat:@"qtsound://%@", qtkaudio_currdevice_uid]];
++#endif
+     }
+ }
+ 
+@@ -1597,28 +1628,40 @@
+ 
+ - (NSArray *)qtkvideoDevices
+ {
++#ifdef HAVE_QTKIT
+     if (!qtkvideoDevices)
+         [self qtkrefreshVideoDevices];
+     return qtkvideoDevices;
++#else
++    return NULL;
++#endif
+ }
+ 
+ - (void)qtkrefreshVideoDevices
+ {
++#ifdef HAVE_QTKIT
+     [qtkvideoDevices release];
+     qtkvideoDevices = [[[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeVideo] arrayByAddingObjectsFromArray:[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeMuxed]] retain];
++#endif
+ }
+ 
+ - (NSArray *)qtkaudioDevices
+ {
++#ifdef HAVE_QTKIT
+     if (!qtkaudioDevices)
+         [self qtkrefreshAudioDevices];
+     return qtkaudioDevices;
++#else
++    return NULL;
++#endif
+ }
+ 
+ - (void)qtkrefreshAudioDevices
+ {
++#ifdef HAVE_QTKIT
+     [qtkaudioDevices release];
+     qtkaudioDevices = [[[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeSound] arrayByAddingObjectsFromArray:[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeMuxed]] retain];
++#endif
+ }
+ 
+ @end
