<?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: Deskferry Team</title>
    <description>The latest articles on DEV Community by Deskferry Team (@deskferry-guides).</description>
    <link>https://dev.to/deskferry-guides</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%2F4149935%2Fdee3f845-0e30-4df4-8e67-a74cb2ceb89a.jpg</url>
      <title>DEV Community: Deskferry Team</title>
      <link>https://dev.to/deskferry-guides</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deskferry-guides"/>
    <language>en</language>
    <item>
      <title>Clipboard Sync and Clipboard History Need Different Tests</title>
      <dc:creator>Deskferry Team</dc:creator>
      <pubDate>Tue, 29 Sep 2026 14:28:58 +0000</pubDate>
      <link>https://dev.to/deskferry-guides/clipboard-sync-and-clipboard-history-need-different-tests-1a7o</link>
      <guid>https://dev.to/deskferry-guides/clipboard-sync-and-clipboard-history-need-different-tests-1a7o</guid>
      <description>&lt;p&gt;When a two-Mac clipboard workflow fails, “the clipboard didn't work” is too vague to debug. At least four things might have happened: the source app wrote the wrong representation, a sync app didn't carry the latest copy, the destination app chose an unexpected representation, or a user tried to recover an older item that was never meant to travel between devices.&lt;/p&gt;

&lt;p&gt;The useful distinction is &lt;strong&gt;current-copy transport&lt;/strong&gt; versus &lt;strong&gt;local history retrieval&lt;/strong&gt;. The first moves a new clipboard event between Macs. The second lets a person find an earlier copy on one Mac. Treating them as separate behaviours makes testing and support much clearer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with an event, not a screenshot
&lt;/h2&gt;

&lt;p&gt;On macOS, an &lt;code&gt;NSPasteboard&lt;/code&gt; can expose multiple data types for an item. A copied URL might be represented as text and as a URL; a rich selection might offer plain text, HTML, and RTF. Apple documents &lt;code&gt;NSPasteboard.types&lt;/code&gt; as the union of the declared types, and recommends checking types before reading data. The &lt;code&gt;changeCount&lt;/code&gt; value changes when pasteboard ownership changes. Neither fact alone proves that a particular receiving app will paste the representation you expected.&lt;/p&gt;

&lt;p&gt;For a reproducible manual test, record this small event tuple:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source&lt;/td&gt;
&lt;td&gt;Mac A, browser address bar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event&lt;/td&gt;
&lt;td&gt;Copy a harmless, unique marker at 10:32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intended representation&lt;/td&gt;
&lt;td&gt;Plain text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Destination&lt;/td&gt;
&lt;td&gt;Mac B, plain text editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observation&lt;/td&gt;
&lt;td&gt;Exact marker pasted at 10:33&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use a fresh marker for each run, such as &lt;code&gt;handoff-20260929-1032&lt;/code&gt;. A stale marker can look like a successful sync when it is actually yesterday's clipboard content. Never use a password, token, private message, or customer data as a test marker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four separate checks
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Source copy:&lt;/strong&gt; Paste locally on Mac A immediately. If this fails, investigate the source app before the network.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current-copy transfer:&lt;/strong&gt; With both Macs approved in the same active pairing group, sync enabled and the receiving peer ready, copy a fresh marker on Mac A and paste it on Mac B. Record the copy and paste times, the pasted text, and the comparison rule you actually used. A visual match alone does not establish byte equality. Reverse the direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Representation choice:&lt;/strong&gt; Repeat with a URL, a rich text selection, and an image or file only if the product tier supports those formats. Compare what the destination app actually pastes, not just what its clipboard viewer displays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History retrieval:&lt;/strong&gt; Pause clipboard sync to isolate local retention. On Mac A, copy marker A, then B, then C. Retrieve A from Mac A's history. Repeat independently on Mac B. Do not assume one Mac's past history has been replicated to the other.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These checks identify different failure boundaries. A successful current-copy transfer says nothing about history retention. A successful history retrieval says nothing about whether a new copy crosses the LAN.&lt;/p&gt;

