Jetzt erkläre ich Ihnen, wie der Entwicklungsprozess für Unity in einem kleinen Unternehmen von gamedev aussieht und wie wir ihn verbessern und automatisieren. Trotzdem ist 2020 auf dem Hof, es ist genug, um mit der Maus zu fahren ...
Über die Maus ist dies kein Witz. Bis vor kurzem sah der Prozess des Testens und Entwickelns von Spielen bei uns ungefähr so aus:
Android
- Entwickler schreiben Code
- Going Android-Version
- Lädt in einen freigegebenen Ordner auf Google Drive hoch
- Der Tester lädt den neuesten Build herunter
- Testet und löst Aufgaben in Redmine
- Gehe zu: Schritt 1
Die iOS-Version ist etwas kniffliger:
iOS
- Entwickler schreiben Code
- Gehe zum Xcode-Projekt
- Postbuild-Skript fügt Lokalisierung, SDK und mehr hinzu
- Kompiliertes Projekt
- Archiviert
- Exportiert in eine IPA-Datei (all das ist nicht sehr schnell erledigt, haha)
- Danach können Sie den IPA in den freigegebenen Ordner auf Google Drive hochladen
- Oder laden Sie es in TestFlight hoch, wo Sie einige Tage warten können
- Tester lädt die neueste IPA herunter
- Verbindet das Gerät, installiert die Anwendung
- Testet und löst Aufgaben in Redmine
- Gehe zu: Schritt 1
Hier ist so eine Traurigkeit. Und wenn der Prozess für Android immer noch akzeptabel ist (nein), dann für iOS - alles ist sehr lang, unpraktisch und falsch. Darüber hinaus werden die meisten Vorgänge vom Entwickler manuell ausgeführt (hier über die Maus) und die Zeit, die für die Entwicklung aufgewendet werden muss, um auf die Kompilierung, den Export des Xcode-Projekts usw. zu warten. Es muss auch berücksichtigt werden, dass sich jeder im selben Büro befindet, d. H. Sie können kommen, um etwas zu fragen / zu sagen, bevor Sie diesen ganzen höllischen Prozess beginnen.
Aber im Allgemeinen funktioniert es irgendwie und veröffentlicht Spiele :)
Und hier entschied ich mich kürzlich mit der Einreichung von
Leopotam , einem weiteren Liebhaber des Fahrradbaus und der Optimierung von allem, diesen Prozess zu automatisieren. Das Ergebnis ist ein BASH-Skript, das Folgendes kann:
- Laden Sie die neuesten Änderungen aus dem GIT-Repository herunter
- Führen Sie Tests durch
- Erstellen Sie APK für Android in Entwicklung und Veröffentlichung
- Erstellen Sie ein Projekt für iOS Xcode in Entwicklung und Veröffentlichung
- Kompiliere es
- IPA archivieren und exportieren
- Erstellen Sie ein Manifest dafür
- Generieren Sie zu installierende HTML-Seiten
- Laden Sie all dies mit sshpass auf den Server hoch
- Legen Sie alle Protokolle in einem separaten Ordner ab
- Senden Sie eine Telegrammbenachrichtigung
Und das alles auf Knopfdruck. Ohne Unity und Xcode zu starten. Irgendwie macht es mehr Spaß, oder?

Jetzt, wenn die Montage abgeschlossen ist, erhält der Tester eine Benachrichtigung in Telegramm mit zwei Links zu den Android- und iOS-Versionen. Es bleibt ihnen durch und installieren Sie die Anwendung direkt vom Gerät. Es funktioniert auch unter iOS, und dafür wird ein spezielles Manifest generiert.
Eigentlich ist dies meine erste Erfahrung in der BASH-Programmierung, daher weiß ich nicht, wie es ist, in Feng Shui oder nicht, aber es funktioniert einwandfrei. In jedem Fall wird das Skript aktualisiert und an die Anforderungen der Projekte angepasst. Nachfolgend sind einige wichtige Punkte aufgeführt:
So erstellen Sie ein Unity-Projekt für eine bestimmte Plattform
Das
Handbuch beschreibt alle Argumente, die für den Build verwendet werden können. Führe das Build APK aus:
$UNITY -batchmode -quit -projectPath "$PATH" -executeMethod Game.BuildActions.AndroidDevelopment -buildTarget android -logFile "$LOGS_PATH/android_development.log"
Hier
legt -buildTarget nur die Plattform fest und -
executeMethod ruft eine Funktion im Unity-Projekt auf, die den Build mit den angegebenen Parametern startet. Sie sieht
ungefähr so aus:
static void AndroidDevelopment () { PlayerSettings.SetScriptingBackend (BuildTargetGroup.Android, ScriptingImplementation.IL2CPP); PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, "DEV"); EditorUserBuildSettings.SwitchActiveBuildTarget (BuildTargetGroup.Android, BuildTarget.Android); EditorUserBuildSettings.development = true; EditorUserBuildSettings.androidETC2Fallback = AndroidETC2Fallback.Quality32Bit; BuildReport report = BuildPipeline.BuildPlayer (GetScenes (), ANDROID_DEVELOPMENT_FILE, BuildTarget.Android, BuildOptions.None); int code = (report.summary.result == BuildResult.Succeeded) ? 0 : 1; EditorApplication.Exit (code); }
Hier können Sie Ihre eigenen Parameter für Build, Bedingung usw. einstellen. Das Ergebnis wird an das BASH-Skript zurückgegeben.
So kompilieren und exportieren Sie ein Xcode-Projekt
Nachdem Unity das Xcode-Projekt erfolgreich ausgestellt hat, muss es kompiliert, archiviert und in eine IPA-Datei exportiert werden.
xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -quiet > "$LOGS_PATH/ios_build_release.log" 2>&1
xcodebuild -project "$IOS_PATH/Unity-iPhone.xcodeproj" -scheme "Unity-iPhone" archive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -quiet > "$LOGS_PATH/ios_archive_release.log" 2>&1
xcodebuild -exportArchive -archivePath "$IOS_RELEASE/Unity-iPhone.xcarchive" -exportOptionsPlist "$IOS_RELEASE/options.plist" -exportPath $IOS_RELEASE -allowProvisioningUpdates -quiet > "$LOGS_PATH/ios_export_release.log" 2>&1
Hier ist
options.plist ein spezielles Manifest, das die Exportmethode, TeamID und mehr angibt. Alle verfügbaren Parameter können mit dem Befehl angezeigt werden:
xcodebuild -help
Bei all diesen Vorgängen wird das von Unity generierte Standard-
Unity-iPhone.xcodeproj angegeben. Wenn Sie über
xcworkspace verfügen, müssen Sie die Verfügbarkeit und Verwendung überprüfen.
So senden Sie eine Nachricht aus einem BASH-Skript an ein Telegramm
Sie müssen den
BotFather- Bot finden, ihm / start oder / newbot schreiben, die Felder ausfüllen und eine Nachricht mit einem Token und einem Link zur Dokumentation erhalten. Um eine Nachricht mit dem Bot zu senden, müssen Sie den folgenden Befehl ausführen:
curl $BOT_PROXY https://api.telegram.org/bot$BOT_TOKEN/sendMessage -m 60 -s -X POST -d chat_id=$CHAT_ID -d text="$1" > "$LOGS_PATH/bot.log" 2>&1
Hier ist
CHAT_ID die Chat-
ID, an die Nachrichten gesendet werden sollen. Sie können beispielsweise den Bot der Gruppe hinzufügen, in der die Tester sitzen, und ihm das Recht geben, Nachrichten zu lesen. Danach führen Sie aus:
https://api.telegram.org/bot[BOT_TOKEN]/getUpdates
Und erhalte die ID der Gruppe und der Mitglieder, die etwas geschrieben haben. Geben Sie anschließend die ID der Gruppe oder des bestimmten Mitglieds an, an das die Nachricht gesendet werden soll. Wie man das Versenden über einen Proxy findet und konfiguriert, halte ich für kein Problem.
Andere Funktionen, Patchen von Manifest-Vorlagen und HTML mithilfe von
sed und Hochladen der erforderlichen Dateien auf den Server mithilfe von
sshpass .
Parameter, die schnell geändert werden können:
Demo und Quelle
Natürlich könnte dies alles über das gleiche Gitlab CI / CD erfolgen, es gibt bereits fertige Skripte dafür, führen Läufer aus, bauen und testen. Kurz gesagt: Verwenden Sie vorgefertigte Infrastrukturen und Mechanismen. Sie müssen jedoch zu ihm wechseln und ihn auch konfigurieren. Vielleicht kommen wir dazu, obwohl es so viel besser ist als es war. Darüber hinaus wurde das gesamte Skript schnell genug geschrieben.
Alle Automatisierung im Jahr 2020! Roboter spritzen, kein Mann.