Thuta Learning
How Mobile Apps Work
ProjectsMobile Developmentintermediate

Project: Mobile Release Readiness Plan တစ်ခု

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Project: Mobile Release Readiness Plan တစ်ခု concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram/checklist ကို ဖတ်ပြီး mobile architecture/decision ဘယ်လို ဆက်စပ်နေသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် mobile app project အတွက် ဘယ်လို အသုံးချသင့်သလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

ဤ capstone project သည် Advanced chapter၏ lesson အနီးပါးအားလုံးကို တစ်ပြိုင်နက် စုစည်းထားသည် — mobile build and signing, APK vs. AAB, Google Play vs. App Store, mobile secret management, mobile production operations။ ထို lesson တစ်ခုချင်းစီက app တစ်ခု ship လုပ်ခြင်း၏ အစိတ်အပိုင်းတစ်ခုစီကို သင်ပေးခဲ့သည် — ဤ project တွင်မှ ၎င်းတို့ထဲ မည်သည့်တစ်ခုမျှ သီးသန့်တစ်ခုတည်းအဖြစ် စစ်ဆေး၍မရကြောင်း တွေ့ရှိရမည် ဖြစ်သည်၊ အကြောင်းမှာ secret management ကို ကျော်သွားပါက ကျန်စစ်ဆေးချက်အားလုံး ဖြတ်သော်လည်း release တစ်ခုလုံး ကျရှုံးနိုင်ပြီး၊ real user များ build ကို install မလုပ်မီ ထိုအမှားကို store review က ဖမ်းမပေးနိုင်ပါ။

  • Mobile build and signing — release signing configuration ကို ကိုယ်တိုင် ပြီးမြောက်အောင်လုပ်ခြင်း
  • APK vs. AAB — store တစ်ခုစီအတွက် မှန်ကန်သော build artifact ရွေးချယ်ခြင်း
  • Google Play vs. App Store — store listing requirement နှင့် review ကွာခြားချက်များ
  • Mobile secret management — client ထဲ server secret ဘာမှ bundle မဖြစ်ကြောင်း အတည်ပြုခြင်း
  • Mobile production operations — release ပြီးနောက် staged rollout နှင့် crash monitoring

scenario မှာ development build မှ production release သို့ ရွေ့လျားနေသော စိတ်ကူးယဉ် app တစ်ခု ဖြစ်သည်။ development build များသည် ပုံမှန်အားဖြင့် local (သို့) staging API URL ကို ညွှန်ပြနေတတ်ပြီး၊ debugging အတွက် verbose log ရေးတတ်ကာ၊ အဆင်ပြေရေးအတွက် test credential များကိုပင် ချန်ထားတတ်သည် — ၎င်းတို့ထဲ မည်သည့်တစ်ခုမျှ store reviewer approve လုပ်၍ device သန်းချီ install လုပ်မည့် build တစ်ခုတွင် လက်ခံနိုင်ဖွယ်မရှိပါ။

ထို့ကြောင့် plan သည် signing (သို့) store listing နှင့်ပတ်သက်သော အရာမပေါ်လာမီ environment configuration နှင့် secret handling ကို ပြန်စစ်ခြင်းဖြင့် စတင်သည် — mobile secret management သည် app code မှန်ကန်စွာ ရေးသားခြင်းနှင့် လုံးဝကွဲပြားသော discipline တစ်ခု ဖြစ်ကြောင်း ဤ course က ထပ်ခါထပ်ခါ ထောက်ပြထားသော အချက်ကို ထပ်လောင်းရိပ်ပြသလိုပင် ဖြစ်သည်။

hardcode လုပ်ထားသော secret ကို store review က မဖမ်းပါ

Apple နှင့် Google ၏ review process သည် policy violation, crash, metadata မှန်ကန်မှုတို့ကို စစ်ဆေးသည် — bundle လုပ်ထားသော JavaScript ထဲက leak ဖြစ်နေသော API key (သို့) log ထဲ print ထုတ်နေသော access token ကို audit လုပ်ပေးမည် မဟုတ်ပါ။ secret hygiene သည် သင်ကိုယ်တိုင် တာဝန်ယူရမည့် စစ်ဆေးမှုဖြစ်ပြီး store က သင့်အတွက် လုပ်ဆောင်ပေးမည့် အရာ မဟုတ်ပါ။

