Skip to content

Commit 02d2448

Browse files
committed
[StoreKit2] Fix Xcode 15 dyld launch crashes on iOS <=16 and update documentation
This commit resolves several known compiler and runtime issues when compiling C++ alongside modern Swift (Concurrency) using Xcode 15+ for deployment on iOS 15/16: 1. `swift_task_alloc` (EXC_BAD_ACCESS): Mixing Swift Concurrency with `@objc` interfaces and C++ pointers on older runtimes causes memory segmentation faults. We introduced an Objective-C++ Block Barrier to keep C pointers on the C++ side (`analytics_ios.mm`) and used a detached `Task` with a pure Swift struct (`AppleTransactionVerifier.swift`) to safely isolate the async `Transaction.all` loop from the bridging boundary. 2. `AsyncIteratorProtocol` (Witness Table Corruption): Using a `for await` loop within an `@objc` class on iOS 15/16 triggers a known Xcode 15+ compiler bug leading to a runtime crash. We bypassed this by extracting the logic into a pure Swift struct and replacing the `for await` loop with manual `while let ... = await iterator.next()` iteration. 3. `__libcpp_verbose_abort`: Xcode 15 requires this symbol for C++ exception handling, but it is missing from the iOS 15/16 system `libc++`. We disabled verbose abort globally via `CMakeLists.txt` and provided a weak fallback implementation in `app_framework.cc` for integration tests to prevent a `dyld` launch crash. 4. `libswift_Concurrency.dylib`: The Swift compiler sometimes fails to weak-link the Concurrency backward compatibility library in Objective-C++ projects. We now natively inject `-Wl,-weak-lswift_Concurrency` into all integration test Xcode projects during `setup_integration_tests.py`. Internal dialog comments have been cleaned up and replaced with professional explanations suitable for open-source maintainers. Documentation in `release_build_files/readme.md` has been updated to provide clear instructions for manual C++ integrators to apply these linker/compiler flags if they experience similar crashes.
1 parent 42aa8db commit 02d2448

22 files changed

Lines changed: 285 additions & 59 deletions

File tree

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ if(DESKTOP AND APPLE)
161161
endif()
162162

