<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohsen Dehghani</title>
        <link>https://virgool.io/feed/@mdbaniani</link>
        <description>وکیل سابق، برنامه نویس، عکاس، ویولونیست، دوستدار حیوانات</description>
        <language>fa</language>
        <pubDate>2026-06-21 15:52:42</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/311007/avatar/2s4fDL.png?height=120&amp;width=120</url>
            <title>Mohsen Dehghani</title>
            <link>https://virgool.io/@mdbaniani</link>
        </image>

                    <item>
                <title>خروجی گرفتن apk از طریق codemagic.io مخصوص پروژه react-native</title>
                <link>https://virgool.io/@mdbaniani/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-apk-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-codemagicio-%D9%85%D8%AE%D8%B5%D9%88%D8%B5-%D9%BE%D8%B1%D9%88%DA%98%D9%87-react-native-tmeaee03tnls</link>
                <description>مدتی قبل مطلبی با عنوان خروجی گرفتن ipa از طریق codemagic.io مخصوص پروژه react-native منتشر کردم و در اون نحوه خروجی گرفتن ipa رو از پروژه ری اکت نیتیو برای دستگاهها و مارکت های iOS به صورت خلاصه توضیح دادم.مشکلی که اخیرا با اون مواجه شدم خروجی گرفتن apk از پروژه ری اکت نیتیو به صورت معمول و با استفاده از مک بوک خودم بود. ماجرا از اونجا شروع شد که برای خروجی گرفتن apk با استفاده از دستور ./gradlew assembleRelease خطاهایی مشابه خطای زیر رو دریافت میکردم :&gt; Could not resolve all files for configuration &#x27;:@react-native-firebase_messaging:lintClassPath&#x27;.   &gt; 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 dependenciesscript: npm install- name: Build Android APKworking_directory: androidscript: ./gradlew assembleReleaseartifacts:- android/app/build/outputs/**/**/*.apkشما باید محتویات بالا را در یک فایل جدید بنام codemagic.yaml به صورتی که در تصویر زیر می بینید ذخیره کرده و در ریشه پروژه تون اضافه کرده و به repository پوش کنید.حالا میتونید به دیالوگ قبلی بازگردید و workflow مورد نظرتون رو انتخاب کرده (در صورت نیاز گزینه رفرش کردن workflow ها را انتخاب کنید) و گزینه start new build رو کلیک کنید.سرورهای codemagic به صورت خودکار مراحل لازم رو انجام داده و بعد از چند دقیقه خروجی پروژه رو به صورت فایل قابل دانلود به شما نمایش میدن:نکته: ممکن هست در اولین تلاش با این خطا مواجه بشید :* What went wrong:Execution failed for task &#x27;:app:validateSigningRelease&#x27;.&gt; Keystore file &#x27;/Users/builder/clone/android/app/my-upload-key.keystore&#x27; not found for signing config &#x27;release&#x27;.همانطوری که میشه حدس زد علت این خطا عدم دسترسی سرورهای codemagic به فایل .keystore شماست. برای رفع این مشکل میتونید با مراجعه به فایل .gitignore پروژه تون استثنا کردن ارسال فایل های keystore رو به repository به صورت زیر کامنت کنید:# *.keystoreبعد از انجام این کار پروژه رو مجددا کامیت و پوش کنید و مراحل بالا را تکرار کنید.</description>
                <category>Mohsen Dehghani</category>
                <author>Mohsen Dehghani</author>
                <pubDate>Sun, 05 Dec 2021 12:02:46 +0330</pubDate>
            </item>
                    <item>
                <title>خروجی گرفتن ipa از طریق codemagic.io مخصوص پروژه react-native</title>
                <link>https://virgool.io/@mdbaniani/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-ipa-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-codemagicio-%D9%85%D8%AE%D8%B5%D9%88%D8%B5-%D9%BE%D8%B1%D9%88%DA%98%D9%87-react-native-luyt0drp9ynb</link>
                <description>اگر شما هم مثل من از مک بوک قدیمی استفاده میکنید، ممکنه به دلیل بروز نشدن سیستم عامل و به تبع اون، برنامه xcode، برای بیلد کردن پروژه های آی او اس با فریم ورک ری اکت نیتیو یا گرفتن خروجی ipa برای ارسال به اپ استور های داخلی مثل سیب اپ دچار مشکل شده باشید. در مورد خاص من، زمانی این اتفاق افتاد که پکیج react-native-firebase رو به نسخه ۶ آپدیت کردم و از اون زمان به بعد بیلد کردن قسمت ios پروژه ری اکت نیتیو با خطایی مواجه میشد که قابل رفع نبود.با کمی جستجو در گوگل با یادداشت میلاد احمدی و codemagic آشنا شدم و سعی کردم مراحلی که توضیح داده شده رو انجام بدم. لازم به ذکر هست که بر خلاف پروژه های فلاتر، توی سایت codemagic برای تنظیم فایل yaml. برای پروژه های ری اکت نیتیو، رابط گرافیکی خاصی در نظر گرفته نشده و صرفا یک تمپلت پیش فرض پیشنهاد میشه. بعد از چند مرتبه آزمون و خطا متوجه شدم که اگر مایل باشید صرفا یک خروجی .app امضا (ساین) نشده برای آی او اس از پروژه مورد نظرتون دریافت کنید میتونید فایل yaml. رو مثل نمونه زیر تکمیل کنید، به root پروژه پوش کنید و مراحل بیلد گرفتن رو ادامه بدید:# Check out https://docs.codemagic.io/getting-started/building-a-react-native-app/ for more information
# Please review and update values in curly braces

