Publishing on Google Play and the App Store#
From a finished game to a store build. The store consoles change often: when a click path here no longer matches, the console's own help wins. Research, not legal advice.
Do it with AI (skill
prepare-release, set up once): ask your agent "Prepare my game for release on Google Play." Or follow the Hub steps below.
Before any store build#
- Make it yours is done: your company, name and bundle id (Hub > Home, step 1).
- Hub > Release > Check for Android and Check for iOS: no ✖ blockers. Release builds run the same checks and stop on a blocker; Development builds never stop.
- Legal: your privacy policy, terms and support address are online and set in Hub > Project > Legal (Privacy policy and terms).
- The template's keys are gone: Hub > Monetization > Use your own keys is empty.
- The developer tools are out: no
IDLE_DEV_TOOLSin the Scripting Define Symbols. - Version: Edit > Project Settings > Player > Version (shown to players, for example 1.0.0) and the build number (Android: Bundle Version Code, iOS: Build). Raise the build number for every upload.
Google Play#
Upload key (keystore)#
Google Play needs every upload signed with your key.
- Edit > Project Settings > Player > Android tab > Publishing Settings > Keystore Manager > Create New > Anywhere.
- Save the
.keystorefile outside the project folder, pick a strong password, fill in the key's alias and password. - Back it up somewhere safe (with the passwords). Never put it in a public repository.
- Unity forgets both passwords when it restarts: type them again in Publishing Settings before a release build
(otherwise
build.android-signing, see Errors.md).
Play App Signing#
Google re-signs your app with its own app signing key; your keystore becomes the upload key. This is the default for new apps (Play Console > your app > Test and release > App integrity). Two consequences:
- Services that check the signature need both fingerprints (SHA-1): the app signing key (Play Console > App integrity) for installs from Google Play, and your upload key for builds you install yourself. Google Play Games sign-in is one of them (Online services).
- If you lose the upload key, Google can reset it; if you lose an app signing key you manage yourself, you cannot update the app.
Build the AAB#
- File > Build Profiles > Android > Switch Platform.
- Tick Build App Bundle (Google Play) (an
.aab, which Google Play requires). - Leave Development Build off for a store build.
- Build, pick a folder outside
Assets.
The template targets the current Android API level, 64-bit only. If a release build fails but a development build works, or the store or ads fail only in release, see FAQ.
Store forms: privacy and Data safety#
Play Console > Policy and programs > App content:
- Privacy policy: its web address.
- Ads: Yes, if LevelPlay is on.
- Data safety: what your build collects. The offline template with the fake store collects nothing. Each service you turn on adds rows: ads (device IDs, approximate location, app interactions, diagnostics), purchases (purchase history), analytics (Analytics), Unity Gaming Services (user IDs; with leaderboards and friends also the player's display name). With cloud save or sign-in, answer the **account deletion** questions: the in-game row is Settings > Delete cloud data, and Google also wants a web address (a page of your site that explains it).
- Target audience: 16+ or 18+ keeps you out of the Families policy (the game sells random items). Never under 13.
- Content rating (IARC questionnaire): fantasy violence, and "In-game purchases (includes random items)" if you sell summons.
- Advertising ID: declare its use when ads or analytics are on.
Testing tracks#
- Upload the first AAB to Internal testing, add testers, install from the opt-in link. In-app purchases only work in builds installed from Google Play (Shop).
- A new personal developer account must run a closed test with at least 12 testers for 14 days before it can publish to production. Plan for it.
- After each upload, check the pre-launch report and App bundle explorer (memory page size 16 KB supported).
AI-generated content#
The template's pictures and sounds were made with AI-assisted tools and edited by hand. If your store images show them, tick Google Play's AI-generated content declaration on those images. Replacing the art is the better choice anyway (see Reskin).
App Store#
You need a Mac with Xcode, and an Apple Developer account.
Xcode and CocoaPods#
- File > Build Profiles > iOS > Switch Platform, then Build: Unity writes an Xcode project.
- The add-ons' iOS parts (ads, Firebase, sign-in) are installed with CocoaPods. Install it once
(
sudo gem install cocoapodsin Terminal, or Assets > External Dependency Manager > iOS Resolver > Install Cocoapods). The build runspod installby itself. - Open the
.xcworkspacefile (not the.xcodeproj) in Xcode. A missing workspace means CocoaPods did not run:build.ios-cocoapodsin Errors.md.
Signing and capabilities#
- Xcode > the Unity-iPhone target > Signing & Capabilities: your Team, Automatically manage signing, the bundle id from Make it yours.
- With Sign in with Apple, the capability is added by the build; check it is listed. Push notifications are not needed (reminders are local).
- Product > Archive, then Distribute App > App Store Connect.
The build writes ITSAppUsesNonExemptEncryption = NO (export compliance), your tracking sentence when set, and the
template's privacy manifest (PrivacyInfo.xcprivacy). After the first archive, Generate Privacy Report shows it
merged with the SDKs'.
App Privacy#
App Store Connect > your app > App Privacy: the same data as Google's Data safety (see above), including each ad network you mediate. Age rating: loot boxes Yes if you sell summons; minimum age 13+ or higher. With cloud save, App Review wants account deletion inside the app: Settings > Delete cloud data does it; say so in the review notes. A game that offers Google sign-in must also offer Sign in with Apple.
Privacy policy and terms#
Documentation/Legal/ has a privacy policy and terms template (PRIVACY-POLICY-TEMPLATE.md,
TERMS-TEMPLATE.md). Fill in your company, address, e-mail, the services you use, and publish them as ordinary web
pages (not PDFs, not geo-blocked). Put the addresses in Hub > Project > Legal: the game's Settings screen links them.
Legal/README.md explains each part. Add every SDK you ship to the licences text shown in
Settings > Licences (Legal/THIRD-PARTY-NOTICES.txt in the template's folder; how: Third-party
notices).
Checklist before you submit#
- [ ] Pre-flight green for the platform.
- [ ] Your art, names and store texts (not the template's).
- [ ] Real store and ads profile in use (Hub > Services shows Real), keys and receipt validation set.
- [ ] Products created in the console with the same ids and types; tested with a licence / Sandbox tester.
- [ ] Privacy policy, terms and support address online and in Hub > Project.
- [ ] Data safety / App Privacy, content rating, target audience answered.
- [ ] Countries chosen (loot-box rules: Shop).
- [ ] Version and build number raised;
IDLE_DEV_TOOLSremoved; Development Build off. - [ ] Keystore backed up.