အဲဒီနေရာမှ plan သည် ကျန်ရှိသေးသော lesson များ၏ ပုံစံကို အစီအစဉ်အတိုင်း လိုက်နာသည် — mobile build and signing မှ signing setup ကို ပြီးမြောက်အောင်လုပ်ခြင်း၊ APK vs. AAB lesson အတိုင်း Google Play အတွက် AAB (သို့) App Store အတွက် signed archive ကို build artifact အဖြစ် ရွေးချယ်ခြင်း၊ Google Play vs. App Store comparison မှ store listing requirement များကို ပြင်ဆင်ခြင်း။

public rollout အပြည့်အစုံမတိုင်မီ testing track တစ်ခု ရွေးချယ်ပါ။ Mobile production operations က နောက်ဆုံး စစ်ဆေးချက်နှစ်ခုကို ပေးသည် — staged rollout plan နှင့် crash monitoring အတည်ပြုချက် — အကြောင်းမှာ release ပြီးနောက် operational visibility ရှိမှသာ full incident တစ်ခုအစား rollback ပြန်လုပ်နိုင်ခြေ ရှိသောကြောင့် ဖြစ်သည်။

text
MOBILE RELEASE READINESS PIPELINE
---------------------------------
[Dev build]
     |
     v
[Production config]   (real API URL, not staging)
     |
     v
[Secrets check]   (no server secrets, debug logs removed)
     |
     v
[Signing]   (release keystore / certificate configured)
     |
     v
[Build artifact]   (AAB for Play Store, signed archive for App Store)
     |
     v
[Store listing]   (screenshots, description, privacy disclosures)
     |
     v
[Testing track]   (internal / closed / open testing)
     |
     v
[Staged rollout]   (percentage-based release)
     |
     v
[Monitoring]   (crash reporting + backward compatibility watch)

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Production configuration ကို အတည်ပြုပါ

build သည် development ကျန်ရစ်ခဲ့သော staging (သို့) local endpoint မဟုတ်ဘဲ production API URL အစစ်ကို ညွှန်ပြနေရမည် — ၎င်းသည် prodConfigSet ဖြစ်ပြီး ကျန်စစ်ဆေးချက်အားလုံးက app သည် production နှင့် စကားပြောနေသည်ဟု ယူဆထားသောကြောင့် ဦးဆုံး လာသည်။

server secret ဘာမှ bundle မဖြစ်ကြောင်း စစ်ဆေးပါ

server ပေါ်တွင်သာ ရှိသင့်သော API key, database credential, signing key များကို build လုပ်ထားသော client ထဲတွင် ရှာဖွေပါ — ၎င်းသည် mobile secret management ထဲကတိုက်ရိုက် ရလာသော noSecretsBundled ဖြစ်ပြီး ဒီနေရာမှာ key တစ်ခု leak ဖြစ်ပါက build ကို install လုပ်တဲ့ device တိုင်းဆီ ရောက်သွားမည်။

debug log များကို ဖယ်ရှား (သို့) gate ပါ

verbose debug logging ကို build flag တစ်ခု၏ နောက်ကွယ်တွင် gate လုပ်ထား (သို့) ဖယ်ရှားထားကြောင်း အတည်ပြုပါ — debugLogsRemoved — verbose log တစ်ခုသည် install လုပ်ထားသော app မှန်သမျှ ဖတ်နိုင်ချေရှိသော device ၏ system log ထဲ token (သို့) user data ကို တိုက်ရိုက် print ထုတ်နိုင်သောကြောင့် ဖြစ်သည်။

Signing ကို ပြီးမြောက်အောင်လုပ်ပါ

release keystore (သို့) certificate ကို configure လုပ်ထားပြီး build ကို debug မဟုတ်ဘဲ release အတွက် sign လုပ်ထားကြောင်း အတည်ပြုပါ — mobile build and signing မှ signingConfigured — store နှစ်ခုစလုံးက sign မလုပ်ရသေးသော (သို့) debug-signed build ကို လက်မခံပါ။

Store listing ကို ပြီးမြောက်အောင်လုပ်ပါ

build artifact သည် target store နှင့် ကိုက်ညီကြောင်း — Google Play အတွက် AAB၊ App Store အတွက် signed archive — screenshot, description, privacy disclosure များ ပြည့်စုံကြောင်း အတည်ပြုပါ — Google Play vs. App Store comparison မှ storeListingComplete။

