<?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: Vivian Lyn</title>
    <description>The latest articles on DEV Community by Vivian Lyn (@lynvivian).</description>
    <link>https://dev.to/lynvivian</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%2F3998180%2Fb992089a-dff3-4b87-92e5-56b5f3d6cc90.png</url>
      <title>DEV Community: Vivian Lyn</title>
      <link>https://dev.to/lynvivian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lynvivian"/>
    <language>en</language>
    <item>
      <title>What I Learned Building a macOS Window Manager Without Private APIs</title>
      <dc:creator>Vivian Lyn</dc:creator>
      <pubDate>Tue, 23 Jun 2026 07:44:17 +0000</pubDate>
      <link>https://dev.to/lynvivian/what-i-learned-building-a-macos-window-manager-without-private-apis-1145</link>
      <guid>https://dev.to/lynvivian/what-i-learned-building-a-macos-window-manager-without-private-apis-1145</guid>
      <description>&lt;p&gt;I have been building a macOS window manager called SwipeX, and one thing became clear very quickly: moving windows on macOS is much harder than it looks.&lt;/p&gt;

&lt;p&gt;On the surface, window snapping sounds simple. Pick a target frame, move the window there, resize it, and you are done.&lt;/p&gt;

&lt;p&gt;In practice, macOS apps do not always behave that way.&lt;/p&gt;

&lt;p&gt;Some apps have strict minimum sizes. Some have custom title bars. Some expose extra accessibility windows. Finder may resize slowly. Xcode may refuse a requested width and then settle into a different frame than expected.&lt;/p&gt;

&lt;p&gt;The biggest lesson for me was this:&lt;/p&gt;

&lt;p&gt;Do not assume the requested frame is the final frame.&lt;/p&gt;

&lt;p&gt;A window manager needs to read the actual result back from the system. If an app cannot reach the requested size, the tool should adapt to what the app actually accepted instead of blindly trusting the original command.&lt;/p&gt;

&lt;p&gt;I also wanted SwipeX to avoid private APIs. That makes development slower, but it matters for long-term stability and App Store review. Public APIs, Accessibility, and Shortcuts each have limits, but they also force the design to be more careful.&lt;/p&gt;

&lt;p&gt;Another lesson is that workflow matters as much as geometry. Many macOS window managers are keyboard-first, which is great for some users. But on a MacBook, especially on a smaller screen, trackpad-first window control can feel more natural because your hand is already there.&lt;/p&gt;

&lt;p&gt;That is the direction I am exploring with SwipeX: title-bar swipe gestures for snapping, maximizing, showing the window behind, and restoring layouts.&lt;/p&gt;

&lt;p&gt;Official site:&lt;br&gt;
&lt;a href="https://swipex.lynvivian.com/" rel="noopener noreferrer"&gt;https://swipex.lynvivian.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>swift</category>
      <category>productivity</category>
      <category>ios</category>
      <category>ipad</category>
    </item>
  </channel>
</rss>
