One of the biggest challenges we face at Tuist is that teams have normalized working without data. They stack decisions that erode productivity, then throw resources at the symptoms rather than understanding the cause.
Tags
Swift
The Swift compiler optimizations are becoming so costly that Apple needs to rethink its approach to the build system.
Swift’s async/await concurrency is a game-changer, but to fully leverage it, foundational APIs need to be designed with concurrency in mind.
I reflect on the complexity of Swift's concurrency model and how it could have been avoided.
In this blog post, I explain why you might need to set the -ObjC flag in the OTHER_LDFLAGS build setting of your Xcode project.
2023 was a year of many challenges in my life. Next week I'm going to start mental therapy with a psychologist.
In this post, I talk about how I'm feeling about my contributions to the open-source community.
Erlang processes are a powerful concept that allows you to mock dependencies without introducing dependency injection. In this post, I share my thoughts on how XCTest could adopt a similar concept.
Apple embraced implicitness in some areas of the build system, and it's causing headaches to developers. In this post, I share my thoughts on the topic and how we are planning to address it in Tuist.
Swift Package Manager defaults to supporting all platforms when they don't specify any. This is a problem for tooling like Tuist that integrates Swift Packages as Xcode project targets.
Exploring native Swift macro support in Tuist to simplify and accelerate Xcode project builds.
Apple's focus on simplifying basic tasks may overshadow the challenges of complex operations. Developers, often uninformed due to lack of data, face hard choices: pivot to alternatives or revamp systems.
Exploring Elixir, I discovered the power of concurrency-oriented programming
Tailwind: A game-changer for web styling, with seamless integration into Swift server projects using SwiftyTailwind.
Fly CLI + Docker on M1/M2 architecture caused issues, so I switched to GitHub Actions for deployment. No more problem!
Deploying a Vapor app to Fly encountered unexpected issues. Swift's linter requires more memory than Fly's 2048 MB limit. Scaling via fly scale didn't solve the problem. Workaround: built locally with Docker, then pushed to Fly's image registry for deployment.
Yesterday, while reading about Rust and its package manager, Cargo , I realized how diverse the list of Crates (packages) for building CLIs is compared to Swift, and made me think about the connection between that and how Rust and Swift are…
I often wonder why Apple continues to build features that are closed into Xcode, for example Swift Package Manager's integration. While some developers might see that as something positive, because that means it can be seamlessly integrated…
It's common to see developers wondering why they should use Tuist instead of the Swift Package Manager (SPM) for modeling their projects. I think it's normal. It happened to me a few times too. Some of them even made me wonder if I should c…
I've recently spent a lot of time in Tuist tackling technical debt. It'd been a while since the last time I have to pause some other work for weeks to do something that would be beneficial for the long-term of the project. This time the wor…
One of the things that excited me the most about the opportunity to join Shopify back in 2018 was the opportunity to grow and learn from the challenges and the talent of the company. When I joined, my background was mainly iOS development w…
Many of you might already be familiar with SwiftGen ; a tool that generates Swift code to access resources in a type-safe manner. Having a type-safe API is something that Android developers have had for a long time, and that Apple has never…
There’s an idea that I’d love Tuist to move towards: provide a CLI that is standard across all the projects defined using Tuist. This is not a new idea; we can see it in frameworks like Rails that thanks to being opinionated about the struc…
I'm flying back from Tokyo and took the opportunity to code a bit on Tuist. Since I don't have Internet connection to get distracted with, I decided to work on something that doesn't require Internet connection: improving the project archit…
Today, I worked on automating the release process of Angle on CI. At first, I thought it'd be a straightforward task, but it turned out not to be so. Most Xcode projects don't have to deal with this because they use Match , which abstracts…
Today, I decided to move all Angle 's dependencies that were defined as CocoaPods Pods to Swift Packages. It was my first-hand experience with Xcode's integration with the Swift Package Manager so here are my thoughts: I had no issues. I we…
A Monday blog post with some reflections about the current state of Tuist and its future.
This blog post describes the advantages of dynamic over static Xcode projects, and how Tuist leverages project generation to help teams overcome the challenges associated to scaling up projects.
Trying to add error tracking to Tuist, I realized how the process is not very straightforward. This blog post describes the process that I followed to help other Swift developers add error tracking to their CLI tools.
In this blog post, I talk about my experience using one of Foundation's APIs, Process.
This post contains the video of the talk that I gave at AltConf about why I think it's important investing into tooling and some tips to build great tools.
This is a short story of how Xcode projects can end up being very complex and hard to maintain.
A brief post talking about my experience speaking at AltConf 2019 in San Jose.
On this blog post I talk about an idea that I'm pondering for Tuist. In the aim of abstracting implementation details from Xcode projects, I think there's an opportunity for Tuist to abstract `Info.plist` files which are barely modified by developers after they get created.
On this blog post I talk about Xcode updates and how painful they can sometimes be.
I started developing a tool, install-xcode that aims to help developers to install and upgrade versions of Xcode easily. In this blog post I talk about the motivation behinds building it and some design principles that I'm embrazcing.
This blog post is an introduction to the format of Xcode projects and xcodeproj, a Swift library that helps read and update Xcode projects in Swift. The post contains a few hands-on examples for developers to experiment with the library.
In this post, I explain how we are able introduce changes and release new versions of Tuist with the confidence of not introducing bugs or breaking things.
In this post I talk about why investing in good tooling is crucial for projects to move steadily.
Not being mindful when contributing and maintaining open source projects might lead to burnout or low self-steem. In this blog post I talk about some principles that I applied to have a healthier relationship with the open source.
In this blog post I talk about why I work on open source projects and what are the most important elements for me when starting an open source community.
In this post I talk about a tool I've been working on that allows you to check the state of your Xcode projects, finding missing references and duplicated files.
I analyze in this post why some decisions that we make in our projects might turn into bad viruses that spread all over the code base.
This post presents some elementary concepts of how Xcode projects are structured, and introduces an structural approach to build modular Xcode apps.
This post introduces an approach to share testing data and mocks from your frameworks to other frameworks that might need them for testing purposes.
A command line tool written in Swift for copying the frameworks from your project to the output frameworks directory.
Because readability might compromise productivity.
Read, update and write your Xcode projects from Swift
Build UIs based on reusable components that you can compose in more complex hierarchies.
How modularizing your apps is helping us to scale our Xcode app.
Learn how handy protocol extensions can be, when used in a frameworks architecture.
Quick introduction to what Functional Programming in Swift is from the simple perspective of functions
Con la llegada de Swift y la introducción de interesantes operadores, conceptos funcionales, y la seguridad de tipos el paradigma de programación reactiva ha cobrado especial importancia en el desarrollo de apps. En comparación con la progr…
Reactive is magic, transform your API responses into streams of data and you'll se how easy is to build for example paginated API requests
Start using Swift in your Objective-C projects. Avoid some headaches with these useful tips and advices for the communication layer between your Objective-C code base and your future Swift implementations