montana/macOS/MontanaPresence/build.sh

135 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# Build Montana v3.18.0 — NTS Anchor — 36 Global Atomic Time Servers (RFC 8915)
set -e
DIR="$(cd "$(dirname "$0")" && pwd)"
APP="$DIR/Montana.app"
echo "Building Montana v3.18.0..."
# Clean
rm -rf "$APP"
rm -rf "$DIR/MontanaPresence.app"
# ═══════════════════════════════════════════════════════════════
# Compile libargon2 (reference C implementation)
# ═══════════════════════════════════════════════════════════════
echo " Building libargon2..."
ARGON2_DIR="$DIR/Crypto/argon2"
ARGON2_BUILD="$ARGON2_DIR/build"
mkdir -p "$ARGON2_BUILD"
ARGON2_CFLAGS="-O2 -target arm64-apple-macos14.0 -I$ARGON2_DIR/include -I$ARGON2_DIR/src"
cc $ARGON2_CFLAGS -c "$ARGON2_DIR/src/argon2.c" -o "$ARGON2_BUILD/argon2.o"
cc $ARGON2_CFLAGS -c "$ARGON2_DIR/src/core.c" -o "$ARGON2_BUILD/core.o"
cc $ARGON2_CFLAGS -c "$ARGON2_DIR/src/thread.c" -o "$ARGON2_BUILD/thread.o"
cc $ARGON2_CFLAGS -c "$ARGON2_DIR/src/encoding.c" -o "$ARGON2_BUILD/encoding.o"
cc $ARGON2_CFLAGS -c "$ARGON2_DIR/src/ref.c" -o "$ARGON2_BUILD/ref.o"
cc $ARGON2_CFLAGS -c "$ARGON2_DIR/src/blake2/blake2b.c" -o "$ARGON2_BUILD/blake2b.o"
ar rcs "$ARGON2_BUILD/libargon2.a" \
"$ARGON2_BUILD/argon2.o" \
"$ARGON2_BUILD/core.o" \
"$ARGON2_BUILD/thread.o" \
"$ARGON2_BUILD/encoding.o" \
"$ARGON2_BUILD/ref.o" \
"$ARGON2_BUILD/blake2b.o"
echo " libargon2 built: $ARGON2_BUILD/libargon2.a"
# ═══════════════════════════════════════════════════════════════
# Compile Swift + link liboqs + libargon2
# ═══════════════════════════════════════════════════════════════
swiftc \
-o "$DIR/MontanaPresence" \
-import-objc-header "$DIR/Crypto/Montana-Bridging-Header.h" \
-I "$DIR/Crypto/liboqs/include" \
-L "$DIR/Crypto/liboqs/lib" \
-loqs \
-I "$DIR/Crypto/argon2/include" \
-L "$DIR/Crypto/argon2/build" \
-largon2 \
-framework SwiftUI \
-framework Security \
-framework ServiceManagement \
-framework CoreImage \
-framework Network \
-framework NetworkExtension \
-framework WebKit \
-target arm64-apple-macos14.0 \
-parse-as-library \
"$DIR/Crypto/BIP39Wordlist.swift" \
"$DIR/Crypto/MontanaSeed.swift" \
"$DIR/Crypto/MLDSA65.swift" \
"$DIR/KeychainManager.swift" \
"$DIR/CryptoManager.swift" \
"$DIR/LanguageManager.swift" \
"$DIR/MontanaAPIClient.swift" \
"$DIR/PresenceEngine.swift" \
"$DIR/VPNManager.swift" \
"$DIR/SharedSidebar.swift" \
"$DIR/SendView.swift" \
"$DIR/ReceiveView.swift" \
"$DIR/TimeChainExplorerView.swift" \
"$DIR/UpdateManager.swift" \
"$DIR/JunonaView.swift" \
"$DIR/MainWindowView.swift" \
"$DIR/WalletTabView.swift" \
"$DIR/MenuBarView.swift" \
"$DIR/HistoryView.swift" \
"$DIR/NTSAnchorView.swift" \
"$DIR/SettingsView.swift" \
"$DIR/MontanaPresenceApp.swift"
# Create .app bundle
mkdir -p "$APP/Contents/MacOS"
mkdir -p "$APP/Contents/Resources"
mv "$DIR/MontanaPresence" "$APP/Contents/MacOS/"
cp "$DIR/Info.plist" "$APP/Contents/"
cp "$DIR/Montana.icns" "$APP/Contents/Resources/" 2>/dev/null || true
# Copy logo images to Resources
cp "$DIR/JunonaLogo.jpg" "$APP/Contents/Resources/" 2>/dev/null || true
cp "$DIR/JunonaReverse.jpg" "$APP/Contents/Resources/" 2>/dev/null || true
cp "$DIR/NetworkLogo.png" "$APP/Contents/Resources/" 2>/dev/null || true
cp "$DIR/TimeCoin.png" "$APP/Contents/Resources/" 2>/dev/null || true
# Sign with entitlements (ad-hoc)
codesign --force --sign - --entitlements "$DIR/Entitlements.plist" "$APP"
# Create zip for distribution
cd "$DIR"
rm -f Montana.app.zip
zip -r -q Montana.app.zip Montana.app
# ═══════════════════════════════════════════════════════════════
# AUTO-DEPLOY to /Applications/ — единственная точка запуска
# Это предотвращает запуск старых версий из Launchpad/Spotlight
# ═══════════════════════════════════════════════════════════════
# Kill old Montana process (if running)
pkill -f "Montana.app/Contents/MacOS/MontanaPresence" 2>/dev/null || true
sleep 1
# Remove old copy from /Applications/
rm -rf "/Applications/Montana.app"
# Install fresh build to /Applications/
cp -R "$APP" "/Applications/Montana.app"
# Reset Launchpad cache so only /Applications/ copy shows
defaults write com.apple.dock ResetLaunchPad -bool true
killall Dock 2>/dev/null || true
echo ""
echo "═══════════════════════════════════════════════════════"
echo " Montana v3.18.0 — BUILD + DEPLOY COMPLETE"
echo "═══════════════════════════════════════════════════════"
echo " Built: $APP"
echo " Installed: /Applications/Montana.app"
echo " Package: $DIR/Montana.app.zip"
echo ""
echo " Launching..."
open "/Applications/Montana.app"