Fastlane cocok dengan build ad hoc dan appstore

Saya menggunakan Fastlane match dan gym untuk membuat dan mendistribusikan aplikasi saya dari CI (Bitrise) ke Fabric. Pengaturan Xcode saya disetel ke manual dengan konfigurasi Rilis menggunakan profil AdHoc seperti yang dijelaskan dalam rel Dokumen Fastlane

Sekarang saya ingin mendistribusikan ke Appstore dari CI tetapi gagal karena konfigurasi Xcode Release diatur untuk menggunakan profil AdHoc dan Cocok menginstal profil AppStore.

+---------------------------------------------------------------+-----------------------------------------------------------------------------+
|                                                           Summary for gym 2.112.0                                                           |
+---------------------------------------------------------------+-----------------------------------------------------------------------------+
| scheme                                                        | AeroNavMap                                                                  |
| export_method                                                 | app-store                                                                   |
| export_xcargs                                                 | -allowProvisioningUpdates                                                   |
| export_options.provisioningProfiles.net.tequilaapps.airnavmap | match AppStore net.tequilaapps.airnavmap                                    |
| workspace                                                     | ./PEMap.xcworkspace                                                         |
| destination                                                   | generic/platform=iOS                                                        |
| output_name                                                   | AeroNavMap                                                                  |
| build_path                                                    | /Users/vagrant/Library/Developer/Xcode/Archives/2019-01-06                  |
| clean                                                         | false                                                                       |
| output_directory                                              | .                                                                           |
| silent                                                        | false                                                                       |
| skip_package_ipa                                              | false                                                                       |
| result_bundle                                                 | false                                                                       |
| buildlog_path                                                 | /var/folders/90/5stft2v13fb_m_gv3c8x9nwc0000gn/T/fastlane_logs957341986/gym |
| skip_profile_detection                                        | false                                                                       |
| xcode_path                                                    | /Applications/Xcode.app                                                     |
+---------------------------------------------------------------+-----------------------------------------------------------------------------+
[13:47:38]: $ set -o pipefail && xcodebuild -workspace ./PEMap.xcworkspace -scheme AeroNavMap -destination 'generic/platform=iOS' -archivePath /Users/vagrant/Library/Developer/Xcode/Archives/2019-01-06/AeroNavMap\ 2019-01-06\ 13.47.38.xcarchive archive | tee /var/folders/90/5stft2v13fb_m_gv3c8x9nwc0000gn/T/fastlane_logs957341986/gym/AeroNavMap-AeroNavMap.log | xcpretty
[13:47:42]: ▸ ❌  error: No profile for team 'XXXXXXXX' matching 'match AdHoc net.tequilaapps.airnavmap' found: Xcode couldn't find any provisioning profiles matching 'G9MA9G2SST/match AdHoc net.tequilaapps.airnavmap'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor. (in target 'AeroNavMap')
[13:47:42]: ▸ ** ARCHIVE FAILED *

Ini semua masuk akal tetapi pertanyaannya adalah bagaimana saya bisa mengatur Xcode sehingga saya dapat memiliki dua jalur Fastlane, satu untuk membangun AppStore, yang lain untuk AdHoc.

Saya bisa membuat konfigurasi Xcode baru AppStore di mana saya akan mengatur profil penyediaan AppStore tetapi ini menimbulkan masalah lain ketika Kerangka kerja khusus saya tidak dibuat. mirip dengan pertanyaan ini. Saya memiliki banyak Kerangka kerja khusus dan saya perlu membuat konfigurasi AppStore yang sama di proyek Xcode mereka juga, tetapi itu merupakan solusi peretasan yang terlalu berlebihan.

Saya mencoba memaksa gym untuk menggunakan profil AppStore sebagai berikut tetapi itu tidak membantu. Profil AdHoc yang disetel di Xcode masih digunakan.

  desc "Builds the app for the AppStore"
  lane :build_appstore do
      match(type: "appstore", readonly: true)
      build_app(
          scheme: "AeroNavMap",
          export_method: "app-store", 
          skip_profile_detection: true,
          export_options: { provisioningProfiles: { "net.tequilaapps.airnavmap" => "match AppStore net.tequilaapps.airnavmap"}}
          )
  end

Solusi saya saat ini adalah memperbarui xcodeproj secara manual sebelum membangun tetapi ini juga tidak terlalu bersih

  lane :build_appstore do
      match(type: "appstore", readonly: true)
      if Helper.ci? 
        UI.message "Patching Xcode proj to use AppStore profile"
        `sed -i.bak -e 's/match AdHoc net.tequilaapps.airnavmap/match AppStore net.tequilaapps.airnavmap/g' ../PEMap/PEMap.xcodeproj/project.pbxproj`
      end
      build_app(scheme: "AeroNavMap", export_method: "app-store")
  end

person Jan    schedule 07.01.2019    source sumber
comment
Apakah Anda menemukan solusi elegan untuk masalah ini?   -  person Lucky_girl    schedule 23.02.2021


Jawaban (1)


Ada dua fase penandatanganan kode saat Anda mengarsipkan bangunan (menggunakan Xcode atau gym): identitas penandatanganan kode yang digunakan saat membangun (dalam Xcode itulah yang diatur dalam pengaturan bangunan target Anda) dan yang digunakan saat mengekspor arsip (yang satu Anda pilih dalam dialog ekspor dari penyelenggara saat mengekspor arsip melalui Xcode secara manual)

Apa yang kami lakukan di Fastfiles kami disetel ke nilai yang sama saat menjalankan gym. Kami mengganti pengaturan build menggunakan xcargs dan menggunakan penandatanganan yang sama seperti yang kami atur di ekspor_options:

MY_APP_ID = "com.foo.bar"
MY_PROFILE = "match AppStore com.foo.bar"
MY_TEAM = …

match(
    app_identifier: MY_APP_ID,
    type: "appstore",
    readonly: true
)

settings_to_override = {
  :BUNDLE_IDENTIFIER => MY_APP_ID,
  :PROVISIONING_PROFILE_SPECIFIER => MY_PROFILE,
  :DEVELOPMENT_TEAM => MY_TEAM
}

gym(
    workspace: WORKSPACE_PATH,
    scheme: "Foo",
    configuration: "Production",
    xcargs: settings_to_override,
    export_method: "app-store",
    export_options: {
        provisioningProfiles: { 
            MY_APP_ID => MY_PROFILE
        }
    }
)

Kredit ke https://github.com/AliSoftware

person real_kappa_guy    schedule 11.07.2019