Back at the end of February, I built a simple Markdown editor using SwiftUI. It was an interesting learning experience, not just in terms of learning a new programming language, but also in terms of how to learn said programming language. So, I decided to take a step back and approach this educational journey from another angle.
I decided to take a project I built before for the web and recreate it in a native Mac app, rather than try to do something I’d never done before (like, for example, a document-based application). AI is sort of a big deal right now, so I decided to revisit a project I made last year using the OpenAI API.
So, over the course of the last couple weeks, I’ve been working on the incredibly cleverly named SwiftGPT, and it’s proven to be quite the interesting challenge translating what I know about building data-focused applications for the web into building them for the Mac.
The biggest challenge for me, by far, was dealing with storing and retrieving user data. My experience is in NoSQL databases like MongoDB, as well as local and session storage in the browser. But how, I wondered, should I go about persisting user data in a native Mac app? In this case, this primarily means the chat history between the user and the OpenAI assistant.
I’m sure any Mac or iOS developer with an ounce of experience reading this is screaming, “Just use JSONEncoder and FileManager!” Well, you’ll be happy to know–unless there’s some better method I overlooked–that’s exactly what I used. Though I’m sure my code is filled with flaws. 😅
If I were doing something more complex, beyond storing a list of messages and who “wrote” them, I would probably be better served by sucking it up and learning Core Data. But, as I’m working with a small set of very simple data, I’m not sure there are any downsides to my solution. I will say though, my curiosity has been piqued, and I wonder what other sorts of things I can build with this method.