web-dev-qa-db-ja.com

Xcode 11のSwift Combine.frameworkのオプションのリンク

私たちのアプリケーションはiOS 11以降をサポートしています。 iOS 13ではSwiftUI + Combineを使用します

SwiftUIまたはCombineフレームワークのインポートを、対応するチェック#if canImport(SwiftUI)または#if canImport(Combine)でラップします。 iOS 12でXcode 11からアプリを実行すると、エラーdyld: Library not loaded: /System/Library/Frameworks/Combine.framework/Combine

オプションでリンクすることにより、SwiftUIの同じ問題を修正しました。

enter image description here

ただし、リンク用に選択することもできないため、Combineを同じにすることはできません。

enter image description here

15
Igor Palaguta
  1. ターゲット設定のBuild Phasesタブに移動し、Links binaries with librariesセクションを展開して、SwiftUI.framework、次にFinderで表示を選択します。
    Reveal SwiftUI.framework in Finder
  2. FinderウィンドウからCombine.frameworkをドラッグしてフレームワークリストにドロップし、ステータスポップアップからOptionalを選択します。
    Drag&Drop Combine.framework from Finder
  3. プロジェクトエクスプローラー(右ウィンドウペイン)でCombine.frameworkアイテムを選択し、Relative to SDKLocationポップアップ(左側のウィンドウペイン)。
    Specify location relative to SDK
  4. 奇妙な相対パス(../iPhoneOS.sdk/で始まる)が表示された場合は、プロジェクトをテキストエディターで開き、手動で修正します。
    Fix relative path in project file
1
znerol

今日わかった限りでは、ビルドに少なくともXcode 11.3.1を使用している場合は、回避策を採用する必要はありません。リンク関連の構成/ビルドフェーズなどでSwiftUIまたはCombineについて言及しなくても、そのまま使用できます。

これは(少なくとも)Xcode-11.1のバグであり、デフォルトでは弱くリンクされていないCombineフレームワークをもたらしました。バグは少なくともXcode-11.3.1で修正されたようです-デフォルトでは弱結合はCombineを弱くリンクします。 Appleからのいくつかの関連するレポートと回答はここにあります: https://forums.Swift.org/t/why-Swift-package-manager-does-not-support- weak-linking-weak-framework-swiftui/31418/2

0
Grigory Entin