Testing track တစ်ခု ပြီးမြောက်အောင်လုပ်ပါ

public rollout မတိုင်မီ internal, closed, (သို့) open testing track တစ်ခုမှတစ်ဆင့် app ကို run ကြည့်ပါ — testingCompleted — production user များဆီ မရောက်မီ real-device bug တစ်ခုကို ဖမ်းနိုင်သော နောက်ဆုံးအခွင့်အရေး ဖြစ်သောကြောင့် ဖြစ်သည်။

Crash monitoring ကို အတည်ပြုပါ

rollout မတိုင်မီ crash-reporting tool တစ်ခု enable ဖြစ်ပြီး ချိတ်ဆက်ထားကြောင်း အတည်ပြုပါ — mobile production operations မှ monitoringEnabled — monitoring မပါသော staged rollout သည် ဘယ်တော့ ရပ်ရမည်ကို ပြောပြနိုင်မည် မဟုတ်ပါ။

Backward compatibility ကို အတည်ပြုပါ

user များ update မလုပ်ရသေးဘဲ ရှိနေသေးသော ဘေးမှ server-side change များနှင့် release အသစ်သည် ဆက်လုပ်ဆောင်နိုင်ကြောင်း အတည်ပြုပါ — backwardCompatible — staged rollout ဆိုသည်မှာ app version အဟောင်းနှင့် အသစ်တို့ backend တစ်ခုတည်းအပေါ် တစ်ပြိုင်နက်တည်း run နေခြင်းကို ဆိုလိုသောကြောင့် ဖြစ်သည်။

အတူတူ စမ်းရေးကြည့်မယ်

javascript
function checkReleaseReadiness(project) {
  const checks = [
    { key: "prodConfigSet", label: "Production API URL / environment configured" },
    { key: "noSecretsBundled", label: "No server secrets bundled in the client" },
    { key: "debugLogsRemoved", label: "Debug logs removed or gated" },
    { key: "signingConfigured", label: "Release signing configured" },
    { key: "storeListingComplete", label: "Store listing (artifact, screenshots, privacy) complete" },
    { key: "testingCompleted", label: "Testing track completed" },
    { key: "monitoringEnabled", label: "Crash monitoring enabled" },
    { key: "backwardCompatible", label: "Backward compatible with existing app versions" }
  ];

  const missing = checks.filter((check) => !project[check.key]);
  const ready = missing.length === 0;

  return {
    project: project.name,
    ready,
    passedCount: checks.length - missing.length,
    totalChecks: checks.length,
    missing: missing.map((check) => check.label)
  };
}

const projects = [
  {
    name: "Learning app v1.0 (first submission attempt)",
    prodConfigSet: true,
    noSecretsBundled: false,
    debugLogsRemoved: false,
    signingConfigured: true,
    storeListingComplete: true,
    testingCompleted: false,
    monitoringEnabled: true,
    backwardCompatible: true
  },
  {
    name: "Learning app v1.0 (after fixes)",
    prodConfigSet: true,
    noSecretsBundled: true,
    debugLogsRemoved: true,
    signingConfigured: true,
    storeListingComplete: true,
    testingCompleted: true,
    monitoringEnabled: true,
    backwardCompatible: true
  }
];

projects.forEach((project) => {
  const report = checkReleaseReadiness(project);
  console.log(`${report.project}`);
  console.log(`  Ready to release: ${report.ready}`);
  console.log(`  Checks passed: ${report.passedCount}/${report.totalChecks}`);
  if (report.missing.length > 0) {
    console.log("  Missing:");
    report.missing.forEach((item) => console.log(`    - ${item}`));
  }
  console.log("");
});
You should see
checkReleaseReadiness ကို project နှစ်ခုအပေါ် run လုပ်လျှင် — first submission attempt သည် အဆင်သင့်မဖြစ်သေးဘဲ ၈ ခုထဲ ၅ ခုသာ ဖြတ်ပြီး "No server secrets bundled in the client", "Debug logs removed or gated", "Testing track completed" တို့ ပျောက်ဆုံးနေကြောင်း report ထုတ်သည်၊ ပြင်ဆင်ပြီးသား version သည် ၈ ခုလုံး ဖြတ်ပြီး release အတွက် အဆင်သင့်ဖြစ်ကြောင်း report ထုတ်သည်။

