Last week, I shared the first round of updates for DualClip, my open-source macOS clipboard manager. Since then, I’ve crossed off three major items from the roadmap—including the one I’m most excited about: you can finally download DualClip without needing to build it from source.
Here is the breakdown of what’s new in v1.1.0.
🔒 Secure Input Field Detection
This was at the top of my "What’s Next" list for a reason: Privacy.
When macOS has a password field focused, the system activates a mode called Secure Event Input. DualClip now checks for this state before every copy and paste operation. If you're typing a password into Safari, 1Password, or a terminal sudo prompt, DualClip silently steps back.
Swift
func isSecureInputActive() -> Bool {
return IsSecureEventInputEnabled()
}
The guard is dead simple—one line in handleCopy and one in handlePaste:
Swift
guard !AccessibilityService.shared.isSecureInputActive() else { return }
It’s the kind of feature that, when it works correctly, you never notice. And that’s exactly the point.
📦 Prebuilt Binaries (No Xcode Required!)
The biggest friction point in my original post was: "There's no prebuilt binary yet." Starting with v1.1.0, every release is signed with a Developer ID certificate and notarized by Apple. This means:
No more Gatekeeper warnings.
No "Open Anyway" dance in System Settings.
Just download, drag to Applications, and go.
🏗 The CI/CD Saga: 3 Bugs and a Notarization Pipeline
Getting the automated release pipeline working was... an adventure. I’m using GitHub Actions to handle the heavy lifting. The workflow triggers on version tags (v*..) and follows this sequence:
Build: swift build -c release on a macOS 14 ARM runner.
Import: Decode the .p12 certificate from GitHub Secrets.
Bundle: Assemble the .app structure.
Sign: codesign with hardened runtime and a timestamp.
Notarize: Submit to Apple, poll for completion, and staple the ticket.
Sounds clean on paper. In practice, it took four attempts and taught me three very humbling lessons:
Bug 1: The One-Character Typo
I spent 10 minutes staring at a 401 Unauthorized error from Apple’s API. It turned out to be a typo in my app-specific password secret: fjhk vs tihk. CI/CD reminds you that your eyes see what they want to see, not what’s actually there.
Bug 2: The Service Outage
Three consecutive submissions got stuck at "In Progress" for hours. I thought my script was hung. It turns out Apple's notarization service was actually having a global outage. Even the best pipeline can’t fix a broken cloud.
Bug 3: The awk Failure
My polling script used awk '{print $2}' to extract the status from notarytool info. However, the status string for a pending job is In Progress (two words). awk captured only "In," which matched nothing in my logic.
The Fix: Switched to sed 's/.*status: //' to grab the full string.
🔄 Updated Roadmap
Feature Status
Secure input field detection ✅ Shipped
RAM zeroing on termination ✅ Shipped
Image/rich text support ✅ Shipped
GitHub Actions CI/CD + Notarization ✅ Shipped
Homebrew Cask distribution 🔜 Next
Sparkle auto-update 📅 Planned
Try it out
If you’ve been waiting for a downloadable build, it’s ready for you:
Go to the Latest Releases.
Download DualClip-1.1.0-arm64.zip.
Unzip, move to Applications, and launch.
Grant Accessibility permission when prompted.
No Xcode. No build steps. No friction.
🔗 GitHub: https://github.com/RAKKUNN/DualClip
If you find a bug or have a feature request, feel free to open an issue or a PR!
Top comments (0)