Universal Links allow you to redirect users directly into your app and give them an integrated mobile experience.| SwiftLee
App Store Optimization is important for every app’s success. You’ve spent a lot of time building a fantastic product, so you’d better get it in front of as many potential users as possible. Yet, it’s a whole different paradigm; it requires different knowledge and tools. I’ve been here myself, and today, I’m sharing my personal … → The post App Store Optimization: Real-world Best Practices appeared first on SwiftLee.| SwiftLee
Learn how HTML Diagnostics reports can improve your app support and help address user-reported issues effectively.| SwiftLee
Use the SwiftUI ForEach view to loop over items and generate a dynamic list of SwiftUI Views. Learn how to use index-based iterations.| SwiftLee
Learn how to present a SwiftUI alert with custom titles, messages & actions. Dynamically show data and create an error-handling extension.| SwiftLee
A SwiftUI Toggle is a common UI element that allows users to switch between states. It often turns a binding value on or off, and it’s commonly used for settings or binary choices. In this guide, I’ll walk through everything you need to know about a Toggle in SwiftUI: from the basics to customization, accessibility, and real-world … → The post SwiftUI Toggle: A Complete Guide appeared first on SwiftLee.| SwiftLee
The @ViewBuilder attribute is one of the few result builders available for you to use in SwiftUI. You typically use it to create child views for a specific SwiftUI view in a readable way without having to use any return keywords. I encourage you to read my article Result builders in Swift explained with code … → The post @ViewBuilder usage explained with code examples appeared first on SwiftLee.| SwiftLee
A Swift Computed Property allows you to define values based on other properties. You can optionally use async/await and throw errors.| SwiftLee
A Swift blog including iOS, and Xcode development content to build better mobile apps. Learn all basics and advanced topics with weekly new blog posts.| SwiftLee
The Share Extension of your app can be UI tested in a few easy steps using the following Swift extension. The video below shows an example of a certain UI Test run.| SwiftLee
Learn how to use an autoreleasepool in unit tests to capture memory leaks consistently throughout the development of your project.| SwiftLee
Refactoring code is essential to maintain quality and readability. Using best practices you'll become better at succeeding a big code change.| SwiftLee
Swift Concurrency introduced the concept of a global actor among async/await and tasks. The most common one is likely @MainActor, which I already explained in depth. However, you can also create custom global actors. Although they have existed for a few years, it remains unclear for many developers when and how to use them. Should … → The post Global actor in Swift Concurrency explained with code examples appeared first on SwiftLee.| SwiftLee
Many developers are migrating from Combine to Swift Concurrency. Swift Concurrency is here to stay, and Combine hasn’t received updates in recent years. While Combine is a mature framework that may not need many updates, it’s clear that the Swift team is focusing on a future with Swift Concurrency. When migrating Combine code to Swift … → The post Combine and Swift Concurrency: A threading risk appeared first on SwiftLee.| SwiftLee
Explore the difference between Threads and Tasks in Swift Concurrency and traditional threading methods. Get clarity on their usage.| SwiftLee
Fixing crashes and bugs takes time. Speed up this process by being better prepared with tips on diagnostics reports, feedback and useful insights.| SwiftLee
Using FIrebase Crashlytics and their new breadcrumbs feature to solve crashes can help you move faster. Combine your tracking and see the users path before a crash happened.| SwiftLee
Learn how a Swift lock can help you create thread-safe access to data as an alternative to actors in Swift Concurrency.| SwiftLee
The Xcode Debug Console provides access to the LLDB debugger and allows you to filter logs and narrow down issues with your app.| SwiftLee
Improve your Xcode build times and boost productivity with Xcode Build Insights. Keep track of compilation times for better performance.| SwiftLee
Avoid rejection and ensure your app meets App Store requirements by adding API declaration inside an App Privacy manifest file.| SwiftLee
Localization testing in Xcode can be done using scheme settings, system language override, SwiftUI Previews and RocketSim's relaunch feature.| SwiftLee
Store Xcode bookmarks to important code references and search queries. Use the bookmarks as a to-do list to increase your productivity.| SwiftLee
Speed up Xcode Build Performance by gaining insights using Build Timing Summary and various techniques that can save you a lot of time.| SwiftLee
Explore the new @concurrent attribute in Swift 6.2 and its role in Swift Concurrency for better asynchronous function handling.| SwiftLee
Get started and learn how to write unit tests to validate your code. Best practices help you to be more productive by writing better tests.| SwiftLee
Race conditions and Data Races can lead to unexpected behavior, and as an engineer it's important to know the differences between both.| SwiftLee
EXC_BAD_ACCESS crashes are annoying but solvable using the right tools. Learn how to use the Xcode sanitizers to fix those crashes in Swift.| SwiftLee
Swift 6.2 will introduce several changes to Swift Concurrency that will make writing asynchronous code more approachble.| SwiftLee
Swift and SwiftUI evolves fast. Let me do the hard work and stay current with my weekly newsletter sent weekly to 20K+ developers.| SwiftLee
Explore the SwiftUI Grid and learn how to create structured views with LazyVGrid and LazyHGrid for optimal performance.| SwiftLee
Discover the benefits of using a SwiftUI TabView to organize your app's main views into tabbed views for better user experience.| SwiftLee
Explore how to use the picker in SwiftUI for selecting values in your apps with different styles and controls.| SwiftLee
Learn how you can use Task.sleep() and Task.yield() in Swift Concurrency. Be aware of the differences to pick the one you need.| SwiftLee
Improve your backend development with Swift Testing and Vapor. Learn about running tests in parallel and boosting performance.| SwiftLee
Customize and annotate tests with traits in the Swift Testing framework. Learn how to configure behaviors and skip certain tests.| SwiftLee
Discover how #require macro in Swift Testing can set requirements for your tests and make them clearer and easier to understand.| SwiftLee
Learn about the new Swift Testing framework and how it revolutionizes written tests. Get clearer tests with improved feedback.| SwiftLee
Improve your testing workflow with the #expect macro in Swift Testing. Simplify your assertions and debug tests with ease.| SwiftLee
Learn how to write parameterized tests in Swift, allowing you to run a single test with multiple input parameters.| SwiftLee
Learn how to develop an app for iOS and bring your ideas to life. Install Xcode, find resources, and learn from experienced developers.| SwiftLee
Flaky tests can be resolved using test repetitions and several best practices when writing tests and running tests locally.| SwiftLee
Learn how to use SwiftUI lists to present data. Explore different list styles, implement selection, or change the background color.| SwiftLee
Discover the world of iOS app development and learn how to create apps for iPhones, iPads, and Apple devices using the right software.| SwiftLee
Macros in Swift allow you to extend the compiler with custom build errors and code generation to eliminate extraneous boilerplate code.| SwiftLee
Static Member Lookup in Generic Contexts allows simplifying code while improving the readability and discoverability of your code.| SwiftLee
Discover Swift tutorials to learn Swift with code examples and in-depth articles. Go from writing, to testing, to building a User Interface.| SwiftLee
Add interaction to your app with a SwiftUI Button, custom styles, and interactions. Learn how you can define reusable components.| SwiftLee
Use an SF Symbol in Swift & SwiftUI and explore over 6,000 free-to-use icons provided by Apple for app developers.| SwiftLee
Learn how to use the Thread Sanitizer to catch Data Races in Swift. Fix flaky tests and weird crashes and see Data Race examples in Swift.| SwiftLee
Improve your project structure and simplify testing with the repository design pattern. Centralize data access and separate concerns.| SwiftLee
Create a Swift Package that works with the Swift Package manager. Add dependencies, platform requirements and work with development packages.| SwiftLee
Boost your productivity with ChatGPT for Swift code generation. Learn how to harness the power of AI to speed up your development process.| SwiftLee
Using the #Preview Swift Macro you can create previews more quickly for all your SwiftUI, UIKit, and AppKit views.| SwiftLee
Learn how to use the Result enum type in Swift. Make use of methods like map, flatMap, flatMapError, and clean up your code.| SwiftLee
The nonisolated and isolated keywords allow you to control Actor isolation and provide access to immutable state within actors.| SwiftLee
MainActor in Swift replaces DispatchQueue.main and ensures tasks are performing on the main thread in a performant manner.| SwiftLee
AsyncThrowingStream and AsyncStream allow you to rewrite existing closure based code to async-await overloading methods.| SwiftLee
Async let allows executing multiple async methods in parallel and awaiting all results together for better performance in your apps.| SwiftLee
Actors in Swift prevent Data Races by synchronizing access. Combined with nonisolated access you can prevent crashes in your apps.| SwiftLee
Methods marked with @MainActor are not always executed on the main thread. It's essential to understand thread dispatching with actors.| SwiftLee
Tasks in Swift allow us to create an environment in which we can run async methods using await. Learn how to create and use tasks in Swift.| SwiftLee
Task Groups allow you to run multiple tasks in parallel and await their results. Bundle the outcome together into a single collection.| SwiftLee
The @preconcurrency attribute allows you to suppress Sendable-related warnings emitted from 3rd party libraries temporarily.| SwiftLee
Detached tasks allow you to run code asynchronously, but you should be aware of the substantial consequences they introduce.| SwiftLee
Concurrency-safe global variables prevent you from running into data races, especially when you've enabled strict concurrency checking.| SwiftLee
AsyncSequence allows asynchronously iterating over values. Learn how to create custom implementations and when you should use them.| SwiftLee
Create structured logging using OSLog and benefit from Xcode's debugging console using filters and colored logs.| SwiftLee
Learn more using this list of Debugging blog posts containing in-depth examples of Debugging programming techniques, basics, and best practices.| SwiftLee
Discover the crucial role of system components in app design for enhanced accessibility and user experience.| SwiftLee
Optimize memory usage when loading images in iOS and SwiftUI. Learn best practices to minimize memory consumption & improve app performance.| SwiftLee
Discover the importance of inspecting network traffic in app development. Explore different tools and optimize your app's performance.| SwiftLee
Async await in Swift allows to write asynchronous tasks with structured concurrency. Maintain readability in complex code.| SwiftLee
What's new in Swift 6 and how do you migrate your projects and packages? Learn how to apply incremental migration and why you should update.| SwiftLee
Learn how to create Property Wrappers in Swift. Use the @propertyWrapper to remove boilerplate, improve readability, and clean up code.| SwiftLee
Creating a structured way of learning and staying up to date with Swift newsletters is essential for personal growth.| SwiftLee
Campaign links in App Store Connect allow you to track the performance of (paid) marketing channels and validate the return on investment.| SwiftLee
Learn more using this list of Xcode blog posts containing in-depth examples of Xcode programming techniques, basics, and best practices.| SwiftLee
Learn how to manually symbolicate crash reports using Xcode Organizer, IPS files and dSYM files to generate symbols.| SwiftLee
Debugging SwiftUI views allows you to find the cause of a redraw. Solve unexpected animation issues using this technique.| SwiftLee
Improve your developer workflow using this list of blog posts containing in-depth examples of workflows, basics, and best practices.| SwiftLee
Which minimum iOS version should you support? Which devices will I drop support for and how to decide based on facts. Convince your colleagues with data.| SwiftLee
Learn more using this list of Swift blog posts containing in-depth examples of Swift programming techniques, basics, and best practices.| SwiftLee
Dive deep into Swift’s latest concurrency changes, covering async-await, actors, and more.| SwiftLee
Unit testing async/await logic can be done by marking your unit test as asynchronous and using a new XCTest method.| SwiftLee
RocketSim enhances your Simulator by adding extra functionalities like recordings with touches and device bezels, or recent build actions.| SwiftLee