-
As a developer, I use (and have used) many tools to improve my productivity, outcomes, and to basically make my life a little easier on a day to day basis. [Read More]
-
Previews
How to get the most out of Xcode Previews
I like using previews as a sort of story-book-like feature. Whenever I create a new component on my Components/CoreUI modules, I create a Previews view. It’s just a simple Form with two sections: [Read More] -
New App - OSLog Console Logger
Leveraging OSLog in your console
An updated version of the original console log post, this time, using Apple’s OSLog instead of a custom enum. [Read More] -
GHA: Cloning Private Dependencies
Using SSH keys to access your private repositories in Github Actions
A simple github action that will allow you to build/test your Xcode projects in CI, even if your package declares dependencies that are stored in private repositories. [Read More] -
How to: Ace the interview process
Tips to get the job you deserve
Recently, I’ve been guiding a friend through their job search, and we uncovered some universal strategies that can boost anyone’s interview performance. These aren’t industry secrets, but rather simple, powerful tactics everyone should know about. [Read More] -
Centralized Dependencies
A pragmatic approach to dependency management.
This article is based on pointfree’s How to Control the World article. [Read More] -
ViewModifiers: Image Picker
An easy way to let users select images
Here is some sample code that let you easily present a confirmation dialog that allows users to select a picture from their gallery or take a picture with their camera. [Read More] -
Streamlining My Life
Some strategies for life automation
Over the past few years, I’ve been refining my lifestyle with a focus on productivity and wellbeing. I’ve developed strategies, habits, and hacks that have significantly improved my time management, execution, and overall satisfaction. I’m documenting these not just to share with others but also to revisit them in the future, assessing their long-term impact. [Read More] -
Raising Oreo
A Journey of Puppy Love and Learning
On August 30th, 2023, a spirited long-haired black and cream mini dachshund named Oreo was born in Río Cuarto, Cordoba, Argentina. By October 14th, my girlfriend, friends, and I had the joy of meeting our new 45-day-old friend after an 8-hour drive from Buenos Aires. Despite coming from a family of dog lovers, raising my own dog has been a unique and delightful challenge. [Read More] -
ViewModifiers: Shrinking views
Some simple modifiers to shrink views on tap or long press
These are some simple view modifiers that add shrinking customizable animations to the tap gesture or the long press gesture of any view. [Read More] -
SwiftUI: Adaptable Stack
A Step Towards Accessibility
In the world of mobile app development, accessibility is not just a feature; it’s a necessity. [Read More] -
Force Update Mechanism
Implementing a basic force update mechanism in your SwiftUI app
In the ever-evolving landscape of mobile applications, keeping your app up-to-date is not just a best practice—it’s often a necessity. Whether it’s a critical security patch, a new feature release, or a simple bug fix, ensuring that your users are running the latest version of your app can be crucial for both user experience and security. This is where the concept of “Force Update” comes into play. A Force Update mechanism allows you to compel users to update the app to continue using it. This is particularly useful for critical updates that you can’t afford users to miss. [Read More] -
Testing NotificationCenter: Concurrency vs Threading
Explaining the differences for effective unit testing of each scenario
I want to talk a little bit about testing the code around the NotificationCenter and the differences between notifications that execute code synchronously and asynchronously on a different thread. [Read More] -
StateObject vs ObservedObject
The differences explained and some mistakes to avoid
In this article, we’ll dissect the differences between @StateObject and @ObservedObject, and when to use each. Let’s dive right in! [Read More] -
Self-Hosted Github Actions Runners
How Going In-House Can Slash Your Build Times
The Drawback of GitHub-Hosted Runners [Read More] -
Swift Typo Detector
A tool to get rid of all those typos
By this point, we all know and love Xcode’s check spelling while typing feature. [Read More] -
Combine Repository
Publishing Changes to all the observers
In the last article (UI vs API models) we talked briefly about the Repository layer. [Read More] -
UI vs API Models
A structured approach
UI and API models, where are they supposed to live in a codebase? [Read More] -
Use Periphery to find unused code
From time to time, it might be a good idea to spend a couple of hours checking if there is some code in the codebase that is not being used anymore. [Read More] -
Improve the build times of your SPM Packages and your apps
Get ready to uncover some of the secrets of faster build times – an investment that’s not just about speed, but about creating a more satisfying and efficient development journey for you and your entire team. [Read More] -
Use FastLane to create PRs
This is a guide on how to set up a fastlane lane to create pull requests: [Read More] -
New App - NotificationCenter protocols
When starting a new app, I always bring these NotificationCenter protocols into the project. [Read More] -
Fix to SwiftUI encountered an issue when pushing a NavigationLink
Note: This issue will be automatically solved when using iOS16+ as target, given the NavigationLink’s init(destination:isActive:label:) has been deprecated. [Read More] -
New App - Document Best Practices
Recently, I stumbled upon Lickability’s repository on swift-best-practices, and it got me thinking about my own Contributing guidelines that I wrote a while back. I realized they might not be as scalable as I’d like them to be over time. [Read More] -
Future-Proof enum decoding
When working with String enums that have a finite number of cases, it’s crucial to include an unknown case as a catch-all for potential future values. This practice helps future-proof our apps against updates or changes on the backend that may introduce new enum values. [Read More] -
How to create a Windows 11 bootable USB drive using Ubuntu
I recently had to install Windows 11 on a FreeDOS machine, and I hit a lot a couple of walls in the process: [Read More] -
Build Phase to enforce minimum SwiftLint version
If your team is using brew to install SwiftLint, you might run into scenarios where different developers run different versions of the linter. [Read More] -
New App - Configuring SwiftFormat
When starting a new app, I usually like to set up an automatic code formatter. By agreeing with your team about the rules, and setting a tool to automatically enforce them, you can avoid formatting discussions in the PRs, and you can achieve a codebase where every file looks similar in format. [Read More] -
The Compound Effect
These are some notes from the book: The Compound Effect by Darren Hardy. [Read More] -
New App - Number Formatters
When starting a new app, it’s important to decide how it’s going to handle and display numbers. Once that has been decided, you can add some practic static NumberFormatters that encapsulate that decisions to reuse across the app. [Read More] -
Die with Zero
These are some notes from the book: Die with Zero by Bill Perkins. [Read More] -
Brain Rules
These are some notes from the book: Brain Rules by John Medina. [Read More] -
Hyperfocus
These are some notes from the book: Hyperfocus by Chris Bailey. [Read More] -
NetworkLogger: Adding debug information to your network calls
When developing Swift applications that involve network communication, it’s often essential to have visibility into the details of the network requests and responses. This includes information such as HTTP headers, URLs, request bodies, and response data. In order to facilitate this logging process, I have created a simple and lightweight struct called NetworkLogger as part of the CoreNetworking library. [Read More] -
Excellent Advice for Living
These are some notes from the book: Excellent Advice for Living by Kevin Kelly. [Read More] -
The Joy of Less
These are some notes from the book: The Joy of Less: A Minimalist Guide to Declutter, Organize, and Simplify by Francine Jay. [Read More] -
The Definition of Done
Introduction: I want to talk a little bit about the Definition of Done, or, in other words, when can we consider that a task is completed. [Read More] -
New App - Console Logger [Deprecated]
Edit: Note: This approach has been replaced with the usage of OSLog. [Read More] -
SwiftUI: Using a Repository as the single source of truth
Introduction: In a SwiftUI app, it is important to have a single source of truth for the app’s data. This ensures that all views and components that rely on the data are always in sync, preventing inconsistencies and bugs. One way to achieve this is by using a Repository object to manage the app’s data. In this article, we’ll explore how to use a Repository object to hold the single source of truth for a SwiftUI app, based on the code in this repository: https://github.com/mdb1/SwiftUI-RepositoryExample [Read More] -
UserPreferences: A wrapper for UserDefaults
UserDefaults is a great way to store and retrieve app settings and user preferences in iOS apps. However, working with it can sometimes be a bit verbose, especially if you need to store or retrieve multiple values. [Read More] -
ViewStateController: Debug State
In our previous posts, we discussed the ViewStateController package, which allows us to add consistent loading and error states to our SwiftUI views. Today we’ll explore a new feature of the framework, the DebugState modifier, which provides an easy way to debug the state of a view. [Read More] -
How to keep up with the industry standards
Staying up-to-date with the latest iOS industry standards is essential for any iOS developer. Apple’s mobile operating system is constantly evolving, and keeping up with the changes is crucial for maintaining a competitive edge in the industry. With new updates, features, and technologies being released every year, it’s important to have a systematic approach to staying informed. [Read More] -
Configuring a new MacBook
When setting up a new MacBook, there are a few steps you should take to get it up and running smoothly. In this article, we’ll explore a list of items you should consider toggling to optimize your MacBook experience. [Read More] -
My Xcode Setup and Shortcuts
In this article, we’ll explore some of the Xcode configurations and shortcuts that I find most useful and that can save you time and effort when working on your projects. [Read More] -
New App - Toasts
When starting a new app, I like to have a toast displaying mechanism in-place. [Read More] -
ViewStateController: Reusable State Management for SwiftUI
I’ve been thinking for a while now on how most of the SwiftUI views that depend on a state end up looking pretty similar. Example (using the ViewState enum): switch viewModel.state { case .initial: EmptyView() case .loading: ProgressView() case let .loaded(fact): Text(fact.fact) case .error: Text("Error") .foregroundColor(.red) } [Read More] -
Enhancing Testability with protocols
In the last post we’ve discussed hot to enhance testability without using protocols. In this one, we will build something similar but using protocols instead. [Read More] -
Enhancing Testability without protocols
We have all used protocols to enhance testability in our apps, but that can become too verbose, and add extra layers of abstractions to the code. [Read More] -
New App - Testing Helpers
When starting a new app, I like to have some XCTest helpers to enhance testability. [Read More] -
New App - Xcode Templates
When starting a new app, after deciding which based design pattern you are going to use for the views, you can create some Xcode templates to help standardize how the files are written and speed up development. [Read More] -
New App - Fonts
When starting a new app, you need to decide which fonts/typographies the app is going to use. [Read More] -
New App - Json Encoder/Decoder
When starting a new app, I like to have static methods to retrieve the reusable JsonEncoder and JsonDecoder objects already configured. [Read More] -
New App - Date Formatters
When starting a new app, it’s important to decide how it’s going to handle and display dates. Once that has been decided, you can add some practic static DateFormatters that encapsulate that decisions to reuse across the app. [Read More] -
New App - Pull Request Template
When starting a new app, I like to set up the Pull Request Template, so we can set up so common ground rules for the project. [Read More] -
New App - View State
When starting a new SwiftUI app, I like to have a reusable approach for managing the view state using generics. [Read More] -
New App - Components
When starting a new app, I like to have some reusable components ready to use. [Read More] -
New App - View Modifiers
When starting a new app, I like to have some handy view modifiers to avoid duplicating code in different places. [Read More] -
New App - Contributing Guidelines
When starting a new app, it’s important to write the contributing guidelines to help your team do good work, and keep a consistent codebase over time. [Read More] -
New App - Build Tools
When starting a new app, it’s important to set up the right set of build tools. This will help you and your team follow the same set of rules, so the app will feel more consistent. [Read More] -
New App - Localization
When starting a new app, it’s important to have a mechanism in place for Localization. In this case, we will keep it simple by having a local Localizable file, with one variation in English and one in Spanish. [Read More] -
New App - Constants
When starting a new app, it’s important to set the constants that will be shared across the app correcly: [Read More] -
New App Checklist
The idea of this post is to provide a list of things I like to have in-place when starting a new app from scratch. [Read More] -
User Guide to Working with Manu
This is a set of guidelines on how I like the team-work to happen. I’d like to hear your thoughts, ideas, and your guidelines after you read it. [Read More] -
H Mode
H mode is a protocol/framework to follow in order to get things done. [Read More] -
The Charisma Myth
These are some notes based on the book: The Charisma Myth. [Read More] -
@Published property wrapper
These are some notes based on SwiftLee’s great article: @Published risks and usage explained with code examples. [Read More] -
Hot Reload in Swift!
We finally have Hot Reload for Swift applications, thanks to the Inject tool written by Krzysztof Zabłocki, the great mind behind other amazing tools, like Sourcery. [Read More] -
Test private properties using Mirror
In this post, we’ll learn how we can add unit tests to private properties without compromising their access level. [Read More] -
Add an Example App to an SPM Package
Creating the Package [Read More] -
Fix your app's crashes with Xcode Organizer's help
A really fast and easy way to getyour app’s crash logs is built-in right in Xcode. [Read More] -
Using Siri's voice to speak in your app
It’s really easy to use Apple’s Speech mechanism to make your app read text out loud to the users: [Read More] -
The Code Review Process
No matter how experienced we are, we will make mistakes at work. [Read More] -
Rules and Habits for a better life
Hi there! 👋 [Read More]