Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/workflows/of.yml
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,11 @@ jobs:
# fi
- name: Download libs
run: ./scripts/linux/download_libs.sh -t $RELEASE -a ${{matrix.cfg.libs}}
- name: Curl library check (before tests)
run: |
echo "=== libs/curl ==="; ls -lh libs/curl/lib/*/* 2>&1 | head -n 20
echo "=== curl ver ==="; cat libs/curl/include/curl/curlver.h 2>&1 | head -n 5
echo "=== system curl ==="; curl --version 2>&1 | head -n1
- name: Install dependencies
run: ./scripts/ci/linuxrpi/install.sh;
- name: LS
Expand Down Expand Up @@ -316,6 +321,11 @@ jobs:

- name: Download libs
run: ./scripts/linux/download_libs.sh -t $RELEASE -a ${{matrix.cfg.libs}}
- name: Curl library check (before tests)
run: |
echo "=== libs/curl ==="; ls -lh libs/curl/lib/*/* 2>&1 | head -n 20
echo "=== curl ver ==="; cat libs/curl/include/curl/curlver.h 2>&1 | head -n 5
echo "=== system curl ==="; curl --version 2>&1 | head -n1
- name: Install dependencies
run: ./scripts/ci/$TARGET/install.sh;
- name: Build
Expand Down Expand Up @@ -398,6 +408,14 @@ jobs:
- name: Download libs
run: ./scripts/${{ matrix.cfg.target }}/download_libs.sh -t $RELEASE

