@wangyaoshen/remux 0.3.8-dev.29e114b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +38 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- package/.github/dependabot.yml +33 -0
- package/.github/workflows/ci.yml +65 -0
- package/.github/workflows/deploy.yml +65 -0
- package/.github/workflows/publish.yml +312 -0
- package/.github/workflows/release-please.yml +21 -0
- package/.gitmodules +3 -0
- package/.nvmrc +1 -0
- package/.release-please-manifest.json +3 -0
- package/CLAUDE.md +104 -0
- package/Dockerfile +23 -0
- package/LICENSE +21 -0
- package/README.md +120 -0
- package/apps/ios/Config/signing.xcconfig +4 -0
- package/apps/ios/Package.swift +26 -0
- package/apps/ios/Remux.xcodeproj/project.pbxproj +477 -0
- package/apps/ios/Remux.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/Contents.json +23 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_1024x1024.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_120x120.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_152x152.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_167x167.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_180x180.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_20x20.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_29x29.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_40x40.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_58x58.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_60x60.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_76x76.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_80x80.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/AppIcon.appiconset/icon_87x87.png +0 -0
- package/apps/ios/Sources/Remux/Assets.xcassets/Contents.json +6 -0
- package/apps/ios/Sources/Remux/Extensions/FaceIDManager.swift +29 -0
- package/apps/ios/Sources/Remux/Extensions/InspectCache.swift +66 -0
- package/apps/ios/Sources/Remux/MainTabView.swift +32 -0
- package/apps/ios/Sources/Remux/Remux.entitlements +8 -0
- package/apps/ios/Sources/Remux/RemuxiOSApp.swift +14 -0
- package/apps/ios/Sources/Remux/RootView.swift +130 -0
- package/apps/ios/Sources/Remux/Views/Control/ControlView.swift +102 -0
- package/apps/ios/Sources/Remux/Views/Inspect/InspectView.swift +98 -0
- package/apps/ios/Sources/Remux/Views/Live/LiveTerminalView.swift +132 -0
- package/apps/ios/Sources/Remux/Views/Now/NowView.swift +173 -0
- package/apps/ios/Sources/Remux/Views/Onboarding/ManualConnectView.swift +55 -0
- package/apps/ios/Sources/Remux/Views/Onboarding/OnboardingView.swift +70 -0
- package/apps/ios/Sources/Remux/Views/Onboarding/QRScannerView.swift +92 -0
- package/apps/ios/Sources/Remux/Views/Settings/MeView.swift +136 -0
- package/apps/macos/Package.swift +37 -0
- package/apps/macos/Resources/shell-integration/bash/bash-preexec.sh +382 -0
- package/apps/macos/Resources/shell-integration/bash/ghostty.bash +315 -0
- package/apps/macos/Resources/shell-integration/elvish/lib/ghostty-integration.elv +191 -0
- package/apps/macos/Resources/shell-integration/fish/vendor_conf.d/ghostty-shell-integration.fish +246 -0
- package/apps/macos/Resources/shell-integration/nushell/vendor/autoload/ghostty.nu +110 -0
- package/apps/macos/Resources/shell-integration/zsh/.zshenv +61 -0
- package/apps/macos/Resources/shell-integration/zsh/ghostty-integration +458 -0
- package/apps/macos/Resources/terminfo/67/ghostty +0 -0
- package/apps/macos/Resources/terminfo/78/xterm-ghostty +0 -0
- package/apps/macos/Sources/Remux/AppDelegate.swift +257 -0
- package/apps/macos/Sources/Remux/CrashReporter.swift +210 -0
- package/apps/macos/Sources/Remux/FinderIntegration.swift +117 -0
- package/apps/macos/Sources/Remux/GhosttyConfig.swift +311 -0
- package/apps/macos/Sources/Remux/KeyboardShortcuts/ShortcutAction.swift +115 -0
- package/apps/macos/Sources/Remux/KeyboardShortcuts/ShortcutSettingsView.swift +271 -0
- package/apps/macos/Sources/Remux/KeyboardShortcuts/StoredShortcut.swift +149 -0
- package/apps/macos/Sources/Remux/MainContentView.swift +308 -0
- package/apps/macos/Sources/Remux/MenuBarManager.swift +275 -0
- package/apps/macos/Sources/Remux/NotificationManager.swift +145 -0
- package/apps/macos/Sources/Remux/PortScanner.swift +152 -0
- package/apps/macos/Sources/Remux/RemuxApp.swift +13 -0
- package/apps/macos/Sources/Remux/SSHDetector.swift +151 -0
- package/apps/macos/Sources/Remux/SessionPersistence.swift +226 -0
- package/apps/macos/Sources/Remux/SocketController.swift +258 -0
- package/apps/macos/Sources/Remux/UpdateChecker.swift +152 -0
- package/apps/macos/Sources/Remux/Views/CommandPalette.swift +198 -0
- package/apps/macos/Sources/Remux/Views/ConnectionView.swift +84 -0
- package/apps/macos/Sources/Remux/Views/InspectView.swift +127 -0
- package/apps/macos/Sources/Remux/Views/SettingsView.swift +77 -0
- package/apps/macos/Sources/Remux/Views/Sidebar/SidebarView.swift +410 -0
- package/apps/macos/Sources/Remux/Views/SplitTree/BrowserPanel.swift +193 -0
- package/apps/macos/Sources/Remux/Views/SplitTree/MarkdownPanel.swift +277 -0
- package/apps/macos/Sources/Remux/Views/SplitTree/PanelProtocol.swift +14 -0
- package/apps/macos/Sources/Remux/Views/SplitTree/SplitNode.swift +149 -0
- package/apps/macos/Sources/Remux/Views/SplitTree/SplitView.swift +234 -0
- package/apps/macos/Sources/Remux/Views/SplitTree/TerminalPanel.swift +26 -0
- package/apps/macos/Sources/Remux/Views/TabBarView.swift +94 -0
- package/apps/macos/Sources/Remux/Views/Terminal/ClipboardHelper.swift +101 -0
- package/apps/macos/Sources/Remux/Views/Terminal/CopyModeOverlay.swift +325 -0
- package/apps/macos/Sources/Remux/Views/Terminal/GhosttyNativeTerminalView.swift +39 -0
- package/apps/macos/Sources/Remux/Views/Terminal/GhosttyNativeView.swift +559 -0
- package/apps/macos/Sources/Remux/Views/Terminal/SurfaceSearchOverlay.swift +109 -0
- package/apps/macos/Sources/Remux/Views/Terminal/TerminalContainerView.swift +95 -0
- package/apps/macos/Sources/Remux/Views/Terminal/TerminalRelay.swift +117 -0
- package/build.mjs +33 -0
- package/native/android/DecodeGoldenPayloads.kt +487 -0
- package/native/android/ProtocolModels.kt +188 -0
- package/native/ios/DecodeGoldenPayloads.swift +711 -0
- package/native/ios/ProtocolModels.swift +200 -0
- package/package.json +45 -0
- package/packages/RemuxKit/Package.swift +27 -0
- package/packages/RemuxKit/Sources/RemuxKit/Device/DeviceManager.swift +27 -0
- package/packages/RemuxKit/Sources/RemuxKit/Models/ProtocolModels.swift +206 -0
- package/packages/RemuxKit/Sources/RemuxKit/Networking/MessageRouter.swift +108 -0
- package/packages/RemuxKit/Sources/RemuxKit/Networking/RemuxConnection.swift +395 -0
- package/packages/RemuxKit/Sources/RemuxKit/State/RemuxState.swift +188 -0
- package/packages/RemuxKit/Sources/RemuxKit/Storage/KeychainStore.swift +142 -0
- package/packages/RemuxKit/Sources/RemuxKit/Terminal/GhosttyBridge.swift +145 -0
- package/packages/RemuxKit/Sources/RemuxKit/Terminal/GhosttyTerminalView.swift +35 -0
- package/packages/RemuxKit/Sources/RemuxKit/Terminal/Resources/ghostty-terminal.html +91 -0
- package/packages/RemuxKit/Tests/RemuxKitTests/ConnectionIntegrationTest.swift +74 -0
- package/packages/RemuxKit/Tests/RemuxKitTests/KeychainStoreTests.swift +81 -0
- package/packages/RemuxKit/Tests/RemuxKitTests/ProtocolModelsTests.swift +179 -0
- package/packages/RemuxKit/Tests/RemuxKitTests/RemuxStateTests.swift +62 -0
- package/playwright.config.ts +17 -0
- package/pnpm-lock.yaml +1588 -0
- package/pty-daemon.js +303 -0
- package/release-please-config.json +14 -0
- package/scripts/auto-deploy.sh +46 -0
- package/scripts/build-dmg.sh +121 -0
- package/scripts/build-ghostty-kit.sh +43 -0
- package/scripts/check-active-terminology.mjs +132 -0
- package/scripts/setup-ci-secrets.sh +80 -0
- package/scripts/sync-ghostty-web.sh +28 -0
- package/scripts/upload-testflight.sh +100 -0
- package/server.js +7074 -0
- package/src/adapters/agent-events.ts +246 -0
- package/src/adapters/claude-code.ts +158 -0
- package/src/adapters/codex.ts +210 -0
- package/src/adapters/generic-shell.ts +58 -0
- package/src/adapters/index.ts +15 -0
- package/src/adapters/registry.ts +99 -0
- package/src/adapters/types.ts +41 -0
- package/src/auth.ts +174 -0
- package/src/e2ee.ts +236 -0
- package/src/git-service.ts +168 -0
- package/src/message-buffer.ts +137 -0
- package/src/pty-daemon.ts +357 -0
- package/src/push.ts +127 -0
- package/src/renderers.ts +455 -0
- package/src/server.ts +2407 -0
- package/src/service.ts +226 -0
- package/src/session.ts +978 -0
- package/src/store.ts +1422 -0
- package/src/team.ts +123 -0
- package/src/tunnel.ts +126 -0
- package/src/types.d.ts +50 -0
- package/src/vt-tracker.ts +188 -0
- package/src/workspace-head.ts +144 -0
- package/src/workspace.ts +153 -0
- package/src/ws-handler.ts +1526 -0
- package/start.ps1 +83 -0
- package/tests/adapters.test.js +171 -0
- package/tests/auth.test.js +243 -0
- package/tests/codex-adapter.test.js +535 -0
- package/tests/durable-stream.test.js +153 -0
- package/tests/e2e/app.spec.js +530 -0
- package/tests/e2ee.test.js +325 -0
- package/tests/message-buffer.test.js +245 -0
- package/tests/message-routing.test.js +305 -0
- package/tests/pty-daemon.test.js +346 -0
- package/tests/push.test.js +281 -0
- package/tests/renderers.test.js +391 -0
- package/tests/search-shell.test.js +499 -0
- package/tests/server.test.js +882 -0
- package/tests/service.test.js +267 -0
- package/tests/store.test.js +369 -0
- package/tests/tunnel.test.js +67 -0
- package/tests/workspace-head.test.js +116 -0
- package/tests/workspace.test.js +417 -0
- package/tsconfig.backend.json +11 -0
- package/tsconfig.json +15 -0
- package/tui/client/client_test.go +125 -0
- package/tui/client/connection.go +342 -0
- package/tui/client/host_manager.go +141 -0
- package/tui/config/cache.go +81 -0
- package/tui/config/config.go +53 -0
- package/tui/config/config_test.go +89 -0
- package/tui/go.mod +32 -0
- package/tui/go.sum +50 -0
- package/tui/main.go +261 -0
- package/tui/tests/integration_test.go +283 -0
- package/tui/ui/model.go +310 -0
- package/vitest.config.js +10 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Export signing certificates and configure GitHub Secrets for CI/CD.
|
|
3
|
+
# Must be run interactively (GUI session required for keychain export).
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
REPO="yaoshenwang/remux"
|
|
7
|
+
EXPORT_PW="ci-remux-2024"
|
|
8
|
+
TMPDIR=$(mktemp -d)
|
|
9
|
+
trap "rm -rf $TMPDIR" EXIT
|
|
10
|
+
|
|
11
|
+
echo "=== Remux CI/CD Secrets Setup ==="
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
# Step 1: Export certificates
|
|
15
|
+
echo "[1/4] 导出签名证书..."
|
|
16
|
+
echo " macOS 会弹出 Keychain 授权对话框,请点击「允许」"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# Find cert hashes
|
|
20
|
+
DEV_HASH=$(security find-identity -v -p codesigning | grep "Apple Development" | head -1 | awk '{print $2}')
|
|
21
|
+
DIST_HASH=$(security find-identity -v -p codesigning | grep "Apple Distribution" | head -1 | awk '{print $2}')
|
|
22
|
+
DEVID_HASH=$(security find-identity -v -p codesigning | grep "Developer ID Application" | head -1 | awk '{print $2}')
|
|
23
|
+
|
|
24
|
+
echo " Apple Development: $DEV_HASH"
|
|
25
|
+
echo " Apple Distribution: $DIST_HASH"
|
|
26
|
+
echo " Developer ID Application: $DEVID_HASH"
|
|
27
|
+
echo ""
|
|
28
|
+
|
|
29
|
+
# Export all identities as one .p12 (Keychain will prompt for each)
|
|
30
|
+
security export -k ~/Library/Keychains/login.keychain-db \
|
|
31
|
+
-t identities -f pkcs12 -P "$EXPORT_PW" \
|
|
32
|
+
-o "$TMPDIR/certs.p12"
|
|
33
|
+
|
|
34
|
+
echo "✓ 证书导出成功"
|
|
35
|
+
|
|
36
|
+
# Step 2: Base64 encode
|
|
37
|
+
echo ""
|
|
38
|
+
echo "[2/4] 编码证书和 API Key..."
|
|
39
|
+
|
|
40
|
+
CERTS_B64=$(base64 < "$TMPDIR/certs.p12")
|
|
41
|
+
P8_B64=$(base64 < ~/.private_keys/AuthKey_2D79888WND.p8)
|
|
42
|
+
|
|
43
|
+
echo "✓ 编码完成"
|
|
44
|
+
|
|
45
|
+
# Step 3: Set GitHub Secrets
|
|
46
|
+
echo ""
|
|
47
|
+
echo "[3/4] 设置 GitHub Secrets..."
|
|
48
|
+
|
|
49
|
+
gh secret set APPLE_CERTIFICATES_P12 --repo "$REPO" --body "$CERTS_B64"
|
|
50
|
+
echo " ✓ APPLE_CERTIFICATES_P12"
|
|
51
|
+
|
|
52
|
+
gh secret set APPLE_CERTIFICATES_PASSWORD --repo "$REPO" --body "$EXPORT_PW"
|
|
53
|
+
echo " ✓ APPLE_CERTIFICATES_PASSWORD"
|
|
54
|
+
|
|
55
|
+
gh secret set APP_STORE_CONNECT_API_KEY_ID --repo "$REPO" --body "2D79888WND"
|
|
56
|
+
echo " ✓ APP_STORE_CONNECT_API_KEY_ID"
|
|
57
|
+
|
|
58
|
+
gh secret set APP_STORE_CONNECT_ISSUER_ID --repo "$REPO" --body "871408b2-72c1-4989-9530-5b72d99f4f27"
|
|
59
|
+
echo " ✓ APP_STORE_CONNECT_ISSUER_ID"
|
|
60
|
+
|
|
61
|
+
gh secret set APP_STORE_CONNECT_API_KEY_P8 --repo "$REPO" --body "$P8_B64"
|
|
62
|
+
echo " ✓ APP_STORE_CONNECT_API_KEY_P8"
|
|
63
|
+
|
|
64
|
+
gh secret set APPLE_TEAM_ID --repo "$REPO" --body "LY8QD6TJN6"
|
|
65
|
+
echo " ✓ APPLE_TEAM_ID"
|
|
66
|
+
|
|
67
|
+
# Step 4: Verify
|
|
68
|
+
echo ""
|
|
69
|
+
echo "[4/4] 验证..."
|
|
70
|
+
gh secret list --repo "$REPO"
|
|
71
|
+
|
|
72
|
+
echo ""
|
|
73
|
+
echo "=== 全部完成 ✅ ==="
|
|
74
|
+
echo "已配置以下 Secrets:"
|
|
75
|
+
echo " APPLE_CERTIFICATES_P12 — 签名证书 (Development + Distribution + Developer ID)"
|
|
76
|
+
echo " APPLE_CERTIFICATES_PASSWORD — 证书导出密码"
|
|
77
|
+
echo " APP_STORE_CONNECT_API_KEY_ID — API Key ID"
|
|
78
|
+
echo " APP_STORE_CONNECT_ISSUER_ID — Issuer ID"
|
|
79
|
+
echo " APP_STORE_CONNECT_API_KEY_P8 — API Key .p8 (base64)"
|
|
80
|
+
echo " APPLE_TEAM_ID — Apple Team ID"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Sync ghostty-web assets from npm package to RemuxKit bundle resources.
|
|
3
|
+
# Run after `pnpm install` to update the WKWebView terminal resources (iOS).
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
8
|
+
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
9
|
+
SRC_DIR="$ROOT_DIR/node_modules/ghostty-web/dist"
|
|
10
|
+
DST_DIR="$ROOT_DIR/packages/RemuxKit/Sources/RemuxKit/Terminal/Resources"
|
|
11
|
+
|
|
12
|
+
if [ ! -d "$SRC_DIR" ]; then
|
|
13
|
+
echo "Error: ghostty-web not found at $SRC_DIR"
|
|
14
|
+
echo "Run 'pnpm install' first."
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
echo "Syncing ghostty-web assets..."
|
|
19
|
+
|
|
20
|
+
# Copy main JS and WASM files
|
|
21
|
+
cp "$SRC_DIR/ghostty-web.js" "$DST_DIR/"
|
|
22
|
+
cp "$SRC_DIR/ghostty-vt.wasm" "$DST_DIR/" 2>/dev/null || true
|
|
23
|
+
|
|
24
|
+
# Record version
|
|
25
|
+
node -e "console.log(require('$ROOT_DIR/node_modules/ghostty-web/package.json').version)" \
|
|
26
|
+
> "$DST_DIR/ghostty-web-version.txt" 2>/dev/null || echo "unknown" > "$DST_DIR/ghostty-web-version.txt"
|
|
27
|
+
|
|
28
|
+
echo "Done. ghostty-web $(cat "$DST_DIR/ghostty-web-version.txt") synced to $DST_DIR"
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Archive and upload Remux iOS app to TestFlight.
|
|
3
|
+
# Uses App Store Connect API Key for authentication.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
7
|
+
IOS_DIR="$ROOT_DIR/apps/ios"
|
|
8
|
+
BUILD_DIR="$ROOT_DIR/build/ios"
|
|
9
|
+
VERSION=$(node -p "require('$ROOT_DIR/package.json').version" 2>/dev/null || echo "0.0.0")
|
|
10
|
+
|
|
11
|
+
# App Store Connect API Key config
|
|
12
|
+
API_KEY_ID="2D79888WND"
|
|
13
|
+
API_ISSUER_ID="871408b2-72c1-4989-9530-5b72d99f4f27"
|
|
14
|
+
API_KEY_PATH="$HOME/.private_keys/AuthKey_${API_KEY_ID}.p8"
|
|
15
|
+
|
|
16
|
+
if [ ! -f "$API_KEY_PATH" ]; then
|
|
17
|
+
echo "Error: API key not found at $API_KEY_PATH"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
AUTH_ARGS=(
|
|
22
|
+
-authenticationKeyPath "$API_KEY_PATH"
|
|
23
|
+
-authenticationKeyID "$API_KEY_ID"
|
|
24
|
+
-authenticationKeyIssuerID "$API_ISSUER_ID"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
echo "=== Uploading Remux iOS v${VERSION} to TestFlight ==="
|
|
28
|
+
|
|
29
|
+
# Clean build directory
|
|
30
|
+
rm -rf "$BUILD_DIR"
|
|
31
|
+
mkdir -p "$BUILD_DIR"
|
|
32
|
+
|
|
33
|
+
# Step 1: Archive
|
|
34
|
+
echo "Archiving..."
|
|
35
|
+
xcodebuild archive \
|
|
36
|
+
-project "$IOS_DIR/Remux.xcodeproj" \
|
|
37
|
+
-scheme Remux \
|
|
38
|
+
-destination "generic/platform=iOS" \
|
|
39
|
+
-archivePath "$BUILD_DIR/Remux.xcarchive" \
|
|
40
|
+
-allowProvisioningUpdates \
|
|
41
|
+
"${AUTH_ARGS[@]}" \
|
|
42
|
+
-quiet
|
|
43
|
+
|
|
44
|
+
if [ ! -d "$BUILD_DIR/Remux.xcarchive" ]; then
|
|
45
|
+
echo "Error: Archive failed"
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
echo "✓ Archive created"
|
|
49
|
+
|
|
50
|
+
# Step 2: Export IPA for App Store / TestFlight
|
|
51
|
+
echo "Exporting IPA..."
|
|
52
|
+
|
|
53
|
+
cat > "$BUILD_DIR/ExportOptions.plist" << 'PLIST'
|
|
54
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
55
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
56
|
+
<plist version="1.0">
|
|
57
|
+
<dict>
|
|
58
|
+
<key>method</key>
|
|
59
|
+
<string>app-store-connect</string>
|
|
60
|
+
<key>signingStyle</key>
|
|
61
|
+
<string>automatic</string>
|
|
62
|
+
<key>uploadSymbols</key>
|
|
63
|
+
<true/>
|
|
64
|
+
<key>manageAppVersionAndBuildNumber</key>
|
|
65
|
+
<true/>
|
|
66
|
+
</dict>
|
|
67
|
+
</plist>
|
|
68
|
+
PLIST
|
|
69
|
+
|
|
70
|
+
xcodebuild -exportArchive \
|
|
71
|
+
-archivePath "$BUILD_DIR/Remux.xcarchive" \
|
|
72
|
+
-exportOptionsPlist "$BUILD_DIR/ExportOptions.plist" \
|
|
73
|
+
-exportPath "$BUILD_DIR/export" \
|
|
74
|
+
-allowProvisioningUpdates \
|
|
75
|
+
"${AUTH_ARGS[@]}" \
|
|
76
|
+
-quiet
|
|
77
|
+
|
|
78
|
+
echo "✓ IPA exported"
|
|
79
|
+
|
|
80
|
+
# Step 3: Upload to App Store Connect (TestFlight)
|
|
81
|
+
echo "Uploading to TestFlight..."
|
|
82
|
+
|
|
83
|
+
IPA=$(find "$BUILD_DIR/export" -name "*.ipa" | head -1)
|
|
84
|
+
if [ -z "$IPA" ]; then
|
|
85
|
+
echo "Error: No IPA found in export directory"
|
|
86
|
+
exit 1
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
xcrun altool --upload-app \
|
|
90
|
+
--type ios \
|
|
91
|
+
--file "$IPA" \
|
|
92
|
+
--apiKey "$API_KEY_ID" \
|
|
93
|
+
--apiIssuer "$API_ISSUER_ID"
|
|
94
|
+
|
|
95
|
+
echo ""
|
|
96
|
+
echo "=== Done ==="
|
|
97
|
+
echo "Archive: $BUILD_DIR/Remux.xcarchive"
|
|
98
|
+
echo "IPA: $IPA"
|
|
99
|
+
echo ""
|
|
100
|
+
echo "Check TestFlight status: https://appstoreconnect.apple.com/apps/6761521429/testflight"
|