Rename guide
your name, ids and icons.
The download uses placeholder ids that start with com.example. Before the first store build, give the app your own name, Android application id, iOS bundle id, App Group and icons. Do it once, in this order.
01Pick your ids first
Choose one id in reverse-domain form for your app, for example com.yourcompany.checks. You use it in four places, and they must agree:
| Where | What to enter |
|---|---|
Android applicationId | Your id. This is the app's id on Google Play and cannot change after the first upload. |
| iOS bundle id of the Runner target | Your id. This is the app's id on the App Store. |
iOS build setting RC_HOST_BUNDLE_ID | The same id as the bundle id. |
| Console, Store | Android package name = your applicationId; iOS bundle id = your bundle id. The server refuses purchases made for any other app. |
02App name, tagline and colours
- Name in the app:
app/lib/brand.dart, the constantkBrandName. - Tagline: the key
brandTaglinein each language fileapp/lib/l10n/app_en.arb,app_sk.arbandapp_cs.arb. The app regenerates its language code on the nextflutter pub getorflutter run. - Colours:
app/lib/src/ui/theme/style.dart. - Name under the icon, Android:
android:labelinapp/android/app/src/main/AndroidManifest.xml. - Name under the icon, iOS:
CFBundleDisplayNameinapp/ios/Runner/Info.plist, and the same key inapp/ios/ShareExtension/Info.plist(the name shown in the share sheet). - iOS permission texts:
app/ios/Runner/Info.plistand the threeapp/ios/Runner/*.lproj/InfoPlist.stringsfiles hold the Face ID, camera and photo prompts. The Face ID prompt names the app: change it to your name in all three languages.
Search the app folder for the old display name once you are done, so no screen or prompt keeps it.
03Android application id
- Open
app/android/app/build.gradle.kts. - Set
applicationIdindefaultConfigto your id. - Leave
namespaceas it is unless you also move the Kotlin files: it is the package of the code inapp/android/app/src/main/kotlin/…(MainActivity.ktandShareInbox.kt), not the store id. If you change it, move those two files to the matching folder and change theirpackageline to the same value. - Set up release signing: the shipped
releasebuild type signs with the debug key, which Google Play does not accept. Follow Flutter's guide Build and release an Android app to create an upload key and akey.propertiesfile. Keep the key out of any shared folder.
04iOS bundle id and RC_HOST_BUNDLE_ID
The iOS app has two targets: Runner (the app) and ShareExtension (the entry in the share sheet). The extension hands what was shared to the app through a shared folder, an App Group. All of its ids are built from one build setting, RC_HOST_BUNDLE_ID:
| What | Value |
|---|---|
| Share Extension bundle id | $(RC_HOST_BUNDLE_ID).ShareExtension |
| App Group of both targets | group.$(RC_HOST_BUNDLE_ID) (entitlements and the RCAppGroup key of both Info.plist files) |
| URL scheme that opens the app after a share | $(RC_HOST_BUNDLE_ID).share |
- Open the workspace:
app/ios/Runner.xcworkspacein Xcode (not the.xcodeproj). - Bundle id of the app: select the Runner target, tab Signing & Capabilities, and enter your id as Bundle Identifier for every configuration (Debug, Release, Profile).
- RC_HOST_BUNDLE_ID: select the Runner project (the blue icon at the top, not a target), tab Build Settings, find
RC_HOST_BUNDLE_IDunder User-Defined and set it to the same id for Debug, Release and Profile. Do not edit the Share Extension's bundle id by hand: it follows this setting. - Optional: the RunnerTests target has its own placeholder bundle id; change it to
<your id>.RunnerTestsif you keep the tests.
When the Runner bundle id and RC_HOST_BUNDLE_ID differ, the Share Extension writes into an App Group the app does not read and opens a URL scheme the app does not answer: sharing into the app then does nothing.
05Signing and the App Groups capability
- Team: in Signing & Capabilities, choose your Apple Developer team for both the Runner and the ShareExtension target. The download has no team set.
- App Groups: both targets already have an entitlements file (
Runner/Runner.entitlements,ShareExtension/ShareExtension.entitlements) with the App Groupgroup.$(RC_HOST_BUNDLE_ID). If Xcode does not list App Groups under a target's capabilities, add it with + Capability. Check that Xcode shows your group, for examplegroup.com.yourcompany.checks, ticked on both targets. With automatic signing Xcode registers the group in your developer account; with manual signing, create it under Certificates, Identifiers & Profiles and enable it for both app ids. Apple's guide: Configuring app groups. - Build once on a device and share a link from Safari into the app to confirm the extension and the group work.
06Icons and launch screen
- Android: replace the
ic_launcherimages inapp/android/app/src/main/res/mipmap-mdpitomipmap-xxxhdpi. - iOS: replace the images in
app/ios/Runner/Assets.xcassets/AppIcon.appiconset(Xcode shows the sizes it needs). The launch image is inLaunchImage.imagesetnext to it.
No icon generator package is included; any tool that writes these sizes works.
07Server and console
- Console, Brand: product name, tagline, accent colour, logo, support e-mail and website. The server uses them, for example on shared verdict pages.
- Console, Legal: the links to your privacy policy and terms.
- Console, Store: your Android package name and iOS bundle id (see Pick your ids).
PUBLIC_BASE_URLinserver/.env: your server's own address (see Configuration).