[英]Optional linking for Swift Combine.framework in Xcode 11
我們的應用程序支持 iOS 11 及更高版本。 在 iOS 13 中,我們使用SwiftUI
+ Combine
我們將SwiftUI
或Combine
框架的導入與相應的檢查#if canImport(SwiftUI)
或#if canImport(Combine)
#if canImport(SwiftUI)
。 如果我們在 iOS 12 下從 Xcode 11 運行我們的應用程序, dyld: Library not loaded: /System/Library/Frameworks/Combine.framework/Combine
出現錯誤dyld: Library not loaded: /System/Library/Frameworks/Combine.framework/Combine
我們通過選擇性鏈接 SwiftUI 修復了相同的問題。
但是我們不能為Combine 做同樣的事情,因為它甚至不能被選中進行鏈接
當它在構建設置中可用時,您可以顯式添加鏈接器標志以選擇性地鏈接Combine。 在 Xcode Build Settings 中添加-weak_framework Combine到Other Linker Flags 。
或者在您的 XCConfig 文件中添加以下行:
OTHER_LDFLAGS = -weak_framework Combine
或者如果您仍想支持使用較舊的 Xcode 版本進行構建:
OTHER_LDFLAGS[sdk=iphoneos13.0] = -weak_framework Combine
OTHER_LDFLAGS[sdk=iphonesimulator13.0] = -weak_framework Combine
OTHER_LDFLAGS[sdk=watchos6.0] = -weak_framework Combine
OTHER_LDFLAGS[sdk=watchsimulator6.0] = -weak_framework Combine
OTHER_LDFLAGS[sdk=appletvos13.0] = -weak_framework Combine
OTHER_LDFLAGS[sdk=appletvsimulator13.0] = -weak_framework Combine
OTHER_LDFLAGS[sdk=macosx10.15] = -weak_framework Combine
靈感來自@nschmidt 答案,但解決方案適用於 Xcode 10 和 Xcode 11
將此添加到 xcconfig
OTHER_LDFLAGS_XCODE_SPECIFIC_1100 = -weak_framework Combine -weak_framework SwiftUI
OTHER_LDFLAGS = $(inherited) ${OTHER_LDFLAGS_XCODE_SPECIFIC_$(XCODE_VERSION_ACTUAL)}
或者添加OTHER_LDFLAGS_XCODE_SPECIFIC_1100
作為自定義構建設置
就我們今天所了解的而言,如果您至少使用 Xcode 11.3.1 進行構建,則無需采用任何解決方法。 即使沒有在任何鏈接相關的配置/構建階段等中提及 SwiftUI 或組合,它也可以開箱即用。
結果證明是(至少)Xcode-11.1 中的一個錯誤,導致默認情況下Combine 框架沒有弱鏈接。 看起來這個錯誤至少在 Xcode-11.3.1 中得到了修復 - 默認情況下它確實弱鏈接 Combine 。 蘋果人的一些相關報告和回答在這里: https : //forums.swift.org/t/why-swift-package-manager-does-not-support-weak-linking-weak-framework-swiftui/31418/2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.