mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
- Updated macOS test bundle IDs to use consistent naming pattern: - sh.vibetunnel.vibetunnelTests → sh.vibetunnel.vibetunnel.tests - sh.vibetunnel.vibetunnelTests.debug → sh.vibetunnel.vibetunnel.tests.debug - Updated iOS test bundle ID: - sh.vibetunnel.VibeTunnelTests-Mobile → sh.vibetunnel.ios.tests - Fixed iOS logging to use sh.vibetunnel.ios subsystem consistently - Created logging configuration profile in apple/logging/ to enable full debug logging - Configuration profile covers all VibeTunnel subsystems and bundle IDs - Updated documentation to reflect new bundle identifiers and logging setup
6 KiB
6 KiB
VibeTunnel iOS
🚀 Beautiful native iOS/iPadOS client for VibeTunnel terminal multiplexer with a modern, terminal-inspired design.
✨ Features
- Native SwiftUI app optimized for iOS 18+
- Beautiful terminal-inspired UI with custom theme and animations
- Full terminal emulation using SwiftTerm
- Real-time session management with SSE streaming
- Keyboard toolbar with special keys (arrows, ESC, CTRL combinations)
- Font size adjustment with live preview
- Haptic feedback throughout the interface
- Session operations: Create, kill, cleanup sessions
- Auto-reconnection and error handling
- iPad optimized (split view support coming soon)
🎨 Design Highlights
- Custom dark theme inspired by modern terminal aesthetics
- Smooth animations and transitions
- Glow effects on interactive elements
- Consistent spacing and typography
- Terminal-style monospace fonts throughout
📱 Setup Instructions
1. Create Xcode Project
- Open Xcode 16+
- Create a new project:
- Choose iOS → App
- Product Name:
VibeTunnel - Team: Select your development team
- Organization Identifier: Your identifier (e.g.,
com.yourcompany) - Interface: SwiftUI
- Language: Swift
- Minimum Deployments: iOS 18.0
- Save in the
ios/directory
2. Add Project Files
- Delete the default
ContentView.swiftandVibeTunnelApp.swift - Drag the entire
VibeTunnel/folder into Xcode - Choose "Create groups" and ensure "Copy items if needed" is checked
- Make sure the target membership is set for all files
3. Add SwiftTerm Package
- Select your project in the navigator
- Select the VibeTunnel target
- Go to Package Dependencies tab
- Click the + button
- Enter:
https://github.com/migueldeicaza/SwiftTerm.git - Version rule: Up to Next Major from
1.2.0 - Click Add Package
- Select SwiftTerm library and add to VibeTunnel target
4. Configure Info.plist
- Replace the auto-generated Info.plist with the one in
Resources/Info.plist - Or manually add:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
5. (Optional) Add Custom Fonts
For the best experience, add Fira Code font:
- Download Fira Code
- Add
.ttffiles to the project - Ensure they're included in the target
- The Info.plist already includes font references
6. Build and Run
Using Xcode
- Select your device or simulator (iOS 18+)
- Press ⌘R to build and run
- The app will launch with the beautiful connection screen
Using xcodebuildmcp
# Build the app
xcodebuildmcp build -workspace ../VibeTunnel.xcworkspace -scheme VibeTunnel-iOS
# Run tests
xcodebuildmcp test -workspace ../VibeTunnel.xcworkspace -scheme VibeTunnel-iOS
# Build for device
xcodebuildmcp build -workspace ../VibeTunnel.xcworkspace -scheme VibeTunnel-iOS -destination "generic/platform=iOS"
🏗️ Architecture
VibeTunnel/
├── App/ # App entry point and main views
├── Models/ # Data models (Session, ServerConfig, etc.)
├── Views/ # UI Components
│ ├── Connection/ # Server connection flow
│ ├── Sessions/ # Session list and management
│ ├── Terminal/ # Terminal emulator integration
│ └── Common/ # Reusable components
├── Services/ # Networking and API
│ ├── APIClient # HTTP client for REST API
│ ├── SessionService # Session management logic
│ └── SSEClient # Server-Sent Events streaming
├── Utils/ # Helpers and extensions
│ └── Theme.swift # Design system and styling
└── Resources/ # Assets and configuration
🚦 Usage
-
Connect to Server
- Enter your VibeTunnel server IP/hostname
- Default port is 3000
- Optionally name your connection
-
Manage Sessions
- Tap + to create new session
- Choose command (zsh, bash, python3, etc.)
- Set working directory
- Name your session (optional)
-
Use Terminal
- Full terminal emulation with SwiftTerm
- Special keys toolbar for mobile input
- Pinch to zoom or use menu for font size
- Long press for copy/paste
-
Session Actions
- Swipe or long-press for context menu
- Kill running sessions
- Clean up exited sessions
- Batch cleanup available
🛠️ Development Notes
- Minimum iOS: 18.0 (uses latest SwiftUI features)
- Swift: 6.0 compatible
- Dependencies: SwiftTerm for terminal emulation
- Architecture: MVVM with SwiftUI and Combine
Logging with vtlog
Monitor app logs in real-time using vtlog:
# Monitor all VibeTunnel logs
vtlog
# Filter for specific components
vtlog | grep BonjourDiscovery
vtlog | grep Logger
vtlog | grep ServerConfig
# Verbose logging
vtlog -v
# Monitor specific subsystem
vtlog --subsystem sh.vibetunnel.ios
Code Quality
# Format and lint code
./scripts/lint.sh
# Run SwiftFormat only
swiftformat .
# Run SwiftLint only
swiftlint
🐛 Troubleshooting
- Connection fails: Ensure device and server are on same network
- "Transport security" error: Check NSAppTransportSecurity in Info.plist
- Keyboard issues: The toolbar provides special keys for terminal control
- Performance: Adjust font size if rendering is slow on older devices
🎯 Future Enhancements
- iPad split view and multitasking
- Hardware keyboard shortcuts
- Session recording and playback
- Multiple server connections
- Custom themes
- File upload/download
- Session sharing
📄 License
Same as VibeTunnel project.
Note: This is a complete, production-ready iOS app. All core features are implemented including terminal emulation, session management, and a beautiful UI. The only remaining task is iPad-specific optimizations for split view.