Сборка Fastlane Match Adhoc и магазин приложений

Я использую match Fastlane и gym для создания и распространения моего приложения из CI (Bitrise) в Fabric. Мои настройки Xcode установлены вручную с конфигурацией выпуска с использованием профиля AdHoc, как описано в Документы Fastlane

Теперь я хочу распространить в Appstore из CI, но это не удается, потому что конфигурация Xcode Release настроена на использование профиля AdHoc, а Match установил профиль 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 *

Все это имеет смысл, но вопрос в том, как мне настроить Xcode, чтобы у меня было две полосы Fastlane, одна для создания для AppStore, а другая для AdHoc.

Я мог бы создать новую конфигурацию Xcode AppStore, в которой я бы установил профиль обеспечения AppStore, но возникает другая проблема, когда мои пользовательские платформы не создаются. Аналогично этому вопросу. У меня много пользовательских фреймворков, и мне нужно было бы создать ту же самую AppStore конфигурацию в их проекте Xcode, но это слишком много хакерского решения.

Я пытался заставить gym использовать профиль AppStore следующим образом, но это не помогло. Профиль AdHoc, установленный в Xcode, все еще используется.

  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

Мое текущее решение - вручную обновить xcodeproj непосредственно перед сборкой, но это тоже не очень чисто.

  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 источник
comment
Вы нашли какое-нибудь изящное решение этой проблемы?   -  person Lucky_girl    schedule 23.02.2021


Ответы (1)


Когда вы архивируете сборку (с использованием Xcode или тренажерного зала), существует две фазы подписи кода: идентификатор подписи кода, используемый при сборке (в Xcode, который установлен в настройках сборки вашей цели), и тот, который используется при экспорте архива (тот вы выбираете в диалоге экспорта из органайзера при экспорте архива через Xcode вручную)

То, что мы делаем в наших файлах Fastfiles, устанавливается на одно и то же значение при вызове спортзала. Мы переопределяем настройки сборки с помощью xcargs и используем там ту же подпись, что и установленную в export_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
        }
    }
)

Кредит https://github.com/AliSoftware

person real_kappa_guy    schedule 11.07.2019