El Gestor de Paquets Swift (Swift Package Manager o SPM) és una eina poderosa que facilita la gestió de dependències i la distribució de codi en projectes Swift. En aquesta secció, aprendrem com utilitzar el SPM per afegir dependències a un projecte, crear i distribuir paquets Swift, i gestionar les versions de les dependències.
Continguts
Introducció al Gestor de Paquets Swift
El Gestor de Paquets Swift és una eina integrada en Swift que permet:
- Gestionar dependències de tercers.
- Crear i distribuir paquets de codi.
- Automatitzar la construcció i les proves de projectes.
Característiques Clau
- Integració amb Swift: SPM està integrat directament amb el llenguatge Swift i Xcode.
- Declaratiu: Utilitza un fitxer
Package.swift
per definir les dependències i la configuració del paquet. - Gestió de Versions: Permet especificar versions de dependències per assegurar la compatibilitat.
Afegir Dependències a un Projecte
Per afegir dependències a un projecte Swift, segueix aquests passos:
-
Crear o Obrir un Projecte Swift: Si no tens un projecte, crea'n un nou amb Xcode o des de la línia de comandes.
-
Crear el Fitxer
Package.swift
: Aquest fitxer defineix les dependències del projecte. Exemple de fitxerPackage.swift
:// swift-tools-version:5.3 import PackageDescription let package = Package( name: "MyProject", dependencies: [ .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.4.0") ], targets: [ .target( name: "MyProject", dependencies: ["Alamofire"]), ] )
-
Afegir el Fitxer
Package.swift
al Projecte: Si estàs utilitzant Xcode, pots afegir el fitxerPackage.swift
al teu projecte. -
Construir el Projecte: Xcode o la línia de comandes descarregarà i integrarà les dependències.
Crear un Paquet Swift
Per crear un paquet Swift, segueix aquests passos:
-
Crear un Nou Directori: Crea un directori per al teu paquet.
mkdir MySwiftPackage cd MySwiftPackage
-
Inicialitzar el Paquet: Utilitza la comanda
swift package init
per inicialitzar el paquet.swift package init --type library
-
Editar el Fitxer
Package.swift
: Defineix les dependències i la configuració del paquet.// swift-tools-version:5.3 import PackageDescription let package = Package( name: "MySwiftPackage", products: [ .library( name: "MySwiftPackage", targets: ["MySwiftPackage"]), ], dependencies: [ // Afegir dependències aquí ], targets: [ .target( name: "MySwiftPackage", dependencies: []), .testTarget( name: "MySwiftPackageTests", dependencies: ["MySwiftPackage"]), ] )
-
Afegir Codi: Afegeix el codi font al directori
Sources/MySwiftPackage
. -
Construir i Provar el Paquet: Utilitza les comandes
swift build
iswift test
per construir i provar el paquet.
Distribuir un Paquet Swift
Per distribuir un paquet Swift, segueix aquests passos:
-
Publicar el Codi: Puja el codi a un repositori públic, com GitHub.
-
Crear una Versió: Utilitza les eines del repositori (com GitHub) per crear una versió del paquet.
-
Afegir el Paquet com a Dependència: Altres projectes poden afegir el teu paquet com a dependència utilitzant l'URL del repositori i la versió.
Gestió de Versions
La gestió de versions en SPM es basa en el versionat semàntic (SemVer). Això significa que les versions es defineixen en el format major.minor.patch
.
- Major: Canvis incompatibles amb versions anteriors.
- Minor: Noves funcionalitats compatibles amb versions anteriors.
- Patch: Correccions d'errors i millores menors.
Exemple de Gestió de Versions
Aquest exemple especifica que qualsevol versió de Alamofire
a partir de la 5.4.0
és acceptable, sempre que no hi hagi canvis incompatibles (és a dir, fins a la 5.x.x
).
Exercicis Pràctics
Exercici 1: Afegir una Dependència
- Crea un nou projecte Swift.
- Afegeix la dependència
Alamofire
al projecte. - Utilitza
Alamofire
per fer una sol·licitud HTTP GET ahttps://jsonplaceholder.typicode.com/todos/1
i imprimeix la resposta.
Solució
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "MyProject", dependencies: [ .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.4.0") ], targets: [ .target( name: "MyProject", dependencies: ["Alamofire"]), ] )
import Alamofire AF.request("https://jsonplaceholder.typicode.com/todos/1").responseJSON { response in print(response) }
Exercici 2: Crear i Distribuir un Paquet
- Crea un nou paquet Swift.
- Afegeix una funció que retorna una cadena de text.
- Publica el paquet en un repositori públic.
- Afegeix el paquet com a dependència en un altre projecte i utilitza la funció.
Solució
-
Crear el Paquet:
mkdir MySwiftPackage cd MySwiftPackage swift package init --type library
-
Afegir la Funció:
// Sources/MySwiftPackage/MySwiftPackage.swift public struct MySwiftPackage { public static func greet() -> String { return "Hello, Swift Package!" } }
-
Publicar el Paquet: Puja el codi a un repositori públic, com GitHub.
-
Afegir el Paquet com a Dependència:
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "AnotherProject", dependencies: [ .package(url: "https://github.com/username/MySwiftPackage.git", from: "1.0.0") ], targets: [ .target( name: "AnotherProject", dependencies: ["MySwiftPackage"]), ] )
-
Utilitzar la Funció:
import MySwiftPackage print(MySwiftPackage.greet())
Conclusió
El Gestor de Paquets Swift és una eina essencial per a la gestió de dependències i la distribució de codi en projectes Swift. Amb els coneixements adquirits en aquesta secció, ara pots afegir dependències, crear i distribuir paquets, i gestionar versions de manera eficient. Aquests conceptes són fonamentals per a qualsevol desenvolupador Swift que vulgui treballar en projectes moderns i col·laboratius.
Curs de Programació en Swift
Mòdul 1: Introducció a Swift
- Introducció a Swift
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Swift
- Sintaxi i Estructura Bàsica
- Variables i Constants
- Tipus de Dades
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Closures
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Closures
- Funcions d'Ordre Superior
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Swift Avançat
Mòdul 6: Swift i Desenvolupament iOS
- Introducció al Desenvolupament iOS
- Conceptes Bàsics de UIKit
- Storyboards i Interface Builder
- Xarxes en Swift
- Core Data
- Conceptes Bàsics de SwiftUI