Swift3 - 包管理器


Swift Package Manager(SPM)是蘋(píng)果最新的官方工具,可以用來(lái)管理 Swift 代碼的分配,它為 Swift 編譯系統(tǒng)集成了自動(dòng)進(jìn)行下載、編譯和連接依賴的過(guò)程。
在此之前我們常用的工具是Cocoapods和Carthage。

支持的平臺(tái)

? macOS
? Linux
? iOS
? watchOS
? tvOS


測(cè)試環(huán)境

系統(tǒng)版本

10.11.5 Beta

Swift版本

Xcode7.3.1(swift 2.2)
Xcode8 beta(swift 3)

檢查當(dāng)前Swift版本是否支持SPM

當(dāng)前默認(rèn)為Xcode7.3.1,查看swift版本
swift -version

Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.31)
Target: x86_64-apple-macosx10.9

swift2.2不支持SPM
swift build

error: unable to invoke subcommand: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build (No such file or directory)

切換到Xcode8
sudo xcode-select -s /Applications/Xcode-beta.app

查看當(dāng)前swift版本
swift -version

Apple Swift version 3.0 (swiftlang-800.0.30 clang-800.0.24)
Target: x86_64-apple-macosx10.9

Swift3支持SPM
swift build

error:: no Package.swift found

這個(gè)error是因?yàn)槲覀冞€沒(méi)有創(chuàng)建SPM的庫(kù)


創(chuàng)建SPM測(cè)試庫(kù)

初始化

在github創(chuàng)建SPMTest測(cè)試庫(kù)

https://github.com/huhuegg/SPMTest.git

clone SPMTest

cd /Users/admin/Swift/SwiftPackageManagerExample/
git clone https://github.com/huhuegg/SPMTest.git

初始化SPMTest library

cd /Users/admin/Swift/SwiftPackageManagerExample/SPMTest
swift package init --type library

Creating library package: SPMTest
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/SPMTest.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/SPMTest/
Creating Tests/SPMTest/SPMTestTests.swift

修改SPMTest

編輯Package.swift

import PackageDescription

let package = Package(
    name: "SPMTest"
)

//創(chuàng)建動(dòng)態(tài)鏈接庫(kù)
//let dynamicLibSPMTest = Product(name: "SPMTest", type: .Library(.Dynamic), modules: "SPMTest")
//products.append(dynamicLibSPMTest)
//創(chuàng)建靜態(tài)庫(kù)
//let staticLibExecTest = Product(name: "SPMTest", type: .Library(.Static), modules: "SPMTest")
//products.append(staticLibExecTest)

編輯SPMTest.swift

必須包含init方法,否則使用時(shí)會(huì)遇到 initializer is inaccessible due to 'internal' protection level

public class SPMPublicTest {
    public var text = "SPMPublicTest"
    public init(text:String) {
        self.text = text
    }
}

提交并標(biāo)注SPMTest版本

提交編輯后的SPMTest

git commit * -m "init library, add tag 1.0.0"
git push

添加版本號(hào)Tag

此處需要注意: commit && push的時(shí)候local tag默認(rèn)不會(huì)被提交

git tag 1.0.0
git push origin --tags


創(chuàng)建測(cè)試工程

mkdir /Users/admin/Swift/SwiftPackageManagerExample/ExecExampleTest
cd /Users/admin/Swift/SwiftPackageManagerExample/ExecExampleTest
swift package init --type executable

Creating executable package: SwiftPackageManagerExample
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/

將SPMTest庫(kù)導(dǎo)入工程

在Package.swift的dependencies添加SPMTest,并指定版本為1.0.0

import PackageDescription

let package = Package(
    name: "ExecExampleTest",
    dependencies: [
        .Package(url:"https://github.com/huhuegg/SPMTest.git", majorVersion: 1),
      ]
)

添加測(cè)試代碼

不要在main.swift直接導(dǎo)入SPMTest

創(chuàng)建Test.swift
vi Sources/Test.swift

import SPMTest

class Test {
    
    class func testFunc() {
        let spm = SPMPublicTest(text: "SPMTest::SPMPublicTest")        
        print("testFunc: \(spm.text)")
    }
    
}

修改main.swift

print("## Swift Package Manager Example  ##")
Test.testFunc()

編譯

創(chuàng)建測(cè)試工程的時(shí)候使用的類型是executable,所以最后會(huì)生成可執(zhí)行文件
swift build

Cloning https://github.com/huhuegg/SPMTest.git
HEAD is now at 629d483 public
Resolved version: 1.0.0
Compile Swift Module 'SPMTest' (1 sources)
Compile Swift Module 'ExecExampleTest' (2 sources)
Linking .build/debug/ExecExampleTest

如果SPMTest庫(kù)的tag沒(méi)有被提交,在build時(shí)會(huì)遇到錯(cuò)誤
error: No version tag found in (/Users/admin/Swift/example/Packages/SPMTest) package. Add a version tag with "git tag" command. Example: "git tag 0.1.0"

測(cè)試

.build/debug/ExecExampleTest

Swift Package Manager Example

testFunc: SPMTest::SPMPublicTest


回到Xcode

之前所有的操作都沒(méi)有打開(kāi)Xcode編輯器,讓我們回到最熟悉的Xcode吧!

創(chuàng)建Xcode工程

swift package generate-xcodeproj

generated: ./ExecExampleTest.xcodeproj

芝麻開(kāi)門(mén)
open ./ExecExampleTest.xcodeproj

spm.png

調(diào)試運(yùn)行時(shí)記得選My Mac, 強(qiáng)烈期待iOS iOS iOS~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • Xcode 9 Release Notes See more downloads 關(guān)于Xcode Accessin...
    印林泉閱讀 4,724評(píng)論 7 3
  • 上周末聽(tīng)葉武濱老師講易效能時(shí)間管理2階課,最后一段是關(guān)于生命力,其中一節(jié)講到他和兒子到美國(guó)的某個(gè)城市旅游,那個(gè)城市...
    王二王婆閱讀 744評(píng)論 2 5
  • 姓名:沈立威 公司:寧波慈星股份有限公司 組別:259期利他二組 【知~學(xué)習(xí)】 學(xué)習(xí)六項(xiàng)精進(jìn)書(shū)本20分鐘 【經(jīng)典名...
    沈立威閱讀 393評(píng)論 0 0
  • 三立策劃閱讀 722評(píng)論 0 0

友情鏈接更多精彩內(nèi)容