<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Swift on nsf.name</title><link>https://nsf.name/tags/swift/</link><description>Recent content in Swift on nsf.name</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright © 2026, Nathaniel Flores.</copyright><lastBuildDate>Mon, 08 Jun 2026 19:15:02 -0600</lastBuildDate><atom:link href="https://nsf.name/tags/swift/index.xml" rel="self" type="application/rss+xml"/><item><title>Copycat: iOS Copyparty Client</title><link>https://nsf.name/blog/copycat-ios-copyparty-client/</link><pubDate>Mon, 08 Jun 2026 19:15:02 -0600</pubDate><guid>https://nsf.name/blog/copycat-ios-copyparty-client/</guid><description>&lt;p&gt;&lt;a href="https://copyparty.eu"&gt;Copyparty&lt;/a&gt; is a genuinely great file server that I like using, and it&amp;rsquo;s played an important role in many smaller projects I&amp;rsquo;ve done throughout the year when something like &lt;code&gt;scp&lt;/code&gt; or AirDrop just won&amp;rsquo;t do. The one area where it&amp;rsquo;s still really lacking is in user-friendly GUI and a native experience on mobile: while there is a pile of iOS shortcuts that allow for uploading to a copyparty server (and a small Android app that does roughly the same thing), it&amp;rsquo;s nothing quite like a full native app in terms of speed and ease of use.&lt;/p&gt;</description></item><item><title>Lufsa: Sticky Note Images</title><link>https://nsf.name/blog/lufsa-sticky-note-images/</link><pubDate>Mon, 01 Jun 2026 19:21:43 -0600</pubDate><guid>https://nsf.name/blog/lufsa-sticky-note-images/</guid><description>&lt;p&gt;After previous projects with SwiftUI, I became curious as to what the limits of the framework are, and how different the development experience is between macOS and iOS apps. To push those limits, I aimed to recreate a somewhat weirder application: &lt;a href="https://itn-web.it.liu.se/~stegu76/xteddy/index.html"&gt;&lt;code&gt;xteddy&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="why-xteddy"&gt;Why &lt;code&gt;xteddy&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;xteddy&lt;/code&gt; is a X11 application written by Professor Stefan Gustavson which originally did exactly one thing: draw a non-rectangular, floating window to the screen containing just the bundled &lt;code&gt;xteddy&lt;/code&gt; image, and implement some basic handlers to kill and open it appropriately. However, later versions released in 1997 onwards allow you to load any arbitrary &lt;code&gt;.xbm&lt;/code&gt; (X Bitmap), and in the Debian Linux port, &lt;code&gt;.png&lt;/code&gt; files. This effectively made it a simple sticky note application but for images.&lt;/p&gt;</description></item><item><title>Rewriting WSO Mobile in Swift</title><link>https://nsf.name/blog/rewriting-wso-mobile-in-swift/</link><pubDate>Mon, 23 Mar 2026 22:59:16 -0500</pubDate><guid>https://nsf.name/blog/rewriting-wso-mobile-in-swift/</guid><description>&lt;p&gt;At Williams College, most student technological services run through an organization called WSO&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, for common tasks like checking the course calendar, dining hall menus, rating professors, trading textbooks, and more. Since the college doesn&amp;rsquo;t provide its own app, that means our app is the standard app for the ~2,000 students who are active students.&lt;/p&gt;
&lt;p&gt;Around December of 2025, I began to realize that we should aspire to do better than our current trainwreck of an app. The last time that WSO&amp;rsquo;s aging mobile app was rewritten before the rewrite that I am about to discuss here was all the way back in &lt;em&gt;2016&lt;/em&gt;, meaning the current mobile app was made of nearly &lt;em&gt;a decade&lt;/em&gt; of unmaintained trash. I can&amp;rsquo;t even begin to explain how bad this actually was&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;</description></item></channel></rss>