簡體   English   中英

Xcode 11 中 Swift Combine.framework 的可選鏈接

[英]Optional linking for Swift Combine.framework in Xcode 11

我們的應用程序支持 iOS 11 及更高版本。 在 iOS 13 中,我們使用SwiftUI + Combine

我們將SwiftUICombine框架的導入與相應的檢查#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 CombineOther Linker Flags

構建設置 Ohter Linker Flags "-weak_framework Combine"

或者在您的 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
  1. 導航到目標設置的Build Phases選項卡,展開Link binaries with libraries部分並右鍵單擊SwiftUI.framework ,然后選擇Show in Finder
    在 Finder 中顯示 SwiftUI.framework
  2. 從 Finder 窗口中將 Combine.framework拖放到框架列表中,然后從狀態彈出窗口中選擇Optional
    從 Finder 拖放 Combine.framework
  3. 在項目資源管理器(右窗格)中選擇Combine.framework項,然后從檢查器(左窗格)的Location彈出窗口中選擇相對於 SDK
    指定相對於 SDK 的位置
  4. 如果你得到一個奇怪的相對路徑(以../iPhoneOS.sdk/ ),然后在文本編輯器中打開項目並手動修復它。
    修復項目文件中的相對路徑

靈感來自@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM