From 2df68a2f923979afa049373ea747ced99d5288c9 Mon Sep 17 00:00:00 2001 From: mso7nueh Date: Mon, 21 Apr 2025 19:02:55 +0300 Subject: [PATCH] fix(ci/cd): revert --- Build-tf | 252 ++++++++++++++----------------------------------------- 1 file changed, 62 insertions(+), 190 deletions(-) diff --git a/Build-tf b/Build-tf index b3804e99..6690afb9 100644 --- a/Build-tf +++ b/Build-tf @@ -1,201 +1,73 @@ #!/usr/bin/env bash -#!/bin/bash +set -xeu +set -o pipefail -#!/bin/bash +export LANG=en_US.UTF-8 +LANG=en_US.UTF-8 -# Убедимся, что переменные CERTIFICATES_FILE_BASE64 и CERTIFICATES_PASSWORD установлены -if [ -z "$CERTIFICATES_FILE_BASE64" ] || [ -z "$CERTIFICATES_PASSWORD" ]; then - echo "❌ Переменные CERTIFICATES_FILE_BASE64 или CERTIFICATES_PASSWORD не установлены." - exit 1 -fi +function finish() { + if [[ -d "${RESULT_BUNDLE_PATH}" ]]; then + ditto -c -k --sequesterRsrc --keepParent "${RESULT_BUNDLE_PATH}" "${RESULT_BUNDLE_PATH}.zip" + rm -rf "${RESULT_BUNDLE_PATH}" + fi +} -# Указываем путь для временного файла .p12 -P12_TMP_PATH="./certs/distribution.p12" +trap finish EXIT -# Создаем каталог, если его нет -echo "📦 Preparing certificate..." -mkdir -p certs +SDK="${SDK:-iphoneos}" +WORKSPACE="${WORKSPACE:-ios/Runner.xcworkspace}" +SCHEME="${SCHEME:-Runner}" +CONFIGURATION="${CONFIGURATION:-Release}" -# Выводим первые 10 символов BASE64 строки для проверки -echo "🔍 Проверка содержимого base64 строки..." -echo "$CERTIFICATES_FILE_BASE64" | head -n 10 +BUILD_DIR="${BUILD_DIR:-build}" +ARTIFACT_PATH="${RESULT_PATH:-${BUILD_DIR}/Artifacts}" +RESULT_BUNDLE_PATH="${ARTIFACT_PATH}/${SCHEME}.xcresult" +ARCHIVE_PATH="${ARCHIVE_PATH:-${BUILD_DIR}/Archives/${SCHEME}.xcarchive}" +DERIVED_DATA_PATH="${DERIVED_DATA_PATH:-${BUILD_DIR}/DerivedData}" +CURRENT_PROJECT_VERSION="${BUILD_NUMBER:-0}" +EXPORT_OPTIONS_FILE="Support/ExportOptions.plist" -# Декодируем строку base64 и сохраняем в файл -echo "🔑 Decoding certificate..." -echo "$CERTIFICATES_FILE_BASE64" | base64 --decode > "$P12_TMP_PATH" +# Clean and prepare the build +flutter clean +flutter pub get +dart run build_runner build --delete-conflicting-outputs -# Проверим, что файл был успешно создан -if [ ! -f "$P12_TMP_PATH" ]; then - echo "❌ Не удалось создать файл сертификата: $P12_TMP_PATH" - exit 1 +cd ios +rm -rf Pods Podfile.lock +pod install --repo-update +pod update || { echo "Pod update failed"; exit 1; } +cd .. + +rm -rf "${RESULT_BUNDLE_PATH}" "${DERIVED_DATA_PATH}" +mkdir -p "${ARTIFACT_PATH}" + +# Archive the build +xcrun xcodebuild \ + -workspace "${WORKSPACE}" \ + -scheme "${SCHEME}" \ + -configuration "${CONFIGURATION}" \ + -sdk "${SDK}" \ + -parallelizeTargets \ + -showBuildTimingSummary \ + -derivedDataPath "${DERIVED_DATA_PATH}" \ + -archivePath "${ARCHIVE_PATH}" \ + -resultBundlePath "${RESULT_BUNDLE_PATH}" \ + -allowProvisioningUpdates \ + CURRENT_PROJECT_VERSION="${CURRENT_PROJECT_VERSION}" \ + DEVELOPMENT_TEAM=VL68C36HYS \ + archive || { echo "Xcode archive failed"; exit 1; } + +# Export the build to .ipa +xcrun xcodebuild \ + -exportArchive \ + -exportOptionsPlist "${EXPORT_OPTIONS_FILE}" \ + -archivePath "${ARCHIVE_PATH}" \ + -exportPath "${ARTIFACT_PATH}/${SCHEME}.ipa" || { echo "Export to IPA failed"; exit 1; } + +# Zip the archive +if [[ -d "${ARCHIVE_PATH}" ]]; then + ditto -c -k --sequesterRsrc --keepParent "${ARCHIVE_PATH}" "${ARTIFACT_PATH}/${SCHEME}.xcarchive.zip" else - echo "✅ Файл сертификата успешно создан: $P12_TMP_PATH" - ls -l "$P12_TMP_PATH" # Выведем информацию о файле + echo "Archive directory not found, skipping zip." fi - -# Попробуем импортировать сертификат -echo "🔑 Importing .p12 certificate..." -security import "$P12_TMP_PATH" -k login.keychain -P "$CERTIFICATES_PASSWORD" -T /usr/bin/codesign - -# Проверим, был ли сертификат успешно импортирован -if [ $? -ne 0 ]; then - echo "❌ Ошибка при импорте сертификата. Проверьте правильность пароля." - exit 1 -fi - -echo "✅ Сертификат успешно импортирован." - -# Проверим наличие нужной identity в ключнице -IDENTITY="Apple Distribution: ITVIO, OOO (VL68C36HYS)" -if ! security find-identity -v -p codesigning | grep -q "${IDENTITY}"; then - echo "❌ Подпись identity '${IDENTITY}' не найдена в ключнице." - exit 1 -fi - -# Определяем пути -ARCHIVE_PATH="./archive" # Убедитесь, что ARCHIVE_PATH правильно задан -APP_PATH="${ARCHIVE_PATH}/Products/Applications/Runner.app" -FRAMEWORKS_PATH="${APP_PATH}/Frameworks" - -# Убираем старые подписи -echo "🔐 Removing old signatures..." -codesign --remove-signature "${FRAMEWORKS_PATH}/App.framework/App" -codesign --remove-signature "${FRAMEWORKS_PATH}/Flutter.framework/Flutter" - -# Повторно подписываем фреймворки -echo "🔐 Resigning App.framework..." -codesign -f --deep --no-strict -s "${IDENTITY}" --preserve-metadata=entitlements,identifier,flags "${FRAMEWORKS_PATH}/App.framework/App" - -echo "🔐 Resigning Flutter.framework..." -codesign -f --deep --no-strict -s "${IDENTITY}" --preserve-metadata=entitlements,identifier,flags "${FRAMEWORKS_PATH}/Flutter.framework/Flutter" - -# Подписываем самое приложение -echo "🔐 Resigning Runner.app..." -codesign -f --deep --no-strict -s "${IDENTITY}" --preserve-metadata=entitlements,identifier,flags "${APP_PATH}" - -echo "✅ Resigning completed." - - - -#set -xeu -#set -o pipefail -# -#export LANG=en_US.UTF-8 -#LANG=en_US.UTF-8 -# -#function finish() { -# if [[ -d "${RESULT_BUNDLE_PATH}" ]]; then -# ditto -c -k --sequesterRsrc --keepParent "${RESULT_BUNDLE_PATH}" "${RESULT_BUNDLE_PATH}.zip" -# rm -rf "${RESULT_BUNDLE_PATH}" -# fi -#} -# -#trap finish EXIT -# -#SDK="${SDK:-iphoneos}" -#WORKSPACE="${WORKSPACE:-ios/Runner.xcworkspace}" -#SCHEME="${SCHEME:-Runner}" -#CONFIGURATION="${CONFIGURATION:-Release}" -# -#BUILD_DIR="${BUILD_DIR:-build}" -#ARTIFACT_PATH="${RESULT_PATH:-${BUILD_DIR}/Artifacts}" -#RESULT_BUNDLE_PATH="${ARTIFACT_PATH}/${SCHEME}.xcresult" -#ARCHIVE_PATH="${ARCHIVE_PATH:-${BUILD_DIR}/Archives/${SCHEME}.xcarchive}" -#DERIVED_DATA_PATH="${DERIVED_DATA_PATH:-${BUILD_DIR}/DerivedData}" -#CURRENT_PROJECT_VERSION="${BUILD_NUMBER:-0}" -#EXPORT_OPTIONS_FILE="Support/ExportOptions.plist" -# -## Clean and prepare the build -#flutter clean -#flutter pub get -#dart run build_runner build --delete-conflicting-outputs -# -#cd ios -#rm -rf Pods Podfile.lock -#pod install --repo-update -#pod update || { echo "Pod update failed"; exit 1; } -#cd .. -# -#rm -rf "${RESULT_BUNDLE_PATH}" "${DERIVED_DATA_PATH}" -#mkdir -p "${ARTIFACT_PATH}" -# -#function resign_frameworks() { -# IDENTITY="Apple Distribution: ITVIO, OOO (VL68C36HYS)" -# P12_TMP_PATH="certs/distribution.p12" -# -# echo "📦 Preparing certificate..." -# mkdir -p certs -# echo "$CERTIFICATES_FILE_BASE64" | base64 --decode > "$P12_TMP_PATH" -# -# echo "🔑 Importing .p12 certificate..." -# security import "$P12_TMP_PATH" -k login.keychain -P "$CERTIFICATES_PASSWORD" -T /usr/bin/codesign || { -# echo "❌ Failed to import .p12" -# exit 1 -# } -# -# security set-key-partition-list -S apple-tool:,apple: -s -k "$CERTIFICATES_PASSWORD" login.keychain -# -# # 🧾 Проверка, что identity доступен -# if ! security find-identity -v -p codesigning | grep -q "${IDENTITY}"; then -# echo "❌ Signing identity '${IDENTITY}' not found in keychain." -# exit 1 -# fi -# -# local app_path="${ARCHIVE_PATH}/Products/Applications/Runner.app" -# local frameworks_path="${app_path}/Frameworks" -# -# echo "🔐 Removing old signatures..." -# codesign --remove-signature "${frameworks_path}/App.framework/App" -# codesign --remove-signature "${frameworks_path}/Flutter.framework/Flutter" -# -# echo "🔐 Resigning App.framework..." -# codesign -f --deep --no-strict -s "${IDENTITY}" \ -# --preserve-metadata=entitlements,identifier,flags \ -# "${frameworks_path}/App.framework/App" -# -# echo "🔐 Resigning Flutter.framework..." -# codesign -f --deep --no-strict -s "${IDENTITY}" \ -# --preserve-metadata=entitlements,identifier,flags \ -# "${frameworks_path}/Flutter.framework/Flutter" -# -# echo "🔐 Resigning Runner.app..." -# codesign -f --deep --no-strict -s "${IDENTITY}" \ -# --preserve-metadata=entitlements,identifier,flags \ -# "${app_path}" -# -# echo "✅ Resigning completed" -#} -# -## Archive the build -#xcrun xcodebuild \ -# -workspace "${WORKSPACE}" \ -# -scheme "${SCHEME}" \ -# -configuration "${CONFIGURATION}" \ -# -sdk "${SDK}" \ -# -parallelizeTargets \ -# -showBuildTimingSummary \ -# -derivedDataPath "${DERIVED_DATA_PATH}" \ -# -archivePath "${ARCHIVE_PATH}" \ -# -resultBundlePath "${RESULT_BUNDLE_PATH}" \ -# -allowProvisioningUpdates \ -# CURRENT_PROJECT_VERSION="${CURRENT_PROJECT_VERSION}" \ -# CODE_SIGNING_ALLOWED=NO \ -# DEVELOPMENT_TEAM=VL68C36HYS \ -# archive || { echo "Xcode archive failed"; exit 1; } -# -#resign_frameworks -# -## Export the build to .ipa -#xcrun xcodebuild \ -# -exportArchive \ -# -exportOptionsPlist "${EXPORT_OPTIONS_FILE}" \ -# -archivePath "${ARCHIVE_PATH}" \ -# -exportPath "${ARTIFACT_PATH}/${SCHEME}.ipa" || { echo "Export to IPA failed"; exit 1; } -# -## Zip the archive -#if [[ -d "${ARCHIVE_PATH}" ]]; then -# ditto -c -k --sequesterRsrc --keepParent "${ARCHIVE_PATH}" "${ARTIFACT_PATH}/${SCHEME}.xcarchive.zip" -#else -# echo "Archive directory not found, skipping zip." -#fi