AppForce1: news and info for iOS app developers
AppForce1: news and info for iOS app developers
It was a content launch week...
Links in this episode:
- Build your own Twitter
- Real-World Xcode Project Using Tuist
- Linting Documentation with Vale to Increase Quality & Consistency
- Basic Stream Backend Integration using NodeJS
- Comparison of Cherry Brown and Gazzew U4 switches
- Skip typing your login credentials manually with Xcode breakpoints
- Native vs Web: Technologies Available to Native Apps but not Web Apps
- 3 mistakes to avoid with async / await
- Understanding unstructured and detached tasks in Swift
- What I Learned Writing My Own CloudKit Syncing Library
- Cyclomatic Complexity in Swift: Understanding How it Affect Your Code Quality
Runway
Put your mobile releases on autopilot and keep the whole team in sync throughout. More info on runway.team
Lead Software Developer
Learn best practices for being a great lead software developer.
Rate me on Apple Podcasts.
Send feedback on SpeakPipe
Or contact me on Mastodon: https://hachyderm.io/@appforce1
Support my podcast with a monthly subscription, it really helps.
My book: Being a Lead Software Developer
Welcome to AppForce1 episode 102. My name is Jeroen Leenarts and I’ve been developing software for over 20 years, developing iOS apps for over 10 years, running the Dutch CocoaHeads for over 9 years.
If you are an iOS app developer, you should listen to my podcast because I will keep you updated on interesting articles, conferences, and events you might not have heard about.
In this episode, I’m going to talk about:
- Build your own Twitter
- Real-World Xcode Project Using Tuist
- Linting Documentation with Vale to Increase Quality & Consistency
- Basic Stream Backend Integration using NodeJS
- Comparison of Cherry Brown and Gazzew U4 switches
- Skip typing your login credentials manually with Xcode breakpoints
- Native vs Web: Technologies Available to Native Apps but not Web Apps
- 3 mistakes to avoid with async / await
- Understanding unstructured and detached tasks in Swift
- What I Learned Writing My Own CloudKit Syncing Library
- Cyclomatic Complexity in Swift: Understanding How it Affect Your Code Quality
The first 5 links are stuff I worked on, and yes, all launched last week. Part of it has been the result of a lot of work over the past few weeks. And I have to admit, I am kinda proud of the result it has been giving lately. Also one of them was a fun quick thing I just had to do, since I recently really started to enjoy a new set of keyboard switches.
The first one is the biggest. It's called ...
It is basically a mash-up of a couple APIs with 8 articles attached. So if you want to know a bit more about Stream Chat, Stream Activity Feeds, Algolia search, RevenueCat, 100ms for audio rooms, Mux for video playback and Tuist, have a look at this one. You will love it, I am sure.
Real-World Xcode Project Using Tuist
Speaking of Tuist, I extracted the best Tuist bits from the Twitter project and compiled them into an article. If you would like to learn more about Tuist in a more or less real use-case, this is the article for you. There are some interesting bits in here that are not directly documented in the Tuist documentation.
Speaking of documentation, we all know good documentation is very important. But creating good documentation is hard. We can use all the help we can get right? For code there are linters available. Tools that you can run your code through to detect and fix common coding issues. What if I told you, you can do the same on your documentation in Markdown? Creating DoCC archives involves a lot of markdown files. And doc comments in your code, sure you can lint those too with this tool. We started ...
Linting Documentation with Vale to Increase Quality & Consistency
In this article, we describe what Vale is and what it can do. But the best part is the section where I explain how you can run Vale as a part of your build process in Xcode by using a script Build Phase and some smart configuration.
When working on the Twitter project, we also had to create a small integration backend. And that meant we had to revisit an earlier bit of NodeJS code I worked on. And just for the heck of it, I created a video about it. So if you want to see my person talking on video, check the first minute or so from this video. After the intro, it will be VIM as go through the motions of setting up a NodeJS project to integrate with Streams API. The video is called
Basic Stream Backend Integration using NodeJS - YouTube
I am preparing my notes on my KeyboardIO Model 100, right now it has Gazzew U4Tx switches in them. But quite frequently I switch to my KeyboardIO Atreus keyboard which contains Gazzew U4 switches. And I must admit, I really like those switches
Just for the heck of it I recorded a...
Comparison of Cherry Brown and Gazzew U4 switches - YouTube
in my Atreus keyboard. I threw in some other switches as well just for the heck of it. But the audible differences are huge.
Onwards to other people's articles. And I am starting with a good one.
You're working on your app and you want to see if your changes look good. You run your app on the Simulator and you're presented with a login screen. You type in your testing credentials and navigate to the screen you want to see. It doesn't look quite good. Repeat the process.
You have to enter your login credentials every time you run your app to get past the login screen. That can get annoying very quickly.
Well, let Danijela tell you how to...
Skip typing your login credentials manually with Xcode breakpoints
The whole idea is so obvious. Really one of those "How come nobody told me this earlier?", "Why didn't I think of this?" But, now we know. And this one will save you a ton of time for sure.
Next up and article by Sasmito Adibowo.
Native vs Web: Technologies Available to Native Apps but not Web Apps
In this article, we will discuss the web technologies and features that are not available in web applications running on Safari for iOS and macOS, and how these limitations compare to native applications.
Vincent has a great reminder for us.
3 mistakes to avoid with async / await
Some of these are so easy to miss, just head Vincent's warning to make sure your code runs async for real and not serialized one after the other.
When you just start out with learning Swift Concurrency you’ll find that there are several ways to create new tasks. One approach creates a parent / child relationship between tasks, another creates tasks that are unstructured but do inherit some context and there’s an approach that creates tasks that are completely detached from all context.
In the article by Donny Wals titled
Understanding unstructured and detached tasks in Swift
He will focus on unstructured and detached tasks.
Ryan Ashcroft recently released CloudSyncSession, a Swift library that builds on top of the CloudKit framework to make it easier to write sync-enabled, offline-capable apps.He started CloudSyncSession over two years ago with the goal of replicating NSPersistentCloudKitContainer's syncing behavior, without the Core Data hard dependency.
He now wrote an article titled...
What I Learned Writing My Own CloudKit Syncing Library
After reading it you will have learned there is a lot of detail to get right when creating a syncing library for CloudKit. So best to build upon the amazing work Ryan did.
Do you ever feel like your code is getting out of hand? Are you struggling to understand or maintain a particular function or module in your app? If so, you might be running into issues with cyclomatic complexity and that is more common than you imagine.
Cyclomatic Complexity in Swift: Understanding How it Affect Your Code Quality
Cyclomatic complexity is a fancy term for the number of decision points in a piece of code. Really that’s it. Essentially, the more decision points you have – like if statements, switch statements, loops, and so on – the more complex your code becomes. And the more complex your code becomes, the harder it is to understand, test, and maintain.
Learn more about cyclomatic complexity and how it affects you as a Swift developer.
And that's it again for this week.
If you have any feedback, please send me a message through Twitter. My DMs are open. And don’t forget, you can buy me a coffee or subscribe to my podcast now. Links for all that are in the show notes.