- name: Curl library check (before tests)
run: |
echo "=== libs/curl ==="; ls -lh libs/curl/lib/*/* 2>&1 | head -n 30
echo "=== curl ver ==="; cat libs/curl/include/curl/curlver.h 2>&1 | grep LIBCURL_VERSION | head -n 5
echo "=== openssl ==="; cat libs/openssl/include/openssl/opensslv.h 2>&1 | grep OPENSSL_VERSION_MAJOR | head -n 5
echo "=== apothecary curl protocols ==="; strings libs/curl/lib/macos/curl.xcframework/macos-arm64_x86_64/curl.a 2>&1 | grep -i "_Curl_http" | head -n 5; echo "http? $(strings libs/curl/lib/macos/curl.xcframework/macos-arm64_x86_64/curl.a 2>&1 | grep -q _Curl_http && echo yes || echo no)"
echo "=== system curl ==="; curl --version 2>&1 | head -n1

- name: Build
run: if [ ${{ matrix.cfg.opt }} = "xcode" ]; then
scripts/ci/${{ matrix.cfg.target }}/build.sh ${{ matrix.cfg.opt }};
Expand Down
127 changes: 118 additions & 9 deletions libs/openFrameworks/utils/ofURLFileLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@
#include "ofUtils.h"
#include "ofFileUtils.h"
#include "ofLog.h"
#include <ctime>
#include <cstdlib>
#if !defined(_WIN32) && !defined(TARGET_OS_WIN32)
#include <unistd.h>
#endif
#if defined(TARGET_OSX)
#include <stdlib.h>
#include <sys/random.h>
#endif

using std::map;
using std::set;
Expand All @@ -21,11 +30,41 @@ using std::string;
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/crypto.h>
#include <openssl/provider.h>
#include <iostream>
#include <fstream>

#define CERTIFICATE_FILE "cacert.pem"
#define PRIVATE_KEY_FILE "cacert.key"

// OpenSSL 4.x static DRBG fallback - only for 4.0+ where provider DRBG fetch fails
#if OPENSSL_VERSION_MAJOR >= 4
static int custom_rand_seed(const void *buf, int num) { RAND_add(buf, num, (double)num); return 1; }
static int custom_rand_bytes(unsigned char *buf, int num) {
#if defined(TARGET_OSX)
if(getentropy(buf, (size_t)num)==0) return 1;
arc4random_buf(buf, (size_t)num);
return 1;
#else
for(int i=0;i<num;++i) buf[i]=(unsigned char)(rand() & 0xFF);
return 1;
#endif
}
static void custom_rand_cleanup(void) {}
static int custom_rand_add(const void *buf, int num, double entropy) { RAND_add(buf, num, entropy); return 1; }
static int custom_rand_pseudorand(unsigned char *buf, int num) { return custom_rand_bytes(buf, num); }
static int custom_rand_status(void) { return 1; }
static RAND_METHOD custom_rand_method = {
custom_rand_seed,
custom_rand_bytes,
custom_rand_cleanup,
custom_rand_add,
custom_rand_pseudorand,
custom_rand_status
};
#endif

#endif

Expand Down Expand Up @@ -72,6 +111,16 @@ class ofURLFileLoaderImpl : public ofThread, public ofBaseURLFileLoader {
ofURLFileLoaderImpl::ofURLFileLoaderImpl() {
if (!curlInited) {
curl_global_init(CURL_GLOBAL_ALL);
#if !defined(NO_OPENSSL)
#if OPENSSL_VERSION_MAJOR >= 4
// OpenSSL 4.0 DRBG is in default provider - must load config/provider before RAND
OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG | OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
OSSL_PROVIDER_load(NULL, "default");
#endif
if(RAND_status() == 0) {
RAND_poll();
}
#endif
}
}

Expand Down Expand Up @@ -183,7 +232,7 @@ void ofURLFileLoaderImpl::createSSLCertificate() {
X509_gmtime_adj(X509_get_notBefore(x509), 0);
X509_gmtime_adj(X509_get_notAfter(x509), 31536000L); // 1 year
X509_set_pubkey(x509, pkey);
X509_NAME * name = X509_get_subject_name(x509);
X509_NAME * name = const_cast<X509_NAME *>(X509_get_subject_name(x509));
if (!name) {
X509_free(x509);
EVP_PKEY_free(pkey);
Expand Down Expand Up @@ -317,6 +366,52 @@ int progress_cb(void* ptr, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ulto
}

ofHttpResponse ofURLFileLoaderImpl::handleRequest(const ofHttpRequest & request) {
#if !defined(NO_OPENSSL)
#if OPENSSL_VERSION_MAJOR >= 4
// OpenSSL 4.0 static provider DRBG - fallback to arc4random when fetch fails
if(RAND_status()==0) {
OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG | OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
OSSL_PROVIDER_load(NULL, "default");
if(RAND_status()==0) {
RAND_set_rand_method(&custom_rand_method);
#ifdef DEBUG_CURL
ofLogVerbose("ofURLFileLoader") << "installed custom arc4random RAND_METHOD fallback";
#endif
}
}
#endif
for(int i=0; i<3 && RAND_status()==0; ++i) {
RAND_poll();
if(RAND_status()==0) {
unsigned char buf[256];
#if defined(TARGET_OSX)
if(getentropy(buf, sizeof(buf)) == 0) {
RAND_add(buf, sizeof(buf), sizeof(buf));
} else {
arc4random_buf(buf, sizeof(buf));
RAND_add(buf, sizeof(buf), sizeof(buf));
}
OPENSSL_cleanse(buf, sizeof(buf));
#endif
RAND_load_file("/dev/urandom", 256);
unsigned int seed = (unsigned int)time(nullptr) ^ (unsigned int)clock();
#if !defined(_WIN32) && !defined(TARGET_OS_WIN32)
seed ^= (unsigned int)getpid();
#endif
RAND_add(&seed, sizeof(seed), sizeof(seed));
OPENSSL_cleanse(&seed, sizeof(seed));
RAND_poll();
}
}
#ifdef DEBUG_CURL
if(RAND_status()==0) {
unsigned long e = ERR_get_error();
char ebuf[256]={0};
ERR_error_string_n(e, ebuf, sizeof(ebuf));
ofLogError("ofURLFileLoader") << "RAND_status still 0 err=" << e << " " << ebuf;
}
#endif
#endif
std::unique_ptr<CURL, void (*)(CURL *)> curl = std::unique_ptr<CURL, void (*)(CURL *)>(curl_easy_init(), curl_easy_cleanup);
if (!curl) {
ofLogError("ofURLFileLoader") << "curl_easy_init() failed!";
Expand All @@ -329,20 +424,34 @@ ofHttpResponse ofURLFileLoaderImpl::handleRequest(const ofHttpRequest & request)
if (ret != CURLE_OK) {
ofLogWarning() << "cURL error: " << curl_easy_strerror(ret);
}
if (version) {
std::string userAgent = std::string("curl/") + version->version;
curl_easy_setopt(curl.get(), CURLOPT_USERAGENT, userAgent.c_str());
} else {
curl_easy_setopt(curl.get(), CURLOPT_USERAGENT, "curl/unknown");
}
}
// Always set User-Agent - some hosts (Cloudflare, GitHub) block empty UA and cause http->https redirect test to fail
if (version) {
std::string userAgent = std::string("curl/") + version->version;
curl_easy_setopt(curl.get(), CURLOPT_USERAGENT, userAgent.c_str());
} else {
curl_easy_setopt(curl.get(), CURLOPT_USERAGENT, "curl/unknown");
}
if(version->features & CURL_VERSION_SSL) {
curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYHOST, 2L);
}
curl_easy_setopt(curl.get(), CURLOPT_URL, request.url.c_str());
ofLogVerbose("ofURLFileLoader") << "Request URL: '" << request.url << "'";
CURLcode urlRes = curl_easy_setopt(curl.get(), CURLOPT_URL, request.url.c_str());
if(urlRes != CURLE_OK) {
ofLogError("ofURLFileLoader") << "CURLOPT_URL failed for '" << request.url << "': " << curl_easy_strerror(urlRes);
return ofHttpResponse(request, -1, curl_easy_strerror(urlRes));
}
curl_easy_setopt(curl.get(), CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl.get(), CURLOPT_MAXREDIRS, 20L);
// curl 7.85.0+ uses _STR variants (deprecated bitmask); guard for 8.21+ / 7.85+
#if LIBCURL_VERSION_NUM >= 0x075500
curl_easy_setopt(curl.get(), CURLOPT_REDIR_PROTOCOLS_STR, "http,https");
curl_easy_setopt(curl.get(), CURLOPT_PROTOCOLS_STR, "http,https");
#else
curl_easy_setopt(curl.get(), CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_easy_setopt(curl.get(), CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
#endif

if (request.contentType != "") {
headers = curl_slist_append(headers, ("Content-Type: " + request.contentType).c_str());
Expand Down
2 changes: 1 addition & 1 deletion libs/openFrameworksCompiled/project/ios/CoreOF.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ OF_CORE_LIBS = $(MISC_FLAGS) $(LIB_OF)

OF_CORE_HEADERS = $(HEADER_OF) $(HEADER_OFXIOS) $(HEADER_UTF8) $(HEADER_FREETYPE) $(HEADER_FREETYPE2) $(HEADER_GLEW) $(HEADER_FREEIMAGE) $(HEADER_TESS2) $(HEADER_RTAUDIO) $(HEADER_JSON) $(HEADER_GLM) $(HEADER_FMT) $(HEADER_CURL) $(HEADER_URIPARSER) $(HEADER_PUGIXML) $(HEADER_OPENSSL)

OF_CORE_FRAMEWORKS = -framework AudioToolbox -framework Accelerate -framework AVFoundation -framework CoreAudio -framework CoreGraphics -framework CoreLocation -framework CoreMotion -framework CoreMedia -framework CoreVideo -framework Foundation -framework GameController -framework GLKit -framework MapKit -framework OpenAL -framework OpenGLES -framework UIKit -framework Security -framework QuartzCore -framework CoreHaptics -framework Metal
OF_CORE_FRAMEWORKS = -framework AudioToolbox -framework Accelerate -framework AVFoundation -framework CoreAudio -framework CoreGraphics -framework CoreLocation -framework CoreMotion -framework CoreMedia -framework CoreVideo -framework Foundation -framework GameController -framework GLKit -framework MapKit -framework OpenAL -framework OpenGLES -framework UIKit -framework Security -framework CFNetwork -framework QuartzCore -framework CoreHaptics -framework Metal


GCC_PREPROCESSOR_DEFINITIONS = $(inherited) GLES_SILENCE_DEPRECATION=1 GLM_FORCE_CTOR_INIT GLM_ENABLE_EXPERIMENTAL
Expand Down
2 changes: 1 addition & 1 deletion libs/openFrameworksCompiled/project/macos/CoreOF.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ OF_CORE_LIBS = $(MISC_FLAGS)

OF_CORE_HEADERS = $(HEADER_OF) $(HEADER_FREEIMAGE) $(HEADER_UTF8) $(HEADER_JSON) $(HEADER_GLM) $(HEADER_TESS2) $(HEADER_CAIRO) $(HEADER_RTAUDIO) $(HEADER_GLFW) $(HEADER_FREETYPE) $(HEADER_FREETYPE2) $(HEADER_CURL) $(HEADER_URIPARSER) $(HEADER_PUGIXML) $(HEADER_GLEW) $(HEADER_CURL) $(HEADER_OPENSSL) $(HEADER_BROTLI)

OF_CORE_FRAMEWORKS = -framework Accelerate -framework AGL -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework IOKit -framework OpenGL -framework QuartzCore -framework Security
OF_CORE_FRAMEWORKS = -framework Accelerate -framework AGL -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework IOKit -framework OpenGL -framework QuartzCore -framework Security -framework CFNetwork
//-framework AudioToolbox -framework Accelerate -framework AVFoundation -framework CoreAudio -framework CoreGraphics -framework CoreLocation -framework CoreMotion -framework CoreMedia -framework CoreVideo -framework Foundation -framework GameController -framework GLKit -framework MapKit -framework OpenAL -framework OpenGLES -framework UIKit -framework Security -framework QuartzCore -framework CoreHaptics
//

Expand Down
17 changes: 14 additions & 3 deletions libs/openFrameworksCompiled/project/macos/config.macos.default.mk
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,19 @@ ifeq ($(shell xcode-select -print-path 2> /dev/null; echo $$?),0)
MAC_OS_SDK_PATH=$(MAC_OS_XCODE_ROOT)/Platforms/MacOSX.platform/Developer/SDKs

ifndef MAC_OS_SDK
ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX14.5.sdk),$(MAC_OS_SDK_PATH)/MacOSX14.5.sdk)
ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.5.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.5.sdk)
MAC_OS_SDK=15.5
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.4.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.4.sdk)
MAC_OS_SDK=15.4
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.3.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.3.sdk)
MAC_OS_SDK=15.3
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.2.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.2.sdk)
MAC_OS_SDK=15.2
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.1.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.1.sdk)
MAC_OS_SDK=15.1
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.0.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.0.sdk)
MAC_OS_SDK=15.0
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX14.5.sdk),$(MAC_OS_SDK_PATH)/MacOSX14.5.sdk)
MAC_OS_SDK=14.5
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX14.4.sdk),$(MAC_OS_SDK_PATH)/MacOSX14.4.sdk)
MAC_OS_SDK=14.4
Expand Down Expand Up @@ -173,8 +185,6 @@ endif
#PLATFORM_CFLAGS += -funroll-all-loops
#PLATFORM_CFLAGS += -Os

#PLATFORM_CFLAGS += -arch i386

# other osx
PLATFORM_CFLAGS += -fpascal-strings

Expand Down Expand Up @@ -353,6 +363,7 @@ PLATFORM_FRAMEWORKS += IOKit
PLATFORM_FRAMEWORKS += OpenGL
PLATFORM_FRAMEWORKS += QuartzCore
PLATFORM_FRAMEWORKS += Security
PLATFORM_FRAMEWORKS += CFNetwork
PLATFORM_FRAMEWORKS += SystemConfiguration


Expand Down
2 changes: 1 addition & 1 deletion libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ LIB_OF_DEBUG = "$(OF_PATH)/libs/openFrameworksCompiled/lib/osx/openFrameworksDeb

OF_CORE_HEADERS = $(HEADER_OF) $(HEADER_FREETYPE) $(HEADER_FREETYPE2) $(HEADER_GLEW) $(HEADER_FREEIMAGE) $(HEADER_TESS2) $(HEADER_CAIRO) $(HEADER_RTAUDIO) $(HEADER_GLFW) $(HEADER_UTF8) $(HEADER_JSON) $(HEADER_GLM) $(HEADER_CURL) ${HEADER_SSL} $(HEADER_URIPARSER) $(HEADER_PUGIXML) ${HEADER_BROTLI}

OF_CORE_FRAMEWORKS = -framework Accelerate -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework Foundation -framework IOKit -framework OpenGL -framework QuartzCore -framework Security -framework SystemConfiguration -framework Metal
OF_CORE_FRAMEWORKS = -framework Accelerate -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework Foundation -framework IOKit -framework OpenGL -framework QuartzCore -framework Security -framework CFNetwork -framework SystemConfiguration -framework Metal



Expand Down
15 changes: 14 additions & 1 deletion libs/openFrameworksCompiled/project/osx/config.osx.default.mk
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,19 @@ ifeq ($(shell xcode-select -print-path 2> /dev/null; echo $$?),0)
MAC_OS_SDK_PATH=$(MAC_OS_XCODE_ROOT)/Platforms/MacOSX.platform/Developer/SDKs

ifndef MAC_OS_SDK
ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX14.5.sdk),$(MAC_OS_SDK_PATH)/MacOSX14.5.sdk)
ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.5.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.5.sdk)
MAC_OS_SDK=15.5
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.4.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.4.sdk)
MAC_OS_SDK=15.4
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.3.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.3.sdk)
MAC_OS_SDK=15.3
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.2.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.2.sdk)
MAC_OS_SDK=15.2
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.1.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.1.sdk)
MAC_OS_SDK=15.1
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX15.0.sdk),$(MAC_OS_SDK_PATH)/MacOSX15.0.sdk)
MAC_OS_SDK=15.0
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX14.5.sdk),$(MAC_OS_SDK_PATH)/MacOSX14.5.sdk)
MAC_OS_SDK=14.5
else ifeq ($(wildcard $(MAC_OS_SDK_PATH)/MacOSX14.4.sdk),$(MAC_OS_SDK_PATH)/MacOSX14.4.sdk)
MAC_OS_SDK=14.4
Expand Down Expand Up @@ -353,6 +365,7 @@ PLATFORM_FRAMEWORKS += IOKit
PLATFORM_FRAMEWORKS += OpenGL
PLATFORM_FRAMEWORKS += QuartzCore
PLATFORM_FRAMEWORKS += Security
PLATFORM_FRAMEWORKS += CFNetwork
PLATFORM_FRAMEWORKS += SystemConfiguration


Expand Down
2 changes: 1 addition & 1 deletion libs/openFrameworksCompiled/project/tvOS/CoreOF.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ OF_CORE_LIBS = $(MISC_FLAGS) $(LIB_OF)

OF_CORE_HEADERS = $(HEADER_OF) $(HEADER_OFXIOS) $(HEADER_UTF8) $(HEADER_FREETYPE) $(HEADER_FREETYPE2) $(HEADER_GLEW) $(HEADER_FREEIMAGE) $(HEADER_TESS2) $(HEADER_FMT) $(HEADER_RTAUDIO) $(HEADER_JSON) $(HEADER_GLM) $(HEADER_FMT) $(HEADER_CURL) $(HEADER_URIPARSER) $(HEADER_PUGIXML)

OF_CORE_FRAMEWORKS = -framework AudioToolbox -framework Accelerate -framework AVFoundation -framework CoreAudio -framework CoreGraphics -framework CoreLocation -framework CoreMedia -framework CoreVideo -framework Foundation -framework GameController -framework GLKit -framework MapKit -framework OpenAL -framework OpenGLES -framework UIKit -framework Security -framework QuartzCore -framework Metal -framework MetalKit
OF_CORE_FRAMEWORKS = -framework AudioToolbox -framework Accelerate -framework AVFoundation -framework CoreAudio -framework CoreGraphics -framework CoreLocation -framework CoreMedia -framework CoreVideo -framework Foundation -framework GameController -framework GLKit -framework MapKit -framework OpenAL -framework OpenGLES -framework UIKit -framework Security -framework CFNetwork -framework QuartzCore -framework Metal -framework MetalKit


DEAD_CODE_STRIPPING = YES
Expand Down
Loading
Loading