&lt;h2&gt;
  
  
  A compact failure matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;First useful question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mac B pastes an old marker&lt;/td&gt;
&lt;td&gt;Was a fresh copy observed on Mac A after pairing?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text works, image does not&lt;/td&gt;
&lt;td&gt;Is the format supported by the chosen plan and receiving app?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mac A can restore an old copy; Mac B cannot&lt;/td&gt;
&lt;td&gt;Is history local to each Mac?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rich formatting disappears&lt;/td&gt;
&lt;td&gt;Which pasteboard representation did the destination choose?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One direction works&lt;/td&gt;
&lt;td&gt;Were both devices in the same active group when the reverse copy occurred?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is a diagnostic table, not a promise that every clipboard manager supports every cell. For Deskferry specifically, the product guide describes LAN sync for new copies while each Mac keeps its own history. Its &lt;a href="https://deskferry.net/mac-clipboard-sync/" rel="noopener noreferrer"&gt;Mac clipboard sync guide&lt;/a&gt; explains the two-Mac pairing workflow; the separate &lt;a href="https://deskferry.net/mac-clipboard-history/" rel="noopener noreferrer"&gt;clipboard history guide&lt;/a&gt; covers local retrieval. Deskferry is available on the Mac App Store for macOS 14 or later. Use the current product guides for feature and plan details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the test safe enough to repeat
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose harmless, unique markers that reveal no private data.&lt;/li&gt;
&lt;li&gt;Keep the receiving app constant when comparing runs; different apps may prefer different pasteboard representations.&lt;/li&gt;
&lt;li&gt;Record whether the Macs were on the same network and active pairing group.&lt;/li&gt;
&lt;li&gt;Record the observed result, including failures and uncertainty. A preview or successful local paste is not evidence of cross-device transfer.&lt;/li&gt;
&lt;li&gt;Clear or replace test clipboard contents when you finish, especially on a shared machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're implementing a macOS clipboard feature, Apple's &lt;a href="https://developer.apple.com/documentation/appkit/nspasteboard/changecount" rel="noopener noreferrer"&gt;&lt;code&gt;NSPasteboard.changeCount&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://developer.apple.com/documentation/appkit/nspasteboard/types" rel="noopener noreferrer"&gt;&lt;code&gt;NSPasteboard.types&lt;/code&gt;&lt;/a&gt; documentation are useful starting points. The practical lesson is to test the full copy-to-paste path with controlled content, and to report transport and history as two distinct results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick the next instrument for the boundary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For the &lt;strong&gt;source representation&lt;/strong&gt;, the &lt;a href="https://deskferry-notes.hashnode.dev/inspect-macos-pasteboard-types-without-logging-clipboard-contents" rel="noopener noreferrer"&gt;Swift metadata-only inspector&lt;/a&gt; lists declared types and change count without printing the copied payload. Use it with a harmless fixture; type metadata does not prove receiver delivery.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;event timing&lt;/strong&gt;, the &lt;a href="https://deskferry-copy-timeline.val.run/" rel="noopener noreferrer"&gt;seven-case new-copy simulation&lt;/a&gt; lets you reason about readiness, pause and reconnect. Its outcomes describe a model, so keep a separate real-device observation.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;local history&lt;/strong&gt;, use the &lt;a href="https://docs.google.com/document/d/e/2PACX-1vQox-yGmhc52YhYjpIT7qNNTloPoceWXMcdPqjf2p5LnnpfYLMPCr8xrlnjdYJmf6njj2qMSQw8687t/pub" rel="noopener noreferrer"&gt;Mac history audit worksheet&lt;/a&gt; to record whether an item is found, fully accessible and actually restored. Those three answers can differ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: This article was drafted with AI assistance and checked against the linked Apple documentation and Deskferry product guides.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>productivity</category>
      <category>softwareengineering</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
