Swift Package Manager(一)初探


一句話:Swift Package Manager(swift包管理器,簡稱:SPM)就是在swift開發中用來替代CocoaPod的;在swift開發中,SPM完全可以替代CocoaPod的功能,並且速度更快,體驗更佳;

一、安裝SPM

SPM隨Xcode 8.x 一起發布,終端上可查看SPM版本:

$ swift package --version Swift Package Manager - Swift 3.0.0-dev 

二、使用SPM創建項目

創建一個可執行項目,如SPMDemo:

$ mkdir SPMDemo    // 創建文件夾 $ cd SPMDemo // 進入文件夾 $ swift package init --type executable // 初始化為可執行項目 Creating executable package: SPMDemo Creating Package.swift Creating .gitignore Creating Sources/ Creating Sources/main.swift Creating Tests/ $ swift package generate-xcodeproj //生成Xcode工程,可用Xcode打開 generated: ./SPMDemo.xcodeproj $ swift build // swift 編譯並生成可執行文件 Compile Swift Module 'SPMDemo' (1 sources) Linking ./.build/debug/SPMDemo $ ./.build/debug/SPMDemo // 執行生成的文件 Hello, world! // 執行效果 

三、添加外部模塊

我們試着把Alamofire模塊添加到SPMDemo中;
1、編輯Package.swift文件,內容如下:

import PackageDescription let package = Package( name: "SPMDemo", dependencies: [ .Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,2,0)) ] ) 

2、main.swift中引入並使用Alamofire

import Alamofire print(Alamofire.request("https://httpbin.org/get")) 

3、編譯並運行

$ swift build
Compile Swift Module 'SPMDemo' (1 sources) Linking ./.build/debug/SPMDemo $ ./.build/debug/SPMDemo GET https://httpbin.org/get 

四、更新依賴包

假設我們需要將Alamofire 4.2.0“更新”到4.1.0;
1、編輯Package.swift,將Version(4,2,0)改為Version(4,1,0);
2、更新依賴:

$ swift package update
Cloning https://github.com/Alamofire/Alamofire.git HEAD is now at c2134d7 Added release notes to the CHANGELOG and bumped the version to 4.1.0. Resolved version: 4.1.0 

可以用 swift package generate-xcodeproj更新一下Xcode工程文件,然后就可以build的運行了

五、創建模塊(庫)

假設我們需要創建一個BarModule,步驟如下:
1、初始化模塊

$ mkdir BarModule 
$ cd BarModule
$ swift package init --type library // 初始化為一個庫 Creating library package: BarModule Creating Package.swift Creating .gitignore Creating Sources/ Creating Sources/BarModule.swift Creating Tests/ Creating Tests/LinuxMain.swift Creating Tests/BarModuleTests/ Creating Tests/BarModuleTests/BarModuleTests.swift $ swift package generate-xcodeproj // 創建Xcode項目 generated: ./BarModule.xcodeproj 

2、編寫模塊代碼
初始化為庫時,自動生成了一個文件BarModule.swift,編輯BarModule.swift文件如下:

public struct BarModule { public var text = "Hello, Module!" public var num: Int public init() { num = 12 } } 

3、添加git tag

$ git init
$ git add .
$ git commit -m "Init Commit" $ git tag 1.0.0 // 添加tag 

這個 tag 1.0.0就是我們引用時的版本號
如果把這個BarModule推送到外部,如github上,就是可以通過引入外部引入的方式引入到項目中;
當然,我們還能本地引入模塊;

六、本地引入模塊

我們將在SPMDemo項目中引入BarModule;
1、編輯SPMDemo的Package.swift文件

import PackageDescription let package = Package( name: "SPMDemo", dependencies: [ .Package(url: "https://github.com/Alamofire/Alamofire.git", Version(4,1,0)), .Package(url: "../BarModule", Version(1, 0, 0)) // 添加的代碼,版本號就是剛才的tag ] ) 

2、swift build將BarModule添加到SPMDemo項目中
3、編輯main.swift文件

import Alamofire import BarModule print(Alamofire.request("https://httpbin.org/get")) let bar = BarModule() print(bar.num) print(bar.text) 

4、編譯運行

$ swift build
$ ./.build/debug/SPMDemo
GET https://httpbin.org/get 12 Hello, Module! 

七、待解決的問題

以下是筆者尚未解決的問題:
1、如何在Swift的iOS項目中應用Swift Package Manager進行依賴管理?
2、如何用Swift Package Manager發布管理二進制的SDK?



作者:鄧國輝
鏈接:https://www.jianshu.com/p/4caecb22c4bd
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM