How to Build the Software
[!SUMMARY] This page explains:
- Which platforms Anywhere Academy is built for, and with which build profile
- Which ways to build there are, and which page covers each
- What the packaged downloads are called and how to verify them
- Where the build code lives
Important
Anywhere Academy uses Unity's build profiles to manage the build settings for individual platforms.
To learn more about build profiles, see Unity's documentation: https://docs.unity3d.com/6000.3/Documentation/Manual/build-profiles.html
Before building any version of the software, check if the scene list is set up properly.
- Open Build Profiles Page (File → Build Profiles)
- Find and verify the Scene List
Ways to Build
| Page | What you will find there |
|---|---|
| In the Editor | Building each platform on your machine, from the Tools → Build menu or by hand with its build profile |
| CI/CD Pipeline | Testing builds, pre-releases and releases, built and published by GitLab CI |
| Server Images | Moving a hosted server to a new server image, and running a server on your machine |
| Matching Clients and Servers | How builds are kept from being mixed up, and what to do when a session breaks anyway |
Platforms
| Platform | Build Profile | Scripting backend | Tools → Build | Package |
|---|---|---|---|---|
| Windows | Windows (VR & NonVR) |
IL2CPP | Windows (VR) | Anywhere_Academy_Windows.zip / .msi |
| Meta Quest | Meta Quest (VR) |
IL2CPP | Meta Quest (VR) | Anywhere_Academy_Quest.apk |
| WebGL | Web (NonVR), Web Productive (NonVR) |
IL2CPP | — | — |
| Linux Server | Linux Server |
Mono2x | Linux Server | Anywhere_Academy_Server.tar.gz, Docker image |
The scripted builds (Tools → Build in the Editor, and the CI jobs) run the same code, so a local build and a pipeline build produce the same output. WebGL is built by hand only.
Packages
Every package is named Anywhere_Academy_<Platform>, and so is the folder inside each archive: Anywhere_Academy_Server.tar.gz, Anywhere_Academy_Windows.zip / .msi, Anywhere_Academy_Quest.apk. Release names carry no version, so the static download links on the website keep working across releases; the version and the git commit are in the build-info.json that ships inside each archive (beside the APK for Quest).
Anything that is not a release says so at the end of its name, like its Docker tag: CI pre-releases end in _pre-release (Anywhere_Academy_Windows_pre-release.zip, extracting to Anywhere_Academy_Windows_pre-release/), CI testing builds in _testing. Development builds additionally end in _Dev, debug-signed APKs in _DebugSigned. Local builds from the editor menu get no channel suffix.
Every packaged artifact gets its own checksum file beside it, named <artifact>.sha256.txt — so a file handed to someone individually still carries proof of integrity. The contents are in the format sha256sum -c expects, so on Linux:
sha256sum -c "Anywhere_Academy_Quest.apk.sha256.txt"
and on Windows, compare against Get-FileHash -Algorithm SHA256 <file>.
Windows Installer
The .msi guides the user through Welcome, the license (the MIT text from LICENSE, converted at package time), the install folder (default Program Files\<company>\Anywhere Academy), the shortcuts (desktop and Start menu, both ticked by default), Ready to install and progress, and ends on a Finish page whose Launch Anywhere Academy checkbox is ticked by default. Apps & features shows the player's icon and links to the website and to this documentation. IT departments can still install silently with msiexec /i Anywhere_Academy_Windows.msi /qn, and leave out a shortcut by adding INSTALLDESKTOPSHORTCUT=0 or INSTALLSTARTMENUSHORTCUT=0.
The dialog set is a copy of WiX's WixUI_InstallDir with the Shortcuts page added (AnywhereAcademy.UI.wxs, which marks every change against the original), because WiX offers no other way to insert a page.
Any .msi replaces whichever version is installed, older, the same or newer, so testers can move freely between releases, pre-releases and testing builds. If one is installed, the Welcome page says so: Next replaces it, Cancel keeps it. A silent install replaces it without asking. Every build gets a new ProductCode for this; with one per version, as before October 2026, installing another build of the same version failed with "Another version of this product is already installed".
| Artwork | Size | Shown |
|---|---|---|
Tools/Packaging/Windows/dialog.bmp |
493 × 312 | Behind Welcome and Finish. Only the left 164 px are visible; the rest is covered by the text and should stay plain white |
Tools/Packaging/Windows/banner.bmp |
493 × 58 | Across the top of the other pages. The page title is drawn over the left side, so keep artwork to the right |
Both must be BMP files. If one is missing, the build warns and uses WiX's default artwork. The dialog texts are English (-cultures:en-us). The dialogs need WiX Toolset 3 on Windows; an .msi built with wixl on Linux installs with a progress bar only.
Where the Code Lives
| File | Role |
|---|---|
Assets/Editor/Build/BuildCommand.cs |
Everything that must happen inside Unity. Entry point BuildCommand.PerformBuild. Platform differences are described by BuildCommand.Windows / BuildCommand.Quest |
Assets/Editor/Build/BuildMenu.cs |
The Tools → Build menu items |
Tools/Build/PackagingCommon.ps1 |
Helpers shared by the packaging scripts |
Tools/Build/Package-Windows.ps1, Package-Quest.ps1, Package-Server.ps1 |
Produce the packages in Dist/. No Unity dependency |
Tools/Packaging/Windows/AnywhereAcademy.wxs |
Installer authoring |
Tools/Packaging/Windows/AnywhereAcademy.UI.wxs, AnywhereAcademy.en-us.wxl, banner.bmp, dialog.bmp |
Installer dialogs, their texts and their artwork, see Windows Installer |
Tools/Build/build-windows.sh, build-quest.sh, build-server.sh |
The CI entry points, see CI/CD Pipeline |
.gitlab-ci.yml |
The pipeline |