#!/usr/bin/env bash #!/bin/bash # Убедимся, что переменные CERTIFICATES_FILE_BASE64 и CERTIFICATES_PASSWORD установлены if [ -z "$CERTIFICATES_FILE_BASE64" ] || [ -z "$CERTIFICATES_PASSWORD" ]; then echo "❌ Переменные CERTIFICATES_FILE_BASE64 или CERTIFICATES_PASSWORD не установлены." exit 1 fi # Указываем путь для временного файла .p12 P12_TMP_PATH="./certs/distribution.p12" # Создаем каталог, если его нет echo "📦 Preparing certificate..." mkdir -p certs # Выводим первые 10 символов BASE64 строки для проверки echo "🔍 Проверка содержимого base64 строки..." echo "$CERTIFICATES_FILE_BASE64" | head -n 10 # Декодируем строку base64 и сохраняем в файл echo "🔑 Decoding certificate..." echo "$CERTIFICATES_FILE_BASE64" | base64 --decode > "$P12_TMP_PATH" # Проверим, что файл был успешно создан if [ ! -f "$P12_TMP_PATH" ]; then echo "❌ Не удалось создать файл сертификата: $P12_TMP_PATH" exit 1 else echo "✅ Файл сертификата успешно создан: $P12_TMP_PATH" ls -l "$P12_TMP_PATH" # Выведем информацию о файле 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