مدتی قبل مطلبی با عنوان خروجی گرفتن ipa از طریق codemagic.io مخصوص پروژه react-native منتشر کردم و در اون نحوه خروجی گرفتن ipa رو از پروژه ری اکت نیتیو برای دستگاهها و مارکت های iOS به صورت خلاصه توضیح دادم.
مشکلی که اخیرا با اون مواجه شدم خروجی گرفتن apk از پروژه ری اکت نیتیو به صورت معمول و با استفاده از مک بوک خودم بود.
ماجرا از اونجا شروع شد که برای خروجی گرفتن apk با استفاده از دستور ./gradlew assembleRelease خطاهایی مشابه خطای زیر رو دریافت میکردم :
> Could not resolve all files for configuration ':@react-native-firebase_messaging:lintClassPath'.
> Could not find lint-gradle-27.2.2.jar (com.android.tools.lint:lint-gradle:27.2.2).
Searched in the following locations:
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/27.2.2/lint-gradle-27.2.2.jar
حدس اولیه من مشکلات معمول برقراری ارتباط ما ایرانی ها با سرورهای گوگل بود. در همین راستا اقدامات لازم رو برای تغییر آی پی انجام دادم و از امکان دانلود شدن لینک های مورد اشاره در مرورگر خودم اطمینان حاصل کردم ولی با کمال تعجب همچنان خطای اشاره شده در ترمینال تکرار می شد و راهی برای دور زدن خطا پیدا نکردم.
برای اطمینان از اینکه خطا صرفا ناشی از مشکلات شبکه هست به این فکر افتادم که خروجی apk را از طریق سرورهای codemagic.io دریافت کنم که در ادامه توضیح خواهم داد.
برای انجام این کار ابتدا لازم هست پروژه react-native شما در یک repository مانند گیت لب ذخیره شده باشد.
قدم بعدی ثبت نام و ورود در سایت codemagic.io هست. برای سهولت انجام ثبت می توانید از طریق اکانت repository خودتون به سایت ورود کنید که این امکان به صورت پیش فرض فراهم شده است.
پس از ورود به وب اپلیکیشن codemagic می توانید گزینه add application را انتخاب کرده و مراحل اتصال به repository و انتخاب پروژه ری اکت نیتیو مورد نظر را دنبال کنید.
بعد از انجام این مرحله پروژه هایی که به codemagic اضافه کردید رو میتونید ملاحظه کنید
فقط چند قدم با گرفتن خروجی apk فاصله داریم. کافیه در ردیف پروژه مد نظر گزینه start new build رو انتخاب کنید
حالا با یک دیالوگی مواجه میشید که شاخه های پروژه شما در repository مربوط و امکان انتخاب workflow مورد نظر به نمایش در میاد.
ممکن هست در این مرحله workflow مشخصی برای شما قابل انتخاب نباشه که طبیعی هست. چون شما فایل مربوط رو در ریشه پروژه تون اضافه نکردید.
ممکنه سوال براتون پیش بیاد که workflow به چه معناست؟ workflow کارهایی هست که سرورهای codemagic باید برای رسیدن به خروجی مورد نظر به ترتیب انجام بدهند و در قابل یک فایل با پسوند .yaml باید به codemagic معرفی بشن.
برای صرفه جویی در وقت شما محتویات فایل codemagic.yaml که خودم برای این منظور استفاده کردم رو برای شما به اشتراک میگذارم :
workflows:
build-apk-workflow:
scripts:
- name: Install npm dependencies
script: npm install
- name: Build Android APK
working_directory: android
script: ./gradlew assembleRelease
artifacts:
- android/app/build/outputs/**/**/*.apk
شما باید محتویات بالا را در یک فایل جدید بنام codemagic.yaml به صورتی که در تصویر زیر می بینید ذخیره کرده و در ریشه پروژه تون اضافه کرده و به repository پوش کنید.
حالا میتونید به دیالوگ قبلی بازگردید و workflow مورد نظرتون رو انتخاب کرده (در صورت نیاز گزینه رفرش کردن workflow ها را انتخاب کنید) و گزینه start new build رو کلیک کنید.
سرورهای codemagic به صورت خودکار مراحل لازم رو انجام داده و بعد از چند دقیقه خروجی پروژه رو به صورت فایل قابل دانلود به شما نمایش میدن:
نکته: ممکن هست در اولین تلاش با این خطا مواجه بشید :
* What went wrong:
Execution failed for task ':app:validateSigningRelease'.
> Keystore file '/Users/builder/clone/android/app/my-upload-key.keystore' not found for signing config 'release'.
همانطوری که میشه حدس زد علت این خطا عدم دسترسی سرورهای codemagic به فایل .keystore شماست. برای رفع این مشکل میتونید با مراجعه به فایل .gitignore پروژه تون استثنا کردن ارسال فایل های keystore رو به repository به صورت زیر کامنت کنید:
# *.keystore
بعد از انجام این کار پروژه رو مجددا کامیت و پوش کنید و مراحل بالا را تکرار کنید.