mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-04-15 12:55:52 +00:00
* fix: remove hardcoded team ID from project, use xcconfig inheritance - Remove hardcoded DEVELOPMENT_TEAM from project.pbxproj to prevent conflicts - Fix xcconfig hierarchy so Local.xcconfig properly overrides defaults - Set Y5PE65HELJ as fallback for CI when Local.xcconfig doesn't exist - Local developers can now use their own team ID without project file changes * fix: revert to using $(inherited) for team ID instead of hardcoding The original setup was correct - using $(inherited) allows the team ID to be set from Local.xcconfig while falling back to project settings when needed. Hardcoding the team ID was unnecessary and went against the established pattern. * fix: restore Local.xcconfig to membershipExceptions Local.xcconfig must remain in membershipExceptions to prevent Xcode from incorrectly treating it as a compilable source file. Configuration files should be excluded from compilation and referenced via baseConfigurationReference. Without this exception, Xcode attempts to compile Local.xcconfig as source code, causing build errors and warnings, especially problematic for git-ignored files. --------- Co-authored-by: David Collado <davidcollado@MacBook-Pro-de-David.local> |
||
|---|---|---|
| .. | ||
| docs | ||
| scripts | ||
| Sources/VibeTunnelDependencies | ||
| TestResults-iOS.xcresult | ||
| VibeTunnel | ||
| VibeTunnel-iOS.xcodeproj | ||
| VibeTunnelTests | ||
| .gitignore | ||
| .swiftformat | ||
| .swiftlint.yml | ||
| conversion.md | ||
| Package.swift | ||
| README.md | ||
| run-tests-xcode.sh | ||
| run-tests.sh | ||
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
- Select your device or simulator (iOS 18+)
- Press ⌘R to build and run
- The app will launch with the beautiful connection screen
🏗️ 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
🐛 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.