Online-Retrospektiven mit Miro

Durch die Corona-Maßnahmen und dem damit verbundenen Home-Office sind wir auf ein neues Kommunikations-Tool gestoßen: Mit Miro können wir unsere regelmäßigen Retrospektiven durchführen, auch wenn nicht alle Teilnehmer vor Ort sind.

Miro ist eine Art Online-Whiteboard mit zahlreichen Funktionen und eignet sich auch gut für die “Mad, Sad, Glad“-Methode, die wir oft einsetzen.

Neben Retrospektiven haben wir auch andere Darstellungsformen bzw. Anwendungsgebiete getestet, wie z.B. Mind Map, Brainstorming, Trello- oder Tabellenersatz. Für mich persönlich ist Miro nicht für alle Darstellungen oder Präsentationen die erste Wahl. Gut, dass man sich nicht auf ein Tool festlegen muss.

Ein Feature, das anfangs amüsant ist, später oftmals ablenken kann ist, dass man die Cursorbewegungen der anderen Teilnehmer sehen und verfolgen kann. Diese Funktion kann man jedoch bei Bedarf auch leicht deaktivieren.

Miro bietet zudem eine integrierte Video-Funktion an. Die Video-Übertragung war aber beim letzten Benutzen nicht sehr stabil und hat mich daher (noch) nicht überzeugt.

Eine Alternative zu Miro mit ähnlichen Funktionen scheint Mural zu sein. Mit diesem Tool habe ich jedoch noch keine Erfahrung.

Wir werden erstmal Miro weiter nutzen, mindestens so lange noch ein Teil des Teams von zu Hause aus arbeitet.

Firebase App Distribution von iOS-Apps via buddybuild

Jahrelang haben wir gerne Crashlytics Beta für die interne Verteilung von Testversionen unserer iOS-Apps verwendet. Crashlytics Beta wird von Google Ende März 2020 eingestellt.

TestFlight ist wohl die bekannteste Alternative. Der Dienst wurde bereits vor mehr als fünf Jahren von Apple übernommen. Die Nachteile von TestFlight waren u.a., dass die Bereitstellung oft durch eine automatisierte Verarbeitung etwas verzögert wurde. Außerdem müssen sich Personen zum Testen auf den jeweiligen Gerät mit ihrer Apple-ID anmelden.

Mit Firebase App Distribution bietet Google einen Ersatz an. Tester nutzen einen Google-Account. Einladungslinks für die Test-Versionen können leicht über die Firebase Console erstellt werden. Außerdem kann man Testpersonen und Testgruppen anlegen und verwalten.

Einige Continuous Integreation Systeme, wie z.B. bitrise, bieten bereits vorgefertigte Integrationen für Firebase App Distribution an. buddybuild unterstützt Firebase App Distribution nicht von Haus aus, man muss die Integration selbst mit Hilfe von eigenen Build Steps durchführen:

Da Firebase CLI verwendet wird muss man sich zunächst ein Firebase CLI Login Token erstellen.

Dieses Firebase Token sowie die Firebase App ID hinterlegt man dann in buddybuild als Environment Variablen FIREBASE_TOKEN bzw. FIREBASE_APP_ID.

Dann kann man die Custom Build Steps für buddybuild ergänzen.

In das Root-Verzeichnis des iOS-Projekts legt man zwei Shell-Script-Dateien. In die Datei buddybuild_postbuild.sh wird der eigentliche Befehl eingetragen, ob die Test-Version der App via Firebase bereitzustellen:

firebase appdistribution:distribute $BUDDYBUILD_IPA_PATH --app $FIREBASE_APP_ID --groups "my-test-group" --token $FIREBASE_TOKEN

Für den obigen Befehl werden die Firebase Tools auf dem CI-Server benötigt. Diese werden global installiert. Dabei stoß ich auf das Problem, dass die globale node.js-Version nicht kompatibel war. Daher versuche ich vor der Firebase CLI Installation zunächst die globale node.js zu aktualisieren. Dafür werden folgende Zeilen in der Datei buddybuild_postclone.sh ergänzt:

echo "Updating global node.js version…"
sudo npm install -g n
sudo n stable

echo "Installing global Firebase CLI…"
npm install -g firebase-tools

Diese Schritte führe ich vor dem eigentlichen Build-Prozesses des iOS-Projektes durch, damit im Fehlerfall der Workflow frühzeitig abgebrochen wird und man so Verzögerungen vermeiden kann.

iOS Simulator CoreTelephony-Log-Spam reduzieren

In neueren Xcode-Versionen wurde ich oft mit Infos über CoreTelephony, wenn ich Apps im iOS Simulator getestet habe. Offenbar wird dieses Verhalten von manchen Frameworks hervorgerufen, u.a. Firebase. Dies habe ich kürzlich in einem GitHub Issue gelesen.

Dort findet man auch den nützlichen Tipp, um diese Log-Ausgaben zu deaktivieren. Im Terminal den folgenden Befehl ausführen:

xcrun simctl spawn booted log config --mode "level:off" --subsystem com.apple.CoreTelephony

Der Befehl muss jeweils auf jedem Computer ausgeführt werden, auf dem die App via iOS Simulator laufen soll.

Bye bye Crashlytics Beta

Jahrelang haben wir gerne Crashlytics Beta für die bereitstellung von iOS-App-Versionen für die interne Benutzung eingesetzt. Dieser Dienst wird Ende März 2020 von Google eingestellt.

Mit der internen Version lassen sich neueste Änderungen testen und man kann Entwickleroptionen aktivieren, die nicht für die Produktivversion vorgesehen sind.

Crashlytics Beta hatte u.a. gegenüber TestFlight die folgenden Vorteile
– Keine Apple-ID benötigt, daher einfacheres Einloggen auf Testgeräten möglich
– Keine Verzögerung, die manchmal entstand wenn TestFlight-Versionen erst automatisiert von AppStoreConnect verarbeitet werden
– Nicht auf eine Plattform beschränkt, es wird auch die Bereitstellung von Android-Appversionen unterstüzt

Durch das Crashlytics SDK in der App wurden die Tester außerdem per In-App-Dialog auf aktualisierte Testversionen hingewiesen. Da wir zeitweise viele Releasen erzeugt haben konnte dieses Feature schon den ein oder anderen nerven, da mit (fast) jedem Appstart zunächst ein Dialog weggeklickt werden musste. Aus Entwicklersicht war der Dialog sicherlich hilfreich, da man dadurch besser gewährleisten konnte, dass die Versionen einigermaßen aktuell bleiben.

Glücklicherweise bietet Google mit Firebase App Distribution einen Nachfolger an. Dieser neue Service ist u.a. besser in diverse Google-Dienste integriert. Auch weil Tester nun einen Google-Account für den Login verwenden müssen.

Textänderung in Datei auf Kommandozeile ausgeben lassen

Mit dem diff-Programm lassen sich in der Kommandozeile einfach Änderungen an Dateien ausgeben lassen. Dies nutze ich z.B. um alle Änderungen bei einem Übersetzungsupdate sehen zu können:

  • Datei.txt temporär kopieren nach AlteDateiversion.txt
  • Änderungen an Datei.txt durchführen
  • diff –side-by-side –suppress-common-lines AlteDateiversion.txt Datei.txt
  • AlteDateiversion.txt löschen

Mit den obigen Parametern zeigt diff nur gelöschte, hinzugefügt und geänderte Zeilen an und stellt die Änderungen zweispaltig da.