#!/usr/bin/env bash set -e ROOT=$(cd "$(dirname "$0")" && pwd) DIST_DIR="$ROOT/dist" TMP_DIR="$ROOT/.tmp_sdk_pkg" function lookup_version() { VERSION_FILE="$ROOT/ios/NewHttpDNS/Config/HttpdnsPublicConstant.h" if [ -f "$VERSION_FILE" ]; then VERSION=$(grep "HTTPDNS_IOS_SDK_VERSION" "$VERSION_FILE" | sed -E 's/.*@"([0-9.]+)".*/\1/') echo "$VERSION" return fi echo "1.0.0" } function ensure_cmd() { CMD=$1 if ! command -v "$CMD" >/dev/null 2>&1; then echo "missing command: $CMD" exit 1 fi } function zip_dir() { SRC_DIR=$1 ZIP_FILE=$2 rm -f "$ZIP_FILE" ( cd "$SRC_DIR" || exit 1 zip -r -X -q "$ZIP_FILE" . ) } function build_android_sdk_package() { echo "[sdk] building android aar ..." ensure_cmd zip # (Android build logic remains same but silenced here for brevity if requested, # but I will keep it functional as per original script) if [ ! -x "$ROOT/android/gradlew" ]; then echo "android gradlew not found: $ROOT/android/gradlew" return # Skip if android dir doesn't exist or not executable fi ( cd "$ROOT/android" || exit 1 ./gradlew :httpdns-sdk:clean :httpdns-sdk:assembleNormalRelease ) AAR_FILE=$(find "$ROOT/android/httpdns-sdk/build/outputs/aar" -type f -name "new--android-httpdns-v*.aar" | head -n 1) if [ -z "$AAR_FILE" ]; then AAR_FILE=$(find "$ROOT/android/httpdns-sdk/build/outputs/aar" -type f -name "*normal-release*.aar" | head -n 1) fi if [ -z "$AAR_FILE" ]; then AAR_FILE=$(find "$ROOT/android/httpdns-sdk/build/outputs/aar" -type f -name "*release*.aar" | head -n 1) fi if [ -z "$AAR_FILE" ] || [ ! -f "$AAR_FILE" ]; then echo "android aar is not generated" return fi PKG_DIR="$TMP_DIR/android" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp "$AAR_FILE" "$PKG_DIR/new--android-httpdns-v${VERSION}.aar" CRASHDEFEND_JAR="$ROOT/android/local-maven/com/newsdk/ams/new-android-crashdefend/0.0.6/new-android-crashdefend-0.0.6.jar" IPDETECTOR_AAR="$ROOT/android/local-maven/com/newsdk/ams/new-android-ipdetector/1.2.0/new-android-ipdetector-1.2.0.aar" LOGGER_AAR="$ROOT/android/local-maven/com/newsdk/ams/new-android-logger/1.2.0/new-android-logger-1.2.0.aar" if [ -f "$CRASHDEFEND_JAR" ] && [ -f "$IPDETECTOR_AAR" ] && [ -f "$LOGGER_AAR" ]; then cp "$CRASHDEFEND_JAR" "$PKG_DIR/new-android-crashdefend-0.0.6.jar" cp "$IPDETECTOR_AAR" "$PKG_DIR/new-android-ipdetector-1.2.0.aar" cp "$LOGGER_AAR" "$PKG_DIR/new-android-logger-1.2.0.aar" fi mkdir -p "$DIST_DIR/v${VERSION}" zip_dir "$PKG_DIR" "$DIST_DIR/v${VERSION}/httpdns-sdk-android-v${VERSION}.zip" } function build_ios_sdk_package() { echo "[sdk] packaging ios xcframework ..." ensure_cmd zip IOS_ROOT="$ROOT/ios" if [ "$(uname)" == "Darwin" ]; then echo "[sdk] running xcodebuild on macOS..." ( cd "$IOS_ROOT" || exit 1 rm -rf Build/ xcodebuild archive -workspace NewHttpDNS.xcworkspace -scheme NewHttpDNS -archivePath Build/NewHttpDNS-iphoneos.xcarchive -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES CODE_SIGNING_ALLOWED=NO ENABLE_MODULE_VERIFIER=NO xcodebuild archive -workspace NewHttpDNS.xcworkspace -scheme NewHttpDNS -archivePath Build/NewHttpDNS-iphonesimulator.xcarchive -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES CODE_SIGNING_ALLOWED=NO ENABLE_MODULE_VERIFIER=NO xcodebuild -create-xcframework -archive Build/NewHttpDNS-iphoneos.xcarchive -framework NewHttpDNS.framework -archive Build/NewHttpDNS-iphonesimulator.xcarchive -framework NewHttpDNS.framework -output Build/NewHttpDNS.xcframework ) fi XCFRAMEWORK_DIR="$IOS_ROOT/Build/NewHttpDNS.xcframework" if [ ! -d "$XCFRAMEWORK_DIR" ]; then echo "ios xcframework not found at $XCFRAMEWORK_DIR" exit 1 fi PKG_DIR="$TMP_DIR/ios" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp -R "$XCFRAMEWORK_DIR" "$PKG_DIR/" mkdir -p "$DIST_DIR/v${VERSION}" zip_dir "$PKG_DIR" "$DIST_DIR/v${VERSION}/httpdns-sdk-iOS-v${VERSION}.zip" # Package Demo as well DEMO_PKG_DIR="$TMP_DIR/ios_demo" rm -rf "$DEMO_PKG_DIR" mkdir -p "$DEMO_PKG_DIR" cp -R "$IOS_ROOT/NewHttpDNSTestDemo" "$DEMO_PKG_DIR/" cp -R "$IOS_ROOT/NewHttpDNSTests" "$DEMO_PKG_DIR/" mkdir -p "$DEMO_PKG_DIR/NewHttpDNS.xcworkspace" cp "$IOS_ROOT/NewHttpDNS.xcworkspace/contents.xcworkspacedata" "$DEMO_PKG_DIR/NewHttpDNS.xcworkspace/" cp "$IOS_ROOT/Podfile" "$DEMO_PKG_DIR/" cp "$IOS_ROOT/NewHTTPDNS.podspec" "$DEMO_PKG_DIR/" cp -R "$IOS_ROOT/resource" "$DEMO_PKG_DIR/" cp "$IOS_ROOT/README.md" "$DEMO_PKG_DIR/" zip_dir "$DEMO_PKG_DIR" "$DIST_DIR/v${VERSION}/httpdns-demo-iOS-v${VERSION}.zip" # Clean up build artifacts if on Mac [ "$(uname)" == "Darwin" ] && rm -rf "$IOS_ROOT/Build" } function build_flutter_sdk_package() { echo "[sdk] packaging flutter plugin ..." ensure_cmd zip PLUGIN_DIR="$ROOT/flutter/new_httpdns" if [ ! -d "$PLUGIN_DIR" ]; then return fi PKG_DIR="$TMP_DIR/flutter" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp -R "$PLUGIN_DIR" "$PKG_DIR/" rm -rf "$PKG_DIR/new_httpdns/example/.dart_tool" "$PKG_DIR/new_httpdns/example/build" "$PKG_DIR/new_httpdns/.dart_tool" "$PKG_DIR/new_httpdns/build" mkdir -p "$DIST_DIR/v${VERSION}" zip_dir "$PKG_DIR" "$DIST_DIR/v${VERSION}/httpdns-sdk-flutter-v${VERSION}.zip" } function main() { VERSION=$(lookup_version) rm -rf "$TMP_DIR" mkdir -p "$TMP_DIR" "$DIST_DIR" build_android_sdk_package build_ios_sdk_package build_flutter_sdk_package rm -rf "$TMP_DIR" echo "[sdk] done. output: $DIST_DIR/v${VERSION}" } main "$@"