{"id":27544,"date":"2026-08-12T04:17:15","date_gmt":"2026-08-12T04:17:15","guid":{"rendered":"https:\/\/umang.pk\/2026\/08\/12\/firebase-%d8%a7%db%8c%d9%be-%da%a9%db%8c-%d8%aa%d8%b9%db%8c%d9%86%d8%a7%d8%aa%db%8c%d8%8c-google-play%d8%8c-testflight%d8%8c-%d8%a7%d9%88%d8%b1-app-store-connect-%da%a9%db%92-%d9%84%db%8c%db%92-fastla\/"},"modified":"2026-08-12T04:17:29","modified_gmt":"2026-08-12T04:17:29","slug":"firebase-%d8%a7%db%8c%d9%be-%da%a9%db%8c-%d8%aa%d8%b9%db%8c%d9%86%d8%a7%d8%aa%db%8c%d8%8c-google-play%d8%8c-testflight%d8%8c-%d8%a7%d9%88%d8%b1-app-store-connect-%da%a9%db%92-%d9%84%db%8c%db%92-fastla","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/08\/12\/firebase-%d8%a7%db%8c%d9%be-%da%a9%db%8c-%d8%aa%d8%b9%db%8c%d9%86%d8%a7%d8%aa%db%8c%d8%8c-google-play%d8%8c-testflight%d8%8c-%d8%a7%d9%88%d8%b1-app-store-connect-%da%a9%db%92-%d9%84%db%8c%db%92-fastla\/","title":{"rendered":"Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c Google Play\u060c TestFlight\u060c \u0627\u0648\u0631 App Store Connect \u06a9\u06d2 \u0644\u06cc\u06d2 Fastlane \u0627\u0648\u0631 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0641\u0644\u0679\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u06cc\u06c1 \u062c\u0645\u0639\u06c1 \u06a9\u0648 \u0634\u0627\u0645 4 \u0628\u062c\u06d2 \u06c1\u06d2 \u0627\u0648\u0631 \u0679\u06cc\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0633\u067e\u0631\u0646\u0679 \u06a9\u06cc \u0622\u062e\u0631\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u0636\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u067e\u0631\u0648\u0688\u06a9\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u062f\u0646 \u06a9\u06d2 \u0622\u062e\u0631 \u062a\u06a9 TestFlight \u0633\u06d2 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06c1\u0641\u062a\u06d2 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06d2 \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0622\u0631\u06a9\u0627\u0626\u06cc\u0648 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0633\u06cc \u0628\u06be\u06cc \u063a\u0644\u0637\u06cc \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u06a9\u0644 \u0648\u06c1\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06ba\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u062f\u0648\u0628\u0627\u0631\u06c1 \u0622\u0631\u06a9\u0627\u0626\u06cc\u0648 \u06a9\u0631\u06cc\u06ba\u060c \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u06a9\u06d2 \u0627\u0633 \u06a9\u06cc \u062f\u06cc\u06a9\u06be \u0628\u06be\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631 \u0628\u06be\u06cc \u0627\u06cc\u0633\u0627 \u06c1\u06cc \u06a9\u0631\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0628 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0633\u0679\u0648\u0688\u06cc\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2\u06d4 \u0627\u067e\u0646\u06d2 APK \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u06cc\u06ba\u060c \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u067e \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u0645\u06cc\u06ba \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0641\u0627\u0626\u0644\u06cc\u06ba \u06af\u06be\u0633\u06cc\u0679\u06cc\u06ba\u060c \u0679\u06cc\u0633\u0679\u0631\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0631\u06cc\u0644\u06cc\u0632 \u0646\u0648\u0679\u0633 \u0644\u06a9\u06be\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0628\u06be\u06cc\u062c\u06cc\u06ba \u06a9\u0648 \u062f\u0628\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0634\u0627\u0645 \u06a9\u06d2 6:45 \u0628\u062c\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0646\u06d2 \u062f\u0648 \u06af\u06be\u0646\u0679\u06d2 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0648\u0688 \u06a9\u06cc \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u06cc\u06d4 \u06cc\u06c1 \u06c1\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u067e\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0628 \u0645\u062a\u0628\u0627\u062f\u0644 \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0648\u0688 <code>dev<\/code> \u062f\u0631\u062e\u062a \u06a9\u06cc \u0634\u0627\u062e\u06cc\u06ba\u06d4 GitHub \u06a9\u06d2 \u0633\u0631\u0648\u0631\u0632 \u0622\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0627 \u0627\u0644\u06af \u062a\u06be\u0644\u06af \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u062d\u0648\u0644 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0644\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062e\u0641\u06cc\u06c1 \u06a9\u0631\u062f\u06c1 \u0631\u0627\u0632\u0648\u06ba \u0633\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c APKs \u0627\u0648\u0631 IPAs \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Android \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0648\u0631 iOS \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 TestFlight \u06a9\u0648 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06af\u06be\u0631 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u0648 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0648\u06c1 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06c1\u06d2 \u062c\u0648 \u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u0622\u062e\u0631 \u062a\u06a9 <code>dev<\/code> Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0648\u0631 TestFlight \u067e\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u062f\u0641 \u06a9\u0648 \u062f\u0628\u0627\u0626\u06cc\u06ba <code>prod<\/code> Google Play Store \u0627\u0648\u0631 Apple App Store \u067e\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 IPAs \u06a9\u06cc \u062f\u0633\u062a\u06cc \u0628\u0631\u0622\u0645\u062f \u06cc\u0627 APKs \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u067e \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627\u06d4<\/p>\n<p>\u0679\u0648\u0644\u0632 \u062c\u0648 \u0627\u0633 \u06a9\u0648 \u0645\u0645\u06a9\u0646 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1 \u06c1\u06cc\u06ba GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632\u060c \u062c\u0648 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0645\u0634\u06cc\u0646 \u0645\u06c1\u06cc\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 Fastlane\u060c \u062c\u0648 \u06a9\u06c1 \u062a\u0639\u0645\u06cc\u0631\u060c \u062f\u0633\u062a\u062e\u0637 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba\u060c \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u06c1\u06cc \u0627\u0646\u062a\u0638\u0627\u0645 \u0627\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u062e\u0648\u062f \u0627\u06cc\u067e\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062f\u0631\u0633\u062a \u06c1\u06cc\u06ba: \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u0633\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u067e\u06cc\u062f\u0627 \u06c1\u0648\u06ba \u06af\u06cc \u062c\u0646 \u06a9\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>GitHub \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0641\u0644\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679:<\/strong> \u0627\u0633 \u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2. \u0627\u06af\u0631 <code>flutter build apk --release<\/code> \u0627\u0648\u0631 <code>flutter build ios --release --no-codesign<\/code> \u0627\u06af\u0631 \u062f\u0648\u0646\u0648\u06ba \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06cc\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0645\u0627\u0644\u06a9 \u06a9\u06d2 \u06a9\u0631\u062f\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u067e\u0644 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679:<\/strong> \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 App Store Connect API \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u06cc\u06a9 \u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u0627 \u06a9\u0631\u062f\u0627\u0631 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06cc\u06a9 Google Play Console \u0627\u06a9\u0627\u0624\u0646\u0679 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0634\u0627\u0626\u0639 \u0634\u062f\u06c1 \u0627\u06cc\u067e \u0688\u0631\u0627\u0641\u0679 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2:<\/strong> \u06af\u0648\u06af\u0644 \u067e\u0644\u06d2 API \u0627\u0646 \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u0622\u06af\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be\u0627 \u0633\u06a9\u062a\u0627 \u062c\u0646 \u06a9\u0627 \u06a9\u0628\u06be\u06cc \u06a9\u0648\u0626\u06cc \u0648\u0631\u0698\u0646 \u0627\u067e \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e\u0633 \u0627\u067e \u0679\u0648 \u0688\u06cc\u0679 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u067e \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062f\u0633\u062a\u06cc \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679<\/strong> Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 Android \u0627\u0648\u0631 iOS \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0639\u0627\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0648\u0628\u06cc \u0622\u067e \u06a9\u06d2 \u062a\u0631\u0642\u06cc\u0627\u062a\u06cc \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2:<\/strong> \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0627\u06cc\u06a9 \u0631\u0648\u0628\u06cc \u0645\u0646\u06cc \u06c1\u06d2\u06d4 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>ruby -v<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 macOS \u0631\u0648\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u06a9\u062b\u0631 \u067e\u0631\u0627\u0646\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0648\u0645\u0628\u0631\u06cc\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0648\u0631\u0698\u0646 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>brew install ruby<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0635\u0628 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646:<\/strong> \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>gem install fastlane<\/code>. \u0622\u067e \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 CI \u0633\u0631\u0648\u0631 \u0633\u0646\u0628\u06be\u0627\u0644 \u0644\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u06c1\u0648\u0645\u0628\u0631\u06cc\u0648 \u0645\u06cc\u06a9 \u0627\u0648 \u0627\u06cc\u0633 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2:<\/strong> \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u0622\u0633\u0627\u0646 \u0679\u0631\u0645\u06cc\u0646\u0644:<\/strong> \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0645\u0627\u0646\u0688\u0632 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc GUI \u0645\u062a\u0628\u0627\u062f\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-what-is-cicd-and-why-your-flutter-app-needs-it\">CI\/CD \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u061f<\/h2>\n<h3 id=\"heading-the-concept\">\u062a\u0635\u0648\u0631<\/h3>\n<p>CI\/CD \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0645\u0633\u0644\u0633\u0644 \u0627\u0646\u0636\u0645\u0627\u0645 \u0627\u0648\u0631 \u0645\u0633\u0644\u0633\u0644 \u062a\u0631\u0633\u06cc\u0644\u06d4 \u06a9\u0644\u06cc\u062f \u06a9\u0648\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0648\u0688 \u06a9\u0648 \u0635\u0627\u0631\u0641\u06cc\u0646 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2\u06d4 \u0645\u0633\u0644\u0633\u0644 \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062a\u06cc\u0627\u0631 \u0627\u0648\u0631 \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0645\u0633\u0644\u0633\u0644 \u062a\u0631\u0633\u06cc\u0644 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u0628\u0627\u0626\u0644 \u06a9\u06cc \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1 \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u06a9\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06a9\u0633\u06cc \u0628\u06be\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0634\u0639\u0628\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u0645\u0648\u0628\u0627\u0626\u0644 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u06c1\u06cc\u06ba\u06d4 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u0633\u060c \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u0632\u060c \u06a9\u06cc \u0633\u0679\u0648\u0631 \u0641\u0627\u0626\u0644\u0632\u060c \u0627\u0648\u0631 API \u06a9\u06cc\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0646\u06c1\u06cc\u06ba \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0648\u0691\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u0633\u0627 \u06a9\u0631\u0646\u0627 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u0634\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0648\u0631 \u062f\u06c1\u0631\u0627\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-why-manual-deployment-is-a-problem\">\u062f\u0633\u062a\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc\u0648\u06ba \u0627\u06c1\u0645\u06cc\u062a \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u06af\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u062f\u0633\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u06a9\u0626\u06cc \u0686\u06cc\u0632\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba: \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u06c1 \u0627\u06cc\u06a9 \u062e\u0635\u0648\u0635\u06cc \u0645\u06c1\u0627\u0631\u062a \u0628\u0646 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u06cc\u0627 \u062f\u0648 \u0644\u0648\u06af \u062c\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u06c1 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u0648 \u062c\u0627\u0646\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u0634\u062e\u0635 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0679\u06cc\u0645 \u0688\u06cc\u0644\u06cc\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627\u060c \u06cc\u06c1 \u0645\u062a\u0636\u0627\u062f \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0634\u062e\u0635 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06cc\u0627 \u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u0633\u06cc\u0679\u0646\u06af\u0632 \u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u067e \u0679\u0627\u067e \u067e\u0631 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 \u0634\u062e\u0635 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0633\u06d2 \u0642\u062f\u0631\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u06cc\u0633\u0631\u0627\u060c \u06cc\u06c1 \u0633\u0633\u062a \u06c1\u06d2\u06d4 \u062a\u0639\u0645\u06cc\u0631\u060c \u0622\u0631\u06a9\u0627\u0626\u06cc\u0648\u060c \u0627\u0648\u0631 \u0627\u067e \u0644\u0648\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06d2 \u06a9\u06be\u06cc\u0644 \u06c1\u06cc\u06ba \u062c\u0648 \u062d\u0642\u06cc\u0642\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u0645\u06cc\u06ba \u062e\u0644\u0644 \u0688\u0627\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u062a\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0648\u0631\u0698\u0646 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0644\u0627\u0624\u0688 \u0645\u0634\u06cc\u0646 \u06c1\u06d2 \u062c\u0648 \u0627\u0646 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06c1\u0631 \u0631\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06a9\u0633\u0627\u06ba \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u062c\u0628 \u0622\u067e \u0627\u06af\u0644\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062a\u0648 \u06cc\u06c1 \u0639\u0645\u0644 \u067e\u0633 \u0645\u0646\u0638\u0631 \u0645\u06cc\u06ba \u0686\u0644\u06d2 \u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-the-architecture-how-all-the-pieces-connect\">\u0641\u0646 \u062a\u0639\u0645\u06cc\u0631: \u0633\u0628 \u06a9\u0686\u06be \u06a9\u06cc\u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u06a9\u0633\u06cc \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0686\u06be\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0645\u062c\u0645\u0648\u0639\u06cc \u0646\u0638\u0627\u0645 \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u0621 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0633\u06d2 \u0641\u0679 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627 \u06a9\u06c1 \u06a9\u06c1\u0627\u06ba \u062f\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u06cc \u0688\u06cc\u0628\u06af\u0646\u06af \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p><strong>\u06af\u0679 \u06c1\u0628 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632<\/strong> \u06cc\u06c1 \u06a9\u0644\u0627\u0624\u0688 \u0628\u06cc\u0633\u0688 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646 \u0645\u06c1\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0631\u0646\u0631 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u0646\u0641\u06cc\u06af\u0631\u0688 \u0628\u0631\u0627\u0646\u0686 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c GitHub \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 (Android \u06a9\u06d2 \u0644\u06cc\u06d2 Ubuntu\u060c iOS \u06a9\u06d2 \u0644\u06cc\u06d2 macOS) \u06a9\u0648 \u06af\u06be\u0645\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0642\u062f\u0645 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0645\u0634\u06cc\u0646 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0634\u06cc\u0646 \u06c1\u0631 \u0628\u0627\u0631 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0635\u0627\u0641 \u06c1\u0648\u0646\u06d2 \u0644\u06af\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646<\/strong> \u0645\u0648\u0628\u0627\u0626\u0644 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0679\u0648\u0644\u06d4 \u06cc\u06c1 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0627\u06cc\u067e \u0628\u0646\u0688\u0644 \u0628\u0646\u0627\u0646\u0627\u060c iOS \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u0628\u0627\u0626\u0646\u0631\u06cc\u0632 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u0627\u06d4 \u0622\u067e \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 &quot;\u0644\u06cc\u0646\u0632&#8221; \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba (\u0642\u062f\u0645\u0648\u06ba \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0627 \u0646\u0627\u0645) \u062c\u0633\u06d2 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0645\u06cc\u0686<\/strong> iOS \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0627 \u0633\u0628 \u0633\u0633\u0679\u0645\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0633\u0633\u0679\u0645 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0648\u0631 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc \u062c\u0633 \u067e\u0631 \u0622\u067e \u0627\u067e\u0646\u06cc iOS \u0627\u06cc\u067e \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u06cc\u0686 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u067e\u0631\u0627\u0626\u06cc\u0648\u06cc\u0679\u060c \u0627\u0646\u06a9\u0631\u067e\u0679\u0688 GitHub \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u06d2 CI \u0631\u0646\u0631 \u067e\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631\u0632 \u067e\u0631 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u0633 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0688\u0631\u0627\u0624\u0646\u06d2 \u062e\u0648\u0627\u0628 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u067e\u0646\u06cc Firebase \u0627\u06cc\u067e \u06a9\u0648 \u0645\u062a\u0639\u06cc\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0622\u067e \u06a9\u0648 \u0628\u0644\u0679 APK \u0627\u0648\u0631 IPA \u0641\u0627\u0626\u0644\u06cc\u06ba \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u06ba \u06af\u06cc\u06d4 <code>dev<\/code> \u0627\u067e\u0646\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u0648 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0645\u0637\u0644\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u0627\u0648\u0631 \u06af\u0648\u06af\u0644 \u067e\u0644\u06d2 \u06a9\u0646\u0633\u0648\u0644<\/strong> \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u0644\u0688 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba: <code>prod<\/code> \u0645\u0627\u062d\u0648\u0644<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508232_325_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0641\u0644\u0648 \u0686\u0627\u0631\u0679 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u0645\u062c\u0645\u0648\u0639\u06cc CI\/CD \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u0627\u06cc\u06a9 GitHub \u0630\u062e\u06cc\u0631\u06c1 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0686\u0627\u0631 \u0634\u0627\u062e\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u067e\u0631\u0627\u0626\u0645\u0631\u06cc \u0627\u0648\u0631 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 (\u0645\u062d\u0641\u0648\u0638 \u0627\u0648\u0631 \u0635\u0631\u0641 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2)\u060c dev \u0627\u0648\u0631 prod (Android \u0627\u0648\u0631 iOS \u0648\u0631\u06a9 \u0641\u0644\u0648\u0632 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u06cc\u06ba)\u06d4 \u0628\u06c1\u0627\u0624 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0637\u0631\u0641 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u062a\u06a9 \u062c\u0627\u0631\u06cc \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06c1\u0627\u06ba \u062f\u0648 \u0644\u0627\u0646\u0686\u0631\u0632 \u0645\u062a\u0648\u0627\u0632\u06cc \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba: \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 Ubuntu \u0644\u0627\u0646\u0686\u0631 \u0627\u0648\u0631 iOS \u06a9\u06d2 \u0644\u06cc\u06d2 macOS \u0644\u0627\u0646\u0686\u0631\u06d4 \u0627\u06cc\u0646\u0688\u0631\u0648\u0626\u06cc\u0688 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0644\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c APK \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Fastlane \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0622\u067e \u06a9\u06cc \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u06cc\u0627 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u0644\u0688 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 iOS \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0644\u0679\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u067e\u0644 \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c iOS \u0627\u06cc\u067e\u0633 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c Fastlane Match \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0633\u062a\u062e\u0637\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Fastlane \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u06cc\u0627 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u067e \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 iOS \u0628\u0644\u0688\u0632 \u06a9\u0648 \u0628\u06be\u06cc \u0628\u06cc\u0679\u0627 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 TestFlight \u06a9\u0648 \u0628\u06be\u06cc\u062c\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u06af\u0648\u06af\u0644 \u067e\u0644\u06d2 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0622\u0626\u06cc \u0627\u0648 \u0627\u06cc\u0633 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u067e\u0631 \u0646\u0638\u0631\u062b\u0627\u0646\u06cc \u0627\u0648\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1\u060c \u0646\u062c\u06cc GitHub \u0630\u062e\u06cc\u0631\u06c1 \u06c1\u06d2 \u062c\u0633\u06d2 Fastlane Match \u067e\u0691\u06be\u062a\u0627 \u0627\u0648\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0622\u067e \u06a9\u06d2 iOS \u062f\u0633\u062a\u062e\u0637\u06cc \u0645\u0648\u0627\u062f \u06a9\u0648 \u0627\u06cc\u06a9 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u06a9\u0631\u067e\u0679\u0688 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 \u0635\u0631\u0641 \u0622\u067e \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508232_52_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u062e\u0627\u06a9\u06c1 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u0641\u0627\u0633\u0679\u0644\u06cc\u0646 \u0645\u06cc\u0686 iOS \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u0633 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u0646\u062c\u06cc GitHub \u0630\u062e\u06cc\u0631\u06c1 \u06c1\u06d2 \u062c\u0648 MATCH_PASSWORD \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062f\u06c1 \u062e\u0641\u06cc\u06c1 \u06a9\u0631\u062f\u06c1 \u062f\u0633\u062a\u062e\u0637\u06cc \u0627\u062b\u0627\u062b\u0648\u06ba \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u060c \u0627\u06cc\u0688-\u06c1\u0627\u06a9 \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u060c \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u060c \u0627\u0648\u0631 \u0627\u06cc\u0688-\u06c1\u0627\u06a9 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4 \u062a\u06cc\u0631 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0645\u06cc\u0686 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0645\u06cc\u06a9 \u0627\u0648 \u0627\u06cc\u0633 \u06af\u0679 \u06c1\u0628 \u0627\u06cc\u06a9\u0634\u0646 \u0644\u0627\u0646\u0686\u0631 \u0645\u06cc\u06ba \u0633\u06cc \u0622\u0626\u06cc \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u0646 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679\u0633 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u0627\u0648\u0631 \u0688\u06a9\u0631\u067e\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u062e\u0631\u06cc \u0645\u0631\u062d\u0644\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 iOS \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u0634\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u0648 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0638\u0645 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-generating-your-credentials-and-keys\">\u0627\u0633\u0646\u0627\u062f \u0627\u0648\u0631 \u0686\u0627\u0628\u06cc\u0627\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h2>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06cc CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u0627\u0633\u0646\u0627\u062f \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0639\u062f\u062f \u0641\u0631\u06cc\u0642 \u062b\u0627\u0644\u062b \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-firebase-credentials\">\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u0633\u0646\u0627\u062f<\/h3>\n<p>Firebase \u0627\u06cc\u067e \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u062f\u0648 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2: \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e ID \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u062c\u0648 \u0622\u067e \u06a9\u06d2 CI \u0633\u0631\u0648\u0631 \u067e\u0631 \u0628\u0644\u0688\u0633 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Firebase \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508232_286_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062a\u062d\u0631\u06cc\u06a9 <strong>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/strong> (\u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0645\u06cc\u06ba \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06c1 \u06a9\u06d2 \u0622\u06af\u06d2 \u06af\u06cc\u0626\u0631 \u0622\u0626\u06cc\u06a9\u0646)<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508232_586_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06af\u06cc\u0626\u0631 \u0622\u0626\u06cc\u06a9\u0646 \u06a9\u0648 \u0646\u0645\u0627\u06cc\u0627\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06be\u0644 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0646\u06cc\u0686\u06d2 \u0633\u06a9\u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e<\/strong> \u067e\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u0646\u0648\u06a9\u0631\u06cc. \u0631\u062c\u0633\u0679\u0631\u0688 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0648\u0631 iOS \u0627\u06cc\u067e\u0633 \u062f\u0631\u062c \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0627\u06cc\u067e \u0622\u0626\u06cc \u0688\u06cc<\/strong> \u06c1\u0631 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u06cc\u067e \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06cc\u06c1 \u06c1\u06d2: <code>1:1234567890:android:abc123def456<\/code>. iOS \u0627\u06cc\u067e ID \u06c1\u06d2: <code>1:1234567890:ios:abc123def456<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508232_213_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u067e\u0646\u06d2 Firebase \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u06cc\u06ba \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2: \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" Your section with both Android and iOS app cards App ID fields title=\"\"><\/p>\n<p>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u06cc\u06ba \u0631\u06c1\u0646\u0627 <strong>\u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679<\/strong> \u0679\u06cc\u06af<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_674_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" Service tab title=\"\"><\/p>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0646\u0626\u06cc \u0646\u062c\u06cc \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0626\u06cc\u06ba<\/strong> \u0688\u0627\u0626\u06cc\u0644\u0627\u06af \u0628\u0627\u06a9\u0633 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>.json<\/code> \u0641\u0627\u0626\u0644 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0631\u062a\u06a9\u0627\u0628 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_715_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u062a\u0635\u062f\u06cc\u0642\u06cc \u0688\u0627\u0626\u06cc\u0644\u0627\u06af \u0628\u0627\u06a9\u0633 \u062c\u0648 \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-apple-app-store-connect-api-key\">Apple App Store \u06a9\u0646\u06a9\u0634\u0646 API \u06a9\u0644\u06cc\u062f<\/h3>\n<p>\u0627\u06cc\u067e\u0644 \u0646\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u067e\u0631 \u0645\u0628\u0646\u06cc API \u0631\u0633\u0627\u0626\u06cc \u06a9\u0648 API \u06a9\u06cc\u0632 \u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0648 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u067e\u0644 \u0622\u0626\u06cc \u0688\u06cc \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p>\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u06c1\u0627\u06ba \u062c\u0627\u0626\u06cc\u06ba: <strong>\u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0648\u0631 \u0631\u0633\u0627\u0626\u06cc<\/strong> \u0627\u0648\u067e\u0631 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u0633\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_899_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u06c1\u0648\u0645 \u067e\u06cc\u062c \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" Users and visible in the top title=\"\"><\/p>\n<p>\u0627\u06af\u0644\u0627 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0627\u0646\u0636\u0645\u0627\u0645<\/strong> \u0679\u06cc\u0628 \u06a9\u0648 \u062a\u06be\u067e\u062a\u06be\u067e\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06a9\u0634\u0646 API<\/strong> \u06cc\u06c1 \u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_357_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u06cc\u0648\u0632\u0631\u0632 \u0627\u0648\u0631 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646\u0632 \u0679\u06cc\u0628 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0646\u062a\u062e\u0628 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 API \u0622\u0626\u0679\u0645 \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06af\u0644\u0627 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>+<\/strong> \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u0633 \u0637\u0631\u062d \u0648\u0627\u0636\u062d \u0646\u0627\u0645 \u062f\u06cc\u06ba: <code>GitHub Actions CI<\/code>. \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0633\u0637\u062d \u06a9\u0648 \u0627\u0633 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba: <strong>\u0627\u06cc\u067e \u0645\u06cc\u0646\u06cc\u062c\u0631<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_565_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"App Store Connect API \u06a9\u0644\u06cc\u062f\u06cc \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0627 \u0641\u0627\u0631\u0645 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0631\u0633\u0627\u0626\u06cc \u0648\u0627\u0644\u06d2 \u0641\u06cc\u0644\u0688\u0632 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0633 \u06a9\u0627 \u0627\u06cc\u06a9 \u0646\u0648\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062c\u0627\u0631\u06cc \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a<\/strong> \u0635\u0641\u062d\u06c1 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <strong>\u06a9\u0644\u06cc\u062f\u06cc \u0634\u0646\u0627\u062e\u062a<\/strong> \u06cc\u06c1 \u06a9\u0644\u06cc\u062f\u06cc \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>API \u06a9\u0644\u06cc\u062f \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong> \u0628\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>.p8<\/code> \u0641\u0627\u0626\u0644 \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_811_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u062c\u0627\u0631\u06cc \u06a9\u0646\u0646\u062f\u06c1 ID \u06a9\u06d2 \u0633\u0627\u062a\u06be App Store Connect API \u06a9\u06cc\u0632 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a\u060c \u06a9\u0644\u06cc\u062f\u06cc \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06a9\u0644\u06cc\u062f\u06cc ID \u06a9\u0627\u0644\u0645\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u0628\u0679\u0646\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-google-play-store-service-account\">\u06af\u0648\u06af\u0644 \u067e\u0644\u06d2 \u0627\u0633\u0679\u0648\u0631 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679<\/h3>\n<p>Google Play API \u0627\u067e \u0644\u0648\u0688\u0632 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 (Google Cloud \u0645\u06cc\u06ba \u0645\u0634\u06cc\u0646 ID) \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Google Cloud Console \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e Play Console \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0633\u06cc \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_298_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0633\u0644\u06cc\u06a9\u0679\u0631 \u0635\u062d\u06cc\u062d \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06af\u0644\u06d2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>IAM \u0627\u0648\u0631 \u0645\u0646\u062a\u0638\u0645\u06cc\u0646<\/strong> \u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0645\u06cc\u06ba <strong>\u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_563_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0622\u0626\u06cc \u0627\u06d2 \u0627\u06cc\u0645 \u0627\u0648\u0631 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u0645\u06cc\u06ba \u067e\u06be\u06cc\u0644\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/strong>. \u0627\u0633\u06d2 \u0627\u0633 \u0637\u0631\u062d \u0648\u0627\u0636\u062d \u0646\u0627\u0645 \u062f\u06cc\u06ba: <code>github-actions-play-store<\/code>. \u0631\u0648\u0644 \u062a\u0641\u0648\u06cc\u0636 <strong>\u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0635\u0627\u0631\u0641<\/strong>. \u0645\u06a9\u0645\u0644 \u062a\u062e\u0644\u06cc\u0642\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508233_291_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u0627 \u0641\u0627\u0631\u0645 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0631\u0648\u0644 \u0641\u06cc\u0644\u0688\u0632 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0646\u0626\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u06a9\u0644\u06cc\u062f<\/strong> \u0679\u06cc\u06af \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u06a9\u0644\u06cc\u062f \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba<\/strong> \u067e\u06be\u0631 <strong>\u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0626\u06cc\u06ba<\/strong>. \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba <strong>JSON<\/strong> \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>.json<\/code> \u0641\u0627\u0626\u0644\u06cc\u06ba \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_885_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u06a9\u06cc\u0632 \u0679\u06cc\u0628 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0645\u0646\u062a\u062e\u0628 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" Add button title=\"\"><\/p>\n<p>\u0627\u0628 \u0627\u0633 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0648 \u0627\u067e\u0646\u06d2 Play Console \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06af\u0648\u06af\u0644 \u067e\u0644\u06d2 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u060c \u0627\u06cc\u067e \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba: <strong>\u062a\u0631\u062a\u06cc\u0628<\/strong> \u067e\u06be\u0631 <strong>API \u0631\u0633\u0627\u0626\u06cc<\/strong>. \u06a9\u0645 \u0627\u0632 \u06a9\u0645\u060c \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0631\u06c1\u0627\u0626\u06cc \u06a9\u06d2 \u0645\u06cc\u0646\u06cc\u062c\u0631<\/strong> \u0627\u06cc\u067e \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_953_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"Google Play Console API \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u0627\u0648\u0631 \u0627\u062c\u0627\u0632\u062a \u062a\u0641\u0648\u06cc\u0636 \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-fastlane-match-certificates-repository\">\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0645\u06cc\u0686\u0646\u06af \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631<\/h3>\n<p>Fastlane Match \u0627\u06cc\u06a9 \u0633\u0631\u0634\u0627\u0631\u060c \u0646\u062c\u06cc GitHub \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba iOS \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637\u06cc \u0645\u0648\u0627\u062f \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 \u0627\u06cc\u06a9 \u0646\u06cc\u0627\u060c \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062e\u0627\u0644\u06cc \u0630\u0627\u062a\u06cc \u0630\u062e\u06cc\u0631\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0633 \u0637\u0631\u062d \u0631\u06a9\u06be\u06cc\u06ba: <code>your-app-certificates<\/code>. \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_973_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u06a9 \u0646\u06cc\u0627 GitHub \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0635\u0641\u062d\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0633 \u0645\u06cc\u06ba \u0645\u062e\u0632\u0646 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u0622\u0628\u0627\u062f\u06cc \u06c1\u06d2\u060c \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" and all initialization checkboxes title=\"\"><\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06c1\u0645 \u0627\u06cc\u06a9 \u0630\u0627\u062a\u06cc \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0648 CI \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0633\u06d2 \u0627\u0633 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u0627\u0648\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc \u062c\u0627\u0626\u06d2\u06d4 \u0627\u067e\u0646\u06d2 GitHub \u0627\u06a9\u0627\u0624\u0646\u0679 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062a\u0631\u062a\u06cc\u0628<\/strong>\u0646\u06cc\u0686\u06d2 \u0633\u06a9\u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/strong>\u060c \u067e\u06be\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0630\u0627\u062a\u06cc \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u0679\u0648\u06a9\u0646<\/strong> \u067e\u06be\u0631 <strong>\u0679\u0648\u06a9\u0646 (\u06a9\u0644\u0627\u0633\u06cc\u06a9\u06cc)<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_291_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"GitHub \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" Developer visible at the title=\"\"><\/p>\n<p>\u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u06a9\u0644\u0627\u0633\u06a9 \u0679\u0648\u06a9\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0648\u0636\u0627\u062d\u062a\u06cc \u0646\u0627\u0645 \u062f\u06cc\u06ba\u060c \u0627\u0633 \u0637\u0631\u062d: <code>fastlane-match-ci<\/code>. \u0646\u06cc\u0686\u06d2 <strong>\u0631\u06cc\u0646\u062c \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0631\u06cc\u067e\u0648<\/strong> \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 (\u062c\u0648 \u067e\u0648\u0631\u06d2 \u0630\u062e\u06cc\u0631\u06c1 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2) \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u0648 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 1 \u0633\u0627\u0644 \u062a\u06a9 \u0645\u0642\u0631\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u06cc\u0627 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0627\u0633 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u06a9\u0628\u06be\u06cc \u062e\u062a\u0645 \u0646\u06c1 \u06c1\u0648\u06d4 \u0627\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4 GitHub \u0622\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_970_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"GitHub \u0630\u0627\u062a\u06cc \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 \u062a\u062e\u0644\u06cc\u0642 \u0641\u0627\u0631\u0645 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" scope checkbox checked and other options title=\"\"><\/p>\n<p>\u0646\u06cc\u0627 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0679\u0648\u06a9\u0646:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_304_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0646\u06cc\u0627 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0679\u0648\u06a9\u0646 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-background-cryptography-turning-files-into-secrets\">\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06cc \u062e\u0641\u06cc\u06c1 \u06a9\u0627\u0631\u06cc: \u0627\u067e\u0646\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0646\u062c\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h2>\n<p>GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0635\u0631\u0641 \u0633\u0627\u062f\u06c1 \u0645\u062a\u0646 \u06a9\u06d2 \u062a\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0633\u062a\u062e\u0637\u06cc \u0633\u0646\u062f \u0627\u06cc\u06a9 \u0628\u0627\u0626\u0646\u0631\u06cc \u0641\u0627\u0626\u0644 \u06c1\u06d2\u06d4 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 <code>.jks<\/code> \u06a9\u06cc\u0633\u0679\u0648\u0631\u060c \u0627\u06cc\u067e\u0644 <code>.p8<\/code> \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 <code>.json<\/code> \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679\u06d4 \u0628\u0627\u0626\u0646\u0631\u06cc \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0646\u062c\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633\u06d2 Base64 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0628\u0627\u0626\u0646\u0631\u06cc \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u067e\u0631\u0646\u0679 \u0627\u06cc\u0628\u0644 ASCII \u062d\u0631\u0648\u0641 \u06a9\u06cc \u0627\u06cc\u06a9 \u062a\u0627\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u06a9\u0645\u0627\u0646\u0688\u0632 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0686\u0644\u0627\u0626\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba. <code>.txt<\/code> \u0641\u0627\u0626\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0645\u0648\u0627\u062f \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633 \u0633\u0679\u0631\u0646\u06af \u06a9\u0648 \u06a9\u0633\u06cc \u0645\u062d\u0641\u0648\u0638 \u062c\u06af\u06c1 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba (\u0627\u06cc\u06a9 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2)\u06d4 \u0627\u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba\u06d4 <code>.txt<\/code> \u0641\u0627\u0626\u0644<\/p>\n<h3 id=\"heading-generating-the-android-keystore\">\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p>Android Keystore Play Store \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u06a9\u0631\u067e\u0679\u0648\u06af\u0631\u0627\u0641\u06a9 \u0634\u0646\u0627\u062e\u062a \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u0634\u0627\u0626\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062a\u0645\u0627\u0645 \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0648 \u06c1\u0645\u06cc\u0634\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 \u0627\u0633 \u06a9\u0648 \u06a9\u06be\u0648\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0648 \u0622\u06af\u06d2 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u067e\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0628\u06cc\u06a9 \u0627\u067e \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">keytool -genkey -v \n  -keystore release-keystore.jks \n  -keyalg RSA \n  -keysize 2048 \n  -validity 10000 \n  -alias YOUR_KEY_ALIAS \n  -dname \"CN=Your Name, OU=App, O=Your Company, L=Your City, ST=Your State, C=US\" \n  -storepass \"YOUR_SECURE_PASSWORD\" \n  -keypass \"YOUR_SECURE_PASSWORD\"\n<\/code><\/pre>\n<p><code>keytool<\/code>    \u06cc\u06c1 \u062c\u0627\u0648\u0627 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u06a9\u0679 \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0627\u0648\u0627 \u06a9\u0631\u067e\u0679\u0648\u06af\u0631\u0627\u0641\u06a9 \u06a9\u0644\u06cc\u062f\u06cc \u0627\u0633\u0679\u0648\u0631\u0632 \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0679\u0648\u0644 \u06c1\u06d2\u06d4 <code>-keystore release-keystore.jks<\/code> \u0622\u0624\u0679 \u067e\u0679 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0646\u0627\u0645 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>-keyalg RSA<\/code> \u0627\u0648\u0631 <code>-keysize 2048<\/code> \u0627\u0646\u06a9\u0631\u067e\u0634\u0646 \u0627\u0644\u06af\u0648\u0631\u062a\u06be\u0645 \u0627\u0648\u0631 \u06a9\u0644\u06cc\u062f \u06a9\u06cc \u0644\u0645\u0628\u0627\u0626\u06cc \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 Android \u0633\u0627\u0626\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>-validity 10000<\/code>    \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u06a9\u06cc \u0645\u062f\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 27 \u0633\u0627\u0644 \u0645\u0642\u0631\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u06c1 Play Store \u06a9\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1 \u0642\u062f\u0631 \u06c1\u06d2\u06d4 <code>-alias YOUR_KEY_ALIAS<\/code> \u0648\u06c1 \u0646\u0627\u0645 \u062c\u0633 \u0633\u06d2 \u0627\u0633 \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0645\u0639\u0646\u06cc \u062e\u06cc\u0632 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u0627\u06cc\u067e \u06a9\u0627 \u0646\u0627\u0645\u06d4 <code>-dname<\/code> \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06d2 \u0645\u0627\u0644\u06a9 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 \u0645\u0646\u0641\u0631\u062f \u0646\u0627\u0645\u06d4 \u062a\u0645\u0627\u0645 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u06ba\u06d4<\/p>\n<p><code>-storepass<\/code>    \u0627\u0648\u0631 <code>-keypass<\/code> \u06cc\u06c1 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u0641\u0627\u0626\u0644 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u06a9\u0644\u06cc\u062f\u0648\u06ba \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06c1\u06d2\u06d4 \u06cc\u06c1 GitHub Secrets \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0648 \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0627\u067e\u0646\u06cc \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u06cc\u06a9 Base64 \u0633\u0679\u0631\u0646\u06af \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0633\u06d2 GitHub Secrets \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">base64 -i release-keystore.jks > release-keystore-base64.txt\n<\/code><\/pre>\n<p><code>base64 -i release-keystore.jks<\/code>    \u0628\u0627\u0626\u0646\u0631\u06cc \u067e\u0691\u06be\u06cc\u06ba <code>.jks<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0628\u06cc\u0633 64 \u0633\u0679\u0631\u0646\u06af \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u06a9\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>><\/code> \u0622\u067e\u0631\u06cc\u0679\u0631 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>release-keystore-base64.txt<\/code> \u0679\u0631\u0645\u06cc\u0646\u0644 \u067e\u0631 \u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u06d4 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u067e\u0648\u0631\u06cc \u0627\u0633\u0679\u0631\u0646\u06af (\u0644\u0645\u0628\u06cc \u0648\u0627\u0644\u06cc) \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u0645\u06cc\u06ba \u0644\u06cc\u0628\u0644 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ANDROID_KEYSTORE_BASE64<\/code>\u0627\u0648\u0631 \u067e\u06be\u0631 \u062d\u0630\u0641 \u06a9\u0631\u06cc\u06ba <code>.txt<\/code> \u0641\u0627\u0626\u0644<\/p>\n<h3 id=\"heading-encoding-the-apple-api-key\">Apple API \u06a9\u0644\u06cc\u062f\u06cc \u0627\u0646\u06a9\u0648\u0688\u0646\u06af<\/h3>\n<pre><code class=\"language-bash\">base64 -i AuthKey_YOUR_KEY_ID.p8 > authkey-base64.txt\n<\/code><\/pre>\n<p>\u062a\u0628\u062f\u06cc\u0644\u06cc <code>AuthKey_YOUR_KEY_ID.p8<\/code> \u062f\u0631\u0633\u062a \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>.p8<\/code> \u06cc\u06c1 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u0633\u06d2 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u06cc \u06af\u0626\u06cc \u0641\u0627\u0626\u0644 \u06c1\u06d2\u06d4 \u06a9\u0644\u06cc\u062f\u06cc ID \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u0644\u06cc\u062f \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0628\u06cc\u0633 64 \u0633\u0679\u0631\u0646\u06af \u0645\u06cc\u06ba \u0627\u0646\u06a9\u0648\u0688 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u06be\u0644\u0627 <code>authkey-base64.txt<\/code>\u0645\u0648\u0627\u062f \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 <code>APPSTORE_API_PRIVATE_KEY_BASE64<\/code>\u0641\u0627\u0626\u0644 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-encoding-github-credentials-for-match\">\u0645\u0645\u0627\u062b\u0644\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 GitHub \u0633\u0646\u062f\u06cc \u0627\u0646\u06a9\u0648\u0688\u0646\u06af<\/h3>\n<p>\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0645\u06cc\u0686 HTTP \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 Base64 \u0627\u0646\u06a9\u0648\u0688 \u0634\u062f\u06c1 \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 HTTP \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u0645\u0639\u06cc\u0627\u0631\u06cc \u0634\u06a9\u0644 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">echo -n \"YOUR_GITHUB_USERNAME:YOUR_PERSONAL_ACCESS_TOKEN\" | base64\n<\/code><\/pre>\n<p><code>echo -n<\/code>    \u067e\u0686\u06be\u0644\u06cc \u0646\u0626\u06cc \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0633\u0679\u0631\u0646\u06af \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>-n<\/code> \u062c\u06be\u0646\u0688\u06d2 \u0628\u06c1\u062a \u0627\u06c1\u0645 \u06c1\u06cc\u06ba\u06d4 \u0628\u06cc\u0633 64 \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u0645\u06cc\u06ba \u067e\u0686\u06be\u0644\u06cc \u0646\u0626\u06cc \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u062d\u0631\u0648\u0641 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u060c \u062c\u0648 \u0627\u0633\u0646\u0627\u062f \u0633\u06d2 \u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>| base64<\/code> \u0627\u0646\u0679\u0631\u0645\u06cc\u0688\u06cc\u0679 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0644\u06a9\u06be\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a Base64 \u0627\u0646\u06a9\u0648\u0688\u0631 \u067e\u0631 \u067e\u0627\u0626\u067e \u0622\u0624\u0679 \u067e\u0679\u06d4 \u0627\u0646\u06a9\u0648\u0688 \u0634\u062f\u06c1 \u0646\u062a\u0627\u0626\u062c \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0679\u0631\u0645\u06cc\u0646\u0644 \u067e\u0631 \u067e\u0631\u0646\u0679 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0646\u06cc\u0686\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 <code>MATCH_GIT_BASIC_AUTHORIZATION<\/code>.<\/p>\n<h3 id=\"heading-encoding-your-environment-file\">\u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0641\u0644\u0679\u0631 \u0627\u06cc\u067e <code>.env<\/code> \u0627\u06af\u0631 \u0622\u067e \u062d\u0633\u0627\u0633 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u0646\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 API \u06a9\u06cc\u0632 (\u062c\u0646\u06c1\u06cc\u06ba \u06af\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0628\u0646\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2)\u060c \u0622\u067e \u06a9\u0648 \u0627\u0646 \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0633\u06cc \u0622\u0626\u06cc \u0631\u0646\u0631 \u0627\u0646 \u06a9\u0648 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0634\u06a9\u06cc\u0644 \u062f\u06d2 \u0633\u06a9\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">base64 -i .env > env-base64.txt\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>.env<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0633\u06d2 \u067e\u0691\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0628\u06cc\u0633 64 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u06a9\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06be\u0644\u0627 <code>env-base64.txt<\/code>\u0645\u0648\u0627\u062f \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ENV_FILE_BASE64<\/code>\u0641\u0627\u0626\u0644 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06cc\u0644\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0646\u0635\u0648\u0628\u06d2 \u0645\u06cc\u06ba <code>.env<\/code> \u0627\u06af\u0631 \u0622\u067e \u0641\u0627\u0626\u0644 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u067e\u0646\u06cc GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-configuring-github-actions-secrets\">GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0633\u06cc\u06a9\u0631\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646<\/h2>\n<p>\u0627\u067e\u0646\u06cc \u062a\u0645\u0627\u0645 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0627\u067e\u0646\u06d2 GitHub \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u062e\u0641\u06cc\u06c1 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062f\u06c1 \u0631\u0627\u0632 \u0622\u0631\u0627\u0645 \u0633\u06d2 \u062e\u0641\u06cc\u06c1 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0644\u0627\u06af \u0645\u06cc\u06ba \u0686\u06be\u067e\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba (\u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0646\u06cc\u0686\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)\u06d4 <code>***<\/code> \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631\u060c \u0627\u06af\u0631 \u067e\u0631\u0646\u0679 \u06c1\u0648)\u060c GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0688 \u06a9\u0628\u06be\u06cc \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>GitHub \u067e\u0631 \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba\u060c \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba: <strong>\u062a\u0631\u062a\u06cc\u0628<\/strong> \u0627\u0648\u067e\u0631 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u0628\u0627\u0631 \u0645\u06cc\u06ba<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_515_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"GitHub \u0645\u062e\u0632\u0646 \u06a9\u0627 \u0635\u0641\u062d\u06c1 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" tab visible in the top title=\"\"><\/p>\n<p>\u0628\u0627\u0626\u06cc\u06ba \u0633\u0627\u0626\u0688\u0628\u0627\u0631 \u0645\u06cc\u06ba <strong>\u0631\u0627\u0632 \u0627\u0648\u0631 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a<\/strong>\u067e\u06be\u0631 <strong>\u0639\u0645\u0644<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_306_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"GitHub \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u0627 \u0635\u0641\u062d\u06c1 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" Secrets and expanded in the left sidebar showing management title=\"\"><\/p>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u0646\u06cc\u0627 \u0630\u062e\u06cc\u0631\u06c1 \u0631\u0627\u0632<\/strong> \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u06c1\u0631 \u0627\u06cc\u06a9 \u0631\u0627\u0632 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba\u06d4 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u0627\u0646 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0627 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0637\u0631\u062d \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0644\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_606_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2: \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" New repository button and an empty secrets title=\"\"><\/p>\n<p>\u062f\u0631\u062c \u0630\u06cc\u0644 \u0631\u0627\u0632 \u0627\u06cc\u06a9 \u0627\u06cc\u06a9 \u06a9\u0631\u06a9\u06d2 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a \u0627\u0648\u0631 \u062a\u0631\u062a\u06cc\u0628:<\/strong><\/p>\n<ul>\n<li><code>ENV_FILE_BASE64<\/code>: \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u06cc \u0628\u06cc\u0633 64 \u0633\u0679\u0631\u0646\u06af\u06d4 <code>.env<\/code> \u0641\u0627\u0626\u0644<\/li>\n<\/ul>\n<p><strong>\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u0648\u0631 \u06af\u0648\u06af\u0644 \u067e\u0644\u06d2:<\/strong><\/p>\n<ul>\n<li>\n<p><code>FIREBASE_APP_ID_ANDROID<\/code>: Android \u0627\u06cc\u067e ID Firebase \u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u06cc \u06af\u0626\u06cc (\u0641\u0627\u0631\u0645\u06cc\u0679: <code>1:xxx:android:xxx<\/code>)\u06d4<\/p>\n<\/li>\n<li>\n<p><code>FIREBASE_APP_ID_IOS<\/code>: iOS \u0627\u06cc\u067e ID Firebase \u06a9\u0646\u0633\u0648\u0644 \u0633\u06d2 \u06a9\u0627\u067e\u06cc \u06a9\u06cc \u06af\u0626\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><code>FIREBASE_SERVICE_ACCOUNT_JSON<\/code>: \u0627\u067e\u0646\u06d2 Firebase \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u062e\u0627\u0645 \u0645\u0648\u0627\u062f \u0686\u0633\u067e\u0627\u06ba \u06a9\u0631\u06cc\u06ba\u06d4 <code>.json<\/code> \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0641\u0627\u0626\u0644\u06d4 \u0627\u0633 \u0622\u0626\u0679\u0645 \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06cc\u06ba \u0641\u0627\u0626\u0644\u0648\u06ba \u067e\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>GOOGLE_PLAY_JSON<\/code>: \u0627\u067e\u0646\u06d2 Google Play \u0633\u0631\u0648\u0633\u0632 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u062e\u0627\u0645 \u0645\u0648\u0627\u062f \u067e\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>.json<\/code> \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0641\u0627\u0626\u0644\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>Android \u062f\u0633\u062a\u062e\u0637:<\/strong><\/p>\n<ul>\n<li>\n<p><code>ANDROID_KEYSTORE_BASE64<\/code>: \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u06cc \u0628\u06cc\u0633 64 \u0633\u0679\u0631\u0646\u06af\u06d4 <code>.jks<\/code> \u06a9\u0644\u06cc\u062f\u06cc \u0627\u0633\u0679\u0648\u0631 \u0641\u0627\u0626\u0644\u06d4<\/p>\n<\/li>\n<li>\n<p><code>ANDROID_KEY_ALIAS<\/code>: \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0639\u0631\u0641\u060c \u062c\u06cc\u0633\u06d2 <code>your-app-key<\/code>)\u06d4<\/p>\n<\/li>\n<li>\n<p><code>ANDROID_KEY_PASSWORD<\/code>: \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u06cc\u06c1 \u06a9\u0644\u06cc\u062f\u06cc \u067e\u0627\u0633 \u0648\u0631\u0688 \u0633\u06cc\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>ANDROID_STORE_PASSWORD<\/code>: \u06a9\u06cc \u0633\u0679\u0648\u0631 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u06cc\u06c1 \u0633\u0679\u0648\u0631 \u06a9\u0627 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0633\u06cc\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u06cc\u067e\u0644 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631:<\/strong><\/p>\n<ul>\n<li>\n<p><code>APPSTORE_ISSUER_ID<\/code>: App Store Connect API \u06a9\u0644\u06cc\u062f\u06cc \u0635\u0641\u062d\u06c1 \u0633\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u0646\u0646\u062f\u06c1 ID\u06d4<\/p>\n<\/li>\n<li>\n<p><code>APPSTORE_API_KEY_ID<\/code>: App Store Connect API \u06a9\u0644\u06cc\u062f\u06cc \u0635\u0641\u062d\u06c1 \u0633\u06d2 \u06a9\u0644\u06cc\u062f\u06cc ID\u06d4<\/p>\n<\/li>\n<li>\n<p><code>APPSTORE_API_PRIVATE_KEY_BASE64<\/code>: \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u06cc \u0628\u06cc\u0633 64 \u0633\u0679\u0631\u0646\u06af\u06d4 <code>.p8<\/code> \u0641\u0627\u0626\u0644<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0645\u06cc\u0686\u0632:<\/strong><\/p>\n<ul>\n<li>\n<p><code>MATCH_GIT_BASIC_AUTHORIZATION<\/code>:\u0628\u06cc\u0633 64 \u0633\u0679\u0631\u0646\u06af <code>username:token<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>MATCH_PASSWORD<\/code>: \u0627\u06cc\u06a9 \u0645\u0636\u0628\u0648\u0637 \u067e\u0627\u0633 \u0648\u0631\u0688 \u062c\u0648 \u0622\u067e \u062e\u0648\u062f \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u06cc\u0686 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0648 \u062e\u0641\u06cc\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0636\u0628\u0648\u0637 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0633 \u0648\u0631\u0688 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u0631\u06a9\u06be\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633\u06d2 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0633\u06a9\u062a\u0627\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u06a9\u06be\u0648 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_329_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u062a\u0645\u0627\u0645 \u0631\u0627\u0632\u0648\u06ba \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0633\u06cc\u06a9\u0631\u0679\u0633 \u0635\u0641\u062d\u06c1 \u062e\u0641\u06cc\u06c1 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06cc \u0645\u06a9\u0645\u0644 \u0641\u06c1\u0631\u0633\u062a \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 (\u0627\u0642\u062f\u0627\u0631 \u067e\u0648\u0634\u06cc\u062f\u06c1 \u06c1\u06cc\u06ba)\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-setting-up-fastlane-for-android\">\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 <code>android\/<\/code> \u0622\u067e \u06a9\u06d2 \u0641\u0644\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<h3 id=\"heading-the-gemfile\">\u0645\u0646\u06cc \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># android\/Gemfile\n\nsource \"https:\/\/rubygems.org\"\ngem \"fastlane\"\n\nplugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')\neval_gemfile(plugins_path) if File.exist?(plugins_path)\n<\/code><\/pre>\n<p><code>source \"https:\/\/rubygems.org\"<\/code>    \u06cc\u06c1 \u0628\u0646\u0688\u0644\u0631 (\u0631\u0648\u0628\u06cc \u06a9\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631) \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0646\u06cc \u06a9\u06c1\u0627\u06ba \u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 <code>gem \"fastlane\"<\/code> \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0648 \u0627\u0646\u062d\u0635\u0627\u0631 \u0642\u0631\u0627\u0631 \u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06c1 <code>plugins_path<\/code> \u0644\u0627\u0626\u0646 \u0627\u0636\u0627\u0641\u06cc \u067e\u0644\u06af \u0627\u0646 \u06a9\u06d2 \u0627\u0639\u0644\u0627\u0646\u0627\u062a \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: <code>Pluginfile<\/code> \u0627\u06af\u0631 \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0688\u06be\u0627\u0646\u0686\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 <code>Gemfile<\/code> \u067e\u0644\u06af \u0627\u0646 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06a9\u0648 \u0627\u0644\u06af \u0633\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u06c1 \u0648\u06c1\u06cc \u0627\u0635\u0648\u0644 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0645\u06cc\u0634\u06c1 \u0628\u0646\u0688\u0644\u0631(<code>bundle exec fastlane<\/code>) \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 <code>fastlane<\/code> \u0628\u0646\u0688\u0644\u0631 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u0639\u06cc\u0646 \u0645\u0637\u0627\u0628\u0642 \u0645\u0646\u06cc \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a <code>Gemfile.lock<\/code> \u0627\u0633\u06d2 \u0645\u0634\u06cc\u0646\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-gradle-properties-file\">\u06af\u0631\u06cc\u0688\u0644 \u067e\u0631\u0627\u067e\u0631\u0679\u06cc\u0632 \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-properties\"># android\/gradle.properties\n\norg.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError\n<\/code><\/pre>\n<p><code>org.gradle.jvmargs<\/code>    \u06af\u0631\u06cc\u0688\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u0648\u0627 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646 \u06a9\u06d2 \u062f\u0644\u0627\u0626\u0644 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4 <code>-Xmx4G<\/code> \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06cc\u067e \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0648 4GB \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>-XX:MaxMetaspaceSize=1G<\/code> \u0645\u06cc\u0679\u0627 \u0627\u0633\u067e\u06cc\u0633 (\u06a9\u0644\u0627\u0633 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627) \u06a9\u0648 1 \u062c\u06cc \u0628\u06cc \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba\u06d4 <code>-XX:ReservedCodeCacheSize=512m<\/code> \u0645\u0631\u062a\u0628 \u0634\u062f\u06c1 \u06a9\u0648\u0688 \u06a9\u06cc\u0634\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 512 MB \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 <code>-XX:+HeapDumpOnOutOfMemoryError<\/code> \u062c\u0628 JVM \u06a9\u06cc \u0645\u06cc\u0645\u0648\u0631\u06cc \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u067e\u0648\u0633\u0679 \u0645\u0627\u0631\u0679\u0645 \u0688\u06cc\u0628\u06af\u0646\u06af \u0645\u06cc\u06ba \u0645\u062f\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc\u067e \u0688\u0645\u067e \u0641\u0627\u0626\u0644 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0631\u0646\u0631 \u06af\u0631\u06cc\u0688\u0644 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u06cc\u06af\u0632\u0679 \u06a9\u0648\u0688 137 \u06cc\u0627 143 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06a9\u062b\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 JVM \u0645\u06cc\u0645\u0648\u0631\u06cc \u0633\u06cc\u0679\u0646\u06af \u0645\u0639\u06cc\u0627\u0631\u06cc GitHub \u06a9\u06d2 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0631\u0646\u0631 \u06a9\u06cc 7GB RAM \u06a9\u06cc \u062d\u062f \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-android-appfile\">\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u06cc\u067e \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># android\/fastlane\/Appfile\n\njson_key_file(ENV[\"FIREBASE_SERVICE_ACCOUNT_JSON_PATH\"])\npackage_name(\"com.yourcompany.app\")\n<\/code><\/pre>\n<p><code>json_key_file(...)<\/code>    Fastlane \u06a9\u0648 \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 Google \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 JSON \u0641\u0627\u0626\u0644 \u06a9\u06c1\u0627\u06ba \u062a\u0644\u0627\u0634 \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u062c\u0648 Google Play \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0633\u06d2 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>FIREBASE_SERVICE_ACCOUNT_JSON_PATH<\/code> \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>package_name(...)<\/code> \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0628\u062f\u06cc\u0644\u06cc <code>com.yourcompany.app<\/code> \u0627\u0635\u0644 \u0627\u06cc\u067e \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0633 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 <code>AndroidManifest.xml<\/code>.<\/p>\n<h3 id=\"heading-the-android-pluginfile\">\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0644\u06af \u0627\u0646 \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># android\/fastlane\/Pluginfile\n\ngem 'fastlane-plugin-firebase_app_distribution'\n<\/code><\/pre>\n<p>\u06cc\u06c1 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0644\u06af \u0627\u0646 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0642\u0631\u0627\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0646\u0635\u06cc\u0628 \u0645\u06cc\u06ba \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u067e\u0644\u06af \u0627\u0646 \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>fastlane-plugin-firebase_app_distribution<\/code> \u0632\u06cc\u0648\u0631\u0627\u062a \u06c1\u06d2\u06d4 <code>firebase_app_distribution<\/code> \u0648\u06c1 \u0639\u0645\u0644 <code>firebase<\/code> \u0644\u06cc\u0646\u0632 \u06a9\u0648 \u0628\u0644\u0688\u0633 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 <code>firebase<\/code> \u062c\u0628 \u0644\u06cc\u0646 \u0627\u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 &quot;\u063a\u06cc\u0631 \u0645\u062a\u0639\u06cc\u0646\u06c1 \u0637\u0631\u06cc\u0642\u06c1&#8221; \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>firebase_app_distribution<\/code>.<\/p>\n<h3 id=\"heading-the-android-fastfile\">\u0627\u06cc\u0646\u0688\u0631\u0648\u0626\u06cc\u0688 \u0641\u0627\u0633\u0679 \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># android\/fastlane\/Fastfile\n\ndefault_platform(:android)\n\nplatform :android do\n  desc \"Submit a new Beta Build to Firebase App Distribution\"\n  lane :firebase do\n    notes = ENV[\"RELEASE_NOTES\"]\n    if notes.nil? || notes.strip.empty?\n      file_path = File.join(Dir.pwd, \"..\", \"release_notes.txt\")\n      if File.exist?(file_path) && !File.read(file_path).strip.empty?\n        notes = File.read(file_path)\n      else\n        notes = \"New build uploaded by CI\"\n      end\n    end\n\n    firebase_app_distribution(\n      app: ENV[\"FIREBASE_APP_ID_ANDROID\"],\n      apk_path: \"..\/build\/app\/outputs\/flutter-apk\/app-release.apk\",\n      groups: \"testers\",\n      release_notes: notes,\n      service_credentials_file: ENV[\"FIREBASE_SERVICE_ACCOUNT_JSON_PATH\"]\n    )\n  end\n\n  desc \"Deploy to Google Play Store\"\n  lane :prod do\n    upload_to_play_store(\n      track: 'production',\n      aab: '..\/build\/app\/outputs\/bundle\/release\/app-release.aab',\n      json_key: 'play-store-service-account.json',\n      skip_upload_metadata: true,\n      skip_upload_images: true,\n      skip_upload_screenshots: true\n    )\n  end\nend\n<\/code><\/pre>\n<p><code>default_platform(:android)<\/code>    \u0627\u06cc\u06a9 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0633\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 Fastlane \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648 \u06a9\u06c1 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 Android \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>lane :firebase do<\/code> \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06cc \u0627\u06cc\u06a9 \u0646\u0627\u0645\u0632\u062f \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>firebase<\/code>.<\/p>\n<p>\u06a9\u06c1 <code>notes<\/code> \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u062a\u0631\u062c\u06cc\u062d \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u06cc\u0646 \u0630\u0631\u0627\u0626\u0639 \u0633\u06d2 \u0631\u06cc\u0644\u06cc\u0632 \u0646\u0648\u0679 \u0644\u06cc\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>RELEASE_NOTES<\/code> \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a (GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0648\u0679 \u062f\u0631\u062c \u06a9\u0631\u06a9\u06d2 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2) <code>release_notes.txt<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0688\u06cc\u0641\u0627\u0644\u0679 \u0645\u062a\u0628\u0627\u062f\u0644 \u0633\u0679\u0631\u0646\u06af \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>firebase_app_distribution(...)<\/code> \u06cc\u06c1 \u067e\u0644\u06af \u0627\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0627\u06cc\u06a9 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><code>app: ENV[\"FIREBASE_APP_ID_ANDROID\"]<\/code>    \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0633\u06d2 \u0627\u067e \u0644\u0648\u0688 \u0627\u0648\u0631 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0631\u06cc\u06ba\u06d4 <code>apk_path<\/code> \u0627\u0633 \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0641\u0644\u0679\u0631 \u0645\u0631\u062a\u0628 \u0634\u062f\u06c1 APK \u06a9\u0648 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>groups: \"testers\"<\/code> \u0627\u067e\u0646\u06cc Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u0627\u06cc\u06a9 \u0646\u0627\u0645\u0632\u062f \u06af\u0631\u0648\u067e \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0635\u0644 \u06af\u0631\u0648\u067e \u06a9\u06d2 \u0646\u0627\u0645 \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u06ba\u06d4 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>prod<\/code> \u0644\u06cc\u0646 <code>upload_to_play_store(...)<\/code> \u0628\u0644\u0679 \u0627\u0646 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0627\u06cc\u06a9\u0634\u0646\u06d4 <code>track: 'production'<\/code> \u0627\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0679\u0631\u06cc\u06a9 \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>skip_upload_metadata: true<\/code>\u060c <code>skip_upload_images: true<\/code>\u0627\u0648\u0631 <code>skip_upload_screenshots: true<\/code> Fastlane \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-setting-up-fastlane-for-ios\">iOS \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 iOS \u0633\u06cc\u0679 \u0627\u067e \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>ios\/<\/code> \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc\u0632 \u06a9\u0648 \u0627\u0646 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-ios-gemfile\">iOS Gemfile<\/h3>\n<pre><code class=\"language-ruby\"># ios\/Gemfile\n\nsource \"https:\/\/rubygems.org\"\ngem \"fastlane\"\n\nplugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')\neval_gemfile(plugins_path) if File.exist?(plugins_path)\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u062c\u06cc\u0645 \u0641\u0627\u0626\u0644 \u062c\u06cc\u0633\u0627 \u06c1\u06d2\u06d4 iOS \u0627\u0648\u0631 Android \u0627\u0644\u06af \u0627\u0644\u06af \u0628\u0646\u0688\u0644\u0631 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc\u0632 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062c\u06cc\u0645 \u0648\u0631\u0698\u0646 \u06cc\u0627 \u067e\u0644\u06af \u0627\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u067e\u0691 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 <code>bundle install<\/code> \u0627\u0646\u062f\u0631 <code>ios\/<\/code> \u062c\u0648\u0627\u06c1\u0631\u0627\u062a \u06a9\u0648 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0646\u0635\u0628 \u06c1\u06d2\u06d4 <code>android\/<\/code>.<\/p>\n<h3 id=\"heading-the-ios-appfile\">iOS \u0627\u06cc\u067e \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># ios\/fastlane\/Appfile\n\napp_identifier(\"com.yourcompany.app\")\n<\/code><\/pre>\n<p><code>app_identifier(...)<\/code>    iOS \u0628\u0646\u0688\u0644 \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 Xcode \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u0628\u0646\u0688\u0644 \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u0633\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 (\u0631\u0646\u0631 \u0679\u0627\u0631\u06af\u0679 \u06a9\u06d2 \u062c\u0646\u0631\u0644 \u0679\u06cc\u0628 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)\u06d4 \u062a\u0628\u062f\u06cc\u0644\u06cc <code>com.yourcompany.app<\/code> \u0627\u0635\u0644 \u0628\u0646\u0688\u0644 ID \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c Fastlane Match \u0627\u0633 \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0648 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0648 \u0646\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-matchfile\">\u0645\u06cc\u0686 \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># ios\/fastlane\/Matchfile\n\ngit_url(ENV[\"MATCH_GIT_URL\"] || \"https:\/\/github.com\/YOUR_GITHUB_USERNAME\/your-certificates-repo\")\nstorage_mode(\"git\")\ntype(\"appstore\")\n<\/code><\/pre>\n<p><code>git_url(...)<\/code>    \u06cc\u06c1 \u0645\u06cc\u0686 \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0630\u0627\u062a\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06c1\u0627\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06d2\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06cc\u06ba: <code>MATCH_GIT_URL<\/code> \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 URL \u0645\u06cc\u06ba \u0633\u0631\u0627\u06cc\u062a \u0634\u062f\u06c1 \u0630\u0627\u062a\u06cc \u0631\u0633\u0627\u0626\u06cc \u0679\u0648\u06a9\u0646 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0645\u06cc\u0686 \u06a9\u0648 \u0622\u067e \u06a9\u06d2 \u0630\u0627\u062a\u06cc \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>|| \"https:\/\/github.com\/...\"<\/code> \u0641\u0627\u0644 \u0628\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u06cc\u0686 \u0686\u0644\u0627\u062a\u06d2 \u0648\u0642\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06c1\u0627\u06ba \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0646\u0679\u0631\u0627\u06cc\u06a9\u0679\u0648 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>storage_mode(\"git\")<\/code> \u0645\u06cc\u0686 \u06a9\u0648 \u06c1\u062f\u0627\u06cc\u062a \u062f\u06cc\u06ba \u06a9\u06c1 \u0648\u06c1 S3 \u06cc\u0627 Google Cloud Storage \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 Git \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0633\u0679\u0648\u0631\u06cc\u062c \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06d2\u06d4 <code>type(\"appstore\")<\/code> \u0627\u06cc\u06a9 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u0642\u0633\u0645 \u0633\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062d\u0627\u0644\u0627\u0646\u06a9\u06c1 \u06c1\u0631 \u0644\u06cc\u0646 \u0627\u0633\u06d2 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u06cc\u0688 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-ios-pluginfile\">iOS \u067e\u0644\u06af \u0627\u0646 \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># ios\/fastlane\/Pluginfile\n\ngem 'fastlane-plugin-firebase_app_distribution'\n<\/code><\/pre>\n<p>iOS \u06a9\u0648 \u0628\u06be\u06cc \u0627\u0633\u06cc Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0644\u06af \u0627\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 <code>firebase<\/code> \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u067e\u0631 \u0639\u0627\u0631\u0636\u06cc IPA \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06cc\u06c1 \u0644\u06cc\u0646 \u06c1\u06d2\u06d4 iOS \u0627\u0648\u0631 Android \u067e\u0644\u06af \u0627\u0646 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0627\u0644\u06af \u0627\u0644\u06af \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u0633 \u0627\u0639\u0644\u0627\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-ios-fastfile\">iOS \u0641\u0627\u0633\u0679 \u0641\u0627\u0626\u0644<\/h3>\n<pre><code class=\"language-ruby\"># ios\/fastlane\/Fastfile\n\ndefault_platform(:ios)\n\nbefore_all do\n  setup_ci\nend\n\nplatform :ios do\n  desc \"Push a new beta build to TestFlight\"\n  lane :beta do\n    api_key = app_store_connect_api_key(\n      key_id: ENV[\"APP_STORE_CONNECT_API_KEY_KEY_ID\"],\n      issuer_id: ENV[\"APP_STORE_CONNECT_API_KEY_ISSUER_ID\"],\n      key_filepath: ENV[\"APP_STORE_CONNECT_API_KEY_KEY_FILEPATH\"],\n      in_house: false\n    )\n\n    match(\n      type: \"appstore\",\n      readonly: false,\n      app_identifier: \"com.YOUR-APP.app\",\n      api_key: api_key\n    )\n\n    update_code_signing_settings(\n      path: \"Runner.xcodeproj\",\n      use_automatic_signing: false,\n      team_id: \"GL369K3W98\",\n      code_sign_identity: \"Apple Distribution\",\n      profile_name: \"match AppStore com.YOUR-APP.app\",\n      targets: [\"Runner\"]\n    )\n\n    build_app(\n      workspace: \"Runner.xcworkspace\",\n      scheme: \"Runner\",\n      export_method: \"app-store\"\n    )\n\n    notes = ENV[\"RELEASE_NOTES\"]\n    if notes.nil? || notes.strip.empty?\n      file_path = File.join(Dir.pwd, \"..\", \"release_notes.txt\")\n      if File.exist?(file_path) && !File.read(file_path).strip.empty?\n        notes = File.read(file_path)\n      else\n        notes = \"New build uploaded by CI\"\n      end\n    end\n\n    upload_to_testflight(\n      skip_waiting_for_build_processing: true,\n      changelog: notes\n    )\n  end\n\n  desc \"Deploy to Apple App Store\"\n  lane :prod do\n    api_key = app_store_connect_api_key(\n      key_id: ENV[\"APP_STORE_CONNECT_API_KEY_KEY_ID\"],\n      issuer_id: ENV[\"APP_STORE_CONNECT_API_KEY_ISSUER_ID\"],\n      key_filepath: ENV[\"APP_STORE_CONNECT_API_KEY_KEY_FILEPATH\"],\n      in_house: false\n    )\n\n    match(\n      type: \"appstore\",\n      readonly: false,\n      app_identifier: \"com.YOUR-APP.app\",\n      api_key: api_key\n    )\n\n    update_code_signing_settings(\n      path: \"Runner.xcodeproj\",\n      use_automatic_signing: false,\n      team_id: \"GL369K3W98\",\n      code_sign_identity: \"Apple Distribution\",\n      profile_name: \"match AppStore com.YOUR-APP.app\",\n      targets: [\"Runner\"]\n    )\n\n    build_app(\n      workspace: \"Runner.xcworkspace\",\n      scheme: \"Runner\",\n      export_method: \"app-store\"\n    )\n\n    upload_to_app_store(\n      force: true, # Skip HTML report\n      submit_for_review: false, # Uploads to App Store Connect without auto-submitting for review\n      automatic_release: false\n    )\n  end\n\n  desc \"Push a new beta build to Firebase App Distribution\"\n  lane :firebase do\n    api_key = app_store_connect_api_key(\n      key_id: ENV[\"APP_STORE_CONNECT_API_KEY_KEY_ID\"],\n      issuer_id: ENV[\"APP_STORE_CONNECT_API_KEY_ISSUER_ID\"],\n      key_filepath: ENV[\"APP_STORE_CONNECT_API_KEY_KEY_FILEPATH\"],\n      in_house: false\n    )\n\n    match(\n      type: \"adhoc\",\n      readonly: false,\n      app_identifier: \"com.YOUR-APP.app\",\n      api_key: api_key\n    )\n\n    update_code_signing_settings(\n      path: \"Runner.xcodeproj\",\n      use_automatic_signing: false,\n      team_id: \"GL369K3W98\",\n      code_sign_identity: \"Apple Distribution\",\n      profile_name: \"match AdHoc com.YOUR-APP.app\",\n      targets: [\"Runner\"]\n    )\n\n    build_app(\n      workspace: \"Runner.xcworkspace\",\n      scheme: \"Runner\",\n      export_method: \"ad-hoc\"\n    )\n\n    notes = ENV[\"RELEASE_NOTES\"]\n    if notes.nil? || notes.strip.empty?\n      file_path = File.join(Dir.pwd, \"..\", \"release_notes.txt\")\n      if File.exist?(file_path) && !File.read(file_path).strip.empty?\n        notes = File.read(file_path)\n      else\n        notes = \"New build uploaded by CI\"\n      end\n    end\n\n    firebase_app_distribution(\n      app: ENV[\"FIREBASE_APP_ID_IOS\"],\n      groups: \"testers\",\n      release_notes: notes,\n      service_credentials_file: ENV[\"FIREBASE_SERVICE_ACCOUNT_JSON_PATH\"]\n    )\n  end\nend\n<\/code><\/pre>\n<p><code>before_all do setup_ci end<\/code>    \u06cc\u06c1 \u062a\u0645\u0627\u0645 \u06af\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>setup_ci<\/code> CI \u06a9\u06cc \u06a9\u06be\u067e\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0644\u0679 \u0627\u0646 \u0641\u0627\u0633\u0679\u0644\u06cc\u0646 \u0679\u0627\u0633\u06a9\u06d4 \u0627\u06cc\u06a9 \u0639\u0627\u0631\u0636\u06cc \u06a9\u06cc\u0686\u06cc\u0646 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u06cc\u06ba (\u0645\u06cc\u06a9 \u0627\u0648 \u0627\u06cc\u0633 \u06a9\u0648 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u0627 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u0648\u0626\u06d2)\u060c \u06a9\u0648\u0688 \u0633\u0627\u0626\u0646 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0627\u067e \u0627\u067e \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 CI \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u062f\u06cc\u06af\u0631 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u062a\u0646\u0635\u06cc\u0628 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u06d2 \u0688\u0627\u0626\u06cc\u0644\u0627\u06af \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06d2 \u06af\u06cc \u062c\u0648 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>app_store_connect_api_key(...)<\/code>    \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 API \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 API \u06a9\u0644\u06cc\u062f\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0628\u0639\u062f \u06a9\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>key_id<\/code>\u060c <code>issuer_id<\/code>\u0627\u0648\u0631 <code>key_filepath<\/code> \u06cc\u06c1 \u0633\u0628 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0633\u06d2 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>in_house: false<\/code> \u0627\u0633 \u0633\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0688\u0648\u06cc\u0644\u067e\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06c1\u06d2 (\u0645\u062e\u062a\u0644\u0641 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u067e\u0644 \u0627\u0646\u0679\u0631\u067e\u0631\u0627\u0626\u0632 \u067e\u0631\u0648\u06af\u0631\u0627\u0645 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0646\u06c1\u06cc\u06ba)\u06d4<\/p>\n<p><code>match(type: \"appstore\", ...)<\/code>    \u0627\u067e\u0646\u06d2 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u0633\u06d2 \u062c\u0691\u06cc\u06ba\u060c AppStore \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0648\u0631 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u067e\u0646\u06d2 macOS \u06a9\u06cc\u0686\u06cc\u0646 \u0645\u06cc\u06ba \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><code>readonly: false<\/code>    \u0645\u06cc\u0686 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba \u0627\u06af\u0631 \u0627\u0633 \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062c\u0628 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u06a9\u0633\u06cc \u0646\u0626\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u0686 \u0627\u06cc\u06a9 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0645\u062e\u0632\u0646 \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc \u0631\u0646\u0632 \u0635\u0631\u0641 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0648 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>firebase<\/code> \u0644\u06cc\u0646 <code>type: \"adhoc\"<\/code> \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 App Store \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0639\u0627\u0631\u0636\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><code>update_code_signing_settings(...)<\/code>    \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u062f\u06c1 \u0645\u06cc\u0686 \u0633\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0648\u0631 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06cc Xcode \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><code>use_automatic_signing: false<\/code>    \u0627\u06c1\u0645: \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0633\u062a\u062e\u0637 \u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u06a9\u0648 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u0627 \u062e\u0648\u062f \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0628\u063a\u06cc\u0631 \u0633\u0631 \u06a9\u06d2 CI \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>team_id: \"YOUR_TEAM_ID\"<\/code> \u06cc\u06c1 Apple Developer Team ID \u06c1\u06d2 \u062c\u0648 Apple Developer Portal \u06a9\u06d2 \u0645\u0645\u0628\u0631\u0634\u067e \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 <code>profile_name: \"match AppStore com.yourcompany.app\"<\/code> \u06cc\u06c1 \u0627\u0633 \u0646\u0627\u0645 \u06a9\u06d2 \u06a9\u0646\u0648\u0646\u0634\u0646 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 Match \u0622\u067e \u06a9\u0627 \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>build_app(workspace: \"Runner.xcworkspace\", scheme: \"Runner\", export_method: \"app-store\")<\/code>    \u06a9\u0627\u0644 <code>xcodebuild<\/code> \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0622\u0631\u06a9\u0627\u0626\u06cc\u0648 \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>Runner.xcworkspace<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06c1\u06d2 \u062c\u0648 \u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 CocoaPods \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>export_method: \"app-store\"<\/code> Xcode \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062d\u062a\u0645\u06cc IPA \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0646 \u0633\u06d2 \u0628\u0631\u0622\u0645\u062f\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4 Firebase \u0644\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1 \u06c1\u0648\u06af\u0627: <code>\"ad-hoc\"<\/code>.<\/p>\n<p><code>upload_to_testflight(skip_waiting_for_build_processing: true)<\/code>    \u0627\u067e\u0646\u0627 IPA App Store Connect \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 <code>skip_waiting_for_build_processing: true<\/code> \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0648 \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u0627\u06cc\u067e\u0644 \u06a9\u06d2 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0639\u0645\u0644 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u06c1 \u06a9\u0631\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba 15 \u0633\u06d2 30 \u0645\u0646\u0679 \u0644\u06af \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u067e \u0644\u0648\u0688 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u067e\u0644 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 TestFlight \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p><code>upload_to_app_store(force: true, submit_for_review: false, automatic_release: false)<\/code>    \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 App Store Connect \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 <code>force: true<\/code> \u0633\u06cc \u0622\u0626\u06cc \u0641\u0627\u0633\u0679\u0644\u06cc\u0646 \u06a9\u06cc \u0627\u06cc\u0686 \u0679\u06cc \u0627\u06cc\u0645 \u0627\u06cc\u0644 \u0633\u0645\u0631\u06cc \u0631\u067e\u0648\u0631\u0679 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0645\u0641\u06cc\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>submit_for_review: false<\/code> \u0627\u06cc\u067e \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0644\u0688\u0632 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06c1\u0645 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u0646 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06d2 \u06a9\u0631 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062c\u0645\u0639 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4 <code>automatic_release: false<\/code> \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u0648 \u0631\u0648\u06a9\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-writing-the-github-actions-workflows\">\u0627\u06cc\u06a9 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h2>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0627\u06cc\u06a9 YAML \u0641\u0627\u0626\u0644 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u0648\u0627\u0642\u0639 \u06c1\u06d2: <code>.github\/workflows\/<\/code> \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06cc \u062c\u0691 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0631 \u0641\u0627\u0626\u0644 \u0627\u06cc\u06a9 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0646\u0627\u0645\u060c \u0627\u0633 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a\u060c \u0627\u0648\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u0645\u062a\u0639\u06cc\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-android-workflow\">\u0627\u06cc\u0646\u0688\u0631\u0648\u0626\u06cc\u0688 \u0648\u0631\u06a9 \u0641\u0644\u0648<\/h3>\n<pre><code class=\"language-yaml\"># .github\/workflows\/android_distribution.yml\n\nname: Android Firebase App Distribution\non:\n  push:\n    branches:\n      - dev\n      - prod\n  workflow_dispatch:\n    inputs:\n      release_notes:\n        description: 'Release Notes'\n        required: false\n        default: 'Manual trigger from GitHub Actions'\n\njobs:\n  distribute_android:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\/checkout@v4\n\n      - uses: actions\/setup-java@v3\n        with:\n          distribution: 'zulu'\n          java-version: '17'\n\n      - uses: subosito\/flutter-action@v2\n        with:\n          channel: 'stable'\n          cache: true\n\n      - run: flutter pub get\n\n      - uses: ruby\/setup-ruby@v1\n        with:\n          ruby-version: '3.2'\n          bundler-cache: true\n          working-directory: android\n\n      - name: Decode Keystore\n        env:\n          ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}\n        run: |\n          echo $ANDROID_KEYSTORE_BASE64 | base64 --decode > android\/app\/upload-keystore.jks\n          echo \"storeFile=upload-keystore.jks\" > android\/key.properties\n          echo \"storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}\" >> android\/key.properties\n          echo \"keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}\" >> android\/key.properties\n          echo \"keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}\" >> android\/key.properties\n\n      - name: Create .env file\n        env:\n          ENV_FILE_BASE64: ${{ secrets.ENV_FILE_BASE64 }}\n        run: echo $ENV_FILE_BASE64 | base64 --decode > .env\n\n      - name: Build Android Release\n        run: |\n          if [ \"${{ github.ref_name }}\" == \"prod\" ]; then\n            flutter build appbundle --release\n          else\n            flutter build apk --release\n          fi\n\n      - name: Create Firebase Service Account JSON\n        if: ${{ github.ref_name == 'dev' }}\n        env:\n          FIREBASE_SERVICE_ACCOUNT_JSON: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }}\n        run: echo $FIREBASE_SERVICE_ACCOUNT_JSON > android\/firebase-service-account.json\n\n      - name: Distribute to Firebase App Distribution (Dev)\n        if: ${{ github.ref_name == 'dev' }}\n        env:\n          FIREBASE_APP_ID_ANDROID: ${{ secrets.FIREBASE_APP_ID_ANDROID }}\n          FIREBASE_SERVICE_ACCOUNT_JSON_PATH: \"firebase-service-account.json\"\n          RELEASE_NOTES: ${{ github.event.inputs.release_notes }}\n        run: bundle exec fastlane firebase\n        working-directory: android\n\n      - name: Distribute to Google Play Store (Prod)\n        if: ${{ github.ref_name == 'prod' }}\n        env:\n          GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}\n        run: |\n          echo $GOOGLE_PLAY_JSON > play-store-service-account.json\n          bundle exec fastlane prod\n        working-directory: android\n<\/code><\/pre>\n<p><code>name: Android Firebase App Distribution<\/code>    \u06cc\u06c1 \u0648\u06c1 \u0688\u0633\u067e\u0644\u06d2 \u0646\u0627\u0645 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0679\u06cc\u0628 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>on: push: branches: [dev, prod]<\/code>    \u0645\u062d\u0631\u06a9\u0627\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0633\u06cc \u06a9\u0645\u0679 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>dev<\/code> \u06cc\u0627 <code>prod<\/code> \u062f\u0631\u062e\u062a \u06a9\u06cc \u0634\u0627\u062e\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06cc \u0634\u0627\u062e \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u06d2 \u06af\u0627\u060c \u0628\u0634\u0645\u0648\u0644: <code>main<\/code> \u0627\u0648\u0631 <code>develop<\/code>\u06cc\u06c1 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0628\u0631\u0627\u0646\u0686 \u06c1\u06d2 \u062c\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u06d2 \u06af\u06cc\u06d4<\/p>\n<p><code>workflow_dispatch: inputs: release_notes<\/code>    \u062f\u0633\u062a\u06cc \u0679\u0631\u06af\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0679\u06cc\u0628 \u0645\u06cc\u06ba\u060c \u0622\u067e &quot;\u0631\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648&#8221; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u0646\u0648\u0679 \u062f\u0631\u062c \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u06cc\u06c1 \u062c\u0627\u0646\u0686 \u0627\u0648\u0631 \u0639\u0627\u0631\u0636\u06cc \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u06d4<\/p>\n<p><code>runs-on: ubuntu-latest<\/code>    \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0648\u0628\u0646\u0679\u0648 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0628\u0644\u0688 \u0679\u0648\u0644 \u0686\u06cc\u0646 \u0644\u06cc\u0646\u06a9\u0633 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0648\u0628\u0646\u0679\u0648 \u0644\u0627\u0646\u0686\u0631 \u0645\u06cc\u06a9 \u0627\u0648 \u0627\u06cc\u0633 \u0644\u0627\u0646\u0686\u0631 \u0633\u06d2 \u0633\u0633\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>actions\/checkout@v4<\/code>    \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u0648 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06cc \u0648\u0631\u06a9\u0646\u06af \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u0645\u06cc\u06ba \u06a9\u0644\u0648\u0646 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u062f\u0648\u0633\u0631\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p><code>actions\/setup-java@v3<\/code>    \u0632\u0648\u0644\u0648 \u0688\u0633\u0679\u0631\u06cc \u0628\u06cc\u0648\u0634\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062c\u0627\u0648\u0627 17 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644\u060c \u0641\u0644\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06af\u0631\u06cc\u0688 8 \u06a9\u06cc \u0645\u0637\u0627\u0628\u0642\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 Java 17 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0635\u062d\u06cc\u062d \u062c\u0627\u0648\u0627 \u0648\u0631\u0698\u0646 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u0627 \u062a\u0648\u060c \u06af\u0631\u06cc\u0688\u0644 \u0641\u0648\u0631\u0627\u064b \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p><code>subosito\/flutter-action@v2<\/code>    \u0641\u0644\u0679\u0631 SDK \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>channel: 'stable'<\/code> \u0627\u06cc\u06a9 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0631\u06cc\u0644\u06cc\u0632 \u0686\u06cc\u0646\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0632\u0648\u06ba \u06c1\u0648\u06d4 <code>cache: true<\/code> \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0631\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 Cache Flutter SDK \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0646\u0645\u0627\u06cc\u0627\u06ba \u06a9\u0645\u06cc \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><code>ruby\/setup-ruby@v1<\/code>    \u0631\u0648\u0628\u06cc 3.2 \u0627\u0646\u0633\u0679\u0627\u0644 \u0627\u0648\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>bundle install<\/code> \u067e\u0631 <code>android\/<\/code> \u062f\u0631\u062c \u0630\u06cc\u0644 \u0635\u0648\u0631\u062a\u0648\u06ba \u0645\u06cc\u06ba \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u062e\u0648\u062f \u0628\u062e\u0648\u062f: <code>bundler-cache: true<\/code> \u06cc\u06c1 \u0645\u0642\u0631\u0631 \u06c1\u06d2. \u06a9\u06c1 <code>bundler-cache<\/code> \u06cc\u06c1 \u0622\u067e\u0634\u0646 \u0631\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0646\u0635\u0628 \u062c\u0648\u0627\u06c1\u0631\u0627\u062a \u06a9\u0648 \u0628\u06be\u06cc \u06a9\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u0641\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0631\u0646 2-3 \u0645\u0646\u0679 \u06a9\u06cc \u0628\u0686\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <strong>\u06a9\u06cc\u0633\u0679\u0648\u0631 \u0688\u06cc \u06a9\u0648\u0688<\/strong> \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u0633\u06cc\u0679\u0646\u06af\u0632 \u06a9\u0627 \u0645\u0631\u06a9\u0632 \u06c1\u06cc\u06ba\u06d4 <code>echo $ANDROID_KEYSTORE_BASE64 | base64 --decode > android\/app\/upload-keystore.jks<\/code> Base64 \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u0648 \u0627\u0644\u0679\u0627 \u06a9\u0631 \u06a9\u06d2 \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4 <code>.jks<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062a\u0648\u0642\u0639 \u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0641\u0627\u0644\u0648 \u0627\u067e <code>echo<\/code> \u06a9\u0645\u0627\u0646\u0688 \u0644\u06a9\u06be\u0646\u0627 <code>key.properties<\/code> \u06cc\u06c1 \u0648\u06c1 \u0641\u0627\u0626\u0644 \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06af\u0631\u06cc\u0688\u0644 \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631\u0632 \u0627\u0648\u0631 \u067e\u0627\u0633 \u0648\u0631\u0688\u0632 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0633\u06d2 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0622\u067e \u06a9\u06d2 \u0631\u0627\u0632\u0648\u06ba \u0633\u06d2 \u0646\u0626\u06d2 \u0633\u0631\u06d2 \u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06cc\u06c1 \u0645\u0633\u062a\u0642\u0644 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06c1\u06cc\u06ba \u0628\u06be\u06cc \u0645\u062d\u0641\u0648\u0638 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><code>if [ \"${{ github.ref_name }}\" == \"prod\" ]<\/code>    bash \u0645\u0634\u0631\u0648\u0637. <code>github.ref_name<\/code> \u0627\u0633 \u0634\u0627\u062e \u06a9\u0627 \u0646\u0627\u0645 \u062c\u0633 \u0646\u06d2 \u062f\u06be\u06a9\u0627 \u0644\u06af\u0627\u06cc\u0627\u06d4 \u0628\u0631\u0627\u0646\u0686 \u06a9\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba <code>prod<\/code>\u0648\u0631\u06a9 \u0641\u0644\u0648\u0632 \u0627\u06cc\u067e \u0628\u0646\u0688\u0644\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba (<code>.aab<\/code>\u067e\u0644\u06d2 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2)\u06d4 \u0648\u0631\u0646\u06c1 ( <code>dev<\/code>)\u060c APK(<code>.apk<\/code>Firebase \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0622\u0633\u0627\u0646\u060c \u062a\u06cc\u0632 \u0627\u0648\u0631 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u06c1\u06d2)\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u0627\u0633 \u0627\u06cc\u06a9 \u0634\u0631\u0637 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0634\u0627\u062e\u0648\u06ba \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><code>if: ${{ github.ref_name == 'dev' }}<\/code>    \u0645\u0631\u062d\u0644\u06c1 \u06a9\u06cc \u0633\u0637\u062d \u0645\u0634\u0631\u0648\u0637\u06d4 \u0627\u0633 \u0634\u0631\u0637 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0686\u0644\u06cc\u06ba \u06af\u06d2 \u062c\u0628 \u0679\u0631\u06af\u0631 \u0628\u0631\u0627\u0646\u0686 \u06c1\u0648: <code>dev<\/code>. Firebase \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 <code>prod<\/code> \u062f\u06be\u06a9\u06cc\u0644\u0646\u0627 \u067e\u0644\u06d2 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>dev<\/code> \u062f\u06be\u06a9\u0627\u06d4<\/p>\n<h3 id=\"heading-the-ios-workflow\">iOS \u0648\u0631\u06a9 \u0641\u0644\u0648<\/h3>\n<pre><code class=\"language-yaml\"># .github\/workflows\/ios_distribution.yml\n\nname: iOS TestFlight and Firebase Distribution\non:\n  push:\n    branches:\n      - dev\n      - prod\n  workflow_dispatch:\n    inputs:\n      release_notes:\n        description: 'Release Notes'\n        required: false\n        default: 'Manual trigger from GitHub Actions'\n\njobs:\n  distribute_ios:\n    runs-on: macos-latest\n    steps:\n      - uses: actions\/checkout@v4\n\n      - uses: actions\/setup-java@v3\n        with:\n          distribution: 'zulu'\n          java-version: '17'\n\n      - uses: subosito\/flutter-action@v2\n        with:\n          channel: 'stable'\n          cache: true\n\n      - run: flutter pub get\n\n      - name: Create .env file\n        env:\n          ENV_FILE_BASE64: ${{ secrets.ENV_FILE_BASE64 }}\n        run: echo $ENV_FILE_BASE64 | base64 --decode > .env\n\n      - name: Build Flutter iOS (No Codesign)\n        run: flutter build ios --release --no-codesign\n\n      - uses: ruby\/setup-ruby@v1\n        with:\n          ruby-version: '3.2'\n          bundler-cache: true\n          working-directory: ios\n\n      - name: Configure Fastlane Match\n        env:\n          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}\n          MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}\n        run: |\n          echo \"MATCH_PASSWORD=${MATCH_PASSWORD}\" >> $GITHUB_ENV\n          AUTH=$(echo \"$MATCH_GIT_BASIC_AUTHORIZATION\" | base64 --decode)\n          echo \"MATCH_GIT_URL=https:\/\/$AUTH@github.com\/YOUR_GITHUB_USERNAME\/your-certificates-repo\" >> $GITHUB_ENV\n\n      - name: Create Auth Key for App Store Connect\n        env:\n          APPSTORE_API_PRIVATE_KEY_BASE64: ${{ secrets.APPSTORE_API_PRIVATE_KEY_BASE64 }}\n          APPSTORE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}\n        run: |\n          mkdir -p ~\/.appstoreconnect\/private_keys\/\n          echo $APPSTORE_API_PRIVATE_KEY_BASE64 | base64 --decode > ~\/.appstoreconnect\/private_keys\/AuthKey_${APPSTORE_API_KEY_ID}.p8\n\n      - name: Create Firebase Service Account JSON\n        if: ${{ github.ref_name == 'dev' }}\n        env:\n          FIREBASE_SERVICE_ACCOUNT_JSON: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }}\n        run: echo $FIREBASE_SERVICE_ACCOUNT_JSON > ios\/firebase-service-account.json\n\n      - name: Distribute to Firebase App Distribution (Dev)\n        if: ${{ github.ref_name == 'dev' }}\n        env:\n          FIREBASE_APP_ID_IOS: ${{ secrets.FIREBASE_APP_ID_IOS }}\n          FIREBASE_SERVICE_ACCOUNT_JSON_PATH: \"firebase-service-account.json\"\n          RELEASE_NOTES: ${{ github.event.inputs.release_notes }}\n          APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APPSTORE_ISSUER_ID }}\n          APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}\n          APP_STORE_CONNECT_API_KEY_KEY_FILEPATH: ~\/.appstoreconnect\/private_keys\/AuthKey_${{ secrets.APPSTORE_API_KEY_ID }}.p8\n        run: bundle exec fastlane firebase\n        working-directory: ios\n\n      - name: Distribute to TestFlight (Dev)\n        if: ${{ github.ref_name == 'dev' }}\n        env:\n          APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APPSTORE_ISSUER_ID }}\n          APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}\n          APP_STORE_CONNECT_API_KEY_KEY_FILEPATH: ~\/.appstoreconnect\/private_keys\/AuthKey_${{ secrets.APPSTORE_API_KEY_ID }}.p8\n        run: bundle exec fastlane beta\n        working-directory: ios\n\n      - name: Distribute to Apple App Store (Prod)\n        if: ${{ github.ref_name == 'prod' }}\n        env:\n          APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APPSTORE_ISSUER_ID }}\n          APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}\n          APP_STORE_CONNECT_API_KEY_KEY_FILEPATH: ~\/.appstoreconnect\/private_keys\/AuthKey_${{ secrets.APPSTORE_API_KEY_ID }}.p8\n        run: bundle exec fastlane prod\n        working-directory: ios\n<\/code><\/pre>\n<p><code>runs-on: macos-latest<\/code>    iOS \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u067e\u0631 \u06cc\u06c1 \u063a\u06cc\u0631 \u06af\u0641\u062a \u0648 \u0634\u0646\u06cc\u062f \u06c1\u06d2\u06d4 Xcode \u0635\u0631\u0641 macOS \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>xcodebuild<\/code> (\u062c\u0633\u06d2 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2) \u0635\u0631\u0641 \u0648\u06c1\u0627\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u06d4 \u0645\u06cc\u06a9\u0648\u0633 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0627\u0648\u0628\u0646\u0679\u0648 \u0644\u0627\u0646\u0686\u0631 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u0641\u06cc \u0645\u0646\u0679 10 \u06af\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631 \u0627\u0648\u0628\u0646\u0679\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4 iOS \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0645\u062a\u0628\u0627\u062f\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><code>flutter build ios --release --no-codesign<\/code>    \u0641\u0644\u0679\u0631 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc iOS \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0648\u0688 \u06a9\u0648 \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u0628\u0644\u0688\u0632 \u0645\u06cc\u06ba \u0645\u0631\u062a\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>--no-codesign<\/code> \u062c\u06be\u0646\u0688\u06d2 \u06cc\u06c1\u0627\u06ba \u0627\u06c1\u0645 \u06c1\u06cc\u06ba\u06d4 \u0641\u0644\u0679\u0631 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u0648 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u06cc \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062f\u0633\u062a\u062e\u0637\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u0646\u0633\u0679\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0645\u06cc\u0686 \u062f\u0631\u0633\u062a \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u0627\u0648\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u0644\u06cc\u0646 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <strong>\u0641\u0627\u0633\u0679\u0644\u06cc\u0646 \u0645\u06cc\u0686\u0646\u06af \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646<\/strong> \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u06c1\u0645 \u06a9\u0627\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>AUTH=$(echo \"$MATCH_GIT_BASIC_AUTHORIZATION\" | base64 --decode)<\/code> \u0688\u06cc \u06a9\u0648\u0688 \u0628\u06cc\u0633 64\u06d4 <code>username:token<\/code> \u0633\u0627\u062f\u06c1 \u0645\u062a\u0646 \u067e\u0631 \u0633\u0679\u0631\u0646\u06af \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>echo \"MATCH_GIT_URL=https:\/\/$AUTH@github.com\/...\" >> $GITHUB_ENV<\/code> \u0679\u0648\u06a9\u0646 \u0633\u0645\u06cc\u062a \u0645\u06a9\u0645\u0644 \u062a\u0635\u062f\u06cc\u0642\u06cc URL \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4 <code>$GITHUB_ENV<\/code> \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u062c\u0633\u06d2 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0648 \u0628\u0639\u062f \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u062a\u06a9 \u067e\u06be\u06cc\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 URL \u0641\u0627\u0631\u0645\u06cc\u0679 <code>https:\/\/username:token@github.com\/...<\/code> HTTP \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0648\u062b\u06cc\u0642\u060c \u0641\u0627\u0631\u0645\u06cc\u0679 Git \u063a\u06cc\u0631 \u0627\u0646\u0679\u0631\u0627\u06cc\u06a9\u0679\u0648 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <strong>\u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u06a9\u0644\u06cc\u062f \u0628\u0646\u0627\u0626\u06cc\u06ba<\/strong> \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06c1\u06cc\u06ba\u06d4 <code>.p8<\/code> \u06cc\u06c1 \u0641\u0627\u0626\u0644 Base64 \u0627\u0646\u06a9\u0648\u0688 \u0634\u062f\u06c1 \u06c1\u06d2\u06d4 <code>mkdir -p ~\/.appstoreconnect\/private_keys\/<\/code> \u0627\u06cc\u06a9 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0641\u0627\u0633\u0679\u0644\u06cc\u0646 \u06a9\u0644\u06cc\u062f \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06a9\u0631\u06d2\u06d4 <code>echo $APPSTORE_API_PRIVATE_KEY_BASE64 | base64 --decode > ~\/.appstoreconnect\/private_keys\/AuthKey_${APPSTORE_API_KEY_ID}.p8<\/code> \u0688\u06cc \u06a9\u0648\u0688 \u0634\u062f\u06c1 \u06a9\u0644\u06cc\u062f \u06a9\u0648 \u062f\u0631\u0633\u062a \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u067e\u06cc\u0679\u0631\u0646 \u067e\u0631 \u0644\u06a9\u06be\u06cc\u06ba\u06d4 <code>app_store_connect_api_key<\/code> \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0688\u06be\u0648\u0646\u0688 \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>iOS \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u062a\u0648\u0627\u0632\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062f\u0648 \u0645\u0631\u0627\u062d\u0644 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2: <code>dev<\/code> \u0627\u0646\u0688\u06d2 \u06a9\u0627 \u067e\u0648\u062f\u0627: <code>firebase<\/code> \u0644\u06cc\u0646 (\u0627\u06cc\u06a9 \u0639\u0627\u0631\u0636\u06cc IPA \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2)\u060c \u0627\u0648\u0631 <code>beta<\/code> \u0644\u06cc\u0646 (\u0627\u06cc\u06a9 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 IPA \u0628\u0646\u0627\u06cc\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 TestFlight \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u06cc\u0627)\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0634\u06cc\u0626\u0631 \u0633\u06cc\u0679 \u0627\u067e \u0645\u0631\u062d\u0644\u06c1 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u0631\u062a\u06cc\u0628 \u0648\u0627\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0627\u06cc\u06a9 \u062f\u06be\u06a9\u0627\u06d4 <code>dev<\/code> \u062f\u0648\u0646\u0648\u06ba \u062a\u0642\u0633\u06cc\u0645\u06cc \u0686\u06cc\u0646\u0644\u0632 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-screenshots\">\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679:<\/h3>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0648\u0631 \u0622\u0626\u06cc \u0627\u0648 \u0627\u06cc\u0633 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0686\u0644\u0627\u0646\u0627:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_772_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0648\u0631 \u0622\u0626\u06cc \u0627\u0648 \u0627\u06cc\u0633 \u0648\u0631\u06a9 \u0641\u0644\u0648\u0632 \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_961_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0627\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u06a9\u0645\u0644 iOS \u0648\u0631\u06a9 \u0641\u0644\u0648:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_359_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0645\u06a9\u0645\u0644 iOS \u0648\u0631\u06a9 \u0641\u0644\u0648\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0648\u0631 \u0622\u0626\u06cc \u0627\u0648 \u0627\u06cc\u0633 \u0645\u06a9\u0645\u0644 \u0634\u062f\u06c1 \u0648\u0631\u06a9 \u0641\u0644\u0648:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_959_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0648\u0631 \u0622\u0626\u06cc \u0627\u0648 \u0627\u06cc\u0633 \u0645\u06a9\u0645\u0644 \u0648\u0631\u06a9 \u0641\u0644\u0648\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc &#8211; \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508234_502_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0627\u06cc\u06a9 Firebase \u0627\u06cc\u067e \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u0627 - Android\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc &#8211; iOS:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508235_720_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc - iOS\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>TestFlight iOS \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508235_349_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"TestFlight iOS Build\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-how-a-full-deployment-runs-end-to-end\">\u06a9\u0633 \u0637\u0631\u062d \u067e\u0648\u0631\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0622\u062e\u0631 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 \u0686\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/h2>\n<p>\u062a\u0645\u0627\u0645 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u0634 \u0633\u06d2 \u067e\u0634 \u062a\u06a9 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06cc \u0645\u06a9\u0645\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062d\u0633\u0628 \u0630\u06cc\u0644 \u06c1\u06d2: <code>dev<\/code>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/08\/1786508235_133_Firebase-\u0627\u06cc\u067e-\u06a9\u06cc-\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u060c-Google-Play\u060c-TestFlight\u060c-\u0627\u0648\u0631-App-Store.png\" alt=\"\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u0688\u06cc\u0648\u0644\u067e\u0631\u0632 \u06a9\u06cc \u062c\u0627\u0646\u0628 \u0633\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u062f\u06cc\u0648 \u0628\u0631\u0627\u0646\u0686 \u0645\u06cc\u06ba \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0639\u0645\u0644 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062f\u0648 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2: Ubuntu \u0644\u0627\u0646\u0686\u0631 \u0633\u06d2 \u0627\u06cc\u06a9 Android \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0627\u0648\u0631 MacOS \u0644\u0627\u0646\u0686\u0631 \u0633\u06d2 iOS \u0648\u0631\u06a9 \u0641\u0644\u0648\u06d4 Android \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c Java \u0627\u0648\u0631 Flutter \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c Android \u06a9\u06cc \u0627\u0633\u0679\u0648\u0631 \u0627\u0648\u0631 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0648 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c APK \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Fastlane \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba APK \u06a9\u0648 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 iOS \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c Java \u0627\u0648\u0631 Flutter \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0648 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0648\u0688 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 iOS \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0632 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c Fastlane Match \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0633\u062a\u062e\u0637\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c App Store API \u06a9\u06cc\u0632 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Ad-Hoc \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 AppLight \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0633\u0679 \u0627\u06cc\u0641 \u0644\u0627\u0626\u0679 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0627\u06cc\u0646\u0688\u0631\u0648\u0626\u06cc\u0688 \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u0648 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc \u0627\u06cc \u0645\u06cc\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0631 iOS \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f TestFlight \u0627\u06cc \u0645\u06cc\u0644 \u062f\u0639\u0648\u062a \u0646\u0627\u0645\u06c1 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0631\u0646\u0631\u0632 \u0645\u062a\u0648\u0627\u0632\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644 \u0648\u0627\u0644 \u06a9\u0644\u0627\u06a9 \u06a9\u0627 \u0648\u0642\u062a \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06cc\u06a9\u0633\u0627\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2 (\u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 Xcode \u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0627\u0648\u0642\u0627\u062a \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 iOS)\u06d4<\/p>\n<p>\u06a9\u06d2 \u0644\u06cc\u06d2 <code>prod<\/code> \u067e\u0634 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0627 \u062d\u062a\u0645\u06cc \u0645\u0631\u062d\u0644\u06c1 Google Play Store (Android) \u0627\u0648\u0631 App Store Connect (iOS) \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-best-practices\">\u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u0632 \u0639\u0645\u0644<\/h2>\n<h3 id=\"heading-keep-your-certificates-repository-private-and-access-controlled\">\u0627\u067e\u0646\u06d2 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648 \u0646\u062c\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba iOS \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u0648\u0627\u062f \u06a9\u0648 \u0645\u0645\u0627\u062b\u0644 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u06a9\u0631\u067e\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0627\u0646\u06a9\u0631\u067e\u0679\u0688 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u06c1\u06cc \u0633\u0644\u0648\u06a9 \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0622\u067e \u06a9\u0633\u06cc \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u0639\u0644\u0627\u062c \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0630\u0627\u062a\u06cc \u0631\u0633\u0627\u0626\u06cc \u0648\u0627\u0644\u06d2 \u0679\u0648\u06a9\u0646\u0632 \u06a9\u0648 \u0645\u0646\u0633\u0648\u062e \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u06a9\u06cc \u0645\u0632\u06cc\u062f \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u0627 \u0645\u06cc\u0686 \u067e\u0627\u0633 \u0648\u0631\u0688 \u06a9\u06c1\u06cc\u06ba \u0628\u06be\u06cc \u0633\u0627\u062f\u06c1 \u0645\u062a\u0646 \u0645\u06cc\u06ba \u0634\u06cc\u0626\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-set-a-minimum-build-number-strategy\">\u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u062a\u0639\u062f\u0627\u062f \u06a9\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u0637\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u062e\u0648\u062f\u06a9\u0627\u0631 CI \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u06cc \u0627\u067e \u0644\u0648\u0688 \u0627\u06cc\u06a9 \u0645\u0646\u0641\u0631\u062f \u0646\u0645\u0628\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u06a9\u0646\u06cc\u06a9\u0679 \u0627\u0648\u0631 \u06af\u0648\u06af\u0644 \u067e\u0644\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 \u0628\u0644\u0688 \u0646\u0645\u0628\u0631\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e \u0644\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u0631\u0698\u0646 \u0633\u0627\u0632\u06cc \u06a9\u06cc \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba \u062c\u0633 \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc \u0645\u062f\u0627\u062e\u0644\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1 \u06c1\u0648\u06d4 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 <code>GITHUB_RUN_NUMBER<\/code>\u0627\u06cc\u06a9 \u0639\u062f\u062f \u0639\u062f\u062f \u06c1\u06d2 \u062c\u0648 \u06c1\u0631 \u0628\u0627\u0631 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u067e\u0631 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-yaml\">- name: Set Build Number\n  run: |\n    BUILD_NUMBER=${{ github.run_number }}\n    # For Flutter, update the build number in pubspec.yaml\n    sed -i '' \"s\/version: .*\/version: 1.0.0+${BUILD_NUMBER}\/\" pubspec.yaml\n<\/code><\/pre>\n<p><code>github.run_number<\/code>    GitHub \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0627\u06cc\u06a9 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631 \u062c\u0648 1 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u067e\u06c1\u0644\u0627 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06d2 \u06c1\u0631 \u0631\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 1 \u06a9\u0627 \u0627\u0636\u0627\u0641\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06c1\u0631 \u0631\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0646\u0641\u0631\u062f\u060c \u06cc\u06a9\u0633\u0631 \u0628\u0691\u06be\u062a\u06cc \u06c1\u0648\u0626\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>sed<\/code> \u06a9\u0645\u0627\u0646\u0688 \u0648\u0631\u0698\u0646 \u0644\u0627\u0626\u0646 \u06a9\u06cc \u062c\u06af\u06c1 \u0644\u06d2 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>pubspec.yaml<\/code> \u0631\u0646 \u0646\u0645\u0628\u0631 \u06a9\u0648 \u0628\u0644\u0688 \u0646\u0645\u0628\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-add-branch-protection-rules\">\u0628\u0631\u0627\u0646\u0686 \u06a9\u06d2 \u062a\u062d\u0641\u0638 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u067e\u0646\u06cc \u0634\u0627\u062e\u0648\u06ba \u06a9\u0648 \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u06be\u06a9\u06cc\u0644\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0679\u0648\u0645\u06cc\u0634\u0646 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0645\u06cc\u06ba\u060c \u062c\u0627\u0626\u06cc\u06ba: <strong>\u062c\u06af\u06c1<\/strong> \u062a\u062d\u0641\u0638 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba: <code>main<\/code>\u060c <code>develop<\/code>\u060c <code>dev<\/code>\u0627\u0648\u0631 <code>prod<\/code>.<\/p>\n<p>\u06a9\u06d2 \u0644\u06cc\u06d2 <code>prod<\/code> \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u0646\u0636\u0645\u0627\u0645 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u06cc\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0644 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0633\u06d2 \u0622\u06af \u0644\u06af\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0627\u0646\u0633\u0627\u0646\u06cc \u06af\u06cc\u0679 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-monitor-your-workflow-run-times-and-costs\">\u0648\u0631\u06a9 \u0641\u0644\u0648 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0648\u0642\u062a \u0627\u0648\u0631 \u0644\u0627\u06af\u062a \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 GitHub \u0627\u06cc\u06a9\u0634\u0646 \u0686\u0627\u0631\u062c\u0632\u06d4 \u0645\u06cc\u06a9\u0648\u0633 \u0679\u0627\u0626\u0645 \u0644\u06cc\u0646\u06a9\u0633 \u0679\u0627\u0626\u0645 \u0633\u06d2 10 \u06af\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u06c1\u0646\u06af\u0627 \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06cc GitHub \u062a\u0646\u0638\u06cc\u0645 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <strong>\u062a\u0631\u062a\u06cc\u0628<\/strong>\u067e\u06be\u0631 <strong>\u062f\u0639\u0648\u06cc<\/strong> \u0627\u067e\u0646\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06cc\u0634\u0646\u06af( <code>cache: true<\/code> \u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u0627 \u0627\u0648\u0631 <code>bundler-cache: true<\/code> \u0631\u0648\u0628\u06cc) \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u0627\u0627\u062b\u0631 \u0627\u0635\u0644\u0627\u062d \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc \u0631\u0646 \u062c\u0648 \u067e\u06c1\u0644\u06cc \u0631\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc\u0634\u06d2 \u06a9\u0648 \u0679\u06a9\u0631\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u0648\u06c1 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u06af\u06cc \u0627\u0648\u0631 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0646\u06a9\u0627\u0644 \u062f\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-store-release-notes-in-a-file-not-just-as-input\">\u0627\u0646 \u067e\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u06c1 <code>release_notes.txt<\/code> \u0641\u0627\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0641\u0627\u0644 \u0628\u06cc\u06a9 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u067e\u0644 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u062d\u0635\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u0646\u0648\u0679\u0633 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0648\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0646\u0648\u0679\u0633 \u062e\u0648\u062f \u0628\u062e\u0648\u062f Firebase \u0627\u0648\u0631 TestFlight \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06ba \u06af\u06d2\u06d4 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06c1\u0631 \u0631\u06cc\u0644\u06cc\u0632 \u0628\u0631\u0627\u0646\u0686 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0633\u0631\u06af\u0632\u0634\u062a \u0645\u06cc\u06ba \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06d2 \u0646\u0648\u0679\u0633 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u06a9\u06be\u06d2 \u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-common-mistakes\">\u0639\u0627\u0645 \u063a\u0644\u0637\u06cc\u0627\u06ba<\/h2>\n<h3 id=\"heading-using-the-xcode-project-instead-of-the-workspace-in-fastlane\">\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646 \u06a9\u06d2 \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/h3>\n<p>\u0641\u0644\u0679\u0631 iOS \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0645\u06cc\u06ba \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 (<code>Runner.xcworkspace<\/code>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0641\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba (<code>Runner.xcodeproj<\/code>) \u06a9\u06cc\u0648\u0646\u06a9\u06c1 CocoaPods \u0627\u0646\u062d\u0635\u0627\u0631 \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u06cc \u0633\u0637\u062d \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4 \u06af\u0632\u0631\u0646\u0627 <code>Runner.xcodeproj<\/code> \u06a9\u0648 <code>build_app<\/code> \u06cc\u06c1 \u0644\u0627\u067e\u062a\u06c1 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>workspace: \"Runner.xcworkspace\"<\/code>.<\/p>\n<h3 id=\"heading-not-setting-setupci-for-ios\">\u0633\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>setup_ci<\/code> iOS \u06a9\u06d2 \u0644\u06cc\u06d2<\/h3>\n<p>\u0628\u06be\u0648\u0644 <code>setup_ci<\/code> \u067e\u0631 <code>before_all<\/code> \u0627\u0633\u06d2 \u0645\u0633\u062f\u0648\u062f \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0639\u06cc\u0646\u06c1 \u0645\u062f\u062a \u062a\u06a9 \u0631\u0648\u06a9 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0628 \u06a9\u06c1 macOS \u06a9\u06cc\u0686\u06cc\u0646 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627\u06d4 \u06cc\u06c1 \u0679\u0627\u0626\u0645 \u0622\u0624\u0679 \u06a9\u06cc \u0637\u0631\u062d \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645\u06cc\u0634\u06c1 \u0634\u0627\u0645\u0644 <code>before_all do setup_ci end<\/code> CI \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0645\u0627\u0645 iOS \u0641\u0627\u0633\u0679 \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-running-match-in-readonly-mode-for-a-new-project\">\u0646\u0626\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0645\u0648\u0688 \u0645\u06cc\u06ba \u0645\u06cc\u0686\u0632 \u0686\u0644\u0627\u0646\u0627<\/h3>\n<p>\u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0645\u06cc\u0686 \u0622\u067e \u06a9\u06d2 \u0646\u0626\u06d2 \u0627\u06cc\u067e \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0627\u0648\u0631 \u067e\u0631\u0648\u0648\u06cc\u0698\u0646\u0646\u06af \u067e\u0631\u0648\u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u06af\u0631 <code>readonly: true<\/code> \u0627\u06af\u0631 \u0633\u06cc\u0679 \u06c1\u0648 \u062a\u0648 \u0645\u06cc\u0686 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627 \u0633\u06a9\u06d2 \u06af\u0627 \u0627\u0648\u0631 &quot;\u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u0627&#8221; \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>readonly: false<\/code>. \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba\u060c \u06a9\u0686\u06be \u0679\u06cc\u0645\u06cc\u06ba <code>readonly: true<\/code> \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u0628\u0639\u062f \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06a9\u06cc \u062a\u062e\u0644\u06cc\u0642 \u0646\u0648 \u06a9\u0648 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>false<\/code> \u06cc\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-forgetting-to-increment-the-build-number\">\u0645\u06cc\u06ba \u0628\u0644\u0688 \u0646\u0645\u0628\u0631 \u0628\u0691\u06be\u0627\u0646\u0627 \u0628\u06be\u0648\u0644 \u06af\u06cc\u0627\u06d4<\/h3>\n<p>\u0627\u06cc\u067e\u0644 \u0627\u0648\u0631 \u06af\u0648\u06af\u0644 \u062f\u0648\u0646\u0648\u06ba \u06c1\u06cc \u0627\u0646 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u0627 \u0648\u0631\u0698\u0646 \u0646\u0645\u0628\u0631 \u067e\u06c1\u0644\u06d2 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062f\u06c1 \u0628\u0644\u0688 \u062c\u06cc\u0633\u0627 \u06c1\u06cc \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648 \u0628\u0627\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba <code>dev<\/code> \u0627\u06af\u0631 \u0622\u067e \u0628\u0644\u0688 \u0646\u0645\u0628\u0631 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u062f\u0648\u0633\u0631\u0627 \u0627\u067e \u0644\u0648\u0688 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06a9\u06c1 <code>GITHUB_RUN_NUMBER<\/code> \u0622\u067e \u06c1\u0645\u0627\u0631\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0645\u06cc\u06ba \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u062d\u06a9\u0645\u062a \u0639\u0645\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u0633 \u0633\u06d2 \u0628\u0686 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-encoding-files-with-a-trailing-newline\">\u0679\u0631\u06cc\u0644\u0646\u06af \u0644\u0627\u0626\u0646 \u0628\u0631\u06cc\u06a9\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>echo \"content\" | base64<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 <code>echo -n \"content\" | base64<\/code> \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u0679\u0631\u0646\u06af \u0645\u06cc\u06ba \u0679\u0631\u06cc\u0644\u0646\u06af \u0646\u06cc\u0648 \u0644\u0627\u0626\u0646 \u06a9\u0631\u06cc\u06a9\u0679\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 CI \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u067e\u0686\u06be\u0644\u06cc \u0646\u0626\u06cc \u0644\u0627\u0626\u0646\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06ba\u06d4 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>username:token<\/code> \u0627\u06cc\u06a9 \u062a\u0627\u0631 \u0688\u0627\u0644\u06cc\u06ba <code>MATCH_GIT_BASIC_AUTHORIZATION<\/code>\u0627\u06cc\u06a9 \u067e\u0686\u06be\u0644\u06cc \u0646\u0626\u06cc \u0644\u0627\u0626\u0646 \u0622\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u062e\u0631\u0627\u0628 \u06a9\u0631 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u06a9\u06c1 \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06cc \u0637\u0631\u062d \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>echo -n<\/code> \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062a\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0627\u0646\u06a9\u0648\u0688\u0646\u06af \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u06d4<\/p>\n<h3 id=\"heading-using-the-wrong-distribution-type-for-firebase\">Firebase \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06cc \u063a\u0644\u0637 \u0642\u0633\u0645 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/h3>\n<p>iOS \u06a9\u06d2 \u0644\u06cc\u06d2 Firebase \u0627\u06cc\u067e \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <strong>\u0639\u0627\u0631\u0636\u06cc<\/strong> \u06cc\u06c1 \u0627\u06cc\u06a9 App Store \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u06c1\u06d2\u060c \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0627 \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u0646\u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u0627\u06cc\u0688\u06c1\u0627\u06a9 \u0628\u0644\u0688\u0632 \u06a9\u0648 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u067e \u0627\u0633\u0679\u0648\u0631 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0688\u06cc\u0648\u0627\u0626\u0633 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0648\u06c1 App Store \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637 \u0634\u062f\u06c1 IPAs \u06a9\u0648 Firebase \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>firebase<\/code> iOS \u0641\u0627\u0633\u0679 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0644\u06cc\u0646 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba: <code>type: \"adhoc\"<\/code> \u0627\u0648\u0631 <code>export_method: \"ad-hoc\"<\/code> \u0627\u0633 \u0648\u062c\u06c1 \u0633\u06d2\u06d4 \u06a9\u06c1 <code>beta<\/code> \u0644\u06cc\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 <code>type: \"appstore\"<\/code> \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 TestFlight \u06a9\u0648 App Store \u0633\u0631\u0679\u06cc\u0641\u06a9\u06cc\u0679 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-granting-insufficient-permissions-to-the-google-play-service-account\">\u0627\u067e\u0646\u06d2 Google Play \u0633\u0631\u0648\u0633\u0632 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0641\u06cc \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u062f\u06cc\u06ba\u06d4<\/h3>\n<p>\u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 Play Store \u0627\u067e \u0644\u0648\u0688 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc API \u0645\u06cc\u06ba \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be Play Console \u0627\u06cc\u067e \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u06ba \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u0627 \u0635\u0631\u0641 \u0622\u062f\u06be\u0627 \u0633\u06cc\u0679 \u0627\u067e \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 API \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Play Console \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0628\u06be\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u06af\u0631 \u0622\u067e Play Console \u0645\u0631\u062d\u0644\u06c1 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06cc\u06c1 \u06c1\u06cc\u06ba: <code>403 Forbidden<\/code> \u0641\u0627\u0633\u0679\u0644\u06cc\u0646 \u0627\u067e \u0644\u0648\u0688 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u062e\u0631\u0627\u0628\u06cc\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u062c\u0648 \u06c1\u0645 \u0646\u06d2 \u06cc\u06c1\u0627\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2 \u0648\u06c1 \u0627\u06cc\u06a9 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06c1\u06d2 \u062c\u0648 \u06a9\u0645\u067e\u0627\u0624\u0646\u0688 \u0631\u06cc\u0679\u0631\u0646 \u0627\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u062f\u06be\u06a9\u0627 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>dev<\/code> GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632 \u0679\u06cc\u0628 \u0645\u06cc\u06ba \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0645\u062f\u0627\u062e\u0644\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 Android \u0627\u0648\u0631 iOS \u062f\u0648\u0646\u0648\u06ba \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06cc \u0642\u062f\u0631 \u0641\u0648\u0631\u06cc \u0627\u0648\u0631 \u0628\u0635\u0631\u06cc \u06c1\u06d2\u06d4 \u0646\u0645\u0628\u0631 4\u060c \u0646\u0645\u0628\u0631 10\u060c \u0646\u0645\u0628\u0631 50: \u0642\u062f\u0631 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0645\u0631\u06a9\u0628 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0679\u0648\u0644\u0632 (GitHub \u0627\u06cc\u06a9\u0634\u0646\u0632\u060c \u0641\u0627\u0633\u0679 \u0644\u06cc\u0646\u060c \u0645\u06cc\u0686) \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0648 \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0644\u0686\u06a9\u062f\u0627\u0631 \u06c1\u06cc\u06ba\u06d4 \u0679\u06cc\u0645 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062c\u0627\u0646\u0686\u060c \u0645\u06a9\u0645\u0644 \u06cc\u0627 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0633\u0644\u06cc\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c Git \u0679\u06cc\u06af\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0648\u0631\u0698\u0646 \u0646\u0645\u0628\u0631 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645\u060c \u0627\u0648\u0631 \u0645\u062a\u0639\u062f\u062f \u06c1\u062f\u0641 \u0648\u0627\u0644\u06d2 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>dev<\/code> \u0627\u0648\u0631 <code>prod<\/code>. \u06cc\u06c1\u0627\u06ba \u06a9\u06cc \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0627\u0646 \u062a\u0645\u0627\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u0628\u0691\u06be \u06a9\u0631 \u0627\u06cc\u06a9 \u067e\u0631\u06cc\u06a9\u0679\u0633 \u062c\u0633 \u067e\u0631 \u0632\u0648\u0631 \u062f\u06cc\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u06cc CI \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u06a9\u06cc \u0637\u0631\u062d \u06c1\u06cc \u062f\u06cc\u06a9\u06be \u0628\u06be\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u0644 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4 \u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u063a\u06cc\u0631 \u0648\u0627\u0636\u062d \u06c1\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u0631\u0627\u0632 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0627\u0626\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u062e\u0641\u06cc\u06c1 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0627\u0646 \u06a9\u0627 \u062a\u0639\u0644\u0642 \u06c1\u06d2\u06d4 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0632 \u0627\u0646\u06c1\u06cc \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u06cc \u0628\u0646\u0627 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2: \u063a\u06cc\u0631 \u062c\u0627\u0626\u0632\u06c1 \u0634\u062f\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba\u060c \u06af\u0645\u0634\u062f\u06c1 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642\u060c \u0627\u0648\u0631 \u063a\u06cc\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u0645\u0641\u0631\u0648\u0636\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u0648 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0627\u0648\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0679\u06cc\u0633\u0679\u0631\u0632 \u06a9\u06d2 \u06c1\u0627\u062a\u06be \u0645\u06cc\u06ba \u06a9\u0648\u0688 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0639\u0645\u0644 \u0627\u0628 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u0634\u06a9\u0627\u0631 \u062f\u0633\u062a\u06cc \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0648\u0688 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0636\u0645\u0646\u06cc \u0627\u062b\u0631 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u0633\u0627 \u06c1\u06cc \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h2 id=\"heading-references\">\u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a<\/h2>\n<h3 id=\"heading-github-actions\"><strong>\u06af\u0679 \u06c1\u0628 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632<\/strong><\/h3>\n<h3 id=\"heading-fastlane\"><strong>\u0641\u0627\u0633\u0679 \u0644\u06cc\u0646<\/strong><\/h3>\n<h3 id=\"heading-apple\"><strong>\u0645\u0639\u0627\u0641\u06cc \u0645\u0627\u0646\u06af\u0648<\/strong><\/h3>\n<h3 id=\"heading-google\"><strong>\u06af\u0648\u06af\u0644<\/strong><\/h3>\n<h3 id=\"heading-flutter\"><strong>\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u0627<\/strong><\/h3>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u06cc\u06c1 \u062c\u0645\u0639\u06c1 \u06a9\u0648 \u0634\u0627\u0645 4 \u0628\u062c\u06d2 \u06c1\u06d2 \u0627\u0648\u0631 \u0679\u06cc\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0633\u067e\u0631\u0646\u0679 \u06a9\u06cc \u0622\u062e\u0631\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u0636\u0645 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u067e\u0631\u0648\u0688\u06a9\u0679 \u0645\u06cc\u0646\u06cc\u062c\u0631 \u062f\u0646 \u06a9\u06d2 \u0622\u062e\u0631 \u062a\u06a9 TestFlight \u0633\u06d2 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06c1\u0641\u062a\u06d2 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06d2 \u0633\u06a9\u06d2\u06d4 \u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u0622\u0631\u06a9\u0627\u0626\u06cc\u0648 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":27545,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-27544","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=27544"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27544\/revisions"}],"predecessor-version":[{"id":27546,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27544\/revisions\/27546"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/27545"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=27544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=27544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=27544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}