163163
if(APPLE)
164+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_DISABLE_AVAILABILITY -D_LIBCPP_HAS_NO_VERBOSE_ABORT")
164165
# For iOS and macOS, disable nullability completeness warning, as it makes the
165166
# build output for our Objective-C++ files much too verbose.
166167
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-nullability-completeness")
@@ -365,6 +366,7 @@ endif()
365366
# Include Firestore's external build early to resolve conflicts on packages.
366367
if(FIRESTORE_USE_EXTERNAL_CMAKE_BUILD)
367368
if(APPLE)
369+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_DISABLE_AVAILABILITY -D_LIBCPP_HAS_NO_VERBOSE_ABORT")
368370
# On Apple, set GRPC_BAZEL_BUILD to fix an issue with __thread.
369371
# Setting this define makes gRPC use pthread's thread-local storage
370372
# instead of GCC's.
@@ -486,6 +488,7 @@ if(DESKTOP)
486488
-DUSE_LIBUV=1
487489
)
488490
elseif(APPLE)
491+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_DISABLE_AVAILABILITY -D_LIBCPP_HAS_NO_VERBOSE_ABORT")
489492
set(websockets_additional_defines
490493
${websockets_additional_defines}
491494
-DUSE_LIBUV=1

analytics/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ set(android_SRCS
7373
# Source files used by the iOS implementation.
7474
set(ios_SRCS
7575
src/analytics_ios.mm
76-
src/ios/swift/StoreKit2Bridge.swift)
76+
src/ios/swift/AppleTransactionVerifier.swift)
7777

7878
# Source files used by the desktop / stub implementation.
7979
set(desktop_SRCS

analytics/integration_test/integration_test.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,8 @@
375375
529226F71C85F68000C89379 /* Debug */ = {
376376
isa = XCBuildConfiguration;
377377
buildSettings = {
378+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
379+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
378380
ALWAYS_SEARCH_USER_PATHS = NO;
379381
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
380382
CLANG_CXX_LIBRARY = "libc++";
@@ -418,6 +420,8 @@
418420
529226F81C85F68000C89379 /* Release */ = {
419421
isa = XCBuildConfiguration;
420422
buildSettings = {
423+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
424+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
421425
ALWAYS_SEARCH_USER_PATHS = NO;
422426
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
423427
CLANG_CXX_LIBRARY = "libc++";
@@ -455,6 +459,8 @@
455459
529226FA1C85F68000C89379 /* Debug */ = {
456460
isa = XCBuildConfiguration;
457461
buildSettings = {
462+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
463+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
458464
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
459465
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
460466
CLANG_ENABLE_MODULES = YES;
@@ -487,6 +493,8 @@
487493
529226FB1C85F68000C89379 /* Release */ = {
488494
isa = XCBuildConfiguration;
489495
buildSettings = {
496+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
497+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
490498
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
491499
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
492500
CLANG_ENABLE_MODULES = YES;
@@ -518,6 +526,8 @@
518526
BC1D665F2668D10A005DC2DA /* Debug */ = {
519527
isa = XCBuildConfiguration;
520528
buildSettings = {
529+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
530+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
521531
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
522532
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
523533
CLANG_ANALYZER_NONNULL = YES;
@@ -572,6 +582,8 @@
572582
BC1D66602668D10A005DC2DA /* Release */ = {
573583
isa = XCBuildConfiguration;
574584
buildSettings = {
585+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
586+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
575587
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
576588
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
577589
CLANG_ANALYZER_NONNULL = YES;

analytics/src/analytics_ios.mm

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,14 @@ void CompleteLogAppleTransaction(const void* context, bool success) {
269269

270270
SafeFutureHandle<void>* handle_ptr = new SafeFutureHandle<void>(future_handle);
271271

272-
[StoreKit2Bridge logTransaction:SafeString(transaction_id)
273-
context:handle_ptr
274-
completion:CompleteLogAppleTransaction];
272+
// 2. Call Swift using a standard Objective-C block.
273+
// We capture the C++ handle_ptr inside the Objective-C block. Swift never sees it.
274+
[AppleTransactionVerifier verifyWithTransactionId:SafeString(transaction_id)
275+
completion:^(BOOL isFound) {
276+
// 3. We are back in C++ land on the Main Thread.
277+
// Call your completion logic directly.
278+
CompleteLogAppleTransaction(handle_ptr, isFound == YES);
279+
}];
275280

276281
return Future<void>(api, future_handle.get());
277282
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright 2026 Google
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
import Foundation
16+
import StoreKit
17+
import FirebaseAnalytics
18+
19+
// Pure Swift worker to prevent compiler generation bugs with witness tables
20+
// when mixing @objc and Swift Concurrency on older iOS deployment targets.
21+
@available(iOS 15.0, tvOS 15.0, macOS 12.0, watchOS 8.0, *)
22+
internal struct AppleTransactionWorker {
23+
static func findAndLogTransaction(id: String) async -> Bool {
24+
// Using a standard while loop instead of `for await` avoids a known
25+
// Xcode 15+ compiler bug where corrupted witness tables are generated
26+
// for AsyncSequences when targeting iOS 15/16.
27+
var iterator = Transaction.all.makeAsyncIterator()
28+
while let verificationResult = await iterator.next() {
29+
if case .verified(let transaction) = verificationResult {
30+
if String(transaction.id) == id {
31+
Analytics.logTransaction(transaction)
32+
return true
33+
}
34+
}
35+
}
36+
return false
37+
}
38+
}
39+
40+
@objc public class AppleTransactionVerifier: NSObject {
41+
42+
// Notice: To avoid C-pointer ABI layout issues across Swift boundaries,
43+
// this interface relies purely on a standard Swift closure. The calling
44+
// C++ layer captures any necessary pointers within an Objective-C block.
45+
@objc public static func verify(transactionId: String, completion: @escaping (Bool) -> Void) {
46+
if #available(iOS 15.0, tvOS 15.0, macOS 12.0, watchOS 8.0, *) {
47+
// Create a pure Swift String copy of the transaction ID.
48+
// This ensures we do not rely on the memory of the bridged Objective-C
49+
// NSString, which might be destroyed by the calling C++ thread before
50+
// the asynchronous Task completes.
51+
let safeId = String(transactionId)
52+
53+
// Use a detached task to avoid inheriting any C++/ObjC thread context.
54+
// This prevents EXC_BAD_ACCESS during `swift_task_alloc` on iOS 15/16.
55+
Task.detached(priority: .userInitiated) { [safeId, completion] in
56+
let isFound = await AppleTransactionWorker.findAndLogTransaction(id: safeId)
57+
58+
// Return to the main thread to ensure thread safety when the C++
59+
// layer receives the callback and manages internal state.
60+
DispatchQueue.main.async {
61+
completion(isFound)
62+
}
63+
}
64+
} else {
65+
// Not on a supported OS, resolve immediately on the main thread
66+
// to avoid potential deadlocks if called while holding a C++ mutex.
67+
DispatchQueue.main.async {
68+
completion(false)
69+
}
70+
}
71+
}
72+
}

analytics/src/ios/swift/StoreKit2Bridge.swift

Lines changed: 0 additions & 37 deletions
This file was deleted.

app/integration_test/integration_test.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@
210210
529226F71C85F68000C89379 /* Debug */ = {
211211
isa = XCBuildConfiguration;
212212
buildSettings = {
213+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
214+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
213215
ALWAYS_SEARCH_USER_PATHS = NO;
214216
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
215217
CLANG_CXX_LIBRARY = "libc++";
@@ -253,6 +255,8 @@
253255
529226F81C85F68000C89379 /* Release */ = {
254256
isa = XCBuildConfiguration;
255257
buildSettings = {
258+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
259+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
256260
ALWAYS_SEARCH_USER_PATHS = NO;
257261
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
258262
CLANG_CXX_LIBRARY = "libc++";
@@ -290,6 +294,8 @@
290294
529226FA1C85F68000C89379 /* Debug */ = {
291295
isa = XCBuildConfiguration;
292296
buildSettings = {
297+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
298+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
293299
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
294300
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
295301
CLANG_ENABLE_MODULES = YES;
@@ -322,6 +328,8 @@
322328
529226FB1C85F68000C89379 /* Release */ = {
323329
isa = XCBuildConfiguration;
324330
buildSettings = {
331+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
332+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
325333
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
326334
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
327335
CLANG_ENABLE_MODULES = YES;

app_check/integration_test/integration_test.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@
322322
529226F71C85F68000C89379 /* Debug */ = {
323323
isa = XCBuildConfiguration;
324324
buildSettings = {
325+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
326+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
325327
ALWAYS_SEARCH_USER_PATHS = NO;
326328
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
327329
CLANG_CXX_LIBRARY = "libc++";
@@ -365,6 +367,8 @@
365367
529226F81C85F68000C89379 /* Release */ = {
366368
isa = XCBuildConfiguration;
367369
buildSettings = {
370+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
371+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
368372
ALWAYS_SEARCH_USER_PATHS = NO;
369373
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
370374
CLANG_CXX_LIBRARY = "libc++";
@@ -402,6 +406,8 @@
402406
529226FA1C85F68000C89379 /* Debug */ = {
403407
isa = XCBuildConfiguration;
404408
buildSettings = {
409+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
410+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
405411
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
406412
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
407413
CLANG_ENABLE_MODULES = YES;
@@ -435,6 +441,8 @@
435441
529226FB1C85F68000C89379 /* Release */ = {
436442
isa = XCBuildConfiguration;
437443
buildSettings = {
444+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
445+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
438446
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
439447
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
440448
CLANG_ENABLE_MODULES = YES;
@@ -467,6 +475,8 @@
467475
9F2ABA39267A4721001A35CE /* Debug */ = {
468476
isa = XCBuildConfiguration;
469477
buildSettings = {
478+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
479+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
470480
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
471481
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
472482
CLANG_ANALYZER_NONNULL = YES;
@@ -521,6 +531,8 @@
521531
9F2ABA3A267A4721001A35CE /* Release */ = {
522532
isa = XCBuildConfiguration;
523533
buildSettings = {
534+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
535+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
524536
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
525537
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
526538
CLANG_ANALYZER_NONNULL = YES;

auth/integration_test/integration_test.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,8 @@
400400
529226F71C85F68000C89379 /* Debug */ = {
401401
isa = XCBuildConfiguration;
402402
buildSettings = {
403+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
404+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
403405
ALWAYS_SEARCH_USER_PATHS = NO;
404406
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
405407
CLANG_CXX_LIBRARY = "libc++";
@@ -443,6 +445,8 @@
443445
529226F81C85F68000C89379 /* Release */ = {
444446
isa = XCBuildConfiguration;
445447
buildSettings = {
448+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
449+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
446450
ALWAYS_SEARCH_USER_PATHS = NO;
447451
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
448452
CLANG_CXX_LIBRARY = "libc++";
@@ -480,6 +484,8 @@
480484
529226FA1C85F68000C89379 /* Debug */ = {
481485
isa = XCBuildConfiguration;
482486
buildSettings = {
487+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
488+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
483489
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
484490
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
485491
CLANG_ENABLE_MODULES = YES;
@@ -513,6 +519,8 @@
513519
529226FB1C85F68000C89379 /* Release */ = {
514520
isa = XCBuildConfiguration;
515521
buildSettings = {
522+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
523+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
516524
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
517525
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
518526
CLANG_ENABLE_MODULES = YES;
@@ -545,6 +553,8 @@
545553
9F3A08FE266978C400E1D69F /* Debug */ = {
546554
isa = XCBuildConfiguration;
547555
buildSettings = {
556+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
557+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
548558
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
549559
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
550560
CLANG_ANALYZER_NONNULL = YES;
@@ -599,6 +609,8 @@
599609
9F3A08FF266978C400E1D69F /* Release */ = {
600610
isa = XCBuildConfiguration;
601611
buildSettings = {
612+
OTHER_CPLUSPLUSFLAGS = "$(inherited) -D_LIBCPP_HAS_NO_VERBOSE_ABORT -D_LIBCPP_DISABLE_AVAILABILITY";
613+
OTHER_LDFLAGS = "$(inherited) -Wl,-weak-lswift_Concurrency";
602614
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
603615
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
604616
CLANG_ANALYZER_NONNULL = YES;

0 commit comments

Comments
 (0)