Podcast
Videos
September 6, 2022
Nov 2022
6 Min

Wiederkehrende Aufgaben in Swift automatisieren

Beak automatisiert wiederkehrende Aufgaben

Ich habe kürzlich ein Framework entdeckt, das mich richtig begeistert: https://github.com/yonaskolb/Beak

Der große Vorteil von Beak ist, dass wir Methoden in Swift schreiben und sie sehr einfach über die Kommandozeile ausführen können. Beak anaylsiert die Swift-Datei automatisch, findet alle public Methoden sowie ihre Parameter und stellt die Methoden als Subcommands zur Verfügung. Hier seht ihr eine beak.swift Beispiel-Datei:

import Foundation

public func hello(name: String, useExclamationMark: Bool = true) {
   let output = "Hello \(name)"
   let suffix = useExclamationMark ? "!" : "."
   print(output + suffix)
}

Wenn Beak installiert ist, könnt ihr die Methode so über die Kommandozeile ausführen:

$ beak run hello --name "World"
// Hello World!
$ beak run hello --name "World" --useExclamationMark false
// Hello World.

Beachtet, dass der Parameter name nicht optional ist, da er in der Methodendeklaration keinen Default-Wert hat.

Externe Bibliotheken nutzen

Aber das ist noch nicht alles, was Beak kann. Wir haben gerade ein "Hello World"-Beispiel gesehen, aber in der realen Welt müssen wir anspruchsvollere Aufgaben erledigen. Das bedeutet, es wäre wirklich nützlich, externe Bibliotheken einbinden zu können. Beak unterstützt auch das. Also fügen wir mal ein paar nützliche Bibliotheken für Kommandozeilenprogramme hinzu:

// beak: kareman/SwiftShell @ .upToNextMajor(from: "4.0.0")
// beak: onevcat/Rainbow @ .upToNextMajor(from: "3.0.3")

import Foundation
import SwiftShell
import Rainbow

// MARK: - Tasks
/// Installs project dependencies.
public func installDependencies() throws {
   let command = "carthage bootstrap --platform ios --cache-builds"
   print("Installing dependencies via Carthage: '\(command)'", level: .info)
   try runAndPrint(bash: command)
}

/// Updates project dependencies.
public func updateDependencies() throws {
   let command = "carthage update --platform ios --cache-builds"
   print("Updating dependencies via Carthage: \(command)", level: .info)
   try runAndPrint(bash: command)
}

// MARK: - Helpers
private enum PrintLevel {
   case info
   case warning
   case error
}

private func print(_ message: String, level: PrintLevel) {
   switch level {
   case .info:
       print("ℹ️ ", message.lightBlue)

   case .warning:
       print("⚠️ ", message.yellow)

    case .error:
       print("❌ ", message.red)
   }
}

Abhängigkeiten installieren

Jetzt können wir eine einfache, kurze Aufgabe ausführen, um Projekt-Abhängigkeiten mit Carthage zu installieren:

$ beak run installDependencies
// ℹ️  Installing dependencies via Carthage: 'carthage bootstrap --platform ios --cache-builds'
// *** Checking out Nimble at "v7.0.3"
// *** Checking out HandyUIKit at "1.6.0"
// *** Checking out HandySwift at "2.4.0"

Beeindruckend! Beak hat gerade zwei Abhängigkeiten installiert (SwiftShell und Rainbow), sie automatisch in die Datei integriert und den Code wie erwartet ausgeführt. Das war einfach! Beak kann alle Bibliotheken, die den Swift Package Manager unterstützen, installieren – und davon gibt es viele.

Aber unsere Datei wird lang und Code-Vervollständigung für eine einzelne Datei in Xcode ist nicht so gut, insbesondere funktioniert sie für externe Bibliotheken gar nicht. Beak macht sogar das zum Kinderspiel. Einfach beak edit ausführen und es generiert ein Xcode-Projekt und hängt alle externen Bibliotheken in das Projekt ein. Jetzt können wir einfach die main.swift Datei innerhalb des Projekts editieren und wenn wir fertig sind im Anschluss in der Kommandozeile c (wie copy) und Enter eintippen. Dann kopiert Beak automatisch die main.swift-Datei aus dem Projekt und ersetzt unsere beak.swift-Datei damit. Auf diese Art und Weise können wir Xcode-Autovervollständigungen voll ausnutzen und die Komplilier-Warnungen und Fehler unmittelbar während des Programmiervorgangs sehen.

Vergleichsbeispiel - Programmieren mit und ohne Beak

Hier ist ein Einsatzbeispiel aus der wirklichen Welt mit einer Beak-Datei für unser NewProjectTemplate Github-Projekt:
https://github.com/JamitLabs/NewProjectTemplate-iOS/blob/stable/beak.swift

Seht ihr, wieviel einfacher Beak es im Vergleich zu vorher gemacht hat, ein neues Projekt zu erstellen?

Ist das nicht genial? Vielen Dank, Yonas Kolb!

Andreas Link
Andreas Link
Anh Dung Pham
Anh Dung Pham
Cihat Gündüz
Cihat Gündüz
Andreas Link
Ekrem Sentürk
Eva Maria Stock
Eva-Marie Stock
Andreas Link
Giulia Maier
Inken Marei Kolthoff
Inken Marei Kolthoff
Janina Baumann
Janina Baumann
Janina Bokeloh
Janina Bokeloh
Jeanette Schmidt
Jeanette Schmidt
Jens Krug
Jens Krug
Kajorn Pathomkeerati
Kajorn Pathomkeerati
Karl Barth
Karl Barth
Kay Dollt
Kay Dollt
Murat Yilmaz
Murat Yilmaz
Thorsten Hack
Thorsten Hack
Thorsten Hack
Thorsten Hack
Inken Marei Kolthoff
Cynthia Murat
Inhaltsverzeichnis

Weitere Artikel

Ist Ihre App wettbewerbsfähig?
Inken Marei Kolthoff
26.11.2022
4 Min

Ist Ihre App wettbewerbsfähig?

Marktanalyse, Wettbewerbsanalyse, Konkurrenzanalyse - das sind vermutlich die ersten Stichworte, die einem einfallen, wenn man den eigenen Business-Case überprüft.

Artikel lesen
Mitarbeiter-Interview mit Janina
Inken Marei Kolthoff
26.11.2022
3 Min

Mitarbeiter-Interview mit Janina

Diesmal im Mitarbeiterinterview: Janina, unsere **Team-Assistenz**.

Artikel lesen
App Hersteller
Kay Dollt
26.11.2022
6 Min

App Hersteller

Mobile Apps sind komplexe Projekte, in denen kreative und innovative Lösungen gefragt sind.

Artikel lesen

Jetzt kostenloses Strategiegespräch sichern!

Die Beratungen sind grundsätzlich schnell ausgebucht, deshalb fülle jetzt in 2 Minuten das kurze Formular aus.

Jetzt Strategiegespräch sichern