TL;DR: For cross-platform projects, stick strictly to lowercase alphanumeric characters (
a-z,0-9) separated by dots (.). Android allows underscores (_) but strictly rejects dashes (-). iOS allows hyphens/dashes (-) but strictly rejects underscores (_). Both platforms fully support multi-segment reverse-domain notation (e.g.,com.drawk.retro.dudedrop).
Cross-Platform Comparison
| Platform | Identifier Name | Allowed Characters | Prohibited Characters | Multi-Dot Segments | Recommended Example |
|---|---|---|---|---|---|
| Android (Google Play) | Application ID / Package Name | Letters (A-Z, a-z), numbers (0-9), underscores (_) |
Hyphens / Dashes (-) |
Supported (.) |
com.drawk.retro.dudedrop |
| iOS (App Store) | Bundle Identifier | Alphanumeric (A-Z, a-z, 0-9), hyphens (-), dots (.) |
Underscores (_) |
Supported (.) |
com.drawk.retro.dudedrop |
| Cross-Platform Standard | Unified Application ID | Lowercase letters (a-z), numbers (0-9), dots (.) |
Symbols, dashes (-), underscores (_) |
Supported (.) |
com.drawk.retro.dudedrop |
Dots and Segments
Both Apple's App Store and Google's Play Store fully support multiple dots in their identifiers. Using a deeply nested namespace structure like com.drawk.retro.dudedrop is perfectly valid across both platforms.
com.drawk.retro.dudedrop
──┬── ──┬── ──┬── ────┬───
│ │ │ └─ Product Name
│ │ └───────── Category / Studio Subdomain
│ └─────────────── Entity / Studio Brand
└───────────────────── Top-Level Domain (TLD)
Android (Google Play) Rules
Android uses the Application ID (traditionally tied to the Java package name declared in Gradle):
- Required Segments: Must have at least two segments (meaning a minimum of one dot, e.g.,
com.drawk). - Valid Characters: Uppercase letters, lowercase letters, numbers, and underscores (
_). - Invalid Characters: Dashes (
-) are strictly prohibited by the Android Gradle build toolchain and the Play Console. - Starting Characters: Every individual segment between dots must begin with a letter (e.g.,
com.drawk._retrois invalid).
iOS (App Store) Rules
Apple uses the Bundle Identifier, strongly encouraging reverse-domain format in Xcode and App Store Connect:
- Valid Characters: Alphanumeric characters (
A-Z,a-z,0-9), dots (.), and hyphens (-). - Invalid Characters: Underscores (
_) are strictly prohibited in App Store Connect bundle identifier validation. - Format Structure: Typically formatted as reverse DNS (e.g.,
com.drawk.gamename).
The Unified Cross-Platform Strategy
When managing multi-target build configurations in game engines and frameworks like Unity, Unreal, Godot, Flutter, or React Native, maintaining a single Application / Bundle ID simplifies automated CI/CD and deployment pipelines:
- Eliminate Ambiguity: Avoid hyphens (
-) and underscores (_) entirely so you never hit platform-specific validation rules. - Lowercase Only: Stick to lowercase ASCII characters (
a-z), numbers (0-9), and dot separators (.). - Hierarchical Structure: Follow
com.[company].[category].[product](e.g.,com.drawk.retro.dudedrop). - Guaranteed Ingest: This pattern guarantees zero rejection or naming mismatch during automated store submissions.