Sponsored Link
Learn advanced Swift with PointFree.co
Feeling overwhelmed by Swift concurrency, generics, data persistence, domain modeling, navigation, and testing? Level up your Swift skills with over 190 hours of advanced and original content crafted by industry experts. Subscribe today and save 30% for Black Friday!
News
Black Friday Deals
Happy Friday, Happy Thanksgiving, and Happy Black Friday!
We may not celebrate Thanksgiving over here, but Black Friday is a truly global phenomenon. This year, as always, Marius Landwehrās repo of deals is bang up to date, this year with the help of Noah Tran, and youāre sure to find something worth your while.
Michael Tsai also has a great post covering even more deals.
Tools
Alex
Talking of Cursor and AI code assistants, this app claims to be "The Cursor for Xcode"! It offers a chat-style interface where you can "chat with your code" and also get it to generate code, even with a nice diff view before it applies it. It also has Tab completion, as youād expect. Iāve not tried it yet, but it looks to be a companion app that automates Xcode rather than trying to interface with it, but I could be wrong! Itās free while in beta, so give it a try if youāre interested in this kind of tool.
Code
Animate UIKit views with SwiftUI animations in iOS 18
Natalia Panferova blew my mind with this post. Did you know that you could animate UIKit views with SwiftUI animations? Nether did I! Itās so simple to implement, too, as Natalia shows us here.
Introducing Swift Testing
Iāve been waiting for Majid Jabrayilov to finish up this series of blog posts, and it looks like he has! Check out the basics of Swift Testing, the testing lifecycle, traits, and parameterized tests. They make a great intro to the framework.
My favorite Thanksgiving traditionā¦
What a Thanksgiving tradition Holly Borla has! Iām not proficient enough with Swift concurrency to offer deep insight into the proposal, but I am all for improving approachability. I especially like the idea of allowing modules to opt to be single-threaded.
Happy Thanksgiving, Holly!
Design
In-app settings to adjust every aspect and get things just right
Iāve seen many apps in beta or debug modes that include a settings screen like this over the years. I believe itās a technique that Apple used to use, too, and maybe they still do! Itās so much smoother than the whole compile, install, run, repeatā¦ loop.
Jobs
Senior iOS Developer @ komoot ā Develop innovative new features from the first idea and concept over to road map planning, implementation, testing, release and monitoring. Team up with six team members to build a state of the art iOS app with more than 5 million installations. ā Remote (within European timezones)
And finally...
My gosh, this took me back. Not just to Delicious Library, which I remember made a huge splash when it debuted, but to that whole era of Mac software. Those apps are the reason Iām here writing this on a Mac today.
Via John Gruberās post and, unfortunately, this news.
Comment
Iāve had a week off from Swift Package Index this week as I needed to do some work on this newsletter. Curated (the email service I use) has had some problems recently, and Iām investigating what it would take to self-host my newsletter again. It started over 13 years ago as a simple Jekyll site with an ESP account, and thatās where I think itāll end up again soon.
You wonāt see big changes when it transitions back to being self-hosted, so why am I talking about it? Well, itās been a great chance for me to play with a couple of AI developer tools that Iāve been meaning to check out.
First, OpenAIās new o1-preview model that you might have read about. Itās designed for larger tasks that take more āthinking aboutā before the model gives a response. One of the things itās good at is writing code, so I thought Iād give it the task of turning the structured JSON export of my Curated data into. I spent about ten minutes writing a fairly lengthy specification and included a sample of the JSON data.
It spent about two minutes āthinkingā and then produced code for me. It ran first time without errors and did exactly what I asked it toā¦ which is where the only flaw was. š I spent another few minutes writing up a bulleted list of amendments, clarifications, and additions to my original spec, and apart from one small blip, I had a working program that did what I needed. It only took two prompts and less than thirty minutes, and the code was better than I would have written.
I also checked out Cursor this week, as I said I would, and itās good. I have more to write than what I have room for here, but I canāt go without mentioning one feature that feels like a step forward for inline completion. All AI code completion I have used so far has been additive, suggesting either a line or block of code. Cursor offers that, of course, but it can also offer to edit other parts of a file that might not be part of the same contiguous block of code.
Iāll explain. Imagine you have some inline logic in a variable assignment, and you decide that itās getting too complex for that line. You might decide to make a new intermediate variable on the line above. Cursor will notice that, and as you declare the new variable with partial logic from the line below it wonāt only complete the line youāre typing, but also offer to remove the now duplicate code from its original location. It may sound simple, but itās striking when it happens.
That explanation might not be super clear, so I made a 20 second demo video which might clarify things. Cursor performed that edit in two consecutive presses of Tab, but it can also combine two suggestions like that into one. I guess if it feels confident enough that youād want them both. Itās not 100% clear to me yet how it decides what type of completion or edit it will suggest, but it got it right over and over again as I used it. Thereās a free plan that is more than capable of showing what it can do, so thereās no reason not to give it a try if youāre interested in this area.
This feature is what felt like a big step forward to me over line-at-a-time and block-of-code suggestions. It felt like having true assistance rather than completion or generation.
I could talk more about how Cursor also takes advantage of modern LLM models having such huge context windows by using all open tabs as context. It can even include every file in your repository if you choose. Iāll leave that for another time, though. This is already too long.
We live in interesting times.
Dave Verwer