--- configure.ac
+++ configure.ac	2024-10-11 19:59:30
@@ -163,7 +163,7 @@
     OBJCFLAGS="${OBJCFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu99"
     LDFLAGS="${LDFLAGS} -Wl,-headerpad_max_install_names"
     VLC_ADD_LIBS([libvlc vlc],[-Wl,-undefined,dynamic_lookup,-framework,AppKit])
-    VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices])
+    VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices,-framework,SystemConfiguration])
 
     AC_EGREP_CPP(yes,
             [#import <TargetConditionals.h>

--- src/darwin/netconf.c
+++ src/darwin/netconf.c	2024-10-11 17:09:51
@@ -28,13 +28,12 @@
 #include <vlc_common.h>
 #include <vlc_network.h>
 
-#include <CoreFoundation/CoreFoundation.h>
-
 #import <TargetConditionals.h>
+#include <CoreFoundation/CoreFoundation.h>
 #if TARGET_OS_IPHONE
 #include <CFNetwork/CFProxySupport.h>
 #else
-#include <CoreServices/CoreServices.h>
+#include <SystemConfiguration/SystemConfiguration.h>
 #endif
 
 /**
@@ -45,6 +44,7 @@
 char *vlc_getProxyUrl(const char *url)
 {
     VLC_UNUSED(url);
+#if TARGET_OS_IPHONE
     char *proxy_url = NULL;
     CFDictionaryRef dicRef = CFNetworkCopySystemProxySettings();
     if (NULL != dicRef) {
@@ -73,4 +73,58 @@
     }
 
     return proxy_url;
+#else
+    CFDictionaryRef proxies = SCDynamicStoreCopyProxies(NULL);
+    char *proxy_url = NULL;
+
+    if (proxies) {
+        CFNumberRef cfn_httpProxyOn =
+            (CFNumberRef)CFDictionaryGetValue(proxies,
+                                              kSCPropNetProxiesHTTPEnable);
+        if (cfn_httpProxyOn) {
+            int i_httpProxyOn;
+            CFNumberGetValue(cfn_httpProxyOn, kCFNumberIntType, &i_httpProxyOn);
+            CFRelease(cfn_httpProxyOn);
+
+            if (i_httpProxyOn == 1) // http proxy is on
+            {
+                CFStringRef httpProxy =
+                    (CFStringRef)CFDictionaryGetValue(proxies,
+                                                      kSCPropNetProxiesHTTPProxy);
+
+                if (httpProxy) {
+                    CFNumberRef cfn_httpProxyPort =
+                        (CFNumberRef)CFDictionaryGetValue(proxies,
+                                                        kSCPropNetProxiesHTTPPort);
+                    int i_httpProxyPort;
+                    CFNumberGetValue(cfn_httpProxyPort,
+                                     kCFNumberIntType,
+                                     &i_httpProxyPort);
+                    CFRelease(cfn_httpProxyPort);
+
+                    CFMutableStringRef outputURL =
+                        CFStringCreateMutableCopy(kCFAllocatorDefault,
+                                                  0,
+                                                  httpProxy);
+                    if (i_httpProxyPort > 0)
+                        CFStringAppendFormat(outputURL,
+                                             NULL,
+                                             CFSTR(":%i"),
+                                             i_httpProxyPort);
+
+                    char buffer[4096];
+                    if (CFStringGetCString(outputURL, buffer, sizeof(buffer),
+                        kCFStringEncodingUTF8))
+                        proxy_url = strdup(buffer);
+
+                    CFRelease(outputURL);
+                }
+                CFRelease(httpProxy);
+            }
+        }
+        CFRelease(proxies);
+    }
+
+    return proxy_url;
+#endif
 }