flutter_unity_pod/build_xcframework.sh
2025-11-28 16:58:17 +08:00

123 lines
3.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
echo "=== 开始构建 UnityFramework XCFramework ==="
# 目录设置
REPO_DIR="/Users/apple/Desktop/work/flutter_unity_pod"
STUB_DIR="$REPO_DIR/simulator_stub"
BUILD_DIR="$REPO_DIR/build"
DEVICE_FRAMEWORK="$REPO_DIR/UnityLibrary/UnityFramework.framework"
# 清理之前的构建
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"
echo "1. 编译模拟器 framework..."
cd "$STUB_DIR"
# 编译 arm64 模拟器版本
xcrun clang -arch arm64 \
-isysroot $(xcrun --sdk iphonesimulator --show-sdk-path) \
-target arm64-apple-ios13.0-simulator \
-dynamiclib \
-o "$BUILD_DIR/UnityFramework_sim_arm64" \
-framework Foundation -framework UIKit \
-install_name @rpath/UnityFramework.framework/UnityFramework \
UnityFrameworkStub.m
# 编译 x86_64 模拟器版本
xcrun clang -arch x86_64 \
-isysroot $(xcrun --sdk iphonesimulator --show-sdk-path) \
-target x86_64-apple-ios13.0-simulator \
-dynamiclib \
-o "$BUILD_DIR/UnityFramework_sim_x86_64" \
-framework Foundation -framework UIKit \
-install_name @rpath/UnityFramework.framework/UnityFramework \
UnityFrameworkStub.m
# 合并模拟器架构
echo "2. 合并模拟器架构..."
lipo -create \
"$BUILD_DIR/UnityFramework_sim_arm64" \
"$BUILD_DIR/UnityFramework_sim_x86_64" \
-output "$BUILD_DIR/UnityFramework_sim"
# 创建模拟器 framework 结构
echo "3. 创建模拟器 framework 结构..."
SIM_FRAMEWORK="$BUILD_DIR/UnityFramework-sim.framework"
mkdir -p "$SIM_FRAMEWORK/Headers"
mkdir -p "$SIM_FRAMEWORK/Modules"
# 复制二进制
cp "$BUILD_DIR/UnityFramework_sim" "$SIM_FRAMEWORK/UnityFramework"
# 复制头文件
cp -r "$DEVICE_FRAMEWORK/Headers/" "$SIM_FRAMEWORK/Headers/"
# 创建 module.modulemap
cat > "$SIM_FRAMEWORK/Modules/module.modulemap" << 'EOF'
framework module UnityFramework {
umbrella header "UnityFramework.h"
export *
module * { export * }
}
EOF
# 创建 Info.plist
cat > "$SIM_FRAMEWORK/Info.plist" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>UnityFramework</string>
<key>CFBundleIdentifier</key>
<string>com.unity3d.framework</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>UnityFramework</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>MinimumOSVersion</key>
<string>13.0</string>
</dict>
</plist>
EOF
echo "4. 创建 XCFramework..."
# 创建临时目录来存放不同平台的 framework
DEVICE_BUILD="$BUILD_DIR/device"
SIM_BUILD="$BUILD_DIR/simulator"
mkdir -p "$DEVICE_BUILD" "$SIM_BUILD"
# 复制真机 framework保持原名
cp -r "$DEVICE_FRAMEWORK" "$DEVICE_BUILD/"
echo "4.5. 优化真机 framework 大小strip 符号表)..."
# 移除本地符号和调试信息保留外部符号减少约100MB
strip -x "$DEVICE_BUILD/UnityFramework.framework/UnityFramework"
echo " 优化后大小: $(du -sh "$DEVICE_BUILD/UnityFramework.framework/UnityFramework" | awk '{print $1}')"
# 移动模拟器 framework保持原名
mv "$SIM_FRAMEWORK" "$SIM_BUILD/UnityFramework.framework"
# 创建 XCFramework
xcodebuild -create-xcframework \
-framework "$DEVICE_BUILD/UnityFramework.framework" \
-framework "$SIM_BUILD/UnityFramework.framework" \
-output "$BUILD_DIR/UnityFramework.xcframework"
echo "5. 替换原来的 framework..."
rm -rf "$REPO_DIR/UnityLibrary/UnityFramework.framework"
cp -r "$BUILD_DIR/UnityFramework.xcframework" "$REPO_DIR/UnityLibrary/"
echo "✅ 完成XCFramework 已创建在: $REPO_DIR/UnityLibrary/UnityFramework.xcframework"
echo ""
echo "现在需要更新 podspec 以使用 XCFramework"