Сервер XCode: ошибка для назначения ключа, ожидаемая загрузка, найденный экспорт - PullRequest
1 голос
/ 29 января 2020

Я использую Xcode 11 и сервер Xcode, чтобы попытаться собрать и загрузить свое приложение в TestFlight. Я пытался использовать пользовательский список ExportOptions.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>
    <key>teamID</key>
    <string>YOUR_TEN_CHARACTER_TEAM_ID</string>
    <key>destination</key>
    <string>upload</string>
</dict>
</plist>

Но затем я получаю сообщение об ошибке, в котором говорится, что «Загрузка» не поддерживается сервером Xcode. В Интернете можно оставить его как «Экспорт» и использовать его для загрузки в сценарии после интеграции:

altool --upload-app -f $XCS_PRODUCT -u <username> -p <app-specific password>

Итак, я сделал это и попытался настроить бота на использование:

  • Экспорт архива: устанавливаемый продукт
  • Экспорт архива: устанавливаемый продукт и тонкие варианты

вместо пользовательского списка. Но теперь мой шаг «Архивировать» завершается с ошибкой, приведенной ниже, прежде чем даже попасть в триггер:

Build Service Error: exportArchive: exportOptionsPlist error for key 'destination': expected one of {upload}, but found export

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

Архивирование приложения и загрузка из "Распространить приложение" Ручная работа отлично.

Любая помощь будет оценена. Я надеялся сделать это, не добавляя больше инструментов, поскольку это должно быть возможно само по себе.

1 Ответ

1 голос
/ 30 января 2020

Как обсуждалось в комментариях, это, вероятно, ошибка в сервере Xcode.

Поскольку проект Xcode уже создает архив, целесообразным вариантом является отключение экспорта в боте и экспорт ipa. -файл с триггером сценария после интеграции. Это можно загрузить в App Store Connect.

Сценарий будет выглядеть следующим образом:

#!/bin/sh

/usr/bin/xcodebuild -exportArchive -archivePath ${XCS_ARCHIVE} -exportPath "${XCS_DERIVED_DATA_DIR}" -exportOptionsPlist ${XCS_SOURCE_DIR}/someconfdir/export.plist

/usr/bin/xcrun altool --upload-app --type ios --file "${XCS_DERIVED_DATA_DIR}/appname.ipa" --username "xxx@y.z" --password "xxx"

Вам нужен способ, чтобы сервер Xcode имел доступ к export.plist. Один из вариантов - зарегистрировать его в исходном коде, поэтому приведенный выше скрипт находит его в некоторой папке конфигурации с помощью переменной XCS_SOURCE_DIR.

Он должен выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>teamID</key>
    <string>xxx</string>
    <key>method</key>
    <string>app-store</string>
    <key>uploadSymbols</key>
    <true/>
    <key>provisioningProfiles</key>
    <dict>
        <key>bundleid</key>
        <string>profilename</string>
    </dict>
</dict>
</plist>
...