web-dev-qa-db-ja.com

消費Swiftプロジェクト内の複数のターゲットおよびプラットフォーム用のパッケージ?

IOSアプリ、watchOSアプリ、いくつかのフレームワークなど、複数のターゲットを持つプロジェクトがあります。すべてのターゲットに同じSwift Packageを割り当てるにはどうすればよいですか?Xcodeで1つだけ選択させてください。

SPM1

Swift Packageをもう一度追加して、プロジェクト内の別のターゲットに割り当てようとすると、エラーが発生します。

SPM2

これを行う正しい方法は何ですか?以下は、パッケージマニフェストがSwiftパッケージでどのように見えるかを示しています。その側で実行する必要があることや、Xcodeで異なることを行う必要があることはありますか?

import PackageDescription

let package = Package(
    name: "Alamofire",
    platforms: [
        .macOS(.v10_12),
        .iOS(.v10),
        .tvOS(.v10),
        .watchOS(.v3)
    ],
    products: [
        .library(
            name: "Alamofire",
            targets: ["Alamofire"])
    ],
    targets: [
        .target(
            name: "Alamofire",
            path: "Source")
    ],
    swiftLanguageVersions: [.v5]
)
16
TruMan1

私は同じ問題を抱えていましたが、この2つの解決策しか見つかりませんでした。

まず、最初のターゲットにパッケージを追加します。

Add package

次に、最初のオプションは他のターゲットの[全般]タブに移動し、[フレームワーク]、[ライブラリ]、および[埋め込みコンテンツ]で+を押し、パッケージを選択して[追加]を押します。

Adding package in General tab

他のオプションは、フェーズを構築し、リンクバイナリとライブラリで同様の方法を繰り返します。

Build Phases

Select package

現時点では、私はこのオプションしか知らないので、将来的にはAppleがマルチチェックなどでこれを改善できると思います。

18
Diego Carrera

依存関係を追加した後で新しいターゲットを追加する場合は、プロジェクトから依存関係を削除してから、再度追加する必要があります。そうしないと、ライブラリはフレームワークチューザーに表示されません。

XcodeがSwiftで実行できる信頼できることの1つはパッケージマネージャがクラッシュすることです。プロジェクトをバックアップするだけで、プロジェクトを開くだけで問題が発生する可能性があります。 Xcodeのクラッシュ。

0
grumblemo