blog

Swift Package Manager - ライブラリをSPMの依存関係に対応させる方法を教える。

この記事では、CocoaPodsファイルとして使えるライブラリの設定やプロパティなどについて説明しています。 ここでは、システムが生成したXQPackag......

Sep 27, 2020 · 6 min. read
シェア

Swift パッケージライブラリの作成

いつものように、一歩ずつ!

Swift Packageプロジェクトを初期化します

Xcodeでの初期化

XQPackageTestフォルダを作成し、ターミナルを開いてフォルダにcdし、次のように入力します。

swift package init 

するとコンソールに次のように表示されます。

これは基本ライブラリが初期化されたことを意味します。

Creating library package: XQPackageTest
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/XQPackageTest/XQPackageTest.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/XQPackageTestTests/
Creating Tests/XQPackageTestTests/XQPackageTestTests.swift
Creating Tests/XQPackageTestTests/XCTestManifests.swift

ファイル・ディレクトリは次のとおりです。

ファイルの内部では、実際には、一般的に2つだけ気にする必要があります。

  • Package.swift:ライブラリの設定、プロパティなどを記述し、CocoaPodsのxxx.podspecファイルとして使用できます。
  • Source/xxxフォルダ:ソースコードが格納されているフォルダ。

Xcodeでの初期化

もちろん、Xcodeは以下のようにSwift Packageを作成するためのエントリを提供します。

ライブラリコードの記述

ここでは、システムが生成したXQPackageTest.swiftを直接取得してコードを変更し、依存関係が成功したときに、それが本当に成功したかどうかをテストできるようにします。

次に、command + buildして、正しいかどうか確認してください。

エラーを報告しているので、今度はエラーを見てください。

実際には、テストモジュールが実行できない結果、変更されたコードのためです。

この時点で、次のように、コードのこの行をコメントアウトするか、正しいコードにコードを変更することができます。

ライブラリをクラウドにアップロード

変更が完了したら、リポジトリをクラウドにアップロードしてください。

プロジェクトの依存関係

iOSまたはMacのプロジェクトを開き、 前へ 同じように、サードパーティのリンクを独自のライブラリへのリンクに置き換えて依存関係を追加します。

ただし、Release版を発行したくない場合は、BranchやCommitを選択すればよいことに注意してください。

たとえば、Releaseを作成せずに依存関係を作成すると、次のようなエラーが発生します。

The package dependency graph can not be resolved; unable find any available tag for the following requirements:

この場合は、バージョンを Branch か Commit に変更してください。

たとえば、Branch を選択して master ブランチを入力し、Next をクリックできるようにしました。

成功

成功すると、あなたのライブラリがすでにリストにあることが確認できます。

依存関係のテスト

次のように、ライブラリーのインターフェースをテストします。

はい、今のところ、依存関係は完了しています。

ライブラリに依存しています。

ライブラリ内のPackage.swiftファイルに依存関係を追加するだけです。 その方法は次のとおりです。

import PackageDescription
let package = Package(
 name: "XQPackageTest",
 platforms: [
 .iOS(.v10),
 ],
 products: [
 .library(
 name: "XQPackageTest",
 targets: ["XQPackageTest"]),
 ],
 
 /// サードパーティに依存する
 dependencies: [
 .package(url: "https://.//.it", from: .init(5, 0, 1)),
 ],
 
 targets: [
 .target(
 name: "XQPackageTest",
 dependencies: [
 // 依存するサードパーティ
 "SnapKit",
 ]),
 .testTarget( name: "XQPackageTestTests", dependencies: ["XQPackageTest"]),
 
 ],
)

Package.swift

上で述べたように、Package.swiftはCocoaPodsのxxx.podspecファイルに相当します。

そこで、そのファイルの属性のいくつかを簡単に説明します。

