#!/bin/bash
# ============================================================
# FreeSign 一键：换域名 + 未签名 IPA（不需要 pod / brew）
# 用法（在工程根目录）：
#   bash 一键打包.sh
#   bash 一键打包.sh https://00.66s.lol
# ============================================================

set -e
cd "$(dirname "$0")"
ROOT="$(pwd)"

DOMAIN="${1:-https://00.66s.lol}"
DOMAIN="${DOMAIN%/}"
case "$DOMAIN" in
  http://*|https://*) ;;
  *) DOMAIN="https://$DOMAIN" ;;
esac
DOMAIN="${DOMAIN/http:\/\//https://}"
OLD="https://sign.aacert.com"

echo "======== FreeSign 一键未签名打包 ========"
echo "目录: $ROOT"
echo "域名: $DOMAIN"
echo ""

# ---- 检查工程 ----
if [ ! -d FreeSign.xcworkspace ]; then
  echo "错误: 当前目录没有 FreeSign.xcworkspace"
  echo "请把完整工程（含 Pods、FreeSign.xcworkspace）放好后再跑"
  exit 1
fi
if [ ! -f "Pods/Target Support Files/Pods-FreeSign/Pods-FreeSign.release.xcconfig" ]; then
  echo "错误: 缺少 Pods（Pods-FreeSign.release.xcconfig 不存在）"
  echo "请重新拷贝带 Pods 的完整工程，不要只拷源码"
  exit 1
fi

# ---- 1) 换域名 ----
echo "[1/4] 替换域名..."
for f in \
  FreeSign/API/API.swift \
  FreeSign/API/XZAPI.swift \
  FreeSign/Utils/AppConfig.swift \
  FreeSign/Manager/AppManager.swift \
  FreeSign/Feature/Setting/IPAInstallServiceViewController.swift
do
  [ -f "$f" ] || continue
  if [ -f .freesign-domain ]; then
    PREV=$(tr -d '\r\n' < .freesign-domain)
    PREV="${PREV%/}"
    if [ -n "$PREV" ] && [ "$PREV" != "$DOMAIN" ]; then
      sed -i '' "s|${PREV}|${DOMAIN}|g" "$f" || true
    fi
  fi
  sed -i '' "s|${OLD}|${DOMAIN}|g" "$f"
  echo "  OK $f"
done
echo "$DOMAIN" > .freesign-domain

# ---- 2) 跳过友盟（不装 pod，直接改现有 Pods）----
echo "[2/4] 跳过友盟统计库..."
for s in \
  "Pods/Target Support Files/UMDevice/UMDevice-xcframeworks.sh" \
  "Pods/Target Support Files/UMCommon/UMCommon-xcframeworks.sh" \
  "Pods/Target Support Files/UMAPM/UMAPM-xcframeworks.sh"
do
  if [ -f "$s" ]; then
    printf '%s\n' '#!/bin/sh' 'exit 0' > "$s"
    chmod +x "$s"
    echo "  noop $(basename "$s")"
  fi
done

for cfg in \
  "Pods/Target Support Files/Pods-FreeSign/Pods-FreeSign.release.xcconfig" \
  "Pods/Target Support Files/Pods-FreeSign/Pods-FreeSign.debug.xcconfig"
do
  [ -f "$cfg" ] || continue
  sed -i '' \
    -e 's/ -framework "UMAPM"//g' \
    -e 's/ -framework "UMCommon"//g' \
    -e 's/ -framework "UMDevice"//g' \
    -e 's| "${PODS_ROOT}/UMAPM/UMAPM_2.0.7"||g' \
    -e 's| "${PODS_ROOT}/UMCommon/UMCommon_7.5.6"||g' \
    -e 's| "${PODS_ROOT}/UMDevice/UMDevice_3.4.0"||g' \
    -e 's| "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM"||g' \
    -e 's| "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon"||g' \
    -e 's| "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"||g' \
    -e 's| "-F${PODS_CONFIGURATION_BUILD_DIR}/UMAPM"||g' \
    -e 's| "-F${PODS_CONFIGURATION_BUILD_DIR}/UMCommon"||g' \
    -e 's| "-F${PODS_CONFIGURATION_BUILD_DIR}/UMDevice"||g' \
    "$cfg"
done

# 注释桥接头（若还有）
if [ -f FreeSign/FreeSign-Bridging-Header.h ]; then
  sed -i '' \
    -e 's|^#import <UMCommon/|//#import <UMCommon/|' \
    -e 's|^#import <UMAPM/|//#import <UMAPM/|' \
    FreeSign/FreeSign-Bridging-Header.h
fi

# 未签名时跳过自动涨 Build Number
PBX="FreeSign.xcodeproj/project.pbxproj"
if [ -f "$PBX" ] && grep -q 'buildNumber=\$(/usr/libexec/PlistBuddy' "$PBX"; then
  python3 - "$PBX" <<'PY'
import sys, re
path = sys.argv[1]
t = open(path, encoding="utf-8").read()
t2, n = re.subn(
    r'shellScript = "#!/bin/sh\\nbuildNumber=.*?\\n";',
    'alwaysOutOfDate = 1;\n\t\t\tshellScript = "#!/bin/sh\\nexit 0\\n";',
    t,
    count=1,
)
if n:
    open(path, "w", encoding="utf-8").write(t2)
    print("  patched bump-build script")
else:
    print("  bump-build script already ok / not found")
PY
fi

# ---- 3) 编译 ----
echo "[3/4] 开始编译（未签名，可能要十几分钟）..."
rm -rf ./UnsignedBuild
mkdir -p ./UnsignedBuild/Payload

set +e
xcodebuild build \
  -workspace FreeSign.xcworkspace \
  -scheme FreeSign \
  -configuration Release \
  -sdk iphoneos \
  -destination 'generic/platform=iOS' \
  CODE_SIGNING_ALLOWED=NO \
  CODE_SIGNING_REQUIRED=NO \
  CODE_SIGN_IDENTITY="" \
  DEVELOPMENT_TEAM="" \
  CODE_SIGN_ENTITLEMENTS="" \
  SUPPORTS_MACCATALYST=NO \
  -derivedDataPath ./UnsignedBuild/DerivedData \
  > ./UnsignedBuild/build.log 2>&1
RC=$?
set -e

if [ "$RC" -ne 0 ]; then
  echo ""
  echo "编译失败。错误摘要："
  grep "error:" ./UnsignedBuild/build.log | tail -n 40 || true
  echo ""
  echo "完整日志: $ROOT/UnsignedBuild/build.log"
  echo "末尾："
  tail -n 30 ./UnsignedBuild/build.log
  exit 1
fi

# ---- 4) 打 IPA ----
echo "[4/4] 打包 IPA..."
APP=$(find ./UnsignedBuild/DerivedData/Build/Products -name 'FreeSign.app' -type d | head -n 1)
if [ -z "$APP" ]; then
  echo "找不到 FreeSign.app"
  grep "error:" ./UnsignedBuild/build.log | tail -n 40 || true
  exit 1
fi

rm -rf ./UnsignedBuild/Payload
mkdir -p ./UnsignedBuild/Payload
cp -R "$APP" ./UnsignedBuild/Payload/
(
  cd ./UnsignedBuild
  rm -f FreeSign-unsigned.ipa
  zip -qry FreeSign-unsigned.ipa Payload
)

echo ""
echo "======== 完成 ========"
echo "域名: $DOMAIN"
echo "IPA : $ROOT/UnsignedBuild/FreeSign-unsigned.ipa"
ls -lh ./UnsignedBuild/FreeSign-unsigned.ipa
open ./UnsignedBuild 2>/dev/null || true