၅ မိနစ် စမ်းကြည့်

code example ထဲက "first submission attempt" project ကို ယူပြီး ၎င်း report ပေးသော missing check သုံးခုကိုသာ ပြင်ဆင်ပါ။ fix တစ်ခုစီသည် တကယ့်လက်တွေ့တွင် ဘာကို ကိုယ်စားပြုသလဲ (ဥပမာ bundle လုပ်ထားသော secret တစ်ခုကို ဖယ်ရှားခြင်းက codebase အတွက် တကယ် ဘာကိုဆိုလိုသလဲ) ကို ကိုယ်ပိုင်စကားနှင့် ရေးချပါ၊ ပြီးမှ checkReleaseReadiness ကို ပြန် run ပြီး 8/8 ဖြတ်ကြောင်း အတည်ပြုမီ report အသစ်ကို ကြိုတင်ခန့်မှန်းပါ။

သတိလေးတစ်ချက်

signing နှင့် store listing ကို အဆုံးသတ်အဖြစ် သဘောထားပြီး ပထမဆုံး လုပ်ရမည့် secret-management နှင့် debug-log စစ်ဆေးချက်များကို ကျော်ချန်ခြင်း။

crash monitoring ချိတ်ဆက်ပြီးသားဖြစ်ကြောင်း အတည်မပြုဘဲ staged rollout ကို enable လုပ်ခြင်း — ဘယ်တော့ ရပ်ရမည်ကို သိနိုင်မည့် နည်းလမ်း လုံးဝ ကျန်မရှိစေခြင်း။

Android Developers — Prepare for ReleaseHow Mobile Apps Work

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • signing နှင့် store listing ကို အဆုံးသတ်အဖြစ် သဘောထားပြီး ပထမဆုံး လုပ်ရမည့် secret-management နှင့် debug-log စစ်ဆေးချက်များကို ကျော်ချန်ခြင်း။
  • crash monitoring ချိတ်ဆက်ပြီးသားဖြစ်ကြောင်း အတည်မပြုဘဲ staged rollout ကို enable လုပ်ခြင်း — ဘယ်တော့ ရပ်ရမည်ကို သိနိုင်မည့် နည်းလမ်း လုံးဝ ကျန်မရှိစေခြင်း။
  • ဒီ course က Android Development, Flutter, iOS Development, React Native tutorial တွေကို ထပ်မသင်ပါ — framework hands-on depth အတွက် အဲဒီ course တွေဆီ ဆက်သွားပါ။ ဒီ course က framework-neutral mobile architecture, decision-making, build/deployment/security concept တွေကိုသာ သင်ပေးပါတယ်။

လေ့ကျင့်ခန်း

code example ထဲက "first submission attempt" project ကို ယူပြီး ၎င်း report ပေးသော missing check သုံးခုကိုသာ ပြင်ဆင်ပါ။ fix တစ်ခုစီသည် တကယ့်လက်တွေ့တွင် ဘာကို ကိုယ်စားပြုသလဲ (ဥပမာ bundle လုပ်ထားသော secret တစ်ခုကို ဖယ်ရှားခြင်းက codebase အတွက် တကယ် ဘာကိုဆိုလိုသလဲ) ကို ကိုယ်ပိုင်စကားနှင့် ရေးချပါ၊ ပြီးမှ checkReleaseReadiness ကို ပြန် run ပြီး 8/8 ဖြတ်ကြောင်း အတည်ပြုမီ report အသစ်ကို ကြိုတင်ခန့်မှန်းပါ။

You'll know it worked when: checkReleaseReadiness ကို project နှစ်ခုအပေါ် run လုပ်လျှင် — first submission attempt သည် အဆင်သင့်မဖြစ်သေးဘဲ ၈ ခုထဲ ၅ ခုသာ ဖြတ်ပြီး "No server secrets bundled in the client", "Debug logs removed or gated", "Testing track completed" တို့ ပျောက်ဆုံးနေကြောင်း report ထုတ်သည်၊ ပြင်ဆင်ပြီးသား version သည် ၈ ခုလုံး ဖြတ်ပြီး release အတွက် အဆင်သင့်ဖြစ်ကြောင်း report ထုတ်သည်။

Project: Mobile Release Readiness Plan တစ်ခု | Thuta Learning