import PackageDescription
let package = Package(
 
 name: "XQPackageTest",
 
 /// サポートされているプラットフォームはいくつあるか?
 platforms: [
 .iOS(.v10),
// .macOS(.v10_12),
// .tvOS(.v10),
// .watchOS()
 ],
 
 /// ライブラリの設定
 products: [
 .library(
 name: "XQPackageTest",
 // ダイナミック・ライブラリまたはスタティック・ライブラリ
 // 静的ライブラリのデフォルト
 type: .static,
 targets: ["XQPackageTest"]),
 ],
 
 /// サードパーティに依存する
 dependencies: [
 
 // サードパーティが優れたバージョン管理形式を持っている:  . .テスト・バージョン
 // そして、次のようにすればよい。
 .package(url: "https://.//.it", from: .init(5, 0, 1)),
 
 // サードパーティーのバージョン形式が 1.2, 3桁目をまったく使わない場合は、次のような文字列を渡すこともできる。
 // .package(url: "https://.//.it", from: .init(stringLiteral: "5.0.1")),
 
 // サードパーティーの現在のリリースがSPMをサポートしていない場合、そのマスターブランチを直接指すことができる。
 // .package(url: "https://.//.it", Package.Dependency.Requirement.branch("master")),
 
 // もちろん、SwiftPMをサポートするローカルライブラリにリンクすることも可能だ。
 // .package(path: "../XQSwiftPMTest"),
 ],
 
 
 targets: [
 //   target
 .target(
 name: "XQPackageTest",
 dependencies: [
 // 関連するサードパーティ
 "SnapKit",
 ]),
 
 //   target
 .testTarget(
 name: "XQPackageTestTests",
 dependencies: ["XQPackageTest"]),
 
 ],
 
 // ライブラリはSwift言語バージョンをサポートしている
 swiftLanguageVersions: [
 .v5
 ]
)

SPM OC

現在、私の知る限り、SwiftとOCを混在させることはできません。

しかし、以下のようにOCとCの両方のライブラリを書くことは可能です。

システムのデフォルトは ==Sources/[targetName]/include==パスにあるpublicな.hファイルであることに注意してください。

.h ファイルを特定のパスに変更したい場合は、ターゲットの ==publicHeadersPath== を自分で書き換える必要があります。

publicHeadersPathのデフォルトは==[Sources]/[targetName]==です。

例えば、ライブラリ全体の.hをすべて公開したい場合

上記のように、publicHeadersPath は "..." となります。/XQPackageTest "となります。

あらかじめ決められた

  • クラウドにアップロードすることなく、ローカルのコードを直接関連付ける方法。 CocoaPods direct :path => '' to localのようなものです。
  • 関連ライブラリ
  • 関連フレームワークライブラリ

ピット

Authentication failed

SPMライブラリの更新を選択すると、以下のようなエラーが表示されることがあります。

==x-swift-package-repository-authentication://?scm=com.apple.dt.Xcode.sourcecontrol.Git&url=xxx#error=-1005 認証に失敗しました。認証情報が見つからないためです==。

一部のライブラリは非公開のため、ログインにはパスワードやその他の認証が必要です。

パスワードを使ってログインした場合、一定期間が経過すると認証が無効になります。 パスワードを再入力する必要があります。

写真の青いエラーをダブルクリックすると、入力ボックスがポップアップします。

この時点で、アカウントのパスワードを入力し、[OK]をクリックします。

ライブラリは最新の

ライブラリを修正して送信した後、時折最新のコードをプルダウンできないことがあります。

この場合、下図のように File -> Swift Packages -> Reset Package Caches を選択してください。

それでもない場合は...ライブラリを表示し、プロジェクトのビルド・キャッシュ・フォルダに移動して、プロジェクトのビルド・キャッシュを削除してください。

パス ==~/Library/Developer/Xcode/DerivedData/Your project's name-random code==

一般的に上記の操作でOK

Read next

プログラマーは良いプログラマーではない。

NO1.ドレスコード 強気なプログラマーは外見に気を遣う暇が全くなく、ヘアスタイルは''洪気功''のように、鶏の巣を頭に乗せ、乱れたふわふわの美しさで、いつでも人々に髪から抜け毛を与えるためにオスカーを受賞した感じ。ヒゲは大きなもの、自信と冷静さを示し、その後、近視ではなく、近視は瓶の底を着用する必要がありますので、厚い大きなメガネ、科学的研究シニア風の一種。強気プログラム...

Sep 27, 2020 · 3 min read