SPM の使い方については詳しく説明しませんが、利点は Cocoapods のような古い製品が入手困難であること、そして最も重要なことは 2 値化が可能であり、xcproj プロジェクトに侵入しないことです。それは単にチームのために開発されたプロジェクト ライブラリです。複雑で低レベルの Cocoapod を放棄する時が来ました。
1:どうやって作るの?
ここでは使用が優先され、gui オペレーションが作成されます。
1. Xcodeのトップメニューで、下図のように操作を選択します
2. 独自のライブラリ名を入力または変更します。ここでは「MyLibrary」です。
3. これにより、シェル SPM が作成されます。最も重要な部分は、図の丸で囲んだ部分です。
Package.swift は SPM の管理を記述するファイルであり、GitHub などのリモート ウェアハウスに配置された後に Xcode が認識するための基礎でもあります。Source はソース コードが保存される場所で、デフォルトで構造体になっており、作成したいコードをライブラリに入れることができます (open public などの権限修飾子を忘れないでください)。さらに、readme.md フォルダーと Tests フォルダーがありますが、中国ではこれらのファイルに注意を払う人はほとんどいないため、ここでは無視します (Tests フォルダー内のテスト コードを削除しないと、独自のコードがコンパイルされません)。
このうち、Package.swift はライブラリの記述および設定ファイルとして重要です。ここで、spm は 1 つのライブラリに対応するだけでなく、複数のライブラリに対応することもできるという概念を理解する必要があります。
package = spm
library = 某个库
したがって、spm = 複数のライブラリのコレクションであると言うのは適切ではありません。もちろん、spm が 1 つの実行可能ライブラリにのみ対応することは問題ではなく、非常に一般的です。
import PackageDescription
let package = Package(
name: "MyKit", // 库名称
products: [
// spm生成的可执行库(下面的target)和文件,一个spm可对应多个(例如一个RxSwift就对应多个可执行库)
.library(
name: "MyKit", // 这俩一般默认相同即可
targets: ["MyKit"]), // 这俩一般默认相同即可
],
// 此spm库依赖的其它spm库地址,如没有依赖,dependencies可无
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
.target(
name: "MyKit", // 可执行库名称,也即在Source文件夹下的代码文件夹名称
dependencies: [] // 此可执行库依赖的其它库的名称,如没有依赖。可无
exclude: ["Info.plist"], // 此库的权限描述plist清单,需要的权限等等
resources: [
.process("XXX.bundle") // 此库的资源文件路径
]), // 此库的资源文件
.testTarget( // 此库的测试文件,如没有测试用例,可以删除
name: "MyKitTests",
dependencies: ["MyKit"]),
]
)
2: 公開するにはどうすればよいですか?
海外であればネットワーク制限なくXcodeで直接操作して公開することができますが、中国ではネットワーク制限があるため、別の方法で対処する必要があります。
1. まず、github 上にリモート ウェアハウスを作成します。
2. 作成した spm ファイルを送信し、リモート エンドにプッシュします。
// 1.提交创建的spm文件或者更改的文件
git commit -m "first commit"
// 2.切换到主分支上
git branch -m main
// 3.设置远端仓库
git remote add origin https://github.com/xxx/GithubTest.git
// 4.推到远端仓库,并输入密码和token
git push -u origin main
プッシュ期間中は、科学的にインターネットをサーフィンする必要があります。そうしないと、プッシュは成功しません。
科学的なインターネットにアクセスするためのツールがない場合はどうなるでしょうか? 実際、github に置く必要はありません。githubにアクセスできないので、gitlabやgiteeでいつでも普通にアクセスできるようにするのも解決策です。
では、xcode を使用して操作したい場合はどうすればよいでしょうか。Xcode ネットワークはシステム プロキシではないため、clash などのツールを使用してグローバル プロキシを設定しても役に立ちませんが、Xcode 専用のアクセス プロキシを設定すると、アクセスの更新が正常に行われます。
やっと
spm は oc / c / c++ も導入できます。バイナリまたは静的ライブラリについては、一緒に議論できます。この点に関するオンライン資料はほとんどありません。