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