La maison automatiser Comment utiliser les scripts Swift pour automatiser les tâches répétitives | de Riccardo Cipolleschi | janvier 2023
A propos de l'auteur
Articles Connexes
-
Zéro à l’App Store avec ChatGPT. Construire une météo à l’aide d’invites… | de Onur Com | janvier 2023
-
Motivation pour les organisations d’ingénierie | de Andy Walker | janvier 2023
-
Construire une application Flutter de générateur d’images aléatoires avec Python à l’aide de Flet | de Henri Ndonko | janvier 2023
Top News
Advertising
Catégories
- 8bits (1)
- abandonner (1)
- abandonnez (1)
- abstract (1)
- actions (1)
- active (1)
- actorle (1)
- actualiser (1)
- actuel (1)
- actuelles (1)
- affectation (1)
- affiche (1)
- afficher (3)
- aide (1)
- aider (2)
- ajouter (1)
- aks (1)
- allen (2)
- alternative (1)
- alternatives (1)
- amplify (1)
- analyse (1)
- analyser (1)
- analytics (1)
- anciens (1)
- andreas (1)
- android (2)
- andy (1)
- animation (2)
- anime (1)
- animer (1)
- Antivirus (93)
- Antivirus|Truck & Astuce (48)
- anton (1)
- api (1)
- app (2)
- application (42)
- applications (2)
- apporte (1)
- apprendre (1)
- apprentissage (1)
- apprises (1)
- approche (2)
- approfondir (1)
- attention (1)
- atzitzikaki (1)
- audio (1)
- automatique (1)
- automatisation (1)
- automatisations (1)
- automatiser (1)
- autre (2)
- aux (5)
- avec (49)
- avons (2)
- avrukin (1)
- aydin (1)
- azure (1)
- barre (3)
- base (3)
- baskets (1)
- batterie (1)
- bazel (1)
- beatteay (1)
- belle (2)
- bird (1)
- bloc (5)
- blog (1)
- bonnes (1)
- book (1)
- boostez (2)
- boot (1)
- bootstrap (1)
- bord (1)
- boris (1)
- bot (2)
- boutique (1)
- brandeis (1)
- busco (1)
- cadre (1)
- calendly (1)
- cao (1)
- cartes (1)
- cas (2)
- cash (1)
- cela (1)
- centric (1)
- ces (3)
- cette (2)
- chansons (1)
- chapeaux (1)
- chargeur (1)
- chat (2)
- chatbot (1)
- chatgpt (5)
- chemin (1)
- cherchez (1)
- chiffres (1)
- choisissez (1)
- chose (1)
- cli (1)
- clone (6)
- cloud (2)
- codage (2)
- code (15)
- codes (1)
- collection (1)
- collections (1)
- colorful (1)
- com (1)
- combat (1)
- comme (3)
- commencer (1)
- comment (23)
- commentaires (1)
- commerce (3)
- commits (1)
- communication (1)
- comparaison (1)
- comportement (1)
- composable (1)
- composant (1)
- compose (2)
- compter (2)
- conception (2)
- connexion (6)
- conseils (1)
- consommer (1)
- construire (5)
- construit (1)
- construite (4)
- contacts (1)
- conteneurs (1)
- contenu (1)
- contexte (1)
- contributeurs (1)
- conventionnels (1)
- conversation (1)
- convertir (1)
- convivial (1)
- core (1)
- correctif (1)
- cosmos (1)
- couche (1)
- couches (1)
- cours (2)
- crm (1)
- crypto (1)
- curseurs (1)
- custom (1)
- dal (1)
- dames (1)
- daniel (1)
- dans (17)
- dart (2)
- david (2)
- dernier (1)
- des (23)
- deux (1)
- devoir (1)
- devops (1)
- dialogflow (1)
- didacticiel (3)
- diego (1)
- difficile (1)
- dinc (1)
- dire (2)
- direct (2)
- directe (1)
- directeur (1)
- directory (1)
- dirigeons (1)
- diriger (1)
- dmytro (2)
- docker (2)
- documents (1)
- dollar (1)
- domaine (1)
- dont (1)
- dubovyk (1)
- dynamique (1)
- efficace (1)
- encore (2)
- engine (1)
- enregistrer (1)
- ensembles (1)
- entre (2)
- essentiel (1)
- essentiels (1)
- est (1)
- exemples (1)
- extension (1)
- fab (1)
- facebook (2)
- facilement (1)
- factory (1)
- faire (1)
- fait (1)
- faites (1)
- fay (1)
- fedoseev (1)
- fichier (1)
- film (1)
- filtre (1)
- finance (1)
- fintinariu (1)
- firebase (5)
- firestore (1)
- fitzmaurice (1)
- flame (1)
- flamme (1)
- flappy (1)
- flet (1)
- flottant (3)
- flottante (4)
- flottement (2)
- flow (1)
- flutter (52)
- flux (1)
- fonctions (1)
- form (1)
- francesco (1)
- francisco (1)
- frayer (1)
- frc (1)
- free (1)
- freiner (1)
- fse (1)
- fuites (1)
- full (1)
- gabriel (1)
- galerie (1)
- genfer (1)
- gestion (7)
- getx (1)
- github (2)
- google (4)
- grace (1)
- grande (1)
- grandes (1)
- grands (1)
- gratuit (6)
- gratuitement (1)
- hadley (1)
- helton (1)
- histoire (1)
- horaires (1)
- horribles (1)
- html (1)
- ici (1)
- image (1)
- images (2)
- imdb (1)
- importante (1)
- index (1)
- infinie (1)
- informations (2)
- informatique (1)
- inscrits (1)
- instagram (2)
- interface (6)
- interprocessus (1)
- interroger (1)
- interrompue (1)
- inverser (1)
- iphone (1)
- java (1)
- javascript (13)
- jetpack (2)
- jeu (7)
- jeux (1)
- joueurs (1)
- jour (1)
- jquery (3)
- kah (1)
- kairsten (1)
- kalik (1)
- khmelenko (1)
- kim (1)
- king (1)
- lampe (1)
- langues (1)
- laravel (1)
- lassig (1)
- ldaptemplate (1)
- leadership (2)
- lecteur (2)
- lecture (1)
- lee (1)
- lensa (1)
- leonardo (1)
- les (28)
- lesquelles (1)
- leuca (1)
- levier (1)
- licenciements (1)
- ligne (2)
- limiteur (1)
- linux (1)
- liou (1)
- livraison (1)
- livre (1)
- livres (1)
- logiciel (1)
- logicielle (1)
- lotto (1)
- lunettes (1)
- machines (1)
- macos (1)
- magasin (1)
- maguire (1)
- manuels (1)
- marko (2)
- markus (1)
- marshall (1)
- mauvaises (1)
- mcq (1)
- meilleur (2)
- meilleurs (1)
- menu (1)
- menus (2)
- messenger (1)
- mesure (1)
- meta (1)
- mettre (1)
- michael (2)
- microservice (1)
- microsoft (1)
- mike0sv (1)
- milkshake (1)
- Minecraft (30)
- mini (1)
- minutes (1)
- mise (2)
- mobile (2)
- mode (1)
- modifications (1)
- module (1)
- mohsin (2)
- mon (5)
- mongodb (2)
- monorepo (1)
- moteur (1)
- motivation (1)
- mouvement (1)
- movies (1)
- moyen (1)
- moyennes (1)
- multiplateforme (1)
- musique (1)
- mvvm (1)
- naldo (1)
- navigateur (1)
- navigation (1)
- nestjs (1)
- nevo (1)
- nfc (1)
- Node Js (1 013)
- nombre (3)
- nombreux (1)
- nos (1)
- notation (1)
- notes (2)
- notre (1)
- nous (5)
- nouvelles (1)
- novakovic (2)
- nuit (1)
- nulled (1)
- observateurs (1)
- obtenir (2)
- okoul (1)
- olena (1)
- onur (1)
- open (2)
- orchestration (1)
- ordre (1)
- organisations (1)
- othello (1)
- outil (1)
- outils (1)
- pacheco (1)
- package (7)
- pad (1)
- page (7)
- pagination (2)
- panoramique (1)
- paquet (1)
- par (3)
- parent (1)
- parler (1)
- partager (1)
- partir (3)
- pas (4)
- passer (2)
- patrick (1)
- pays (1)
- pdf (2)
- performance (1)
- permet (1)
- permettra (1)
- personnalisable (1)
- perspective (1)
- petites (1)
- petrica (1)
- peur (1)
- peut (6)
- peuvent (1)
- photos (1)
- php (5)
- picker (1)
- pile (1)
- pilote (1)
- plateforme (1)
- plateformes (1)
- plugin (1)
- plus (4)
- poche (1)
- points (1)
- police (1)
- pomodoro (1)
- populaires (1)
- portail (1)
- portails (1)
- portefeuille (1)
- potentiel (1)
- pour (50)
- pourquoi (5)
- pro (1)
- product (1)
- produit (1)
- profil (2)
- programmation (2)
- programme (1)
- projet (6)
- psychologique (1)
- pur (1)
- puzzle (1)
- python (3)
- que (2)
- quel (1)
- quelques (1)
- questions (1)
- qui (13)
- quick (1)
- quotidien (1)
- quotidiennes (1)
- qwik (1)
- raccourci (1)
- radius (1)
- rails (1)
- raisons (1)
- rapide (2)
- rapport (2)
- ratna (1)
- ratova (1)
- ray (1)
- react (2)
- recherche (2)
- regarder (1)
- remix (1)
- rend (1)
- rendre (3)
- responsables (1)
- ressources (1)
- restez (1)
- retourner (1)
- riccardo (1)
- riverpod (1)
- robots (1)
- rodrigues (1)
- romains (1)
- rotationnelle (1)
- royi (1)
- ruby (2)
- saisie (1)
- saisir (1)
- salesforce (1)
- sans (1)
- scanner (1)
- schwartz (1)
- script (1)
- scripts (2)
- sdk (1)
- seckin (1)
- second (1)
- selfies (1)
- seng (1)
- serveur (1)
- sheets (1)
- simple (20)
- simplement (1)
- simples (1)
- simuler (1)
- site (2)
- sliverappbar (1)
- social (1)
- sociale (1)
- sociaux (1)
- sommes (1)
- sont (1)
- source (12)
- soyez (1)
- spotify (1)
- spring (1)
- sqlite (2)
- stability (1)
- stack (1)
- store (2)
- stores (1)
- Streaming (67)
- suis (1)
- suivi (2)
- suivre (1)
- sujets (1)
- sung (1)
- sunny (1)
- sur (9)
- svelte (1)
- swift (4)
- swiftui (1)
- syed (2)
- symboles (1)
- tabbar (1)
- table (1)
- tableau (1)
- tableaux (1)
- tactiques (1)
- taper (1)
- tate (1)
- Tech (1 579)
- technique (1)
- technologique (1)
- temporaires (1)
- temps (2)
- tendances (1)
- test (1)
- tests (1)
- texte (2)
- thinking (1)
- todo (1)
- todolist (1)
- toile (1)
- toujours (1)
- toute (1)
- tracker (1)
- transmet (1)
- travail (1)
- travailler (3)
- triche (1)
- trois (1)
- Truck & Astuce (1 290)
- turtle (1)
- tutoriel (1)
- twitter (2)
- typescript (1)
- ultime (1)
- Uncategorized (3)
- une (42)
- unique (1)
- utiles (1)
- utilisant (15)
- utilisateur (8)
- utilisateurs (1)
- utilisation (1)
- utilise (1)
- utilisent (1)
- utiliser (5)
- utilisez (1)
- utilitaires (1)
- validated (1)
- ventes (1)
- vers (2)
- vinita (1)
- visages (1)
- vishal (1)
- visuellement (1)
- vocale (1)
- voir (1)
- vos (5)
- vote (1)
- votre (8)
- voulez (1)
- vous (7)
- vue (1)
- walker (1)
- wearos (1)
- web (3)
- webassembly (2)
- websockets (1)
- wenqi (1)
- widget (3)
- widgets (1)
- Windows (111)
- word (1)
- wordpress (1)
- workflow (1)
- wot (1)
- wrapper (1)
- yandex (1)
- yiming (1)
- yoga (1)
- yury (1)
- zaharenia (1)
- zal (1)
Search
-
How many ways can you create a PR on GitHub? Here's one nifty way using Codespaces. ✨ https://t.co/DkGBSIb2ca https://t.co/5WycOLeder
-
Need a little help with that crontab syntax? @rodgetech's AI-powered https://t.co/s4Bn2fJJkN might be just what you… https://t.co/EHjQ5Iv8Uf
-
@nextjs Congrats! https://t.co/1BBFZHJgGm
Comment utiliser les scripts Swift pour automatiser les tâches répétitives | de Riccardo Cipolleschi | janvier 2023
Un guide étape par étape pour être plus productif et efficace
Swift est une langue merveilleuse. Il peut être utilisé pour tout : applications iOS, bibliothèques, applications macOS et applications d’interface de ligne de commande (CLI). Vous pouvez également l’utiliser comme langage de script.
Cette semaine, j’ai dû faire un travail répétitif, et je ne voulais pas le faire manuellement. J’ai décidé d’écrire un script pour cela, et je l’ai écrit en utilisant Swift.
L’utilisation de Swift comme langage de script vous permet d’utiliser toutes les fonctionnalités intéressantes de Swift. Vous pouvez utiliser la complétion de code Xcode et son débogueur. Vous pouvez écrire des scripts en utilisant toutes les fonctionnalités puissantes de Swift : les énumérations, les protocoles et, par-dessus tout, les scripts, les types et la vérification des types. La sécurité de type est quelque chose que la plupart des langages de script courants (Python, Javascript, Ruby, etc.) n’ont généralement pas.
Si vous êtes un ingénieur iOS, l’utilisation de Swift dans votre flux de travail quotidien ne nécessite aucune configuration supplémentaire : Xcode est fourni avec le compilateur et nous pouvons exécuter des scripts Swift à l’aide de la commande suivante :
swift <path-to-your-script>.swift [args]
L’utilisation de Swift comme langage de script s’accompagne de certaines règles et mises en garde. Il n’y a que deux règles importantes :
#!/usr/bin/env swift
La première règle est importante si nous voulons exécuter notre script sans utiliser explicitement le
swift <program_name>
syntaxe. Si nous ajoutons lehashbang
, notre système essaiera d’utiliser le programme spécifié dans la première ligne pour exécuter le script. Donc, après avoir votre fichier de script (disonsupdateFiles.swift
) nous pouvons modifier ses droits d’accès avecchmod +x updateFiles.swift
et, après cette commande, nous pouvons l’invoquer directement avec
./updateFiles.swift [args]
sans exécuter explicitement le
swift
commande.La deuxième règle est liée à l’une des différences les plus importantes entre le génie logiciel et le codage (ou le développement de logiciels) :
La limitation d’avoir tout le code dans un seul fichier pousse les scripts Swift à l’encontre des bonnes pratiques d’ingénierie logicielle. Mais ce n’est pas grave si vous savez que vous n’aurez besoin de ce script que pour quelques jours.
Si vous commencez à écrire un script qui devient de plus en plus complexe, un seul script n’est probablement pas le bon outil pour ce travail. Vous avez probablement besoin d’une application de ligne de commande à part entière (ou application CLI).
Les cas d’utilisation entre une CLI et un script sont très différents :
try
s, et faites toutes les choses désagréables dont vous avez besoin pour faire le travail. Personne ne verra votre code et il sera supprimé juste après le travail.Ma façon préférée d’écrire un script dans Swift est de commencer avec un terrain de jeu Xcode. La création d’un terrain de jeu Xcode vous permet d’accéder à toutes les fonctionnalités intéressantes de Xcode, y compris le débogage et l’achèvement du code. Ceci est extrêmement utile pour développer le script plus rapidement, sans le cycle douloureux de mise à jour du script, de son exécution, de lecture des erreurs et de tout répéter.
Pour démarrer avec un Playground, vous pouvez :
Xcode ouvrira l’écran Playground par défaut. Avec un Playground, le fichier Swift s’appellerait
Content.swift
. Une fois le script terminé, vous pouvez le renommer et l’éloigner du Playground.Notez que si vous ajoutez le hashbang en haut du fichier et essayez d’exécuter le script, il renverra une erreur. Lors de l’écriture du script dans Xcode, vous pouvez commenter ou supprimer le hashbang.
Lors de l’exécution d’un script, Swift exécutera chaque ligne du script dans l’ordre dans lequel vous l’avez écrit. En ce sens, vous pouvez y penser comme s’il allait être interprété plutôt que compilé.
Mais ne vous y trompez pas, le script sera compilé !
La structure que je suggère de suivre consiste à écrire vos fonctions d’assistance au-dessus du script et l’instruction pour l’exécuter à la fin.
Mieux encore, enveloppez ces déclarations dans un
func main()
fonction et invoquez cela!Un exemple de structure ressemblerait à ceci :
#!/usr/bin/env swift
// MARK: - Helpers
func helperFoo() -> String {
// ... do something ...
}
func helperBar(param: String) -> Int {
// ... do something else ...
}
// MARK: - Main
func main() {
let aString = helperFoo()
let anInt = helperBar(param: aString)
print(anInt)
}
// MARK: - Execution
main()
L’organisation de votre code est toujours importante, même dans un script : cela permet d’isoler facilement les fonctionnalités pour une meilleure expérience de débogage. De plus, plus vous utilisez le script, plus vous verrez une infrastructure de base qui ne change pas, même si vous devez exécuter différentes opérations au-dessus de cette structure.
Organiser correctement le script peut vous permettre d’échanger facilement les fonctionnalités et de n’implémenter que la nouvelle logique dont vous avez besoin. Personne ne veut réimplémenter l’analyse d’arguments et l’exploration de fichiers encore et encore.
Analyse des arguments
Une partie importante du script consiste à recevoir des arguments de la ligne de commande pour réutiliser le même script avec différents paramètres ou pour l’exécuter sur différents dossiers.
Pour accéder aux arguments, Swift fournit un objet appelé
CommandLine
avec quelques propriétés statiques :argc
qui renvoie le nombre d’arguments passés au script, etarguments
un tableau de chaînes avec les arguments.Rappelez-vous que
arguments[0]
sera toujours le chemin d’accès au programme, y compris le nom du fichier Swift (par exemple :~/Desktop/Script/updateFiles.swift
).Cette semaine, j’ai dû mettre à jour des centaines de
include
instructions dans un ensemble de fichiers C++. La tâche est ennuyeuse à faire manuellement, alors je l’ai scriptée en utilisant Swift.Je ne peux pas partager le code exact, mais je peux partager la structure que j’ai utilisée et le processus que j’ai suivi pour le créer.
j’ai commencé à créer mon
main
fonction et l’invoquer, car c’est la base de tout script :import Foundation
func main() {
}
main()
Ensuite, j’avais besoin du chemin d’accès à un dossier contenant des fichiers C++. J’ai ajouté une analyse d’arguments pour m’assurer que le script a tout ce dont il a besoin pour fonctionner correctement :
func main() {
if CommandLine.argc != 2 {
let help = "Invoke the script with `swift updateFiles <path_to_the_folder>`"
print("Wrong number of arguments.n(help)")
exit(1)
}
let args = CommandLine.arguments
let path = args[1]
}
main()
Le code vérifie le nombre de paramètres et s’il est incorrect, il imprime une erreur significative. Même si je suis le seul client de ce script, je ne veux pas perdre des heures interminables à le déboguer : des messages d’erreur significatifs sont toujours utiles !
L’étape suivante consistait à utiliser le dossier passé comme
path
paramètre. Je voulais lister tous les fichiers contenus dans le dossier puis les traiter un par un :func main() {
if CommandLine.argc != 2 {
let help = "Invoke the script with `swift updateFiles <path_to_the_folder>`"
print("Wrong number of arguments.n(help)")
exit(1)
}
let args = CommandLine.arguments
let path = args[1]
let fm = FileManager.default
let files = try! fm.contentsOfDirectory(atPath: path)
files.forEach { file in
do {
} catch {
print("Failed to process file: (file). The error is (error)")
}
}
}
main()
Le script récupère une référence à la valeur par défaut
FileManager
, une classe fournie par le framework Foundation pour gérer le système de fichiers. A l’aide de ses méthodes, le code récupère le contenu du répertoire passé par l’utilisateur.Le script frappe le
try
. Dans ce cas, il est acceptable d’échouer durement si le chemin transmis n’est pas un dossier valide. L’erreur serait imprimée dans la console avec sa trace de pile.Enfin, j’avais besoin de traiter ces fichiers. j’ai préparé un
do-catch
clause pour invoquer une fonction d’assistance pour ma logique. De cette façon, la logique métier du script peut être séparée du code d’infrastructure.func processFile(
path: String,
fileName: String,
using fm: FileManager
) throws {
// Read
let file = "(path)/(fileName)"
guard file.hasSuffix(".h") || file.hasSuffix(".cpp") || file.hasSuffix(".mm") else {
return []
}
let content = try String(contentsOfFile: file)
let lines = content.split(separator: "n", omittingEmptySubsequences: false).map(String.init)
// Do your stuff
let (newLines, shouldUpdateFile) = replaceIncludeDirectives(lines: lines)
guard shouldUpdateFile else { return [] }
// Write
let newFileContent = newLines.joined(separator: "n")
try fm.moveItem(atPath: file, toPath: "(path)/old_(fileName)")
try newFileContent.write(to: URL(fileURLWithPath: file), atomically: true, encoding: .utf8)
}
func main() {
if CommandLine.argc != 2 {
let help = "Invoke the script with `swift updateFiles <path_to_the_folder>`"
print("Wrong number of arguments.n(help)")
exit(1)
}
let args = CommandLine.arguments
let path = args[1]
let fm = FileManager.default
let files = try! fm.contentsOfDirectory(atPath: path)
files.forEach { file in
do {
try processFile(path: path, fileName: file, using: fm)
} catch {
print("Failed to process file: (file). The error is (error)")
}
}
}
main()
Cet extrait ajoute un
processFile
fonction sur le dessus (suivant la structure suggérée) qui :Notez que cette méthode a une structure similaire de la
main
dossier:Bien que les scripts soient moins élaborés que les logiciels appropriés, ils pourraient bénéficier des principes que nous devrions appliquer lorsque nous traitons avec des logiciels qui doivent vivre longtemps. Dans ce cas, chaque fonction de script a une responsabilité spécifique (suivant le Principe de responsabilité unique) : exécutez le programme principal ou les opérations d’E/S sur un seul fichier.
Aujourd’hui, vous avez appris à utiliser Swift pour écrire des scripts. C’est une compétence utile pour automatiser les tâches manuelles ennuyeuses qui se produisent de temps en temps au travail. Ce script simple a nécessité quelques heures pour être écrit et testé, mais il m’a épargné une semaine de travail manuel et fastidieux.
Nous avons utilisé ce cas d’utilisation pour discuter des principales différences entre le génie logiciel et le développement de logiciels, en remarquant que le scripting ne nécessite pas de suivre toutes les bonnes pratiques du génie logiciel. Mais une structure appropriée et d’autres pratiques sont toujours utiles, même pour les scripts.
J’ai vraiment aimé utiliser Swift comme langage de script, et c’est un moyen incroyable d’accélérer les tâches répétitives pour être plus productif et efficace.
Télécharger ici