Files
navop/script/bundle-macos.sh
T
胡飞 17f30db54f build(ci): 优化多平台构建和打包流程
- 在CI脚本中统一处理版本号,去除tag版本前缀v
- macOS新增完整.app包生成脚本,自动替换Info.plist版本号
- Linux添加应用程序桌面文件和图标,构建对应的tar包
- Windows资源编译支持,新增build.rs及相关依赖winresource
- main.rs添加windows子系统属性防止控制台弹窗
- 新增macOS Info.plist和Linux桌面快捷方式配置文件
- Cargo配置调整,启用release模式下的LTO及代码优化配置
2026-02-16 12:26:27 +08:00

51 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
APP_NAME="OnetCli"
BINARY_NAME="onetcli"
TARGET="${1:-aarch64-apple-darwin}"
VERSION="${ONETCLI_VERSION:-0.1.0}"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
APP_DIR="${PROJECT_DIR}/target/${APP_NAME}.app"
echo "Bundling ${APP_NAME}.app for ${TARGET} (version: ${VERSION})..."
# Clean previous bundle
rm -rf "$APP_DIR"
# Create .app directory structure
mkdir -p "$APP_DIR/Contents/MacOS"
mkdir -p "$APP_DIR/Contents/Resources"
# Copy binary
BINARY_PATH="${PROJECT_DIR}/target/${TARGET}/release/${BINARY_NAME}"
if [ ! -f "$BINARY_PATH" ]; then
echo "Error: Binary not found at ${BINARY_PATH}"
echo "Run: cargo build --release -p main --target ${TARGET}"
exit 1
fi
cp "$BINARY_PATH" "$APP_DIR/Contents/MacOS/${BINARY_NAME}"
# Copy Info.plist and substitute version
sed "s/\${ONETCLI_VERSION}/${VERSION}/g" \
"${PROJECT_DIR}/resources/macos/Info.plist" \
> "$APP_DIR/Contents/Info.plist"
# Copy icon
ICNS_PATH="${PROJECT_DIR}/resources/macos/OnetCli.icns"
if [ -f "$ICNS_PATH" ]; then
cp "$ICNS_PATH" "$APP_DIR/Contents/Resources/OnetCli.icns"
else
echo "Warning: Icon file not found at ${ICNS_PATH}"
fi
# Write PkgInfo
echo -n "APPL????" > "$APP_DIR/Contents/PkgInfo"
echo "Successfully built: ${APP_DIR}"
echo "Contents:"
ls -la "$APP_DIR/Contents/"
ls -la "$APP_DIR/Contents/MacOS/"
ls -la "$APP_DIR/Contents/Resources/"