Swift Package Manager

如何在 iOS 中使用 Swift Package Manager?

  1. 要使用的庫(kù)已經(jīng)適配了 Swift Package Manager
  2. Xcode 版本 11

在 Swift 項(xiàng)目中使用

  1. Xcode 導(dǎo)航 File -> Swift Packages -> Add Package Dependency...


    如上圖: 1. 通過(guò)倉(cāng)庫(kù)連接查找. 2. 通過(guò)登錄 git 賬號(hào)查找
    后面的步驟都是圖形界面, 很容易看懂就不一一列舉了
  2. Project 中查看添加修改, 步驟相同.

自建 SPM 庫(kù)

Swift 庫(kù)

這里舉例用 git.
首先 cmd 到你的項(xiàng)目下, 運(yùn)行 swift package init, 這時(shí)候會(huì)在目錄下產(chǎn)生一個(gè) Package.swift, 打開(kāi)它, 注釋是具體說(shuō)明

import PackageDescription

let package = Package(
    name: "HYImageBrowser",
    // 支持的平臺(tái)和版本
    platforms: [
      .iOS(.v10)
    ],
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "HYImageBrowser",
            targets: ["HYImageBrowser"]),
    ],
    // 依賴其他 package
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
        .package(url: "https://github.com/onevcat/Kingfisher.git", from: "5.8.3")
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "HYImageBrowser",
            dependencies: ["Kingfisher"], // 導(dǎo)入依賴
            path: "HYImageBrowser/Sources" // 你要導(dǎo)出的 module, 就是 import 后的代碼就在這部分
        ) 
    ]
)

到這里一個(gè)基本的 SPM 就可以提交到 git, 給別人使用, 其他參數(shù)還沒(méi)仔細(xì)研究, 可以閱讀文檔.
現(xiàn)在提交到 git, 使用者的版本號(hào)對(duì)應(yīng)的是 git tag, 所以提交后還要打一個(gè) tag, 比如 1.0.0, 如下圖 2.0.0, 就是對(duì)應(yīng)的 tag, 代表支持的最低版本, 可以自選使用版本的策略.

// 刪除遠(yuǎn)端 tag
git push origin :refs/tags/1.0.0
ObjC 庫(kù)

同樣可以創(chuàng)建 OCSPM.
swift不同, OC 一定要提供 publicHeadersPath, 他代表你要導(dǎo)出給別人用的文件夾, 如果不提供 publicHeadersPath, path: 文件夾下就必須包含一個(gè) include 文件夾, 然后把所有要導(dǎo)出的 .h 放入到其中.
如下代碼:

.target(
            name: "SPM_OCTest",
            path: "Sources",
            publicHeadersPath: "../Sources"
        )

path: 代表你的 module,
publicHeadersPath: 字面意思也可以讀懂, 就是提供的接口文件.
如果沒(méi)有 publicHeadersPath: 參數(shù), 默認(rèn)的文件夾就是 path/include, 上面例子中的文件夾就應(yīng)該是Sources 文件夾下必須有一個(gè) include 文件夾用來(lái)導(dǎo)出接口文件. 上面例子, 我提供的 publicHeadersPath: "../Sources", 是把 Sources 文件夾下的所有文件都對(duì)外提供.

import PackageDescription

let package = Package(
    name: "SPM_OCTest",
    platforms: [
      .iOS(.v9)
    ],
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "SPM_OCTest",
            type: .dynamic,
            targets: ["SPM_OCTest"]),
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "SPM_OCTest",
            path: "Sources",
            publicHeadersPath: "../Sources"
        ),
        .testTarget(
            name: "SPM_OCTestTests",
            dependencies: ["SPM_OCTest"]),
    ]
)

End

示例代碼 中的 SwiftPMTestSPM_OCTest

目前 iOS 不支持在 OC 項(xiàng)目中使用 SPM
目前 iOS 不支持在 OC 項(xiàng)目中使用 SPM

reference: Creating Swift Packages
reference: Apple
reference: Apple

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抠忘,一起剝皮案震驚了整個(gè)濱河市窃躲,隨后出現(xiàn)的幾起案子判导,更是在濱河造成了極大的恐慌畏铆,老刑警劉巖话告,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涂佃,居然都是意外死亡愿卒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門路克,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)樟结,“玉大人,你說(shuō)我怎么就攤上這事精算∑盎拢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵灰羽,是天一觀的道長(zhǎng)驮履。 經(jīng)常有香客問(wèn)我,道長(zhǎng)廉嚼,這世上最難降的妖魔是什么玫镐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮怠噪,結(jié)果婚禮上恐似,老公的妹妹穿的比我還像新娘。我一直安慰自己舰绘,他們只是感情好蹂喻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布葱椭。 她就那樣靜靜地躺著,像睡著了一般口四。 火紅的嫁衣襯著肌膚如雪孵运。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天蔓彩,我揣著相機(jī)與錄音治笨,去河邊找鬼。 笑死赤嚼,一個(gè)胖子當(dāng)著我的面吹牛旷赖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播更卒,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼等孵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蹂空?” 一聲冷哼從身側(cè)響起俯萌,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎上枕,沒(méi)想到半個(gè)月后咐熙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辨萍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年棋恼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锈玉。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爪飘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘲玫,到底是詐尸還是另有隱情悦施,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布去团,位于F島的核電站抡诞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏土陪。R本人自食惡果不足惜昼汗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鬼雀。 院中可真熱鬧顷窒,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谓着,卻和暖如春泼诱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赊锚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工治筒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舷蒲。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓耸袜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牲平。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堤框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容