À partir d’aujourd’hui, Rapide les développeurs qui écrivent du code pour les plateformes Apple (IOS, iPadOS, macOS, tvOS, regarderOSou visionOS) ou pour Swift applications exécutées côté serveur peut utiliser AWS CodeArtefact pour stocker et récupérer en toute sécurité les dépendances de leurs packages. CodeArtifact s’intègre aux outils de développement standard tels que Xcode, xcodebuildet le Gestionnaire de paquets Swift (le swift package
commande).
Les applications simples incluent généralement des dizaines de packages. Les applications des grandes entreprises peuvent avoir des centaines de dépendances. Ces packages aident les développeurs à accélérer le processus de développement et de test en fournissant un code qui résout les problèmes de programmation courants tels que l’accès au réseau, les fonctions cryptographiques ou la manipulation du format de données. Les développeurs intègrent également SDK-comme le Kits SDK AWS–pour accéder aux services distants. Ces packages peuvent être produits par d’autres équipes de votre organisation ou gérés par des tiers, tels que des projets open source. La gestion des packages et de leurs dépendances fait partie intégrante du processus de développement logiciel. Les langages de programmation modernes incluent des outils pour télécharger et résoudre les dépendances : Maven en Java, NuGet en C#, npm ou fil en JavaScript, et pépin en Python pour n’en citer que quelques-uns. Les développeurs pour les plateformes Apple utilisent Cosses de cacao ou la Gestionnaire de paquets Swift (SwiftPM).
Le téléchargement et l’intégration de packages sont une opération de routine pour les développeurs d’applications. Cependant, cela présente au moins deux défis importants pour les organisations.
Le premier défi est juridique. Les organisations doivent s’assurer que les licences des packages tiers sont compatibles avec l’utilisation prévue des licences pour votre projet spécifique et que le package ne viole pas la propriété intellectuelle (IP) de quelqu’un d’autre. Le deuxième défi est la sécurité. Les organisations doivent s’assurer que le code inclus peut être utilisé en toute sécurité et n’inclut pas de portes dérobées ou de vulnérabilités intentionnelles conçues pour introduire des failles de sécurité dans votre application. L’injection de vulnérabilités dans des projets open source populaires est connue sous le nom de attaque de la chaîne d’approvisionnement et est devenu de plus en plus populaire ces dernières années.
Pour relever ces défis, les organisations installent généralement des serveurs de packages privés sur site ou dans le cloud. Les développeurs ne peuvent utiliser que des packages approuvés par les équipes de sécurité et juridiques de leur organisation et mis à disposition via des référentiels privés.
AWS CodeArtefact est un service géré qui vous permet de distribuer en toute sécurité des packages à vos équipes internes de développeurs. Il n’est pas nécessaire d’installer, de gérer ou de faire évoluer l’infrastructure sous-jacente. Nous nous en occupons pour vous, vous donnant plus de temps pour travailler sur vos applications plutôt que sur l’infrastructure de développement logiciel.
Je suis ravi d’annoncer que CodeArtifact prend désormais en charge les packages Swift natifs, en plus de npm, PyPI, Maven, NuGetet générique formats de paquets. Les packages Swift sont un moyen populaire de conditionner et de distribuer des éléments de code Swift réutilisables. Pour savoir comment créer votre propre package Swift, vous pouvez suivre ce tutoriel. La communauté a également créé plus de 6 000 packages Swift que vous pouvez utiliser dans vos applications Swift.
Vous pouvez désormais publier et télécharger les dépendances de votre package Swift à partir de votre référentiel CodeArtifact dans le cloud AWS. CodeArtifact SwiftPM fonctionne avec les outils de développement existants tels que Xcode, VSCodeet le Outil de ligne de commande Swift Package Manager. Une fois vos packages stockés dans CodeArtifact, vous pouvez les référencer dans le fichier de votre projet. Package.swift
ou dans votre projet Xcode, de la même manière, vous utilisez les points de terminaison Git pour accéder aux packages Swift publics.
Une fois la configuration terminée, votre système de build emprisonné sur le réseau téléchargera les packages à partir du référentiel CodeArtifact, garantissant ainsi que seuls les packages approuvés et contrôlés sont utilisés pendant le processus de build de votre application.
Comment commencer
Comme d’habitude sur ce blog, je vais vous montrer comment cela fonctionne. Imaginez que je travaille sur une application iOS qui utilise Amazon DynamoDB comme base de données. Mon application intègre le Kit SDK AWS pour Swift comme une dépendance. Pour se conformer aux politiques de mon organisation, l’application doit utiliser une version spécifique du SDK AWS pour Swift, compilée en interne et approuvée par les équipes juridiques et de sécurité de mon organisation. Dans cette démo, je vous montre comment préparer mon environnement, télécharger le package dans le référentiel et utiliser cette version de package spécifique comme dépendance pour mon projet.
Pour cette démo, je me concentre sur les étapes spécifiques aux packages Swift. Tu peux lire le tutoriel écrit par mon collègue Steven pour débuter avec CodeArtifact.
J’utilise un compte AWS doté d’un package dépôt (MySwiftRepo
) et domaine (stormacq-test
) déjà configuré.
Pour permettre à SwiftPM d’accéder à mon référentiel CodeArtifact, je commence par collecter un jeton d’authentification auprès de CodeArtifact.
export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token \
--domain stormacq-test \
--domain-owner 012345678912 \
--query authorizationToken \
--output text`
Notez que le jeton d’authentification expire après 12 heures. Je dois répéter cette commande après 12 heures pour obtenir un nouveau jeton.
Ensuite, je demande le point de terminaison du référentiel. je passe le domain
nom et domain owner
(l’ID de compte AWS). Remarquez le --format swift
option.
export CODEARTIFACT_REPO=`aws codeartifact get-repository-endpoint \
--domain stormacq-test \
--domain-owner 012345678912 \
--format swift \
--repository MySwiftRepo \
--query repositoryEndpoint \
--output text`
Maintenant que j’ai le point de terminaison du référentiel et un jeton d’authentification, j’utilise le Interface de ligne de commande AWS (AWS CLI) pour configurer SwiftPM sur ma machine.
SwiftPM peut stocker les configurations du référentiel dans niveau de l’utilisateur (dans le fichier ~/.swiftpm/configurations
) ou à niveau du projet (dans le fichier <your project>/.swiftpm/configurations
). Par défaut, la commande de connexion CodeArtifact crée une configuration au niveau du projet pour vous permettre d’utiliser différents référentiels CodeArtifact pour différents projets.
J’utilise l’AWS CLI pour configurer SwiftPM sur ma machine de build.
aws codeartifact login \
--tool swift \
--domain stormacq-test \
--repository MySwiftRepo \
--namespace aws \
--domain-owner 012345678912
La commande invoque swift package-registry login
avec les options correctes, ce qui crée à son tour les fichiers de configuration SwiftPM requis avec le nom de référentiel donné (MySwiftRepo
) et le nom de la portée (aws
).
Maintenant que ma machine de build est prête, je prépare la version approuvée par mon organisation du package AWS SDK for Swift, puis je la télécharge dans le référentiel.
git clone https://github.com/awslabs/aws-sdk-swift.git
pushd aws-sdk-swift
swift package archive-source
mv aws-sdk-swift.zip ../aws-sdk-swift-0.24.0.zip
popd
Enfin, je télécharge cette version du package dans le référentiel.
Lorsque j’utilise Swift 5.9 ou plus récent, je peux télécharger mon package sur mon référentiel privé à l’aide de la commande SwiftPM :
swift package-registry publish \
aws.aws-sdk-swift \
0.24.0 \
--verbose
Les versions de Swift antérieures à 5.9 ne fournissent pas de swift package-registry publish
commande. J’utilise donc le curl
commande à la place.
curl -X PUT
--user "aws:$CODEARTIFACT_AUTH_TOKEN" \
-H "Accept: application/vnd.swift.registry.v1+json" \
-F source-archive="@aws-sdk-swift-0.24.0.zip" \
"${CODEARTIFACT_REPO}aws/aws-sdk-swift/0.24.0"
Notez le format du nom du package après l’URI du référentiel : <scope>/<package name>/<package version>
. La version du package doit suivre le versionnement sémantique schème.
Je peux utiliser la CLI ou la console pour vérifier que le package est disponible dans le référentiel.
aws codeartifact list-package-versions \
--domain stormacq-test \
--repository MySwiftRepo \
--format swift \
--namespace aws \
--package aws-sdk-swift
{
"versions": [
{
"version": "0.24.0",
"revision": "6XB5O65J8J3jkTDZd8RMLyqz7XbxIg9IXpTudP7THbU=",
"status": "Published",
"origin": {
"domainEntryPoint": {
"repositoryName": "MySwiftRepo"
},
"originType": "INTERNAL"
}
}
],
"defaultDisplayVersion": "0.24.0",
"format": "swift",
"package": "aws-sdk-swift",
"namespace": "aws"
}
Maintenant que le package est disponible, je peux l’utiliser dans mes projets comme d’habitude.
Xcode utilise les outils SwiftPM et les fichiers de configuration que je viens de créer. Pour ajouter un package à mon projet Xcode, je sélectionne le nom du projet dans le volet de gauche, puis je sélectionne le Dépendances du package languette. Je peux voir les packages qui font déjà partie de mon projet. Pour ajouter un forfait privé, je choisis le signe + sous Paquets.
Dans le champ de recherche en haut à droite, je saisis aws.aws-sdk-swift
(c’est <scope name>.<package name>
). Après une seconde ou deux, le nom du package apparaît dans la liste. En haut à droite, vous pouvez vérifier le référentiel source (à côté du Enregistrement étiquette). Avant de sélectionner le Ajouter un paquet sélectionnez la version du package, comme vous le faites pour les packages accessibles au public.
Alternativement, pour mes applications côté serveur ou en ligne de commande, j’ajoute la dépendance dans le fichier Package.swift
déposer. J’utilise également le format (<scope>.<package name>
) comme premier paramètre de .package(id:from:)
fonction.
dependencies: [
.package(id: "aws.aws-sdk-swift", from: "0.24.0")
],
Quand je tape swift package update
SwiftPM télécharge le package à partir du référentiel CodeArtifact.
Choses à savoir
Il y a certaines choses à garder à l’esprit avant de télécharger vos premiers packages Swift.
- Etre sur pour mettre à jour vers la dernière version de la CLI avant d’essayer une commande indiquée dans les instructions précédentes.
- Vous devez utiliser Swift version 5.8 ou plus récente pour utiliser CodeArtifact avec le
swift package
commande. Sur macOS, la chaîne d’outils Swift est livrée avec Xcode. Swift 5.8 est disponible sur macOS 13 (Ventura) et Xcode 14. Sous Linux et Windows, vous pouvez téléchargez la chaîne d’outils Swift depuis Swift.org. - Vous devez utiliser Xcode 15 pour vos applications iOS, iPadOS, tvOS ou watchOS. J’ai testé cela avec Xcode 15 beta8.
- Le
swift package-registry publish
La commande est disponible avec Swift 5.9 ou version ultérieure. Lorsque vous utilisez Swift 5.8, vous pouvez utilisercurl
pour télécharger votre package, comme je l’ai montré dans la démo (ou utilisez n’importe quel client HTTP de votre choix). - Les packages Swift ont le concept de portée. Une portée fournit un espace de noms pour les packages associés dans un référentiel de packages. Les étendues sont mappées à CodeArtifact espaces de noms.
- Le jeton d’authentification expire après 12 heures. Nous vous suggérons d’écrire un script pour automatiser son renouvellement ou d’utiliser une fonction AWS Lambda planifiée et stocker en toute sécurité le jeton dans Gestionnaire de secrets AWS (Par exemple).
Dépannage
Si Xcode ne trouve pas votre package privé, revérifiez la configuration du registre dans ~/.swiftpm/configurations/registries.json
. En particulier, vérifiez si le nom de la portée est présent. Vérifiez également que le jeton d’authentification est présent dans le trousseau. Le nom de l’entrée est l’URL de votre référentiel. Vous pouvez vérifier les entrées dans le trousseau avec le /Application/Utilities/Keychain Access.app
application ou en utilisant le security
outil de ligne de commande.
security find-internet-password \
-s "stormacq-test-012345678912.d.codeartifact.us-west-2.amazonaws.com" \
-g
Voici la configuration SwiftPM sur ma machine.
cat ~/.swiftpm/configuration/registries.json
{
"authentication" : {
"stormacq-test-012345678912.d.codeartifact.us-west-2.amazonaws.com" : {
"loginAPIPath" : "/swift/MySwiftRepo/login",
"type" : "token"
}
},
"registries" : {
"aws" : { // <-- this is the scope name!
"url" : "https://stormacq-test-012345678912.d.codeartifact.us-west-2.amazonaws.com/swift/MySwiftRepo/"
}
},
"version" : 1
}
Prix et disponibilité
Les coûts CodeArtifact pour les packages Swift sont les mêmes que pour les autres formats de packages déjà pris en charge. La facturation de CodeArtifact dépend de trois mesures : le stockage (mesuré en Go par mois), le nombre de requêtes et le transfert de données vers Internet ou vers d’autres régions AWS. Le transfert de données vers les services AWS dans la même région n’est pas facturé, ce qui signifie que vous pouvez exécuter vos tâches CICD sur Amazon EC2 Mac instances, par exemple, sans encourir de frais pour le transfert de données CodeArtifact. Comme d’habitude, la page des tarifs a les détails.
Les packages CodeArtifact pour Swift sont disponibles dans les 13 régions où CodeArtifact est disponible.
Allez maintenant créer vos applications Swift et téléchargez vos packages privés sur CodeArtifact !
PS : Savez-vous que vous pouvez écrire des fonctions Lambda dans le langage de programmation Swift ? Vérifier le guide de démarrage rapide ou suivre ce tutoriel de 35 minutes.