com.xmobitea.changx.mini-build
v1.5.2
Published
XmobiTea Unity Toolkit packages
Readme
XmobiTea Build
Editor-focused Unity build automation package for Android, iOS, WebGL, Windows, and MacOS.
Most behavior lives in the Editor assembly. The Runtime assembly only defines the BuildSettings asset type and the package-specific WebGLCompressionFormat enum.
AI-Focused Docs
Use these task-oriented files when you need the smallest possible context:
AI_SETUP.mdAI_SETUP_BUILD_SETTINGS.mdAI_BUILD_ANDROID.mdAI_BUILD_IOS.mdAI_BUILD_WEBGL.mdAI_BUILD_DESKTOP.mdAI_USAGE.mdAGENTS.md
Need-Based Routing
- Need to create or update the
BuildSettingsasset:AI_SETUP_BUILD_SETTINGS.md - Need to build Android APK or AAB:
AI_BUILD_ANDROID.md - Need to build iOS:
AI_BUILD_IOS.md - Need to build WebGL:
AI_BUILD_WEBGL.md - Need to build Windows or MacOS:
AI_BUILD_DESKTOP.md - Need the short package contract:
AI_USAGE.md - Need maintainer and agent rules:
AGENTS.md
AI Quick Contract
- Public runtime surface:
BuildSettingsWebGLCompressionFormat
- Public editor entry points:
AndroidBuildiOSBuildWebGLBuildWindowsBuildMacOSBuildBuildSettingsEditor.GetSettings()Build.TryGetArg(...)
- Internal shared runner:
Build.StartBuild(...)
- Only enabled
EditorBuildSettings.scenesare included in the build. - The package attempts to delete and recreate the platform output folder before each build.
- Built-in prebuild logic only reads the command-line arg names
-bundleVersionand-versionCode. - Missing
BuildSettingslogs an error during prebuild, but does not stop the subsequent build. - Android and iOS version fields are updated before the
BuildSettingsmissing-asset check. - Android and iOS interactive build menu items do not run
PreBuild(). - WebGL interactive build does run
PreBuild().
What This Package Actually Provides
- A
BuildSettingsScriptableObjectthat stores:- Android keystore fields
- iOS automatic signing fields
- WebGL compression and caching fields
- A shared internal editor build runner that:
- collects enabled scenes
- computes the output path
- calls
BuildPipeline.BuildPlayer(...)
- Platform-specific editor helpers with menu items and scriptable static methods
- A custom inspector plus
XmobiTea Tools/Build/Open Settingshelper that auto-creates the settings asset if needed
Runtime vs Editor Surface
Runtime assembly
Namespace:
using XmobiTea.MiniBuild;Types:
BuildSettingsWebGLCompressionFormat
There is no gameplay/runtime build pipeline logic in the runtime assembly.
Editor assembly
Namespace:
using XmobiTea.MiniBuild.Editor;Primary entry points:
AndroidBuild.PreBuild()AndroidBuild.Build()AndroidBuild.AabBuild()iOSBuild.PreBuild()iOSBuild.Build()WebGLBuild.PreBuild()WebGLBuild.Build()WindowsBuild.Build()MacOSBuild.Build()BuildSettingsEditor.GetSettings()Build.TryGetArg(...)
Implementation detail:
Build.StartBuild(...)isinternal, not part of the public package API for consumers in other assemblies.
Shared Build Flow
Build.StartBuild(...) is the internal runner used by all platform build classes.
Actual behavior:
- It tries to delete the platform subfolder such as
Build/Android/. - It tries to recreate that subfolder.
- If folder cleanup throws, it logs the exception and still continues.
- It includes only enabled scenes from
EditorBuildSettings.scenes. - It builds to
subPath + name. - It returns
trueonly whenBuildPipeline.BuildPlayer(...)reportsSucceeded.
Important consequences:
- Output under
Build/...is treated as disposable. - Disabled scenes are skipped automatically.
- Folder cleanup is best effort, not a hard guardrail.
Platform Behavior
Android
Menus:
XmobiTea Tools/Build/Pre Build/Android
XmobiTea Tools/Build/Build/Android .apk
XmobiTea Tools/Build/Build/Android .aabStatic methods:
AndroidBuild.PreBuild()AndroidBuild.Build()AndroidBuild.AabBuild()
PreBuild() behavior:
- reads
-bundleVersionand setsPlayerSettings.bundleVersionwhen present - reads
-versionCodeand parses it asintforPlayerSettings.Android.bundleVersionCode - increments
PlayerSettings.Android.bundleVersionCodeby1when-versionCodeis absent - loads
BuildSettingsfromResources.Load<BuildSettings>(BuildSettings.ResourcesPath) - if settings are missing, logs an error and returns without applying keystore fields
- version fields are updated before
BuildSettingsis loaded, so a missing settings asset does not undo earlier version changes - if settings exist, applies:
useCustomKeystorekeystoreNamekeystorePasskeyaliasNamekeyaliasPass
Build method behavior:
AndroidBuild.Build()setsEditorUserBuildSettings.buildAppBundle = falseand runsPreBuild()firstAndroidBuild.AabBuild()setsEditorUserBuildSettings.buildAppBundle = trueand runsPreBuild()firstXmobiTea Tools/Build/Build/Android .apkdoes not runPreBuild()XmobiTea Tools/Build/Build/Android .aabdoes not runPreBuild()- supported Unity versions for this package use
EditorUserBuildSettings.androidCreateSymbols = AndroidCreateSymbols.Publicduring the build, then restore the previous value
Outputs:
- APK ->
Build/Android/build.apk - AAB ->
Build/Android/build.aab
Practical consequence:
- If you use the Android build menu items directly, the build uses whatever Android
PlayerSettingsare already in memory unless you ranPre Build/Androidfirst.
iOS
Menus:
XmobiTea Tools/Build/Pre Build/iOS
XmobiTea Tools/Build/Build/iOSStatic methods:
iOSBuild.PreBuild()iOSBuild.Build()
PreBuild() behavior:
- reads
-bundleVersionand setsPlayerSettings.bundleVersionwhen present - reads
-versionCodeand writes it directly toPlayerSettings.iOS.buildNumberwhen present - otherwise increments
PlayerSettings.iOS.buildNumberby parsing it asint - loads
BuildSettings - if settings are missing, logs an error and returns without applying signing fields
- version fields are updated before
BuildSettingsis loaded, so a missing settings asset does not undo earlier version changes - if settings exist, applies:
appleEnableAutomaticSigningappleDeveloperTeamID
Build method behavior:
iOSBuild.Build()runsPreBuild()firstXmobiTea Tools/Build/Build/iOSdoes not runPreBuild()
Output:
- Xcode project ->
Build/iOS/build
Practical consequences:
- Interactive iOS builds do not refresh signing or version fields unless you ran
Pre Build/iOSfirst. - Automatic increment requires the current
PlayerSettings.iOS.buildNumberto be numeric.
WebGL
Menus:
XmobiTea Tools/Build/Pre Build/WebGL
XmobiTea Tools/Build/Build/WebGLStatic methods:
WebGLBuild.PreBuild()WebGLBuild.Build()
PreBuild() behavior:
- loads
BuildSettings - if settings are missing, logs an error and returns without applying WebGL settings
- if settings exist, applies:
PlayerSettings.WebGL.dataCachingPlayerSettings.WebGL.compressionFormatPlayerSettings.WebGL.decompressionFallback
Build method behavior:
WebGLBuild.Build()runsPreBuild()firstXmobiTea Tools/Build/Build/WebGLcallsBuild(), so the menu build also runsPreBuild()
Output:
Build/WebGL/build
Windows
Menu:
XmobiTea Tools/Build/Build/WindowsStatic method:
WindowsBuild.Build()
Behavior:
- does not use
BuildSettings - does not have a separate prebuild step
- builds directly through the shared runner
Output:
Build/Windows/build.exe
MacOS
Menu:
XmobiTea Tools/Build/Build/MacOSStatic method:
MacOSBuild.Build()
Behavior:
- does not use
BuildSettings - does not have a separate prebuild step
- builds directly through the shared runner
Output:
Build/MacOS/build.app
BuildSettings Asset
BuildSettings is defined in the runtime assembly and loaded with:
Resources.Load<BuildSettings>(BuildSettings.ResourcesPath)The constant path is:
XmobiTea BuildSettingsThat means the asset must be named XmobiTea BuildSettings.asset and live directly inside a Resources folder. Assets/Resources/XmobiTea BuildSettings.asset is valid; Assets/Resources/Build/XmobiTea BuildSettings.asset is not, because the load path has no subfolder segment.
Package helpers:
XmobiTea Tools/Build/Open Settingsloads or auto-creates the asset- auto-created path:
Assets/Resources/XmobiTea BuildSettings.asset - create menu path:
XmobiTea Config/Build Settings
BuildSettings exposes read-only public properties backed by private serialized fields:
- Android:
useAndroidKeystorereads_useAndroidKeystorekeystoreNamereads_keystoreNamekeystorePassreads_keystorePasskeyaliasNamereads_keyaliasNamekeyaliasPassreads_keyaliasPass
- iOS:
appleEnableAutomaticSigningreads_appleEnableAutomaticSigningappleDeveloperTeamIDreads_appleDeveloperTeamID
- WebGL:
compressionFormatreads_compressionFormatdataCachingreads_dataCachingdecompressionFallbackreads_decompressionFallback
Use the custom inspector, SerializedObject, or the serialized backing field names when editing the asset programmatically; the public properties do not have setters.
Recommended Workflows
Headless or scripted build
Use the static build methods because they trigger the package prebuild logic where applicable.
using XmobiTea.MiniBuild.Editor;
public static class BuildEntry
{
public static void BuildAndroidApk()
{
AndroidBuild.Build();
}
public static void BuildAndroidAab()
{
AndroidBuild.AabBuild();
}
public static void BuildIos()
{
iOSBuild.Build();
}
public static void BuildWebGl()
{
WebGLBuild.Build();
}
}Interactive menu build for Android or iOS
If you need the package to refresh signing/version settings first:
- Run the matching
Pre Build/...menu item. - Run the matching
Build/...menu item.
If you skip the prebuild menu, the build still runs, but it uses the current PlayerSettings values as-is.
Command-Line Args Used By Built-In Flows
Built-in Android and iOS prebuild logic only reads:
-bundleVersion-versionCode
Notes:
Build.TryGetArg(...)itself is generic and can search any arg name.- Android parses
-versionCodeasint, so non-numeric values will throw. - iOS writes
-versionCodedirectly toPlayerSettings.iOS.buildNumber.
Do / Don't
Do
- Do treat this as an editor automation package with a small data-only runtime surface.
- Do keep enabled scenes in
EditorBuildSettingsaccurate before building. - Do treat
Build/...outputs as disposable. - Do use
BuildSettingsEditor.GetSettings()orOpen Settingswhen you need the settings asset. - Do run
PreBuild()explicitly before Android/iOS menu builds if you want package-managed versioning or signing updates.
Don't
- Don't describe this package as pure runtime functionality.
- Don't assume Android/iOS build menu items call
PreBuild()for you. - Don't assume missing
BuildSettingsstops Android/iOS/WebGL builds. - Don't assume Windows/MacOS build flow reads
BuildSettings. - Don't assume disabled scenes are included.
Common Mistakes
Mistake 1: Expecting Android/iOS menu builds to refresh settings
The Android .apk, Android .aab, and iOS menu build commands skip PreBuild().
Mistake 2: Treating BuildSettings as a hard build requirement
The prebuild step logs an error when the asset is missing, but the actual build method still proceeds.
Mistake 3: Forgetting the output folder is disposable
The package tries to delete and recreate the platform folder under Build/... before each build.
Mistake 4: Expecting all project scenes to build
Only enabled EditorBuildSettings.scenes are included.
Mistake 5: Using a non-numeric Android -versionCode
Android parses that value with int.Parse(...).
Mistake 6: Leaving a non-numeric iOS build number before auto-increment
The iOS auto-increment path parses the existing PlayerSettings.iOS.buildNumber as int.
Package Metadata
- Package name:
com.xmobitea.changx.mini-build - Version:
1.5.2 - Unity version:
2022.3+ - Dependency:
com.xmobitea.changx.app - License:
Apache-2.0
