{"_id":"com.xmobitea.changx.mini-build","_rev":"42-7e88ea542eea815bf1f400ecc5fb557a","name":"com.xmobitea.changx.mini-build","dist-tags":{"latest":"1.5.2"},"versions":{"1.3.8":{"name":"com.xmobitea.changx.mini-build","version":"1.3.8","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-build@1.3.8","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"3f0f2f4ddf34fb20d7833d7623d553944f2ec8a9","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.3.8.tgz","fileCount":28,"integrity":"sha512-fVaI/oIjGvKgODAPQJmkrZJTYc275H+c7trwpYSW8vDBwE8rHEFz3/QP+NUa2d8wXrt4yjF0Zt3cjQERDaWoMg==","signatures":[{"sig":"MEYCIQD0s6+SSapw8J2vpZkdeIVkus8BqYTCnR3IQtUhPxATigIhAO6QxYg4aroJRwGD+M7f6wk2UjVYPBhE7JiapPktlIBj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJincn6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpJ1w//cA7fXH1k0MNF/0Jcg/BGRLUgrKqds4/C7VKtkzGj16ByKrpC\r\nBgKEL0rm1sfXDC56JuBIZYASxYfaZh/Lq90G6A/r3b5sFjusaC8ks1qwg+41\r\n1heh2VmTS1oNgpacwBT2IMy5WMma3F/Er3pi7nQ2DBRJmyOfK7JOXtIs5bNi\r\nfae3jkv0+kVf74Whxgk6sbFDFFwv/w3ST+1H41KRsmPbs1WmrO1xQFC2hlg3\r\nQjKZTxWkJVGHB8Ccl3tXTJ7IUsl4a6X6FR1PXR7P3ytACjUNkLmIkzFuT/m4\r\njdfsZTt9cJiGhX9BvrUKZkXef9Z/nmEaiKHmX/WiaHQ31PNmVEE8KAKstplU\r\naUsmeI4Mz0tWYsGyRzYqR2FyUl+vSAcHmGma/wo/6mqal7oPuCltnr4BDIPv\r\nYElZ+MTvqdy0I9DdR6miwFUGeJZqjDIeByQORPJyYtBP/TlIPjNoAyZnwAbF\r\nbhV2aa+yeWDoyhuVBl/FpMqma6AzVG5IN2f6AHxoLzlXTPvFEsqkAFAd/HK6\r\nyKZtkr3PTcM21pqNxhqVUmQK0PAYx/9tUMXQQ7ghz6/cP2uHKD/iM0nYPID0\r\n6/mzOXwSiGbSwDAbFAOg6WNyJVL9J/tmwWAj6vQfZLZVQjScwN9PRJQphDca\r\naeNd9oBqB/pmK+GK4uAx7QhuuhTcvkX84MQ=\r\n=GTN3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","unity":"2020.3","gitHead":"ecde3b303102d5cb1bd036353f7ed1fc8c8c6f3d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"8.1.0","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"16.13.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.3.8_1654508026641_0.10884937145823459","host":"s3://npm-registry-packages"}},"1.3.9":{"name":"com.xmobitea.changx.mini-build","version":"1.3.9","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-build@1.3.9","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"9fdf81692b1a5d80e768a568c1858c1e44a88225","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.3.9.tgz","fileCount":30,"integrity":"sha512-bali89ozOBPaadJzF2OJieJTjzgR79Nil4653t2zySmPPwI2XjZBRujq4MmQt8K9Wj3FUF6iOS3CI+OtXmWDww==","signatures":[{"sig":"MEYCIQCdxSPZyQ9jY4r2nIpAm/lZgWRcGRN61MDgE0Yq0kyIOwIhAKxGBYHgJP0P89sdMSjZEC8Bn/V/tivPEdfehb61ZFco","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26586},"main":"index.js","unity":"2020.3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.3.9_1739414568132_0.13627191629020907","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"com.xmobitea.changx.mini-build","version":"1.4.0","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-build@1.4.0","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"ef6f424ef39aaaefc868b2c029a3582b88cb9f52","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.4.0.tgz","fileCount":30,"integrity":"sha512-OkiadSjzNMvcJYP0gBm4cl+OLdqX6MyMR1yNdk8aq5gKWR0eAmpNBW30N63z4ASGSIm+5Ea8LxhUpZaGH2zODA==","signatures":[{"sig":"MEYCIQDs+GE2Ib2DZtm2+BNxoImwvcPEWRQallNkpineaONGpgIhAPUTQb1QwG/RnZ7hx9L3dePcl+rZUHfeuN7MJtXQQ5UU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26341},"main":"index.js","unity":"2020.3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.4.0_1739508611654_0.9909265125258273","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"com.xmobitea.changx.mini-build","version":"1.4.1","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-build@1.4.1","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"3e500891dbb98ebe5f993619225f77109b57cfa6","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.4.1.tgz","fileCount":30,"integrity":"sha512-iagxnZ2ZT4NfRMr7sOMyZ+5Dp9fvmuyQbZwM/l6auXRU55R8sG2/QjBni1igIpfOFDq34hqkJA5GWljMiABD+A==","signatures":[{"sig":"MEQCID2Ay4II3gSD0Zjn/qxu322SzsgQq61RbvqXS5oBE9dgAiAexx8CeHCCgEhWaPIKxXTj08V/Yos4AicWdN/Z+2N3YA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27054},"main":"index.js","unity":"2020.3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.4.1_1739513863777_0.7660844758210121","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"com.xmobitea.changx.mini-build","version":"1.4.2","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-build@1.4.2","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"61eaa48d9554446b80417d979b7a05a65a333ee9","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.4.2.tgz","fileCount":30,"integrity":"sha512-a4ChDR2zcxNPSPbcbaHh2wXGhKUwNUDVwQm94f5y3Wol4Vmn29pYZZB4RAdspVHwgGy66hbY4BEO2IH2VJhcvw==","signatures":[{"sig":"MEQCIAviVmmdcJEvtI+Geb5caOE5k9L4nLEFkcX4eameZ5L/AiA9IIAEXxn78Q7R83tuvqeopBJxJJgcbnT+vQ+3QBFSVg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27060},"main":"index.js","unity":"2020.3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.4.2_1739516360503_0.8705796343502246","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"com.xmobitea.changx.mini-build","version":"1.4.3","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-build@1.4.3","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"885b89ab9fa9930b6fa03bb97290c905fe7f47df","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.4.3.tgz","fileCount":30,"integrity":"sha512-vwQmtezxtQ9V8D9rTfXvdhpvC6Ss1DfF2UxibCQtqvhpzB3oh/qNg/Kvj63Jpr8ArOVgAkjYkdIxj2U8Bk2brw==","signatures":[{"sig":"MEQCIC9EsAThyhguHYhXlVVrdalDTwm6KWsHCt0Vruo+cL/eAiBTjuSqj8WJBE1UfEMhd6k9VZOqDE3WUED3+tQTeHnUyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38704},"unity":"2020.3","gitHead":"a1df5f68b52782919c752e83a9ec3f96d3102810","_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity Toolkit packages","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{"com.xmobitea.changx.app":"1.4.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.4.3_1772119419924_0.5114493873390256","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"com.xmobitea.changx.mini-build","version":"1.5.0","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-build@1.5.0","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"589cccf17d12574a406da58787954d4186ac892c","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.5.0.tgz","fileCount":34,"integrity":"sha512-N0iYK+TPRJRNVVqljkuyDmqfejbpV1LnqhUMx/y8hFCXbI9wobNM+rL/r4aCwWZUM2ztt61wZuFa1er5DVzlrg==","signatures":[{"sig":"MEUCIGFpWUa38QGGHsaHoGsbVghYDWmIFKmchWU1DWK3uLLPAiEA0uelSqEpdTLwcUa+TXO8xuTRVRdEMZK0+VGVKhsehgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48130},"unity":"2022.3","gitHead":"8a69be78344a9d715d5aae334a681f1bf75ce2ea","_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity Toolkit packages","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{"com.xmobitea.changx.app":"1.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.5.0_1778689540363_0.7508325967258922","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"com.xmobitea.changx.mini-build","version":"1.5.1","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-build@1.5.1","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"5a91b2d34a6de94317bf6ae44f95df1010df42b4","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.5.1.tgz","fileCount":34,"integrity":"sha512-KJ5k44JKZ11mdxRDOhzf9yniL33RsBHM6GyA+3nkXkOac/15WvTG41Hbodc0K65kKiFkw0nBsgxkP5DLDTU+CA==","signatures":[{"sig":"MEUCIFITUaLsuTMNNXKQ3FQEDNE8fo5AMUTwxHGcMGGa93TxAiEA/4cCaugBHZwAavft4Hz9ATHyHKdlf+meCklI6DANkzE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58943},"unity":"2022.3","gitHead":"1b2c94d1025b98af0e93011d9ab7da6239fe627a","_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity Toolkit packages","directories":{},"displayName":"XmobiTea Build","_nodeVersion":"20.17.0","dependencies":{"com.xmobitea.changx.app":"1.5.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-build_1.5.1_1780225299183_0.4040457000763087","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"com.xmobitea.changx.mini-build","version":"1.5.2","displayName":"XmobiTea Build","description":"XmobiTea Unity Toolkit packages","unity":"2022.3","dependencies":{"com.xmobitea.changx.app":"1.5.2"},"keywords":["chang x","changx","xmobitea"],"author":{"name":"Chang X","email":"changx.develop@gmail.com","url":"https://xmobitea.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-build@1.5.2","gitHead":"9d8761389a09fd51814c64a911448e7715c1dc76","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-FiKCYtLeS7xGO9ssfF3dOQPi/G2Z2vGmYxtaCaHlWIltrOpYW3aYYCYQECtO2LaP8IqajSV+R2qZ532BysREEA==","shasum":"c982ef68441d1bf9860258f5abd8fa1b13cc77c6","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-build/-/com.xmobitea.changx.mini-build-1.5.2.tgz","fileCount":46,"unpackedSize":77899,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGwns+l5VGD2J+imNQRb5Nu1trKV0yHdA9tr38+io2rhAiBD/KrTQ9hhmud/ruvorh5f35jD/R9iIHEEMFAWrLELiA=="}]},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"directories":{},"maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/com.xmobitea.changx.mini-build_1.5.2_1780326550860_0.5296236423577452"},"_hasShrinkwrap":false}},"time":{"created":"2022-02-15T05:06:40.988Z","modified":"2026-06-01T15:09:11.135Z","1.0.0":"2022-02-15T05:06:41.426Z","1.0.1":"2022-02-15T05:25:31.887Z","1.0.2":"2022-02-15T05:33:41.692Z","1.0.3":"2022-02-15T07:49:18.884Z","1.0.4":"2022-02-15T08:08:33.269Z","1.0.5":"2022-02-15T09:29:02.514Z","1.1.0":"2022-02-15T09:29:45.005Z","1.1.1":"2022-02-15T09:34:46.855Z","1.1.2":"2022-02-15T10:50:17.539Z","1.1.3":"2022-02-18T03:30:33.127Z","1.1.4":"2022-04-25T14:54:25.704Z","1.1.5":"2022-05-15T17:22:48.631Z","1.3.0":"2022-06-04T12:45:55.586Z","1.3.1":"2022-06-04T14:13:18.561Z","1.3.5":"2022-06-04T15:13:18.217Z","1.3.6":"2022-06-04T15:46:08.947Z","1.3.8":"2022-06-06T09:33:46.829Z","1.3.9":"2025-02-13T02:42:48.415Z","1.4.0":"2025-02-14T04:50:11.849Z","1.4.1":"2025-02-14T06:17:44.037Z","1.4.2":"2025-02-14T06:59:20.694Z","1.4.3":"2026-02-26T15:23:40.045Z","1.5.0":"2026-05-13T16:25:40.527Z","1.5.1":"2026-05-31T11:01:39.322Z","1.5.2":"2026-06-01T15:09:11.010Z"},"author":{"name":"Chang X","email":"changx.develop@gmail.com","url":"https://xmobitea.com"},"license":"Apache-2.0","keywords":["chang x","changx","xmobitea"],"description":"XmobiTea Unity Toolkit packages","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"readme":"# XmobiTea Build\n\nEditor-focused Unity build automation package for Android, iOS, WebGL, Windows, and MacOS.\n\nMost behavior lives in the `Editor` assembly. The `Runtime` assembly only defines the `BuildSettings` asset type and the package-specific `WebGLCompressionFormat` enum.\n\n## AI-Focused Docs\n\nUse these task-oriented files when you need the smallest possible context:\n\n- `AI_SETUP.md`\n- `AI_SETUP_BUILD_SETTINGS.md`\n- `AI_BUILD_ANDROID.md`\n- `AI_BUILD_IOS.md`\n- `AI_BUILD_WEBGL.md`\n- `AI_BUILD_DESKTOP.md`\n- `AI_USAGE.md`\n- `AGENTS.md`\n\n## Need-Based Routing\n\n- Need to create or update the `BuildSettings` asset: `AI_SETUP_BUILD_SETTINGS.md`\n- Need to build Android APK or AAB: `AI_BUILD_ANDROID.md`\n- Need to build iOS: `AI_BUILD_IOS.md`\n- Need to build WebGL: `AI_BUILD_WEBGL.md`\n- Need to build Windows or MacOS: `AI_BUILD_DESKTOP.md`\n- Need the short package contract: `AI_USAGE.md`\n- Need maintainer and agent rules: `AGENTS.md`\n\n## AI Quick Contract\n\r\n- Public runtime surface:\r\n  - `BuildSettings`\r\n  - `WebGLCompressionFormat`\r\n- Public editor entry points:\r\n  - `AndroidBuild`\r\n  - `iOSBuild`\r\n  - `WebGLBuild`\r\n  - `WindowsBuild`\r\n  - `MacOSBuild`\r\n  - `BuildSettingsEditor.GetSettings()`\r\n  - `Build.TryGetArg(...)`\r\n- Internal shared runner:\r\n  - `Build.StartBuild(...)`\r\n- Only enabled `EditorBuildSettings.scenes` are included in the build.\r\n- The package attempts to delete and recreate the platform output folder before each build.\n- Built-in prebuild logic only reads the command-line arg names `-bundleVersion` and `-versionCode`.\n- Missing `BuildSettings` logs an error during prebuild, but does not stop the subsequent build.\n- Android and iOS version fields are updated before the `BuildSettings` missing-asset check.\n- Android and iOS interactive build menu items do not run `PreBuild()`.\n- WebGL interactive build does run `PreBuild()`.\r\n\r\n## What This Package Actually Provides\r\n\r\n- A `BuildSettings` `ScriptableObject` that stores:\r\n  - Android keystore fields\r\n  - iOS automatic signing fields\r\n  - WebGL compression and caching fields\r\n- A shared internal editor build runner that:\r\n  - collects enabled scenes\r\n  - computes the output path\r\n  - calls `BuildPipeline.BuildPlayer(...)`\r\n- Platform-specific editor helpers with menu items and scriptable static methods\r\n- A custom inspector plus `XmobiTea Tools/Build/Open Settings` helper that auto-creates the settings asset if needed\r\n\r\n## Runtime vs Editor Surface\r\n\r\n### Runtime assembly\r\n\r\nNamespace:\r\n\r\n```csharp\r\nusing XmobiTea.MiniBuild;\r\n```\r\n\r\nTypes:\r\n\r\n- `BuildSettings`\r\n- `WebGLCompressionFormat`\r\n\r\nThere is no gameplay/runtime build pipeline logic in the runtime assembly.\r\n\r\n### Editor assembly\r\n\r\nNamespace:\r\n\r\n```csharp\r\nusing XmobiTea.MiniBuild.Editor;\r\n```\r\n\r\nPrimary entry points:\r\n\r\n- `AndroidBuild.PreBuild()`\r\n- `AndroidBuild.Build()`\r\n- `AndroidBuild.AabBuild()`\r\n- `iOSBuild.PreBuild()`\r\n- `iOSBuild.Build()`\r\n- `WebGLBuild.PreBuild()`\r\n- `WebGLBuild.Build()`\r\n- `WindowsBuild.Build()`\r\n- `MacOSBuild.Build()`\r\n- `BuildSettingsEditor.GetSettings()`\r\n- `Build.TryGetArg(...)`\r\n\r\nImplementation detail:\r\n\r\n- `Build.StartBuild(...)` is `internal`, not part of the public package API for consumers in other assemblies.\r\n\r\n## Shared Build Flow\r\n\r\n`Build.StartBuild(...)` is the internal runner used by all platform build classes.\r\n\r\nActual behavior:\r\n\r\n1. It tries to delete the platform subfolder such as `Build/Android/`.\r\n2. It tries to recreate that subfolder.\r\n3. If folder cleanup throws, it logs the exception and still continues.\r\n4. It includes only enabled scenes from `EditorBuildSettings.scenes`.\r\n5. It builds to `subPath + name`.\r\n6. It returns `true` only when `BuildPipeline.BuildPlayer(...)` reports `Succeeded`.\r\n\r\nImportant consequences:\r\n\r\n- Output under `Build/...` is treated as disposable.\r\n- Disabled scenes are skipped automatically.\r\n- Folder cleanup is best effort, not a hard guardrail.\r\n\r\n## Platform Behavior\r\n\r\n### Android\r\n\r\nMenus:\r\n\r\n```text\r\nXmobiTea Tools/Build/Pre Build/Android\r\nXmobiTea Tools/Build/Build/Android .apk\r\nXmobiTea Tools/Build/Build/Android .aab\r\n```\r\n\r\nStatic methods:\r\n\r\n- `AndroidBuild.PreBuild()`\r\n- `AndroidBuild.Build()`\r\n- `AndroidBuild.AabBuild()`\r\n\r\n`PreBuild()` behavior:\r\n\r\n- reads `-bundleVersion` and sets `PlayerSettings.bundleVersion` when present\r\n- reads `-versionCode` and parses it as `int` for `PlayerSettings.Android.bundleVersionCode`\r\n- increments `PlayerSettings.Android.bundleVersionCode` by `1` when `-versionCode` is absent\r\n- loads `BuildSettings` from `Resources.Load<BuildSettings>(BuildSettings.ResourcesPath)`\n- if settings are missing, logs an error and returns without applying keystore fields\n- version fields are updated before `BuildSettings` is loaded, so a missing settings asset does not undo earlier version changes\n- if settings exist, applies:\n  - `useCustomKeystore`\r\n  - `keystoreName`\r\n  - `keystorePass`\r\n  - `keyaliasName`\r\n  - `keyaliasPass`\r\n\r\nBuild method behavior:\r\n\r\n- `AndroidBuild.Build()` sets `EditorUserBuildSettings.buildAppBundle = false` and runs `PreBuild()` first\r\n- `AndroidBuild.AabBuild()` sets `EditorUserBuildSettings.buildAppBundle = true` and runs `PreBuild()` first\r\n- `XmobiTea Tools/Build/Build/Android .apk` does not run `PreBuild()`\r\n- `XmobiTea Tools/Build/Build/Android .aab` does not run `PreBuild()`\r\n- supported Unity versions for this package use `EditorUserBuildSettings.androidCreateSymbols = AndroidCreateSymbols.Public` during the build, then restore the previous value\r\n\r\nOutputs:\r\n\r\n- APK -> `Build/Android/build.apk`\r\n- AAB -> `Build/Android/build.aab`\r\n\r\nPractical consequence:\r\n\r\n- If you use the Android build menu items directly, the build uses whatever Android `PlayerSettings` are already in memory unless you ran `Pre Build/Android` first.\r\n\r\n### iOS\r\n\r\nMenus:\r\n\r\n```text\r\nXmobiTea Tools/Build/Pre Build/iOS\r\nXmobiTea Tools/Build/Build/iOS\r\n```\r\n\r\nStatic methods:\r\n\r\n- `iOSBuild.PreBuild()`\r\n- `iOSBuild.Build()`\r\n\r\n`PreBuild()` behavior:\r\n\r\n- reads `-bundleVersion` and sets `PlayerSettings.bundleVersion` when present\r\n- reads `-versionCode` and writes it directly to `PlayerSettings.iOS.buildNumber` when present\r\n- otherwise increments `PlayerSettings.iOS.buildNumber` by parsing it as `int`\r\n- loads `BuildSettings`\n- if settings are missing, logs an error and returns without applying signing fields\n- version fields are updated before `BuildSettings` is loaded, so a missing settings asset does not undo earlier version changes\n- if settings exist, applies:\n  - `appleEnableAutomaticSigning`\r\n  - `appleDeveloperTeamID`\r\n\r\nBuild method behavior:\r\n\r\n- `iOSBuild.Build()` runs `PreBuild()` first\r\n- `XmobiTea Tools/Build/Build/iOS` does not run `PreBuild()`\r\n\r\nOutput:\r\n\r\n- Xcode project -> `Build/iOS/build`\r\n\r\nPractical consequences:\r\n\r\n- Interactive iOS builds do not refresh signing or version fields unless you ran `Pre Build/iOS` first.\r\n- Automatic increment requires the current `PlayerSettings.iOS.buildNumber` to be numeric.\r\n\r\n### WebGL\r\n\r\nMenus:\r\n\r\n```text\r\nXmobiTea Tools/Build/Pre Build/WebGL\r\nXmobiTea Tools/Build/Build/WebGL\r\n```\r\n\r\nStatic methods:\r\n\r\n- `WebGLBuild.PreBuild()`\r\n- `WebGLBuild.Build()`\r\n\r\n`PreBuild()` behavior:\r\n\r\n- loads `BuildSettings`\r\n- if settings are missing, logs an error and returns without applying WebGL settings\r\n- if settings exist, applies:\r\n  - `PlayerSettings.WebGL.dataCaching`\r\n  - `PlayerSettings.WebGL.compressionFormat`\r\n  - `PlayerSettings.WebGL.decompressionFallback`\r\n\r\nBuild method behavior:\r\n\r\n- `WebGLBuild.Build()` runs `PreBuild()` first\r\n- `XmobiTea Tools/Build/Build/WebGL` calls `Build()`, so the menu build also runs `PreBuild()`\r\n\r\nOutput:\r\n\r\n- `Build/WebGL/build`\r\n\r\n### Windows\r\n\r\nMenu:\r\n\r\n```text\r\nXmobiTea Tools/Build/Build/Windows\r\n```\r\n\r\nStatic method:\r\n\r\n- `WindowsBuild.Build()`\r\n\r\nBehavior:\r\n\r\n- does not use `BuildSettings`\r\n- does not have a separate prebuild step\r\n- builds directly through the shared runner\r\n\r\nOutput:\r\n\r\n- `Build/Windows/build.exe`\r\n\r\n### MacOS\r\n\r\nMenu:\r\n\r\n```text\r\nXmobiTea Tools/Build/Build/MacOS\r\n```\r\n\r\nStatic method:\r\n\r\n- `MacOSBuild.Build()`\r\n\r\nBehavior:\r\n\r\n- does not use `BuildSettings`\r\n- does not have a separate prebuild step\r\n- builds directly through the shared runner\r\n\r\nOutput:\r\n\r\n- `Build/MacOS/build.app`\r\n\r\n## BuildSettings Asset\r\n\r\n`BuildSettings` is defined in the runtime assembly and loaded with:\r\n\r\n```csharp\r\nResources.Load<BuildSettings>(BuildSettings.ResourcesPath)\r\n```\r\n\r\nThe constant path is:\r\n\r\n```text\r\nXmobiTea BuildSettings\r\n```\r\n\r\nThat 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.\n\r\nPackage helpers:\r\n\r\n- `XmobiTea Tools/Build/Open Settings` loads or auto-creates the asset\r\n- auto-created path: `Assets/Resources/XmobiTea BuildSettings.asset`\r\n- create menu path: `XmobiTea Config/Build Settings`\r\n\r\n`BuildSettings` exposes read-only public properties backed by private serialized fields:\n\n- Android:\n  - `useAndroidKeystore` reads `_useAndroidKeystore`\n  - `keystoreName` reads `_keystoreName`\n  - `keystorePass` reads `_keystorePass`\n  - `keyaliasName` reads `_keyaliasName`\n  - `keyaliasPass` reads `_keyaliasPass`\n- iOS:\n  - `appleEnableAutomaticSigning` reads `_appleEnableAutomaticSigning`\n  - `appleDeveloperTeamID` reads `_appleDeveloperTeamID`\n- WebGL:\n  - `compressionFormat` reads `_compressionFormat`\n  - `dataCaching` reads `_dataCaching`\n  - `decompressionFallback` reads `_decompressionFallback`\n\nUse the custom inspector, `SerializedObject`, or the serialized backing field names when editing the asset programmatically; the public properties do not have setters.\n\r\n## Recommended Workflows\r\n\r\n### Headless or scripted build\r\n\r\nUse the static build methods because they trigger the package prebuild logic where applicable.\r\n\r\n```csharp\r\nusing XmobiTea.MiniBuild.Editor;\r\n\r\npublic static class BuildEntry\r\n{\r\n    public static void BuildAndroidApk()\r\n    {\r\n        AndroidBuild.Build();\r\n    }\r\n\r\n    public static void BuildAndroidAab()\r\n    {\r\n        AndroidBuild.AabBuild();\r\n    }\r\n\r\n    public static void BuildIos()\r\n    {\r\n        iOSBuild.Build();\r\n    }\r\n\r\n    public static void BuildWebGl()\r\n    {\r\n        WebGLBuild.Build();\r\n    }\r\n}\r\n```\r\n\r\n### Interactive menu build for Android or iOS\r\n\r\nIf you need the package to refresh signing/version settings first:\r\n\r\n1. Run the matching `Pre Build/...` menu item.\r\n2. Run the matching `Build/...` menu item.\r\n\r\nIf you skip the prebuild menu, the build still runs, but it uses the current `PlayerSettings` values as-is.\r\n\r\n## Command-Line Args Used By Built-In Flows\r\n\r\nBuilt-in Android and iOS prebuild logic only reads:\r\n\r\n- `-bundleVersion`\r\n- `-versionCode`\r\n\r\nNotes:\r\n\r\n- `Build.TryGetArg(...)` itself is generic and can search any arg name.\r\n- Android parses `-versionCode` as `int`, so non-numeric values will throw.\r\n- iOS writes `-versionCode` directly to `PlayerSettings.iOS.buildNumber`.\r\n\r\n## Do / Don't\r\n\r\n### Do\r\n\r\n- Do treat this as an editor automation package with a small data-only runtime surface.\r\n- Do keep enabled scenes in `EditorBuildSettings` accurate before building.\r\n- Do treat `Build/...` outputs as disposable.\r\n- Do use `BuildSettingsEditor.GetSettings()` or `Open Settings` when you need the settings asset.\r\n- Do run `PreBuild()` explicitly before Android/iOS menu builds if you want package-managed versioning or signing updates.\r\n\r\n### Don't\r\n\r\n- Don't describe this package as pure runtime functionality.\r\n- Don't assume Android/iOS build menu items call `PreBuild()` for you.\r\n- Don't assume missing `BuildSettings` stops Android/iOS/WebGL builds.\r\n- Don't assume Windows/MacOS build flow reads `BuildSettings`.\r\n- Don't assume disabled scenes are included.\r\n\r\n## Common Mistakes\r\n\r\n### Mistake 1: Expecting Android/iOS menu builds to refresh settings\r\n\r\nThe Android `.apk`, Android `.aab`, and iOS menu build commands skip `PreBuild()`.\r\n\r\n### Mistake 2: Treating `BuildSettings` as a hard build requirement\r\n\r\nThe prebuild step logs an error when the asset is missing, but the actual build method still proceeds.\r\n\r\n### Mistake 3: Forgetting the output folder is disposable\r\n\r\nThe package tries to delete and recreate the platform folder under `Build/...` before each build.\r\n\r\n### Mistake 4: Expecting all project scenes to build\r\n\r\nOnly enabled `EditorBuildSettings.scenes` are included.\r\n\r\n### Mistake 5: Using a non-numeric Android `-versionCode`\r\n\r\nAndroid parses that value with `int.Parse(...)`.\r\n\r\n### Mistake 6: Leaving a non-numeric iOS build number before auto-increment\r\n\r\nThe iOS auto-increment path parses the existing `PlayerSettings.iOS.buildNumber` as `int`.\r\n\r\n## Package Metadata\r\n\r\n- Package name: `com.xmobitea.changx.mini-build`\r\n- Version: `1.5.2`\r\n- Unity version: `2022.3+`\r\n- Dependency: `com.xmobitea.changx.app`\r\n- License: `Apache-2.0`\r\n","readmeFilename":"README.md"}