Prerequisites
Before building r2Vault, ensure you have the following:- macOS 15.0+ (Sequoia or later)
- Xcode 16+ with Command Line Tools
- A Cloudflare R2 bucket with API credentials (for testing)
r2Vault is built with Swift 6 and SwiftUI, leveraging modern concurrency patterns with async/await.
Build Instructions
Open in Xcode
Open the Xcode project:
The project is named “Fiaxe” internally but builds as “R2 Vault”.
Build and run
In Xcode, select the Fiaxe scheme and press ⌘R to build and run the app.The app will launch as a menu bar application. Look for the r2Vault icon in your macOS menu bar.
Release Builds
Building for Distribution
To create a release build from the command line:Creating a DMG
The project includes a GitHub Actions workflow that automatically creates DMG installers. You can view the DMG creation script in.github/workflows/release.yml.
For manual DMG creation, use tools like:
hdiutil(built into macOS)- create-dmg
- node-appdmg
Code Signing
If you want to sign the app for personal use:- Select your development team in Xcode under Signing & Capabilities
- Update the bundle identifier to something unique
- Build with code signing enabled
Automated Builds
The project uses GitHub Actions for automated builds and releases:- Trigger: Push a tag matching
v*.*.*(e.g.,v1.2.3) - Runner: macOS 15 with Xcode 16
- Output: DMG installer attached to GitHub Release
- Changelog: Automatically extracted from
CHANGELOG.md
.github/workflows/release.yml.
Troubleshooting
Build Errors
If you encounter build errors:- Clean build folder: Product → Clean Build Folder (⇧⌘K)
- Check Xcode version: Ensure you’re running Xcode 16+
- Verify macOS version: r2Vault requires macOS 15.0+
- Reset derived data:
rm -rf ~/Library/Developer/Xcode/DerivedData
Runtime Issues
Menu bar icon doesn’t appear:- The app runs exclusively in the menu bar (no Dock icon)
- Check Activity Monitor to verify the app is running
- Restart the app if needed
- File uploads via drag-and-drop work automatically
- File picker uploads require proper bookmark handling (already implemented)