Last active
September 9, 2024 09:00
-
-
Save bizz84/5c2ee79cd103bd43ce97b4d7fcfed103 to your computer and use it in GitHub Desktop.
An app release checklist template for Flutter app development
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"template": "App Release", | |
"version": 4, | |
"epics": [ | |
{ | |
"id": "ai", | |
"epic": "App Icons", | |
"tasks": [ | |
{ "id": "7DA5766A", "name": "Design your app icon (IconKitchen, Figma)" }, | |
{ "id": "029C2183", "name": "Different icons for each flavor" }, | |
{ "id": "0A5EEB63", "name": "Generate launcher icons with flutter_launcher_icons" }, | |
{ "id": "8678BA0A", "name": "Generate splash screens with flutter_native_splash" } | |
] | |
}, | |
{ | |
"id": "ff", | |
"epic": "Flutter Flavors", | |
"tasks": [ | |
{ "id": "FE3F6F6D", "name": "Install and configure flutter_flavorizr" }, | |
{ "id": "B2A42464", "name": "Add Dev, Stg, Prod flavors on iOS" }, | |
{ "id": "C9FB1D58", "name": "Add Dev, Stg, Prod flavors on Android" }, | |
{ "id": "8301150C", "name": "Configure your IDE to use flavors" }, | |
{ "id": "C4F3EEAA", "name": "Flavored API keys (dart-define or Envied)" }, | |
{ "id": "D88C0DA4", "name": "FlutterFire setup with Flavors" } | |
] | |
}, | |
{ | |
"id": "em", | |
"epic": "Error Monitoring", | |
"tasks": [ | |
{ "id": "0836A3B0", "name": "Install and configure Sentry or Crashlytics" }, | |
{ "id": "6FEC4658", "name": "Report uncaught exceptions" }, | |
{ "id": "56EAA140", "name": "Explicitly catch and log exceptions" }, | |
{ "id": "440585FB", "name": "Add breadcrumbs (navigation events, network logs, etc.)" }, | |
{ "id": "3BF7C4FB", "name": "Event filtering (release mode, production builds only)" }, | |
{ "id": "2C2C7454", "name": "Source maps configuration with Sentry Dart Plugin" }, | |
{ "id": "75644300", "name": "Capture User Feedback (user_feedback package)" }, | |
{ "id": "1CCBEB7B", "name": "Test your error monitoring logic" }, | |
{ "id": "1F7504F6", "name": "Monitor and fix issues after launch" } | |
] | |
}, | |
{ | |
"id": "aa", | |
"epic": "Analytics", | |
"tasks": [ | |
{ "id": "364BC976", "name": "Install and configure an analytics SDK of choice" }, | |
{ "id": "0B203CD9", "name": "Make a list of all the events you want to track" }, | |
{ "id": "DFB4257F", "name": "Track custom events and their properties" }, | |
{ "id": "BD661A58", "name": "Track navigation events" }, | |
{ "id": "28C7E044", "name": "Identify users" }, | |
{ "id": "1E8213E6", "name": "Provide way to opt-out of data collection" }, | |
{ "id": "E873F9CE", "name": "Enable analytics in production builds only (if desired)" }, | |
{ "id": "5A1AF839", "name": "Test your analytics logic" } | |
] | |
}, | |
{ | |
"id": "fu", | |
"epic": "Force Update", | |
"tasks": [ | |
{ "id": "062D761A", "name": "Choose a force update strategy" }, | |
{ "id": "6DAE72DE", "name": "Use a package (upgrader, force_update_helper) or roll your own" }, | |
{ "id": "E6A45538", "name": "Remotely control updates with Firebase Remote Config or custom backend" }, | |
{ "id": "7232501C", "name": "Test your force upgrade logic (dev build)" }, | |
{ "id": "9043CEA1", "name": "Test your force upgrade logic (production build)" } | |
] | |
}, | |
{ | |
"id": "se", | |
"epic": "About / Settings page", | |
"tasks": [ | |
{ "id": "9AB92F0F", "name": "App configuration settings (light/dark mode, etc)" }, | |
{ "id": "869E57CA", "name": "Links to the app website / privacy policy / terms of use" }, | |
{ "id": "A5DD4B1E", "name": "Show OSS licenses" } | |
] | |
}, | |
{ | |
"id": "ir", | |
"epic": "In App Review Prompt", | |
"tasks": [ | |
{ "id": "A1D55FA9", "name": "Add a button to your about/setting page so users can leave a review" }, | |
{ "id": "1710AAC8", "name": "Use analytics to track KPIs related to in-app review" }, | |
{ "id": "B9EFA364", "name": "Trigger app store review prompt based on custom logic" } | |
] | |
}, | |
{ | |
"id": "ay", | |
"epic": "Accessibility", | |
"tasks": [ | |
{ "id": "CF6E07E1", "name": "Install accessibility_tools package" }, | |
{ "id": "CAF5B3BB", "name": "Do an accessibility audit" }, | |
{ "id": "2AC342E8", "name": "Add semantic labels to your widgets" }, | |
{ "id": "89F155C3", "name": "Support large fonts and text scaling" }, | |
{ "id": "3A9D1367", "name": "Improve colors and contrast" }, | |
{ "id": "770600E2", "name": "Test your app with VoiceOver" }, | |
{ "id": "55B298EB", "name": "Test your app with TalkBack" }, | |
{ "id": "B8664A67", "name": "Check navigation and touch targets size" }, | |
{ "id": "28D3222B", "name": "Check accessibility trasversal" } | |
] | |
}, | |
{ | |
"id": "as", | |
"epic": "App Security", | |
"tasks": [ | |
{ "id": "1514A2D8", "name": "Store secret API keys on the server, not the client" }, | |
{ "id": "6BCC45A3", "name": "Obfuscate any API keys that are stored on the client" }, | |
{ "id": "9187875D", "name": "Do not add API keys to Git" }, | |
{ "id": "D3ECFE22", "name": "Minimize collection of personally identifiable information (PII)" }, | |
{ "id": "63433236", "name": "Anonymize any PII that is stored on device" }, | |
{ "id": "2A18874C", "name": "Encrypt any sensitive data that is stored on device" }, | |
{ "id": "AED9819C", "name": "Avoid logging sensitive data" }, | |
{ "id": "FAFEAC88", "name": "Implement strong authentication and authorization" }, | |
{ "id": "5D0C8C6C", "name": "Secure data storage and transmission" }, | |
{ "id": "1FFA3B20", "name": "Prevent user data loss or corruption" }, | |
{ "id": "C41ED2EB", "name": "Have a data backup strategy" }, | |
{ "id": "B9E5FFC3", "name": "Review and address common vulnerabilities (OWASP Top 10)" }, | |
{ "id": "F46DC96D", "name": "Implement Flutter-specific security best practices" }, | |
{ "id": "A31EBF78", "name": "Protect user privacy" } | |
] | |
}, | |
{ | |
"id": "we", | |
"epic": "Create your App Website", | |
"tasks": [ | |
{ "id": "E1D761CF", "name": "Choose a template to create your app website" }, | |
{ "id": "6EEE2634", "name": "Add your app screenshot, icon, metadata" }, | |
{ "id": "9712573F", "name": "Add your privacy policy and terms of use" }, | |
{ "id": "917B1F0C", "name": "Add website analytics" }, | |
{ "id": "DCFBB2F9", "name": "Deploy your website to GitHub Pages or elsewhere" }, | |
{ "id": "73C526B8", "name": "Register a custom domain and serve your website on it" }, | |
{ "id": "5258B296", "name": "Add the App Store download button (when app is live)" }, | |
{ "id": "79F5D584", "name": "Add the Play Store download button (when app is live)" } | |
] | |
}, | |
{ | |
"id": "io", | |
"epic": "Submit to the iOS App Store", | |
"tasks": [ | |
{ "id": "5790E9E7", "name": "Create a new app and fill all the required metadata" }, | |
{ "id": "6CED0569", "name": "Add a PrivacyInfo.xcprivacy to the iOS project" }, | |
{ "id": "6F6DE4B7", "name": "Capture and upload your app screenshots" }, | |
{ "id": "FB5FED80", "name": "Use a distribution certificate and provisioning profile for code signing" }, | |
{ "id": "370297D5", "name": "Manually create a release build and upload it" }, | |
{ "id": "30A70110", "name": "Submit your app for review" }, | |
{ "id": "AE92D676", "name": "Address any app rejections and publish your app" } | |
] | |
}, | |
{ | |
"id": "gp", | |
"epic": "Submit to the Google Play Store", | |
"tasks": [ | |
{ "id": "59B46DAA", "name": "Create a new app and fill all the required metadata" }, | |
{ "id": "F1C93F59", "name": "Capture and upload your app screenshots" }, | |
{ "id": "05F1B2A5", "name": "Generate a signed keystore for release" }, | |
{ "id": "A0C32339", "name": "Manually create a release build and upload it" }, | |
{ "id": "CA64B7A2", "name": "Submit your app for review" }, | |
{ "id": "FDBF31FB", "name": "Address any app rejections and publish your app" } | |
] | |
}, | |
{ | |
"id": "ci", | |
"epic": "Automate your builds (CI/CD)", | |
"tasks": [ | |
{ "id": "9B11C2CB", "name": "Choose a CI/CD system (GitHub Actions / Codemagic / Fastlane or others)" }, | |
{ "id": "460C0896", "name": "Add workflow to analyze, build, and run tests" }, | |
{ "id": "0803CB68", "name": "Add workflow to build for release, distribute to App Store (Publishing)" }, | |
{ "id": "D81634F3", "name": "Add workflow to build for release, distribute to App Store (Testing)" }, | |
{ "id": "57AC8E62", "name": "Add workflow to build for release, distribute to Play Store (Publishing)" }, | |
{ "id": "71F285C8", "name": "Add workflow to build for release, distribute to Play Store (Testing)" }, | |
{ "id": "0D98CC35", "name": "Automate the increment of the build number for each release" }, | |
{ "id": "155A1531", "name": "Automate the screenshot generation" } | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment