<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eduardo Revilla Vaquero</title>
    <description>The latest articles on DEV Community by Eduardo Revilla Vaquero (@eduardo_revillavaquero_0).</description>
    <link>https://dev.to/eduardo_revillavaquero_0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3805756%2Ffc601217-918f-4b97-866a-e8e1609eef5e.jpg</url>
      <title>DEV Community: Eduardo Revilla Vaquero</title>
      <link>https://dev.to/eduardo_revillavaquero_0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eduardo_revillavaquero_0"/>
    <language>en</language>
    <item>
      <title>I shipped a clipboard manager inside the macOS App Store sandbox. Here's what works and what doesn't.</title>
      <dc:creator>Eduardo Revilla Vaquero</dc:creator>
      <pubDate>Thu, 06 Aug 2026 17:26:28 +0000</pubDate>
      <link>https://dev.to/eduardo_revillavaquero_0/i-shipped-a-clipboard-manager-inside-the-macos-app-store-sandbox-heres-what-works-and-what-5a30</link>
      <guid>https://dev.to/eduardo_revillavaquero_0/i-shipped-a-clipboard-manager-inside-the-macos-app-store-sandbox-heres-what-works-and-what-5a30</guid>
      <description>&lt;p&gt;I've used clipboard managers on the Mac for about a decade, and they all stop in the same place: they remember everything and do nothing with it. I'd copy a minified JSON blob and paste it into an editor just to format it. Copy a variable name and retype it in snake_case. Copy a screenshot of an error and go hunting for an OCR tool. The history was never the bottleneck. The round trip to another app was.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://apps.apple.com/app/id6759555460" rel="noopener noreferrer"&gt;ClipMason&lt;/a&gt;, a clipboard manager that acts on what you copy instead of just storing it. The features aren't the interesting part for this crowd, though. The interesting part was staying inside the Mac App Store sandbox, because most of the well-known managers ship outside it or lean on the Accessibility API. I wanted to know what you can actually do without either.&lt;/p&gt;

&lt;p&gt;Here are the notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What works fine in the sandbox
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NSPasteboard monitoring.&lt;/strong&gt; There is no notification API for the pasteboard, so it is a 0.5s &lt;code&gt;Timer&lt;/code&gt; polling &lt;code&gt;changeCount&lt;/code&gt;. Idle cost is negligible; I measured it before shipping and it never showed up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global hotkeys via Carbon &lt;code&gt;RegisterEventHotKey&lt;/code&gt; (⌘⇧V).&lt;/strong&gt; No Input Monitoring prompt, no Accessibility prompt. This surprised me. A lot of people assume a global shortcut forces you out of the sandbox, and it doesn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vision for OCR.&lt;/strong&gt; &lt;code&gt;VNRecognizeTextRequest&lt;/code&gt; with &lt;code&gt;.accurate&lt;/code&gt; is a system framework, works entitlement-free, and it was good enough that I never bothered writing a fallback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SwiftData for storage&lt;/strong&gt;, with &lt;code&gt;@Attribute(.externalStorage)&lt;/code&gt; on the image blobs so the database doesn't balloon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MenuBarExtra plus a Window scene plus a Settings scene&lt;/strong&gt;, with &lt;code&gt;LSUIElement = true&lt;/code&gt; so there is no Dock icon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;NSWorkspace.frontmostApplication&lt;/code&gt;&lt;/strong&gt; for attributing each clip to the app it came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  What doesn't
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auto-paste into the frontmost app.&lt;/strong&gt; That needs the Accessibility API (&lt;code&gt;AXUIElement&lt;/code&gt;) or posting &lt;code&gt;CGEvent&lt;/code&gt;s into another process. Both are out in the sandbox. So ⌘⇧V puts the clip on the pasteboard and you press ⌘V yourself. This is the one real UX cost, and I would rather say it plainly than pretend it isn't there. If auto-paste is a dealbreaker for you, an Accessibility-based manager is the right call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading other apps' state&lt;/strong&gt; beyond what &lt;code&gt;NSWorkspace&lt;/code&gt; exposes. Not available, by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The privacy bit worth stealing
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;org.nspasteboard.ConcealedType&lt;/code&gt; is a community convention, not an Apple API. Password managers set it on the pasteboard when they copy a secret. Checking for it is three lines and means passwords never enter your history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;concealed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;NSPasteboard&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;PasteboardType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;rawValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"org.nspasteboard.ConcealedType"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pasteboard&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;forType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;concealed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are building anything that touches &lt;code&gt;NSPasteboard&lt;/code&gt;, please implement this. It is the difference between a clipboard history and a password leak.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Roughly: models (SwiftData) / services (&lt;code&gt;ClipboardMonitor&lt;/code&gt;, &lt;code&gt;HotkeyManager&lt;/code&gt;, &lt;code&gt;OCRService&lt;/code&gt;, &lt;code&gt;SmartTagDetector&lt;/code&gt;, &lt;code&gt;PrivacyManager&lt;/code&gt;) / views split by surface (menu bar, popup, main window, actions, settings).&lt;/p&gt;

&lt;p&gt;The one decision that paid off: actions are enums with an &lt;code&gt;execute(_:)&lt;/code&gt; method. &lt;code&gt;TextAction&lt;/code&gt; has 23 cases (case conversions, URL/Base64, JSON pretty-print and minify, hashes, line ops, counts), &lt;code&gt;ImageAction&lt;/code&gt; has 14 (OCR, rotate, flip, resize, annotate, export). Adding a transformation is one case, and localization falls out of the enum almost for free.&lt;/p&gt;

&lt;p&gt;About 4,700 lines of Swift, a 2.9 MB shipped binary, 17 languages through String Catalogs, and no network code at all. Grep the binary for &lt;code&gt;URLSession&lt;/code&gt; and you get nothing, which is exactly what a clipboard manager should be.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to see it
&lt;/h2&gt;

&lt;p&gt;ClipMason is on the &lt;a href="https://apps.apple.com/app/id6759555460" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt; for $6.99, one time, no subscription. macOS 14+.&lt;/p&gt;

&lt;p&gt;Mostly, though, I am curious what other sandbox edges people have run into. If you have shipped something that had to stay inside the App Store and found a workaround, or a wall, I would like to hear it.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>macos</category>
      <category>showdev</category>
      <category>swiftui</category>
    </item>
    <item>
      <title>I built a clipboard manager for macOS that replaces 5 different tools</title>
      <dc:creator>Eduardo Revilla Vaquero</dc:creator>
      <pubDate>Wed, 04 Mar 2026 12:17:33 +0000</pubDate>
      <link>https://dev.to/eduardo_revillavaquero_0/i-built-a-clipboard-manager-for-macos-that-replaces-5-different-tools-i39</link>
      <guid>https://dev.to/eduardo_revillavaquero_0/i-built-a-clipboard-manager-for-macos-that-replaces-5-different-tools-i39</guid>
      <description>&lt;p&gt;As a developer I was tired of switching between tools every time I needed to process something I copied. Format JSON? Open a website. Encode Base64? Another tab. Resize an image? Open Preview. Convert a hex color? Google it. So I built ClipMason, a clipboard manager for macOS that detects what you copy and offers contextual actions right there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4isebiactdqc5a3kplta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4isebiactdqc5a3kplta.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How it works&lt;/p&gt;

&lt;p&gt;ClipMason lives in the menu bar. Every time you copy something, it detects the content type and shows relevant actions.&lt;/p&gt;

&lt;p&gt;Text (22+ actions)&lt;/p&gt;

&lt;p&gt;Case conversion: uppercase, lowercase, Title Case, camelCase, snake_case, kebab-case&lt;/p&gt;

&lt;p&gt;Encoding: Base64, URL encode/decode&lt;/p&gt;

&lt;p&gt;Formatting: JSON pretty print, JSON minify&lt;/p&gt;

&lt;p&gt;Hashing: MD5, SHA-256&lt;/p&gt;

&lt;p&gt;Lines: sort A-Z/Z-A, remove duplicates, remove blank lines&lt;/p&gt;

&lt;p&gt;Stats: character, word, and line count&lt;/p&gt;

&lt;p&gt;Images&lt;/p&gt;

&lt;p&gt;Resize with precise control (percentage or exact pixel dimensions)&lt;/p&gt;

&lt;p&gt;Rotate, flip, grayscale, invert colors&lt;/p&gt;

&lt;p&gt;Annotate with drawings&lt;/p&gt;

&lt;p&gt;Extract text with OCR&lt;/p&gt;

&lt;p&gt;Export as PNG or JPEG&lt;/p&gt;

&lt;p&gt;Colors&lt;br&gt;
Copy a hex string like #FF5733? ClipMason detects it automatically and lets you convert to HEX, RGB, HSL, SwiftUI Color or CSS format.&lt;/p&gt;

&lt;p&gt;URLs&lt;/p&gt;

&lt;p&gt;Open in browser&lt;/p&gt;

&lt;p&gt;Extract domain&lt;/p&gt;

&lt;p&gt;Convert to Markdown link&lt;/p&gt;

&lt;p&gt;Files&lt;/p&gt;

&lt;p&gt;Open with default app&lt;/p&gt;

&lt;p&gt;Reveal in Finder&lt;/p&gt;

&lt;p&gt;Copy path for terminal use&lt;/p&gt;

&lt;p&gt;Tech stack&lt;/p&gt;

&lt;p&gt;SwiftUI for the UI, SwiftData for persistence, Swift 6 with strict concurrency. macOS 14+ native app, no Electron. 16 languages supported. Everything runs locally. No cloud, no tracking, no subscription.&lt;/p&gt;

&lt;p&gt;What I learned building it&lt;/p&gt;

&lt;p&gt;The hardest part was clipboard type detection. macOS puts multiple representations on the pasteboard simultaneously—for example, copying a file also puts a PNG icon on the clipboard. Getting the detection order right was tricky.&lt;/p&gt;

&lt;p&gt;Another challenge was image resizing on Retina displays. Using lockFocus() creates a 2x backing store, so a 100x100 resize produced 200x200. Switching to explicit NSBitmapImageRep with pixel dimensions fixed it.&lt;/p&gt;

&lt;p&gt;ClipMason is available on the Mac App Store as a one-time purchase. I'd love to hear what actions you'd find useful—I'm actively adding features based on feedback.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
