一句話: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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。