Blog Articles
-
June 2025
- Jun 14, 2025 Using async let with synchronous code Jun 14, 2025
- Jun 14, 2025 Making a TextField display multiple lines of text Jun 14, 2025
-
May 2025
- May 26, 2025 How to easily inspect and modify network traffic May 26, 2025
- May 19, 2025 Ever heard of .contextMenu()? May 19, 2025
- May 12, 2025 The rules of the App Store have changed! May 12, 2025
- May 5, 2025 Whatโs new in Swift 6.1? May 5, 2025
-
March 2025
- Mar 31, 2025 Is it the end for CocoaPods? Mar 31, 2025
- Mar 25, 2025 How to turn a SwiftUI color into a gradient Mar 25, 2025
- Mar 10, 2025 .animation() vs withAnimation(): what's the difference? Mar 10, 2025
- Mar 3, 2025 How to use AI (and Cursor) to improve your iOS skills Mar 3, 2025
-
February 2025
- Feb 17, 2025 Apple has open-sourced Swift's build system Feb 17, 2025
- Feb 3, 2025 The easiest way to use SwiftUI in a UIKit app Feb 3, 2025
-
January 2025
- Jan 17, 2025 Introduction to Non-Copyable types Jan 17, 2025
- Jan 11, 2025 How to hide private information Jan 11, 2025
-
December 2024
- Dec 10, 2024 Using a Raw String to write JSON data Dec 10, 2024
- Dec 7, 2024 Be careful wrapping a throwing function in a Task Dec 7, 2024
- Dec 7, 2024 let is a lie (sometimes) Dec 7, 2024
- Dec 2, 2024 ChatGPT in Xcode: is it good? Dec 2, 2024
-
November 2024
- Nov 25, 2024 New in Swift 6: a macro to make debugging easier Nov 25, 2024
- Nov 18, 2024 Copilot is now available in Xcode (and itโs good!) Nov 18, 2024
- Nov 3, 2024 New in SwiftUI: the macro @Entry Nov 3, 2024
-
October 2024
- Oct 21, 2024 How to get started with Swift Testing Oct 21, 2024
- Oct 4, 2024 New in Xcode 16: the macro @Previewable Oct 4, 2024
-
September 2024
- Sep 26, 2024 Discover 3 new features of Xcode 16 Sep 26, 2024
- Sep 9, 2024 How to add a paywall with a single line of SwiftUI code ๐๏ธ Sep 9, 2024
- Sep 6, 2024 Bad practice creating a StateObject Sep 6, 2024
-
July 2024
- Jul 29, 2024 How to help someone get started with iOS engineering ๐ฉ๐ฝโ๐ป๐จ๐ปโ๐ป Jul 29, 2024
- Jul 23, 2024 5 very useful functions from Swift Algorithms Jul 23, 2024
- Jul 16, 2024 How to run native code from a WKWebView Jul 16, 2024
- Jul 9, 2024 AI features in Xcode 16: is it good? Jul 9, 2024
- Jul 8, 2024 Building the inverted scroll of a messaging app Jul 8, 2024
- Jul 1, 2024 Appleโs official method to design an iOS app ๐ฑ Jul 1, 2024
-
June 2024
- Jun 18, 2024 Storing two types in the same variable using Either Jun 18, 2024
- Jun 18, 2024 My highlights of WWDC 2024 as an iOS developer ๐ Jun 18, 2024
- Jun 14, 2024 Here are 3 advanced tips in Swift ๐ก Jun 14, 2024
- Jun 3, 2024 Previews in Xcode also work with UIKit! Jun 3, 2024
-
May 2024
- May 31, 2024 Bad practice: not using a ButtonStyle May 31, 2024
- May 13, 2024 Did you know that a few popular iOS apps are open-source? ๐คจ May 13, 2024
- May 7, 2024 How to decode dates in ISO 8601 format May 7, 2024
- May 6, 2024 How to refactor code with regular expressions ๐คฏ May 6, 2024
- May 1, 2024 5 tips for a successful iOS take-home project May 1, 2024
-
April 2024
- Apr 29, 2024 I can teach you the basics of SwiftData in 4 hours ๐ฉ๐ฝโ๐๐จ๐ปโ๐ Apr 29, 2024
- Apr 28, 2024 Bad practice: not using the modern formatting API Apr 28, 2024
- Apr 22, 2024 How to enable spell checking in Xcode Apr 22, 2024
- Apr 9, 2024 Whatโs the difference between any and Any? Apr 9, 2024
- Apr 8, 2024 How to test Push Notifications in the simulator Apr 8, 2024
-
March 2024
- Mar 26, 2024 Swift has more formatters than you know! Mar 26, 2024
- Mar 25, 2024 Using a Swift macro to generate an EnvironmentKey Mar 25, 2024
- Mar 17, 2024 Do you know what .layoutIfNeeded() actually does? Mar 17, 2024
- Mar 11, 2024 I can teach you the basics of UIKit in 2 hours ๐ฉ๐ฝโ๐๐จ๐ปโ๐ Mar 11, 2024
- Mar 5, 2024 Be careful when using .onTapGesture() Mar 5, 2024
- Mar 4, 2024 How to easily test In-App Purchases ๐๏ธ Mar 4, 2024
- Mar 3, 2024 How to mock any network call with URLProtocol Mar 3, 2024
-
February 2024
- Feb 26, 2024 When should you use a hybrid framework? ๐ค Feb 26, 2024
- Feb 20, 2024 Bad practice: not using .isMultiple(of:) Feb 20, 2024
- Feb 15, 2024 How to write safer code using the Lock ๐ and Key ๐ pattern Feb 15, 2024
- Feb 6, 2024 Bad practice: using .lowercased() to compare strings Feb 6, 2024
- Feb 5, 2024 Do you know what translatesAutoresizing MaskIntoConstraints actually does? ๐คจ Feb 5, 2024
-
January 2024
- Jan 30, 2024 How to make a completionHandler much safer Jan 30, 2024
- Jan 29, 2024 How to give great answers to technical interview questions ๐ฉ๐ฝโ๐ป๐จ๐ปโ๐ป Jan 29, 2024
- Jan 26, 2024 Bad practice: loading a large image on the main thread Jan 26, 2024
- Jan 26, 2024 Hidden feature: subscript Jan 26, 2024
- Jan 9, 2024 How to write Unit Tests for Code Performance โฑ๏ธ Jan 9, 2024
- Jan 8, 2024 How to easily debug your network code ๐ฐ๏ธ Jan 8, 2024
-
December 2023
- Dec 28, 2023 Bad practice: using "YYYY" to format a Date Dec 28, 2023
- Dec 18, 2023 How to get started with The Composable Architecture ๐ฑ Dec 18, 2023
- Dec 11, 2023 Did you know that Xcode has a search history? ๐ก Dec 11, 2023
- Dec 8, 2023 Hidden feature: typealias Dec 8, 2023
- Dec 4, 2023 Swift has more formatters than you think! ๐คฏ Dec 4, 2023
- Dec 1, 2023 Bad practice: not using PersonNameComponentsFormatter Dec 1, 2023
-
November 2023
- Nov 27, 2023 Here are 8 tips to design a great paywall ๐ค Nov 27, 2023
- Nov 20, 2023 Are optional closures escaping or not? ๐คจ Nov 20, 2023
- Nov 14, 2023 Hidden feature: initializers Nov 14, 2023
- Nov 13, 2023 Have you ever used Multiple Cursors in Xcode? ๐คจ Nov 13, 2023
- Nov 12, 2023 Bad practice: not using UIAction Nov 12, 2023
- Nov 8, 2023 Discover the advanced features of Xcodeโs breakpoints ๐ Nov 8, 2023
-
October 2023
- Oct 31, 2023 Hidden feature: final Oct 31, 2023
- Oct 30, 2023 How to write tests that detect memory leaks ๐ฆ Oct 30, 2023
- Oct 24, 2023 Bad practice: not using multiline strings Oct 24, 2023
- Oct 24, 2023 Hidden feature: enum Oct 24, 2023
- Oct 23, 2023 Hereโs a great use case for Parameter Packs ๐ค Oct 23, 2023
- Oct 16, 2023 This small mistake will crash your SwiftUI app ๐งจ Oct 16, 2023
- Oct 14, 2023 Bad practice: not using Phantom Types Oct 14, 2023
- Oct 9, 2023 Here are 8 tips to optimize your iOS app ๐ฑ Oct 9, 2023
- Oct 2, 2023 Hereโs how you can learn Swift Concurrency in 2 hours ๐ฉ๐ฝโ๐๐จ๐ปโ๐ Oct 2, 2023
-
September 2023
- Sep 26, 2023 Hidden feature: if and switch Sep 26, 2023
- Sep 25, 2023 Some APIs are more dangerous than they seem ๐ซข Sep 25, 2023
- Sep 19, 2023 Bad practice: not using throwing tests Sep 19, 2023
- Sep 18, 2023 Here are 3 Swift Macros you can start using today ๐ค Sep 18, 2023
- Sep 16, 2023 Hidden feature: private properties Sep 16, 2023
- Sep 11, 2023 Did you know you can use Copilot with an Xcode project? ๐ค Sep 11, 2023
- Sep 9, 2023 Bad practice: capturing self in a nested closure Sep 9, 2023
- Sep 4, 2023 Here are 3 cool new features of Swift 5.9 ๐คฉ Sep 4, 2023
-
August 2023
- Aug 29, 2023 Bad practice: using an unsafe continuation Aug 29, 2023
- Aug 28, 2023 Hereโs what you need to know about TipKit! ๐ก Aug 28, 2023
- Aug 22, 2023 Hidden feature: static properties Aug 22, 2023
- Aug 21, 2023 I can teach you SwiftUI in 12 hours ๐ฉ๐ผโ๐๐จ๐ปโ๐ Aug 21, 2023
- Aug 15, 2023 Discover localizedStandardCompare() Aug 15, 2023
- Aug 14, 2023 How risky is it to use [unowned self]? ๐ค Aug 14, 2023
- Aug 8, 2023 Bad practice: using if instead of guard Aug 8, 2023
- Aug 7, 2023 I can teach you Combine in just 4 hours ๐ Aug 7, 2023
- Aug 1, 2023 Discover MeasurementFormatter Aug 1, 2023
-
July 2023
- Jul 31, 2023 How about 5 new tips you can start using today? ๐ก Jul 31, 2023
- Jul 25, 2023 Bad practice: capturing a method reference Jul 25, 2023
- Jul 24, 2023 Here are 5 tools that will improve your iOS project ๐ Jul 24, 2023
- Jul 22, 2023 Discover async let Jul 22, 2023
- Jul 17, 2023 When do you really need to use [weak self]? ๐คจ Jul 17, 2023
- Jul 12, 2023 Bad practice: testing if a String is empty Jul 12, 2023
- Jul 12, 2023 Discover CollectionOfOne Jul 12, 2023
- Jul 12, 2023 Discover #error() Jul 12, 2023
- Jul 10, 2023 Here are 5 Xcode tips you really wanna know ๐ Jul 10, 2023
-
June 2023
- Jun 19, 2023 Apple made it easy to keep track with all the WWDC additions ๐ Jun 19, 2023
- Jun 13, 2023 Discover Number Separators Jun 13, 2023
- Jun 12, 2023 Here are 5 great articles to keep up with WWDC ๐ Jun 12, 2023
- Jun 6, 2023 There are so many cool new features in Swift and Xcode ๐คฉ Jun 6, 2023
-
May 2023
- May 29, 2023 How would you answer this typical iOS interview question? ๐คจ May 29, 2023
- May 23, 2023 3 tips to write better Swift code May 23, 2023
- May 22, 2023 Here are 5 great blog articles to learn something new ๐งโ๐ May 22, 2023
- May 18, 2023 How to refactor using Associated Values May 18, 2023
- May 15, 2023 Here are my 5 favorite Swift tips ๐ค May 15, 2023
- May 8, 2023 Hereโs another great learning resource ๐ May 8, 2023
- May 3, 2023 Discover dump() May 3, 2023
- May 2, 2023 85% of iOS developers got the wrong answer ๐ซข May 2, 2023
-
April 2023
- Apr 24, 2023 Did you know Property Wrappers are great debugging tools? ๐ Apr 24, 2023
- Apr 22, 2023 Discover how @MainActor works Apr 22, 2023
- Apr 17, 2023 I learned so much from these videos ๐ Apr 17, 2023
- Apr 15, 2023 3 mistakes to avoid with async / await Apr 15, 2023
- Apr 10, 2023 Do you know this trick to spot memory leaks? ๐คจ Apr 10, 2023
- Apr 7, 2023 Discover LazySequence Apr 7, 2023
- Apr 4, 2023 3 mistakes to avoid with Optionals Apr 4, 2023
- Apr 3, 2023 Here are 5 (new) tips you can start using today ๐ Apr 3, 2023
-
March 2023
- Mar 28, 2023 Discover XCTUnwrap() Mar 28, 2023
- Mar 20, 2023 I learned so much from this website ๐คฏ Mar 20, 2023
- Mar 19, 2023 3 mistakes to avoid with Closures Mar 19, 2023
- Mar 13, 2023 Are private properties really private? ๐คจ Mar 13, 2023
- Mar 11, 2023 How to write your first Unit Test Mar 11, 2023
- Mar 6, 2023 Here are 5 tips you can start using today ๐ Mar 6, 2023
-
February 2023
- Feb 27, 2023 Only 15% of iOS developers get the right answer ๐ง Feb 27, 2023
- Feb 20, 2023 Hereโs my second (traditional) newsletter ๐ฎ Feb 20, 2023
- Feb 13, 2023 Discover CaseIterable Feb 13, 2023
- Feb 6, 2023 This is my first (traditional) newsletter ๐ฎ Feb 6, 2023
- Feb 4, 2023 How to write your first API call Feb 4, 2023
-
January 2023
- Jan 8, 2023 Discover Generics in Swift Jan 8, 2023
-
December 2022
- Dec 20, 2022 Discover Property Wrappers in Swift Dec 20, 2022
- Dec 19, 2022 5 Things You Didnโt Know About KeyPaths Dec 19, 2022
- Dec 5, 2022 Discover Actors in Swift Dec 5, 2022
-
November 2022
- Nov 26, 2022 Discover async / await in Swift Nov 26, 2022
- Nov 4, 2022 Discover how Mocks work in Swift Nov 4, 2022
- Nov 4, 2022 Discover some New Features of Swift 5.7 Nov 4, 2022
- Nov 4, 2022 Discover the MVP Architecture Nov 4, 2022
- Nov 3, 2022 Discover the Coordinator Pattern Nov 3, 2022
- Nov 3, 2022 Discover Dependency Injection Nov 3, 2022
-
September 2022
- Sep 3, 2022 Discover the MVVM Architecture Sep 3, 2022
Tips
-
June 2025
- Jun 1, 2025 TextField vertical axis Jun 1, 2025
-
October 2023
- Oct 28, 2023 switch used as an expression Oct 28, 2023
- Oct 2, 2023 if used as an expression Oct 2, 2023
-
May 2023
- May 24, 2023 better compactMap May 24, 2023
-
April 2023
- Apr 26, 2023 lazy + private(set) Apr 26, 2023
- Apr 13, 2023 guard statements Apr 13, 2023
- Apr 3, 2023 concise [weak self] Apr 3, 2023
-
March 2023
- Mar 26, 2023 omit return keyword Mar 26, 2023
- Mar 6, 2023 iOS version dropped reminder Mar 6, 2023
-
February 2023
- Feb 27, 2023 ResultBuilder + local constant Feb 27, 2023
- Feb 20, 2023 LazySequence Feb 20, 2023
- Feb 1, 2023 generic extensions Feb 1, 2023
-
January 2023
- Jan 19, 2023 raw strings Jan 19, 2023
- Jan 4, 2023 multiline String Jan 4, 2023
- Jan 2, 2023 XCTest + try! Jan 2, 2023
-
December 2022
- Dec 21, 2022 orEmpty Dec 21, 2022
- Dec 12, 2022 isNilOrEmpty Dec 12, 2022
- Dec 7, 2022 if-else vs switch Dec 7, 2022
-
November 2022
- Nov 28, 2022 variadic arguments Nov 28, 2022
- Nov 23, 2022 CaseIterable Nov 23, 2022
- Nov 14, 2022 opaque argument Nov 14, 2022
- Nov 11, 2022 as? vs is Nov 11, 2022
- Nov 5, 2022 for-loop vs filter() Nov 5, 2022
- Nov 5, 2022 Closures and Capture Lists Nov 5, 2022
- Nov 5, 2022 Optionals vs Result Nov 5, 2022
- Nov 5, 2022 variadic arguments Nov 5, 2022
- Nov 5, 2022 large number separators Nov 5, 2022
- Nov 5, 2022 KeyPaths as closures Nov 5, 2022
- Nov 5, 2022 shorthand if-let syntax Nov 5, 2022
- Nov 5, 2022 Array vs some Collection Nov 5, 2022
- Nov 5, 2022 where in a for-loop Nov 5, 2022
- Nov 5, 2022 dump() vs print() Nov 5, 2022
- Nov 5, 2022 Combine nested if Nov 5, 2022
- Nov 5, 2022 modern API of UIButton Nov 5, 2022
- Nov 5, 2022 XCTUnwrap vs force unwrap Nov 5, 2022