workflows:
    react-native:
        name: React Native App
        environment:
            vars:
                XCODE_WORKSPACE: &amp;quotdadhesab&amp;quot
                XCODE_SCHEME: &amp;quotdadhesab.sibapp&amp;quot
            node: latest
        scripts:
            - npm install
            - echo &amp;quotsdk.dir=$HOME/programs/android-sdk-macosx&amp;quot &gt; &amp;quot$FCI_BUILD_DIR/android/local.properties&amp;quot
            # - |
                # build Android
                # cd android
                # ./gradlew assembleDebug
            - |
                # build iOS
                cd ios
                pod install
                xcodebuild build -workspace &amp;quot$XCODE_WORKSPACE.xcworkspace&amp;quot -scheme &amp;quot$XCODE_SCHEME&amp;quot CODE_SIGN_IDENTITY=&amp;quot&amp;quot CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO
        artifacts:
            # - android/app/build/outputs/**/*.apk
            - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app
            - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.dSYMخروجی .app قابل دانلود حجم نسبتا زیادی خواهد داشت و میتونید با استفاده از این روش اون رو تبدیل کنید به فایل ipa و برای اپ استور های داخلی ارسال کنید.تا اینجای داستان نگرانی از بابت امکان بدست اوردن خروجی ipa برطرف شد ولی سوالی که هنوز برای من وجود داشت چگونگی دریافت مستقیم خروجی با فرمت .ipa و از اون مهمتر، امکان تست کردن فایل ipa روی دیوایس قبل از ارسال و انتشار بود!همون طور که میدونید برای اجرای فایل ipa روی دیوایس مشخص اپل باید ابتدا اقدام به امضا (ساین) به وسیله سرتیفیکیت و provisioning profile مربوط به دیوایس ثبت شده خودتون کنید و برای این منظور تصمیم گرفتم از سرتیفیکیت و پروفایل developing که بصورت خودکار بوسیله xcode ایجاد شده استفاده کنم.برای بدست اوردن فایل سرتیفیکیت با پسوند .p12 از این روش و برای بدست اوردن  پروفایل با پسوند .mobileprovision از این روش استفاده کردم.بعد از چند بار آزمون و خطا و fail شدن بیلدها، با استفاده از تمپلت پایین تونستم خروجی کم حجم ipa و قابل نصب روی دستگاه تولید کنم. دقت کنید که باید مقادیر سرتیفیکیت ها و پروفایل ها تون بوسیله دستور cat &lt;path to your provisioning profile or certificate&gt; | base64 | pbcopy در ترمینال انکریپت شده باشد و در داخل تمپلیت پایین در قسمت Encrypted() کپی پیست شده باشد.workflows:
  react-native-ios:
    name: React Native iOS
    # max_build_duration: 60
    # instance_type: mac_pro
    environment:
      vars:
        XCODE_WORKSPACE: &amp;quotdadhesab.xcworkspace&amp;quot # YOUR WORKSPACE NAME HERE
        XCODE_SCHEME: &amp;quotdadhesab.sibapp&amp;quot # THE NAME OF YOUR SCHEME HERE
        FCI_CERTIFICATE: Encrypted()
        FCI_CERTIFICATE_PASSWORD: Encrypted()
        FCI_PROVISIONING_PROFILE: Encrypted()
    node: latest
    xcode: latest
    cocoapods: default
# triggering:
#   events:
#     - push
#     - tag
#     - pull_request
#   branch_patterns:
#     - pattern: develop
#       include: true
#       source: true
scripts:
  - name: Install npm dependencies
    script: npm install
  - name: Install CocoaPods dependencies
    script: |
         cd ios &amp;&amp; pod install
  - name: Set up keychain to be used for codesigning using Codemagic CLI &#039;keychain&#039;      command
    script: keychain initialize
  - name: Set up Provisioning profiles from environment variables
    script: |
        PROFILES_HOME=&amp;quot$HOME/Library/MobileDevice/Provisioning Profiles&amp;quot
        mkdir -p &amp;quot$PROFILES_HOME&amp;quot
        PROFILE_PATH=&amp;quot$(mktemp &amp;quot$PROFILES_HOME&amp;quot/$(uuidgen).mobileprovision)&amp;quot
        echo ${FCI_PROVISIONING_PROFILE} | base64 --decode &gt; &amp;quot$PROFILE_PATH&amp;quot
        echo &amp;quotSaved provisioning profile $PROFILE_PATH&amp;quot
  - name: Set up signing certificate
    script: |
         echo $FCI_CERTIFICATE | base64 --decode &gt; /tmp/certificate.p12
         keychain add-certificates --certificate /tmp/certificate.p12 --certificate-password   $FCI_CERTIFICATE_PASSWORD
#   - name: Increment build number
#     script: cd ios &amp;&amp; agvtool new-version -all $(($BUILD_NUMBER +1))
     - name: Set up code signing settings on Xcode project
       script: xcode-project use-profiles
     - name: Build ipa for distribution
       script: xcode-project build-ipa --workspace &amp;quot$FCI_BUILD_DIR/ios/$XCODE_WORKSPACE&amp;quot --scheme &amp;quot$XCODE_SCHEME&amp;quot
artifacts:
  - build/ios/ipa/*.ipa
  - /tmp/xcodebuild_logs/*.log
  - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app
  - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.dSYM
publishing:
  email:
    recipients:
    - your-email@gmail.comبرای نصب فایل .ipa روی دستگاه اپل میتونید از این روش استفاده کنید.برای آشنایی بیشتر با codemagic و طرز استفاده میتونید مطالب اشاره شده در همین صفحه و مستندات مربوطه رو مطالعه کنید و اگر سوالی داشتید بپرسید.</description>
                <category>Mohsen Dehghani</category>
                <author>Mohsen Dehghani</author>
                <pubDate>Tue, 16 Feb 2021 07:54:47 +0330</pubDate>
            </item>
            </channel>
</rss>