Martin Zöller
Wenn du seit mehr als ein paar Wochen Mobile Apps entwickelst, kennst du den Schmerz. Du startest ein Projekt, baust ein paar Features und führst es aus. Nach einigen Wochen wird das manuelle Bauen mühsam, also prüfst du die einzige wirkliche Option, um den Prozess zu automatisieren: Fastlane. Und während die anfängliche Einrichtung unkompliziert erscheint, ist die Wahrscheinlichkeit groß, dass dein Terminal trotzdem mit rotem Text explodieren wird.
Meistens ist es ein Konflikt mit der Ruby-Version. Oder du hast das System-Ruby verwendet, obwohl du es nicht hättest tun sollen. Oder vielleicht hast du Homebrew genutzt (wie Fastlane es vorschlägt), aber es hat sich gestern automatisch aktualisiert, und jetzt funktioniert nichts mehr.
Lange Zeit habe ich mich einfach irgendwie durchgeschlagen: Ich habe sudo benutzt, um das Tool zu zwingen, das zu tun, was ich wollte, habe blind zufällige Befehle aus irgendwelchen Reddit-Threads kopiert und auf das Beste gehofft. Aber nachdem ich mein zehntes Projekt aufgesetzt hatte und gegen genau dieselben Wände lief wie vor einigen Jahren, beschloss ich, es tatsächlich zu beheben.
Dieser Leitfaden ist der „richtige“ Weg, um mit Fastlane umzugehen. Er verwendet rbenv, um dein Projekt von dem Chaos zu entkoppeln, das auf deinem System oder durch Homebrew passiert. Es ist vorhersehbar, es fixiert deine Versionen und es funktioniert einfach.
Wir gehen zuerst die manuellen Schritte durch, damit du verstehst, was unter der Haube passiert. Aber wenn du es einfach nur hinter dich bringen willst, bleib bis zum Ende dran: Ich habe ein One-Shot-Skript beigefügt, das die gesamte Einrichtung automatisch für dich erledigt.
Das System-Ruby wird für, nun ja, interne Systemprozesse verwendet, also wollen wir nicht daran herumpfuschen – und sollten es auch nicht.
Man hört oft die Empfehlung, stattdessen Homebrew zu verwenden. Fastlane sagt dir in seiner Dokumentation dasselbe und verlinkt auf eine Liste von Ruby-Managern, aus denen du wählen kannst. Wenn es dir wie mir geht, hast du keine Lust, einen auszusuchen, und da sie Homebrew bereits erwähnt haben und du weißt, was das ist, nimmst du einfach das.
Was kann schon schiefgehen, hm?
Obwohl Homebrew großartig ist, ist es ziemlich aggressiv, wenn es um die Aktualisierung seiner Pakete geht. Das ist meistens in Ordnung, aber da wir Ruby nur verwenden, um Fastlane zu installieren und auszuführen, brauchen wir nicht die neueste, glänzendste Ruby-Version.
Wir wollen uns vor allem nicht mit Deprecations, Framework-Neuschreibungen oder all dem anderen Kram herumschlagen, der Rubyisten wahrscheinlich wichtig ist – und das zu Recht. Wir wollen Apps bauen, also wollen wir einfach etwas, das funktioniert.
Glücklicherweise gibt uns rbenv genau das: volle Kontrolle, zuverlässige Ruby-Versionen und eine einfache Einrichtung, die sich leicht über App-Projekte hinweg reproduzieren lässt.
Die folgenden Schritte führen dich durch das Entfernen des alten Homebrew-Chaos, das wahrscheinlich auf deinem System Amok läuft, und richten dann alles auf eine einfache und saubere Weise ein, damit du es nie wieder tun musst.
(Was ich mit „nie“ meine, ist, dass du 97 % deiner Fastlane-Einrichtung für jede App, die du baust, einsparen wirst. Irgendwann in ferner Zukunft möchtest du vielleicht Ruby aktualisieren, wie du es mit allen deinen Abhängigkeiten und Frameworks tun solltest. Aber das weißt du wahrscheinlich. Ich muss das nur hinzufügen, um die „Na ja, eigentlich …“-Fraktion im Zaum zu halten. Egal! Wo war ich?)
Entferne in deiner .zshrc den folgenden Block:
export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/ruby/lib"
export CPPFLAGS="-I/opt/homebrew/opt/ruby/include" Deinstalliere die mit Homebrew installierten Pakete:
brew uninstall fastlane
brew uninstall ruby Installiere die Abhängigkeit über Homebrew:
brew install rbenv ruby-build Beachte, dass das ruby-build Plugin notwendig ist, da rbenv Ruby standardmäßig nicht installieren kann, das Plugin aber schon.
Füge rbenv zu deiner .zshrc hinzu:
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
source ~/.zshrc Dies ermöglicht es rbenv, sich vor das System-Ruby zu schalten.
Eine kleine Vorbedingung: Da rbenv Ruby aus dem Quellcode kompiliert, benötigst du einen C-Compiler. Wenn du Xcode installiert hast, bist du normalerweise startklar, aber manchmal fehlen die spezifischen Command Line Tools oder zeigen auf den falschen Ort.
Wenn der Befehl unten fehlschlägt, versuche xcode-select --install auszuführen und versuche es erneut.
Installiere eine Version. Wir verwenden 3.3.6, was eine wirklich solide und stabile Ruby-Version ist:
rbenv install 3.3.6 Setze diese Version als die globale Ruby-Version, die von rbenv verwendet werden soll:
rbenv global 3.3.6 Führe im Repository-Root, auf der gleichen Ebene wie dein fastlane-Ordner, folgendes aus:
rbenv local 3.3.6 Hier ist, was das bewirkt: Es generiert eine .ruby-version Datei mit folgendem Inhalt:
3.3.6 Das ist alles. Es ist so einfach und doch so zuverlässig, dass es schon fast lustig ist.
rbenv verwaltet deine Ruby-Installationen. Bundler verwaltet deine Gems (Pakete) für die aktuelle Ruby-Installation. Es ist Magie. Nun, nicht wirklich, aber es ist etwas, dessen man sich bewusst sein sollte und womit Junior-App-Entwickler zu kämpfen haben.
Führe diesen Befehl aus, um Bundler zu installieren:
gem install bundler Führe diese Befehle aus, um dein lokales Setup zu bereinigen:
rm Gemfile.lock
rm -rf .bundle
rm -rf vendor Führe einfach diesen Befehl aus, während dein Gemfile vorhanden ist:
bundle install Falls du kein Gemfile hast – so wird dein typisches Fastlane-Gemfile höchstwahrscheinlich aussehen:
source "https://rubygems.org"
gem 'fastlane' Du kannst das gleiche Gemfile einrichten, indem du folgendes ausführst:
bundle init && bundle add fastlane Um deine Installation zu überprüfen, kannst du folgenden Befehl ausführen:
bundle exec fastlane -v Wenn du einen Haufen 🚀 Raketen-Emojis siehst (wie üblich) und eine Ausgabe wie fastlane 2.229.0, weißt du nun ein paar Dinge:
bundle hat deine Fastlane-Installation gefunden.Gemfile wurde verwendet.Zusätzlich kannst du auch diesen Befehl ausführen, um den Installationsort von Bundler zu sehen:
which bundle Und du wirst wahrscheinlich so etwas als Ergebnis sehen:
/Users/martinzoeller/.rbenv/shims/bundle Das Wörtchen rbenv im Pfad bestätigt, dass bundle von dem Ruby 3.3.6 aufgerufen wurde, das du gerade installiert hast.
Der ganze Sinn dieses Setups ist Reproduzierbarkeit. Du möchtest, dass deine Teamkollegen (oder dein zukünftiges Ich auf einer anderen Maschine) das Repo klonen können und es einfach funktioniert.
Damit das passiert, musst du die folgenden Dateien in git committen:
GemfileGemfile.lock (Entscheidend! Dadurch frierst du die exakten Versionen deiner Abhängigkeiten ein).ruby-versionStelle jedoch sicher, dass du das vendor-Verzeichnis und den .bundle-Ordner in deiner .gitignore ignorierst. Diese sind nur für dein lokales Setup auf deinem MacBook gedacht.
Jetzt, da der Unterbau repariert ist, ist der letzte Schritt, die Automatisierung tatsächlich einzurichten.
Führe diesen Befehl aus, um Fastlane für dein Projekt zu initialisieren:
bundle exec fastlane init Das führt dich durch einen Einrichtungsassistenten und generiert zwei sehr wichtige Dateien:
Fastfile: Hier schreibst du deine Lanes (deine Automatisierungslogik).Appfile: Hier speicherst du deine Bundle-ID und Apple-ID-Informationen.Von hier an führst du einfach bundle exec fastlane [lane_name] aus, wann immer du eine Lane starten möchtest. Kein sudo, kein System-Ruby, keine Kopfschmerzen.
Da du Homebrew nicht mehr verwendest, um Ruby auf deiner Maschine zum Laufen zu bringen, kannst du jetzt einfach das folgende Skript ausführen, um dein Ruby und Fastlane über rbenv startklar zu machen:
#!/bin/bash
# 1. Install rbenv if not present
if ! command -v rbenv &> /dev/null; then
echo "Installing rbenv..."
brew install rbenv ruby-build
fi
# 2. Add rbenv to .zshrc if not already there
if ! grep -q "rbenv init" ~/.zshrc; then
echo "Adding rbenv to .zshrc..."
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
fi
# 3. Initialize rbenv for this script session
eval "$(rbenv init - zsh)"
# 4. Install Ruby 3.3.6 (skips if already installed)
echo "Installing Ruby 3.3.6..."
rbenv install 3.3.6 --skip-existing
# 5. Set local Ruby version
echo "Setting local Ruby version..."
rbenv local 3.3.6
# 6. Install Bundler
echo "Installing Bundler..."
gem install bundler
# 7. Set up Fastlane
echo "Setting up Fastlane..."
# Check if Gemfile exists, if not, initialize it
if [ ! -f Gemfile ]; then
echo "Creating Gemfile..."
bundle init
fi
# Add fastlane to the Gemfile
bundle add fastlane
echo "Done! You are ready to go."
echo "Note: You may need to restart your terminal or run 'source ~/.zshrc' for changes to take effect." Um dieses Skript auszuführen, erstelle eine neue fastlane-setup.sh Datei und füge den Inhalt dort ein. Vergiss nicht, chmod +x fastlane-setup.sh auszuführen, um sie ausführbar zu machen.
Wenn es dir wie mir geht, setzt du nur ab und zu neue Mobile-App-Projekte auf. Mein altes Ich wollte Dinge schnell erledigen und hat nie aufgeschrieben, wie er eigentlich die Infrastruktur für Fastlane installiert hat. Also stellte ich mir jedes Mal, wenn ich ein neues Projekt aufsetzte, dieselben Fragen:
sudo verwenden?sudo brauche, also warum sagt mir das Terminal, dass ich’s falsch mache?Gemfile? Ich weiß, dass es auch ohne geht …Die Sache ist: Meistens willst du es einfach erledigt haben und wieder Features bauen. Wenn du wie ich bist, machst du das ein paar Mal und hast dann einfach genug, weil du bei jedem neuen Projekt Zeit verschwendest. Und wenn du wie ich bist, wirst du froh sein, dass es jetzt einen einfachen Einrichtungsleitfaden gibt, der dir alles von Anfang bis Ende liefert, was du brauchst.
Wenn dir der Artikel geholfen hat, sag Hallo auf LinkedIn, wo ich regelmäßig meine Erfahrungen zu den Themen Mobile App Engineering, Coding mit KI oder Herausforderungen in der Kommunikation im Software Engineering teile. Ich freue mich, und wir sehen uns dort!