2017-11-29 1 views
1

言うことができます:スウィフトパッケージマネージャー。エラー:名前が複数のパッケージが見つかりました...?

import PackageDescription 
let package = Package(
    name: "B", 
    products: [ 
     .library(
      name: "B", 
      targets: ["B"]), 
    ], 
    dependencies: [ 
     .package(url: "https://.../CommonLib", from: "1.0.0"), 
    ], 
    targets: [ 
     .target(
      name: "B", 
      dependencies: ["CommonLib"]), 
     .testTarget(
      name: "BTests", 
      dependencies: ["B"]), 
    ] 
) 

アプリケーションの:ここで

Bは、アプリケーションがBに依存CommonLib
に依存ライブラリ あるとCommonLib

は彼らのmainfests

BのPackage.swiftですPackage.swift

import PackageDescription 
let package = Package(
    name: "App", 
    dependencies: [ 
     .package(url: "https://.../CommonLib", from: "1.0.0"), 
     .package(url: "https://.../B", from: "1.0.0"), 
    ], 
    targets: [ 
     .target(
      name: "App", 
      dependencies: ["CommonLib", "B"]), 
     .testTarget(
      name: "AppTests", 
      dependencies: ["App"]), 
    ] 
) 

swift build 
error: Found multiple packages with the name CommonLib... 
アプリケーションとBの両方がCommonLibに依存し、私はアプリの にBとCommonLibをインポートする場合は名前を持つ複数のパッケージの間違いがある場合

...

アップルスウィフトバージョン4.0.2(swiftlang-900.0.69.2打ち鳴らします-900.0.38) 対象:x86_64-apple-macosx10.9

誰でもこれを解決する方法を知っていますか?

答えて

0

Package.pinsを削除し、swift buildを再実行してください。フェッチしようとしているパッケージを確認してください。 .build/checkouts.build/dependencies-state.jsonをチェックしてください。CommonLibのタグとバージョンはそれぞれ書き込まれています。

+1

ありがとう!私は大げさに言って、CommonLibに変更を加えるのは簡単で、コミットしてgitタグを更新するのを忘れてしまった。 2つの異なるバージョンで終了し、そのために...エラー名前の複数のパッケージが見つかりました... –

+0

@ vadim-eisenberg私は同様の問題を抱えていますが、このデータがどのように解決するのに役立つか理解していません。あなたは詳細を教えていただけますか?私の場合、 '.bulid/dependencies-state.json'には、同じコミットを指し示す同じライブラリの2つのエントリがありますが、それぞれが' A-numbers1'と呼ばれる異なる 'subpath'値と、 1つは 'A.git-numbers2'です。両方とも、同じバージョンのライブラリを参照していますが。 – Zapko

+0

@Zapkoこのデータは問題のヒントを得るためのものですが、私は正確なアルゴリズムを見ていません。あなたの依存パッケージの中には、あなたのAパッケージが別々に参照されているというのが問題だと思います。たとえば、ある依存関係では、git urlとhttps urlで参照されます。これはおそらくSwift Package Managerを混乱させるでしょう。 –

1

これらをライブラリに手動でインポートする場合は、このエラーが表示されます。同じ名前の複数のパッケージを持つことはできません。

ソリューションの場合は、マニフェストを変更してそのうちの1つを削除する必要があります。しかし、私はあなたがパッケージ&ライブラリを管理するのに最適なツールであるCocoaPodを使用している場合、これが解決できると思います。 CocoaPodからマニフェストを簡単に変更することもできます。

+0

これは1つのマニフェストではありません。 Bは別の実行可能ファイルによってインポートされる別のライブラリです。 AppのPackage.swiftとBのPackage.swiftという2つの明確なマニフェストがあります。上記の場合、両方ともCommonLibをインポートする必要があります。次に、アプリケーションはBをインポートする必要があります。 –

関連する問題