Номер сборки не устанавливается fastlane, но устанавливается Xcode - PullRequest
0 голосов
/ 10 июня 2019

Я настроил свой проект на использование сценария запуска, который автоматически устанавливает номер сборки на основе количества коммитов, которые у меня есть в моей основной ветке:

enter image description here

Весь сценарий, если это поможет любому:

#!/bin/bash

#  update_build_number.sh
#  Usage: `update_build_number.sh [branch]`
#  Run this script after the 'Copy Bundle Resources' build phase
#  Ref: http://tgoode.com/2014/06/05/sensible-way-increment-bundle-version-cfbundleversion-xcode/

branch=${1:-'master'}
buildNumber=$(expr $(git rev-list $branch --count) - $(git rev-list HEAD..$branch --count))
echo "Updating build number to $buildNumber using branch '$branch'."
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
if [ -f "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}.dSYM/Contents/Info.plist" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}.dSYM/Contents/Info.plist"
fi

Как упомянуто в заголовке, я могу собрать это на устройстве, и номер сборки правильно установлен.Или я могу архивировать и загружать в AppStore через XCode, и версия снова устанавливается правильно.Основываясь на этих наблюдениях, я предполагаю, что это настроено правильно.

Однако, когда я использую fastlane для управления своим развертыванием, он не обновляет номер сборки, поэтому я получаю эту ошибку:

ОШИБКА ITMS-90189: «Избыточная двоичная загрузка. Вы уже загрузили сборку с номером сборки« # »для номера версии« # ». Убедитесь, что вы увеличиваете строку сборки перед загрузкой приложения в App Store Connect.Подробнее в Справке Xcode (http://help.apple.com/xcode/mac/current/#/devba7f53ad4)."

tl; dr

"Вы уже дали нам эту версию, пришлите нам новую"

Для fastlane это сжатая версия того, что я использую для развертывания бета-версии:

default_platform(:ios)

platform :ios do
  lane :beta do
    build_app(workspace: "MyApp.xcworkspace", 
              scheme: "MyApp")
    upload_to_testflight
  end
end

Наконец, если я жестко закодировал обновленный номер сборки в Xcode, тогда fastlane правильно доставит файл, поэтому я предполагаю, что мои настройки действительны, без проблемы с версией.

Я также экспериментировал с increment_build_number, но я не смог найти параметр, который заставил его работать (плюс, Xcode должен управлять этим для менятеперь так быстроне должно беспокоить).

1 Ответ

0 голосов
/ 10 июня 2019

Понял это, и оказалось, что это довольно просто.

Когда Xcode строит приложение, вывод сборки будет выглядеть так:

/Users/theuser/Library/Developer/Xcode/DerivedData/MyAppName/Build/Products/Debug-iphoneos

Когда Fastlane строит его, файлсохраняется в локальном каталоге для этого .

output_directory    
The directory in which the ipa file should be stored in     
Default value: .

Изменяя output_directory для моей функции build_app, я могу указать fastlane на ту же папку, которую использует Xcode, что позволяетскрипт для работы.

build_app(workspace: "MyApp.xcworkspace", 
          scheme: "MyApp",
          output_directory: "/Users/theuser/Library/Developer/Xcode/DerivedData/MyApp/Build/Products/Debug-iphoneos")

Однако здесь есть одна загвоздка, которая не очевидна.Папка в DerivedData может быть изменена, что может стать проблемой для будущих сборок.Однако, используя этот ответ здесь , вы можете вместо этого указать выходную папку в XCode, а затем синхронизировать ее с fastlane.

...