Cocoapodsを使用して、Swiftプロジェクトの依存関係を管理しています。 このパッケージ に遭遇しましたが、Cocoapodsにはリストされていません。代わりに、Swift Package Managerを使用することをお勧めします。ただし、Swift Package Managerを使用して基本的に何かをしようとすると、プロジェクト全体が完全に破壊されてしまいます。
したがって、Swift Package Managerを実際に使用する方法を理解するために、テストプロジェクトでそれを使用しています。
私が試したものは次のとおりです。
ファイル->新規->プロジェクト-> Cocoa App
製品名:basic-ssh-test
これにより、「実行」を押すと空白のウィンドウをロードする基本的なアプリケーションが作成されます。楽しみのために、applicationDidFinishLaunching
のAppDelegate
関数にprint("test")
を追加したので、プログラムを実行するとデバッグウィンドウに「テスト」と表示されます。
ここで、Shout
パッケージを依存関係として追加します。
Swift package init --type executable
_これにより、次のファイルが作成されます。
_Creating executable package: basic-ssh-test
Creating Package.Swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/basic-ssh-test/main.Swift
Creating Tests/
_
次に、新しい_Package.Swift
_ファイルに「Shout」依存関係を追加します。
_// Swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "basic-ssh-test",
dependencies: [
.package(url: "https://github.com/jakeheis/Shout", from: "0.2.0")
],
targets: [
.target(
name: "basic-ssh-test",
dependencies: ["Shout"]),
]
)
_
そして、依存関係を取得します。
Swift package resolve
_これにより、依存関係が_.build
_ディレクトリにプルされます。
_Fetching https://github.com/jakeheis/Shout
Fetching https://github.com/jakeheis/CSSH
Fetching https://github.com/IBM-Swift/BlueSocket
Cloning https://github.com/IBM-Swift/BlueSocket
Resolving https://github.com/IBM-Swift/BlueSocket at 0.12.91
Cloning https://github.com/jakeheis/CSSH
Resolving https://github.com/jakeheis/CSSH at 1.0.3
Cloning https://github.com/jakeheis/Shout
Resolving https://github.com/jakeheis/Shout at 0.3.0
_
次に、xcodeproj
ファイルを再生成します。
Swift package generate-xcodeproj
_xcodeproj
ファイルを開くと、単一のSwiftファイルを含む単一のディレクトリ_basic-ssh-test
_を持つSources
という新しいグループがあります_main.Swift
_ print("Hello, world!")
で。
実際に実行したいコードは、_basic-ssh-test
_という青いフォルダーにあります。必要なファイルはすべてそこにありますが、アプリケーションを実行する代わりに、Xcodeは_main.Swift
_ファイルを実行しています。デバッグ出力が「Hello、world!」だからわかる「テスト」の代わりに。
Swift Package Managerがソースファイルを移動し、以前と同じビルドを続行すると主張するいくつかのチュートリアルを読みましたが、明らかにそうではありません。
また、ビルド設定に「メインインターフェイス」オプションがないため、アプリケーションの開始点として「MainMenu.xib」を選択できません。
これは、既存のプロジェクトでSwift Project Managerを使用しようとしたときに発生するものと本質的に同じです。依存関係を取り込みますが、基本的には既存のプロジェクト全体を無視し、「hello world」コードを実行するだけです。
Swift Package Managerを使用して、既存のコードベースを無視せずに既存のプロジェクトに依存関係を追加するにはどうすればよいですか?
Swift.mainにボイラープレートが必要なだけで、SPMを使用してウィンドウアプリケーションを作成できます(これを行うABIを待機しているプロジェクト全体があります)。掘り出します。
ただし、他の人が提案している方法は(SPMの現在のバージョンでは)動作しません。
ただし、私が見ているのは、本当にSPMを使用して依存関係を管理する(最新の状態に保つなど)ことです。だからもっと簡単にできると思う。
デフォルトのターゲットとして実行可能ファイルを作成するのではなく、代わりにライブラリを作成します(おそらく、basic-ssh-dependenciesと呼びます)。 Xcodeプロジェクトを生成し、それをプライマリXcodeプロジェクトにドラッグし、それに依存するようにターゲットを構成します。依存関係の変更のためにSPMからライブラリを更新する場合、Xcode-projを再生成する必要があります。
あなたの走行距離としわ、またはあなたが達成しようとしていることを誤解した場合はお知らせください。
この回答を書いている時点まで、 Swift Package Manager はiOS、tvOS、およびwatchOSをサポートしていません。代わりに、パッケージのファイルをプロジェクトに直接追加する必要があります。
プロジェクトに依存関係グループを作成し、その下に this answer のようなパッケージ名を持つグループを作成することをお勧めします。
したがって、まず、プロジェクトにインポートするファイルの依存関係を、以前に作成したDependenciesグループに含まれるパッケージ名に追加します。
ファイルを追加すると、次の画像のように自分でコードを作成するときと同じように、コードにアクセスできます。インポートする必要はありません。詳細は here で確認できます。それが役に立てば幸い。