I created XcodeProj and Tuist, and co-founded Tuist Cloud. My work is trusted by companies like Adidas, American Express, and Etsy. I enjoy building delightful tools for developers and open-source communities.

22 hours ago

When you become infrastructure

A reflection on the importance of maintaining the open-source projects that become the infrastructure for many companies.

yesterday

Connecting App Signal with Incident.io using Cloudflare Workers

In this blog post I share how we used Cloudflare Workers to connect AppSignal with Incident.io.

22 days ago

Standards, standards, standards

Proprietary solutions are a dime a dozen, but standards will outlast them all.

1 month ago

Thoughts on Open-Source

In this post, I share my thoughts on open source and how it aligns with my principles. I also talk about the different models that I've seen in the industry and how I'd like to see it evolve.

1 month ago

Transitioning Tuist Cloud from Ruby to Elixir

Ruby proved not to be the most suitable runtime for apps that are IO-heavy. We evaluated Swift, but ultimately decided on Elixir for various reasons.

1 month ago

Elixir scales better

In this blog post, I talk about the scaling challenges we faced with Rails, and why we decided to transition to Elixir.

1 month ago

Gain back attention

In this post, I reflect on how the digital world has hijacked my attention and what I'm doing to gain it back.

1 month ago

If I could just parallelize my tests execution

Schemes in Xcode have an option to run tests in parallel, but if your code isn't designed for it, you are in for a world of pain.

2 months ago

On protecting my creative energy

In this post, I share my thoughts on protecting my creative energy and how I'm doing it.

2 months ago

Global state is future debt

In this post, I share my thoughts on global state and how it's future debt.

2 months ago

It takes a lot of determination

The world needs more people who are determined to make a difference. In this post, I share my thoughts on the importance of determination and how it has helped me in my life.

2 months ago

It's not about what, but how

In this post, I share my thoughts on the challenges of building something new and how it's important to focus on the 'how' rather than the 'what.'

2 months ago

JavaScript DX without JavaScript

In this post, I explore the idea of having a platform-agnostic and technology-agnostic compiler that can be plugged in as an in-code backend for rendering purposes in any other stack (Rails, Phoenix, Express).

3 months ago

Incremental Xcode workflows across environments

Xcode struggles to achieve incremental builds within the same environment. What about across environments? Not even close. Tuist is working on bringing incremental builds and test execution to Xcode projects across environments.

3 months ago

AirPods Max died after 2 years

Apple might have found a legal loophole to charge users for hardware issues caused by software updates.

3 months ago

Xcode is too magic

Xcode is a great tool for beginners, but it makes it hard for developers to understand what's going on under the hood and optimize their workflows.

3 months ago

XCBundles

Xcode doesn't have a native container for bundling resources for different platforms and architectures. But nothing stops us from creating our own for Tuist.

3 months ago

Gifting OSS

Navigating the dynamics of Open Source Software (OSS) and sustainability in the tech industry.

3 months ago

Global state, CLIs, and test scalability

In this post, I talk about how global state in CLIs can make your test suite flaky and how to solve it to scale your test suite.

3 months ago

Deterministic tool versions across environments with Mise

Non-deterministic tool versions across environments is a common source of headaches in development teams. In this post, I share how Mise can help you solve it.

3 months ago

I'm allergic to complexities

I like understanding complexities to simplify them. In this post, I share some examples of complexities that I'm intentionally avoiding because they are complex and therefore not fun.

3 months ago

Starting therapy next week

2023 was a year of many challenges in my life. Next week I'm going to start mental therapy with a psychologist.

3 months ago

Open-source and the imposter syndrome

In this post, I talk about how I'm feeling about my contributions to the open-source community.

4 months ago

I'm sick

Cieza, my hometown, is a beautiful place, but it's also a toxic environment that makes me sick. In this post, I reflect on my connection with this city and the Spanish culture.

4 months ago

Type safety but at which cost?

Type safety, while important, can be overrated and lead to over-engineering. In this post, I share my thoughts on the topic.

4 months ago

JavaScript-owned state and accessibility

WAI-ARIA attributes are a great layer to persist application state and make the website accessible. However, the convenience of JavaScript APIs to store state makes them store all the state in JavaScript, making the websites less accessible.

4 months ago

What if XCTest a concept akin to Elixir's processes?

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.

4 months ago

Learning to love the problem and not the solution

We engineers are vulnerable to getting attached to solutions instead of problems. In this post, I share my experience with this and how I'm trying to change it.

4 months ago

Implicitness in Xcode and SPM. Why Apple?

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.

4 months ago

What I expect from a knowledge management app

In this post, I share what I expect from a knowledge management app.

4 months ago

Swift Packages default to supporting all platforms

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.

4 months ago

Swinging back to positivity

2023 was a year full of micro-traumas that led me to a negative mindset. In this blog post, I talk about how I'm working on swinging back to positivity.

4 months ago

Open-sourcing the lightning_css Elixir package

In this blog post I talk about the motivations that led me to build and open-source lightning_css, an Elixir package to bring a more advanced CSS bundler to Elixir and Phoenix projects.

4 months ago

On mental health

In this blog post I open myself about recent mental breakdowns and how I'm dealing with them.

4 months ago

3 package managers + 2 build tools = One big mess

I shared a bit of a reflection on what are the issues with current Apple's tooling touching on some of the points that I presented in my Swiftable 2023 talk.

5 months ago

Peeling layers

This blog post contains a recent reflection over the often over-abstracted web platform, and how powerful it's become, making many of the normalized abstractions feel unnecessary.

5 months ago

Ensuring a smooth workshop experience

In preparation for a workshop that I'm conducting in Swiftable (Buenos Aires), I came up with an idea to ensure a smooth experience following the workshop

5 months ago

Balancing mastery and sustainability

Juggling roles in Tuist, from coding to community support, taught the delicate balance between mastery and sustainability in open-source projects.

5 months ago

Dear Bitrise

Read my personal take on Bitrise's actions against Tuist, and how we're rallying as a community to uphold our values and vision.

5 months ago

Integrating Swift Macros with Xcodeproj native blocks

Exploring native Swift macro support in Tuist to simplify and accelerate Xcode project builds.

5 months ago

Making Tuist easier to work with by saying goodbye to Ruby

We're removing Ruby from Tuist, integrating everything into Xcode, replacing Fourier with bash scripts, and rewriting tests in Swift for ease.

6 months ago

From side project to sustainable tool

Tuist, now 6 years old, has become essential for organizations using Xcode. While initially a side project, its popularity surged. To ensure sustainability, we're introducing paid features alongside free ones, navigating challenges like unauthorized forks and finding the right business model.

6 months ago

Empowering Development: The Journey and Vision of Tuist

Tuist provides solutions to challenges in large-scale app development overlooked by Apple. It's a foundation for developers, promising simplicity and a future filled with actionable insights.

6 months ago

Recalibrating Mental Models in Elixir Programming

Navigating through Elixir requires a rethinking of traditional OOP mental models, inviting a shift towards domain-centric thinking. Embracing Elixir's functional paradigm offers intriguing challenges and a rewarding, fresh perspective on problem-solving in programming.

6 months ago

We do it for the community

Embarking on a nuanced journey with Tuist, facing ethical dilemmas & aiming for sustainability, I invite you to be part of our personal tech story.

7 months ago

Between Simplicity and Limitations: A Developer's Take on Apple's Tooling Strategy

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.

7 months ago

Reclaiming Mental Peace: My Personal Odyssey

Battling daily mental fatigue, I embarked on a personal journey to rediscover clarity. Through exercise, mindful task management, and self-reflection, I'm finding my way back.

7 months ago

Exploring Mocking Solutions in Elixir: Introducing Modulex

Exploring Elixir's Mox for mocking reveals boilerplate code issues. A new package, modulex, aims to streamline this process.

7 months ago

Passion vs. Profit: My Quest for Meaningful Craftsmanship in Tech

In a world where money often takes the front seat, how do we balance the joy of craftsmanship with the need for financial stability? Here's a personal reflection on the intersection of passion, craft, and monetary pursuits.

8 months ago

Tuist: From Passion to Craftsmanship, Charting New Horizons

From its inception in 2018, Tuist has grown through passion and dedication, now embarking on new horizons.

8 months ago

Fixing request/2 is undefined or private with Ueberauth

Tackled 'request/2 undefined' error in Ueberauth setup for Digestfully, sharing solution here.

8 months ago

Abstracted complexity remains complexity

Recently, I had to decide on a technology stack for Glossia, a localization tool I’m bootstrapping with my wife. Choosing a technology stack is an exciting decision for us, as software crafters. Still, it carries a profound impact on both the software and the business that builds on it, and should not be taken lightly.

9 months ago

The Power of Concurrency: My Journey Learning Elixir

Exploring Elixir, I discovered the power of concurrency-oriented programming

9 months ago

Fixing psych compilation error trying to install Ruby on an Apple M2 laptop

Buckle up for a hilarious adventure in Ruby installation! Unravel the mysteries of rtx, Homebrew, and secret environment variables.

9 months ago

An update on the entrepreneurship path

Embarking on a tech-venture adventure; creating value, chasing joy, and conquering challenges.

10 months ago

Integrating Tailwind into your Swift projects

Tailwind: A game-changer for web styling, with seamless integration into Swift server projects using SwiftyTailwind.

10 months ago

Issues Dockerizing a Vapor project in M2

Fly CLI + Docker on M1/M2 architecture caused issues, so I switched to GitHub Actions for deployment. No more problem!

10 months ago

Focusing on Swift

Transitioning from Swift to diverse technologies broadened my problem-solving skills, but scattered focus hindered productivity. To prioritize mental well-being, I'll limit tech consumption. Swift and Apple's ecosystem captivate me, offering integrated tools and a supportive community for app development. I'll step back from web-related learning and return to my roots, enjoying the process of building apps once again.

10 months ago

Hitting memory limits deploying Vapor apps to Fly

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.

11 months ago

Embracing the Journey of an Indie Developer

After 5 years at Shopify, I’ve decided to pursue solopreneurship. Drawing on my craftsmanship and software development skills, I’ll build and sell tools based on user needs. Excited for the intimate relationship with development and greater agency over my life. Open to insights from others on this journey.

1 year ago

How to Configure VSCode to Use Alternative Shells

Learn how to easily configure VSCode to use your preferred alternative shell installation like ZSH or Fish instead of the default profiles.

1 year ago

Generating client secret from Apple's P8 key in Elixir

Implementing Sign in with Apple on a macOS app using JWT and Phoenix. Learn how to generate a client secret for web authentication.

1 year ago

Typescript not loading in Visual Studio Code

I share the investigation into Visual Studio Code not loading Typescript and the solution I found - enabling the @builtin typescript extension.

1 year ago

Iterating on my learning system

Some notes on what changes I'm introducing to my learning system.

1 year ago

Static imports with ESM and startup time

When building a Command-line interface (CLI) with Javascript and

1 year ago

An explicit build graph with Nx for a better DX

When I started doing Javascript more actively, something that got my attention was the absence of a build system that allowed declaring a build graph explicitly. Most of the time, developers combin...

1 year ago

Hot-reloading and ESM

While building Gestalt, I realized that many web frameworks don’t move away from CommonJS because the...

1 year ago

Growing as a Staff Developer

A couple of months ago, I reached Shopify‘s Senior Staff Developer level. They were exciting news and excellent proof that Shopify continues to be a place for grow...

1 year ago

Typing file-system paths in Typescript

Learn about an NPM package that we published recently, typed-file-system-path, that adds primitives to work with file-system paths more safely using types.

1 year ago

On learning Elixir

As you might have noticed, I’ve been learning Elixir for the past few weeks. Why? You might wonder. I’m a programming languages nerd. I like learning about ho...

1 year ago

On finding passion in devising developer experiences

What am I professionally? I don’t have a clear answer. I used to say I was an iOS developer with a passion for Swift, but that’s n...

1 year ago

Modular projects, Typescript, and developer experience

Have you tried to set up a modular Typescript project with multiple NPM packages? It’s painful. Typescript tried to solve that with

1 year ago

On embracing my chaos

Over the past few years, I’ve tried and failed many times at giving my chaotic self some order — something that inevitably made me feel anxious. I tried to organize myself ...

2 years ago

Mitigating 'delete node_modules'

If you’ve worked in the Javascript ecosystem, you might already be familiar with the “delete node_modules” solution commonly suggested on StackOverflow...

2 years ago

But they are developers too

I often hear a statement when justifying decisions in building developer tools: but they are developers too. It bugs me a ton because it throws all the developers into the same bag and assumes that...

2 years ago

CLIs are products too

Over the years of working on command-line interface tools I observed that they are not often perceived as products. Consequently, ...

2 years ago

Javascript, ESM, and tools

I’m using Javascript, Typescript, and Node a lot these days as part of my work at Shopify and Gestalt and I’m really loving i...

2 years ago

Users don't care about your web app's portable binary

We, software crafters, naturally tend to distance ourselves from users led by excitement for technological cycles and innovation. Our industry is full of examples. For instance, th...

2 years ago

OSS and extrinsic motivators

More and more, we see open-source projects being backed by investment rounds. It’s positive for the projects because they can innovate faster and sustain themselves by paying peopl...

2 years ago

Platform-dependent CLIs

I’m a firm believer that shaping products as developer platforms is an amazing idea to let developers from all over the world make your product diverse. Otherwise, you have product...

2 years ago

On evolving opinions

I recently came across a tweet that suggested me to undo my blog post on Web3 after sharing some bad things I’d uncovered in the technology. I couldn’t unde...

2 years ago

Migrated to SvelteKit

I migrated this blog to SvelteKit. I did it to consolidate everything I had learned about the framework, and be able to SSR static pages with dynamic content. ...

2 years ago

Adapting to a platform

In a simplistic way, we can see web frameworks as convenient functions that take your app as input and return deployable artifacts. GatsbyJS...

2 years ago

I want to be rich

2 years ago

The React chain

I’ve been thinking a lot lately about the role React plays when building a web app. Companies like GitHub and

2 years ago

On cutting off some dopamine dependency

Over time, my relationship with the Internet has turned me into a dopamine-dependent. I’ve reached a point when my body often has a physical presence in the offline world throughout the day, but my...

2 years ago

Great solutions for the wrong problems

As you might know, I’m a curious person. That leads me to reading about challenges tech companies run into and the solutions that they come up with, and connecting them with similar problems with t...

2 years ago

Developer platforms and diversity

If we think about how tech companies build products these days, we’ll realize many present a single model that they push onto the world. Companies like

2 years ago

Spain, it's not time to be reunited (yet)

As some of you might know, we’ve been in Barcelona looking for a flat to relocate from Berlin for the past few weeks. A few things happened during the COVID19 pandemic that prompted us to think abo...

2 years ago

A future note to self about Omniauth

Every time I try to set up Omniauth on a Rails codebase I run into the same issue: Not found. Authentication passthru ...

2 years ago

./dev

One of the things that I appreciate as a developer is having a consistent experience across projects. As you probably know, this is often not the case when running a project locall...

2 years ago

Seabolt support for M1

As part of building Chimera, an AppleOS tool for capturing networked knowledge, thoughts, and ideas, I encountered an issue trying to set up

2 years ago

Some Rust thoughts

A while ago, I started reading about the Rust programming language out of curiosity. Many things fascinated me about the language. It has a powerful dependency manager similar to the Swift Package ...

2 years ago

Planning open-source work

One of the things that I find the hardest when building open-source software is planning the work. On one side, there are all these new features and improvements that you’d like to...

2 years ago

Contributors' first experience

When building open-source software, getting external contributions is usually one of the most difficult things. Most of the times developers are busy working on their projects, and they are hesitan...

2 years ago

What I learned as a manager

As you might know, Shopify allowed me to try the people management track and become an engineering manager. I’ve been doing that for the past two years. Along the ...

2 years ago

Propose, prototype, and build

One of the things I like about Shopify is an internal tool called Vault. It’s the backbone of the organization. You can find people, navigate the ...

2 years ago

Back to Jekyll

I recently changed my stand in regards to the technologies that I use when building software. In particular, I decided to minimize the amount of Javascript that I use in my project...

2 years ago

Swinging the pendulum back to engineering

Over the past two years, I’ve been engineering manager at Shopify. I managed the Mobile Tooling and React Native Foundations teams over here. I’m grateful that Sho...

2 years ago

Focused Xcode projects

A while ago, and inspired by Facebook’s internal tooling, we added a new command to Tuist, tuist focus. As it names says, it’s intended to be used when you want to work ...

2 years ago

On not having focus

One of the things that I struggle a lot with these days is focus. Because of that, I realized I cannot longer do deep and focused work. I spend my days context-switching all the ti...

2 years ago

Tuist 2.0 and next

As we are approaching the release of Tuist 2.0, I started thinking what’s next for the project. The focus until 1.0 was around project generation. We provided developers with a graph-based project ...

3 years ago

Building mental models

As you probably know, I started building Buildify, an open-source and AGPL-3-based tool for deployments. Like I did with Tuis...

3 years ago

ViteJS and Rails

I recently had to set up a React frontend for a Rails app, and I decided to use ViteJS instead of Webpack. What’s ...

3 years ago

Learning Rust

I became weirdly excited for Rust lately. It’s a programming language that I’ve been planning to learn for some time and I finally set out to learn it. It’s just the beginning of my learnin...

3 years ago

Migrating documentation to Docusaurus

Writing a project’s documentation is not as exciting as coding, but over the years I got to understand the key role of documentation in the developer experience. Shopify for instance has a team ded...

3 years ago

TailwindCSS or Theme-UI

I’ve been using TailwindCSS a lot lately. I like the fact that styles are contained within the HTML elements through classes. You can copy and paste an element styled with Tailwind and you can be c...

3 years ago

Community-driven and organization-driven open source

Yesterday, while reading about Rust and its package manager, Cargo, I realized how diverse the list of Crates (packages...

3 years ago

The role of flexibility in scaling up Xcode projects

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...

3 years ago

Open source, people, and happiness

When looked from the consumer standpoint, open source often reads as software publicly available that I can check out, use, and improve. However, there’s more than that. In a world where everyone s...

3 years ago

Data-driven open source

Yesterday, we announced that Tuist has now stats that allows us to understand how users use the tool and therefore, invest our time working on Tuist more wisely...

3 years ago

Building Tuist as a platform

Having seen Shopify acting as an e-commerce platform that developers can extend made me think whether the same idea would be applicable to Tuist. What if instead of us trying to codify all differen...

3 years ago

Tuist and JS bundlers

I think there are a lot of similarities between Tuist and JS bundlers. First, they both are functions that take input and return an output. In the case of a JS bundler, it takes Javascript or any v...

3 years ago

Owning your workflows

The more I work with Javascript and Ruby, the more I realize how empowering it is to design your workflows. Having worked with Xcode and Swift for many years, I was used to Apple dictating your wor...

3 years ago

Focusing on the problems

One of the things that I noticed when building tools for developers, either through Tuist or my work at Shopify, is that we developers tend to get incredibly excited about what our new idea would e...

3 years ago

Tuist and the Swift Package Manager

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 happ...

3 years ago

Tackling technical debt in Tuist

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 th...

3 years ago

Decision records

One of the things I’ve been terrible at is at keeping decisions records in projects. It happens often working on Tuist that I come across something that I need to know why it was d...

3 years ago

Scaling up an open-source project

One thing that I’ve been struggling a lot with lately is the amount of distractions that come with the growth of an open-source project. In the case of Tuist, those d...

3 years ago

The beauty of a standard command line interface

There’s something beautiful in entering a directory that contains a project and knowing how to interact with it. It’s like being part of a communication where the terminal is the channel and you bo...

3 years ago

Reflecting on 3 years at Shopify

A few days ago, it was my 3rd anniversary at Shopify, and I’ve got the idea of sharing in a short blog post what are the things that I like from Shopify and that allowed me to grow: - ...

3 years ago

My first RFC in the React Native project

Today I created an RFC for the first time in the repository 🥳. I’ve pondering a bunch of ideas for a lon...

3 years ago

My tech stack in 2020

I’m a bit reflective today; I guess because we are approaching the end of this so-odd year. Therefore, I’d like to share what has been my preferred tech stack in 2020 and what most likely continue ...

3 years ago

Sparking joy working with Xcode

I learned by working with Ruby and Ruby on Rails during my time at Shopify that using tools and programming languages that spark joy is crucial for developers’ motivation. Even though we developers...

3 years ago

Tree-shaking Xcode projects

Tree-shaking is a concept inspired by Javascript and used by Tuist to generate lean Xcode projects that are processed and compile faster.

3 years ago

Module caching in Xcode projects

Bazel and Buck is the solution large companies have adopted to make Xcode build fast. However, it's complex and not accessible to medium and small companies. In this blog post, I share the approach Tuist is taking and how it's inspired by tools the community is already using.

3 years ago

Growing Tuist's community

In this blog post, I share my experience building the Tuist community. I talked about the things that have worked well, and the areas where there's still some room for improvement.

3 years ago

The exciting adventure of building a web app

I’ve been playing lately with building a web app that complements Tuist with some features that require storing state in a server. Since I have a mobile development b...

3 years ago

Generating Typescript code from a GraphQL schema

Today, I learned about a tool called GraphQL Code Generator turns a GraphQL schema into typed models and utilities for interacting with a GraphQL A...

3 years ago

What I like from Ruby and Rails

The more I use Ruby and Rails, the more I like it. I’ve played with Typescript lately, and it continues to feel heavy: parenthesis and brackets eve...

3 years ago

Modularization in open source projects

I recently came across a blog post from Shopify where they share how they are componentize the main Rails application into smaller pieces with clearly defined boundaries and loose coupling between ...

3 years ago

Finding focus

One of the things that I struggle a lot with these days is having focus. Despite my several attempts to mitigate distractions, they always find their way to make it into my attenti...

3 years ago

Pairing sessions to introduce people to Tuist and open-source

I recently started having pairing sessions with developers interested in contributing to open-source; it’s something that usually intimidates people, but that becomes easier if someone guides you t...

3 years ago

Thinking in terms of problems

One of the things that I find the most challenging these days when building tools for developers is thinking in terms of problems. Very often Tuist’s users ask for features...

3 years ago

The beauty of not expecting something in return

Yesterday I had a thought-provoking chat with an acquaintance. He thinks that when we connect with someone is because they are a means to achieve goals - for example a business par...

3 years ago

A shift towards product development

Working on building tools for developers has helped me realize that what I like even more than coding is going through the product thinking process. That’s why I’m so engaged building

3 years ago

Transitive React Native dependencies

Today I learned about how dependencies are organized by NPM and Yarn. Let’s say we have the following scenario of dependencies: - A -> B -> C (3.2.1)...

3 years ago

Streamlining app development

One thing that I noticed after Shopify‘s commitment to React Native is that it foster a culture of turning ideas into mobile...

3 years ago

WWDC's FOMO

I’m avoiding opening Twitter these days. It makes me a bit anxious receiving WWDC news through people racing to be the first one to publish the cli...

3 years ago

First thoughts on Sorbet

We started using Sorbet to add types to Galaxy’s codebase. Types are great to catch type-related issues statically, a...

3 years ago

Working on new features or tackling technical debt

One of the things that I find the hardest when working on Tuist these days is finding a good balance between adding new features and tackling technical debt. The most...

4 years ago

Add and remove footer using NSBox

If you use macOS, you have probably realized many apps have the following UI component on their settings:

4 years ago

My first coding video on Youtube

I never thought I’d end up doing this, but today I just recorded an uploaded a video to Youtube that is meant to be the first of a series about Tuist. I recorded myse...

4 years ago

To build, or not to build

These days I’m a rollercoaster of emotions ― I guess as a result of COVID19 and spending so much time at home. In particular, these days I’m thinking a lot about Tuist

4 years ago

Cognitive overhead

Bootstrapping and publishing an app to the App Store is not a straightforward process. I tried to do it myself yesterday and a lazy me got stuck when I had to create signing artifacts, write automa...

4 years ago

Graphed knowledge

Most of the note-taking apps that we can find out there are designed around the same organization principle: notes are linearly organized and grouped into higher-lever abstractions that are fol...

4 years ago

Catching crashes at launch time on Android React Native apps

One thing that I noticed about React Native is that with the setup that most teams have on CI launch-time crashes can go unnoticed. Those crashes often happen when the contract bet...

4 years ago

Control and innovation

I saw a tweet this morning where the author was hoping for Apple to announce a new product in the domain of CI. Apple a...

4 years ago

Anxiety-free working

I feel it really hard to work these days without feeling anxious. A Slack ping here, an interesting tweet there, some emails to answer, articles to read that are piling up… With that set up, not on...

4 years ago

Keeping it simple

If there’s something that characterizes my approach to problem solving these days is simplicity. Working on acquiring a product mind-set in the last 2 years has helped me realize h...

4 years ago

Diving into Nix

At Shopify, the dev-infra team has been working on using Nix from one of our internal tools, dev. ...

4 years ago

We need more crafters

I think the technology industry needs more crafters. People that have a genuine and lasting love for what they do. Our industry is filling with people that are constantly t...

4 years ago

A better signing experience in Xcode

A few days ago, Marek decided to take on a proposal that I made for Tuist a while ago, management of certificates and provisioning profiles

4 years ago

From iOS engineer to a T-profiled techie

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 tal...

4 years ago

Generation of Swift interfaces to access resources

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-saf...

4 years ago

A standard CLI for Xcode projects

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...

4 years ago

Evolving Tuist's architecture

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 Intern...

4 years ago

Seeking inmutability

I recently opened up this PR on Tuist that turns models that represent the projects into structs. For some reason, which I don’t remember, I ha...

4 years ago

Social anxiety

I keep falling into the same trap over and over: believing that I should be active in social media to be connected to others and have a prosper professional future. My relationship with them is a r...

4 years ago

Wrapping up 2019

Following every year’s tradition, I’m writing a wrap-up post for this year, 2019. 2019 has been the year when María José and I got married. I proposed to her in January and...

4 years ago

Signing with Xcode on CI

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 proj...

4 years ago

Moving Pods to Packages

Today, I decided to move all Angle‘s dependencies that were defined as CocoaPods Pods to Swift Packages. It was my first-hand exp...

4 years ago

Adding bits of reactive programming to Tuist

In this blog post I talk about a recent decision that we made to start using reactive programming to model asynchronous tasks in Tuist.

4 years ago

Working on a new website for Tuist

An update on what I'm up to these days with Tuist. In particular, I talk about the new website that I'm designing and implementing for the project.

4 years ago

Creating experiences

Picked up my phone and dumped some thoughts on why I'm so engaged and excited to build Tuist.

4 years ago

I am X

This is a short reflection around something that it's common in our industry, professionals labelling themselves and limiting their area of influence.

4 years ago

Module caching with Galaxy

Tuist has been of a great value for developers that found it difficult to extend their Xcode projects because Xcode exposed a lot of complexity to them. Having conceptually compressed those difficulties by leveraging project generation, it's time for Tuist to tackle a new challenge, reduce compilation times.

4 years ago

Static site generators

In this blog post I talk about what traits I expect a static site generator to have, and why I believe Gatsby is a more suitable option than other alternatives in the industry.

4 years ago

Better relative paths

We are providing a new API from Tuist to define relative paths and this blog post describes the motivation behind it and the solution that we are adopting.

4 years ago

Project description helpers

In this blog post I talk about a beautiful abstraction which Alex and I came up with to push Tuist's awesomeness even further.

4 years ago

Abstractions

In this blog post I talk about abstractions in the Xcode projects domain and how Tuist leverages the concept to conceptually compress intricacies of Xcode projects that developers are often confronted with.

4 years ago

Keeping up with dependencies updates

A brief reflection on Dependabot, a tool that was recently acquired by GitHub and that helps automate the process of updating dependencies on your GitHub repositories.

4 years ago

What's coming to Tuist

A Monday blog post with some reflections about the current state of Tuist and its future.

4 years ago

A period of changes

Dumping some thoughts on what the last month have been for me in my personal and professional life.

4 years ago

Project generation

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.

4 years ago

Adding error tracking to a CLI written in Swift

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.

4 years ago

Derived Info.plist files

In this mini-post I talk about some recent work that I've done in Tuist to support defining Info.plist files in the manifest file.

4 years ago

Running system tasks with Swift and Foundation

In this blog post, I talk about my experience using one of Foundation's APIs, Process.

4 years ago

All you need is tools (talk)

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.

4 years ago

How I feel working on Tuist

A random reflection about Tuist and why I'm so glad working on it.

4 years ago

The tale of Xcode projects' complexity

This is a short story of how Xcode projects can end up being very complex and hard to maintain.

4 years ago

The urge to be the first

Just an observation of a trend that I've seen in our industry: developers rushing to be the gain the label of expert in a given technology.

4 years ago

Speaking at AltConf

A brief post talking about my experience speaking at AltConf 2019 in San Jose.

5 years ago

Abstracting Info.plist files

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.

5 years ago

T-shaped engineers

Specialized engineers usually refrain from working on tasks outside their comfort zone of familiar programming languages and tools. While I believe this might be a good setup for projects that are just starting, I think building teams with t-shaped engineers is crucial for the long-term success of the project.

5 years ago

Xcode updates are fun

On this blog post I talk about Xcode updates and how painful they can sometimes be.

5 years ago

Reliably installing Xcode

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.

5 years ago

macOS development and being comfortable

I've been avoiding macOS development for no reason. This blog post is a short reflection on why I think I've been doing it.

5 years ago

Interacting with Xcode projects in Swift

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.

5 years ago

Open source and trust

Trust is key for open source projects to thrive. In this blog post I explain what trust has meant for Tuist.

5 years ago

Automated tests for a Swift CLI tool with Cucumber

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.

5 years ago

Software and people

A reflection on what's one of the most important things to me when building software, the people that make it possible.

5 years ago

Turning negativism into positivism

Short reflection on how beneficial it can be turning negativism into something positive.

5 years ago

Deep linking into macOS apps

Some comments on what's the state of art of macOS handling deeplinks.

5 years ago

GitHub as an organization hub

With the recent GitHub announcement of personal projects, I'm considering using GitHub as a todo platform where I can not only keep track of work-related tasks, but also personal ones. In this brief blog post I talk about how I used to organize myself, and why I think GitHub projects might suit my needs well.

5 years ago

The motivations behind building Tuist

Tuist is my most beloved open source project. In this blog post I touch on the motivations that led me to build it.

5 years ago

Wrapping up 2018 📦

A retrospective on what 2018 has been

5 years ago

All you need is tools 🛠

In this post I talk about why investing in good tooling is crucial for projects to move steadily.

5 years ago

What a psychologist helped me realize

It's been a few months going through a therapy that has helped me understand how my brain works and where the stress that I used to experience came from.

5 years ago

GitHub workspaces using email

With this simple tweak I managed to have a notifications-free GitHub dashboard with workspaces right on my email.

5 years ago

Open source mindfulness

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.

5 years ago

Why am I obsessed with developers being productive using Xcode?

In the last months I've been investing a big chunk of my free time on building tools to make developers productive working with Xcode. In this blog post I reflect on what led me to start working on that tool, Tuist, and how I'm addressing some of the challenges that are presented when using Xcode at scale.

6 years ago

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.

6 years ago

On having focus

I'm struggling to have focus nowadays. In this post I describe why it's so hard for me to focus, and the things that I'm doing to overcome the problem.

6 years ago

Hallo Ruby, wie geht's?

It's been a long time since the last time I coded something on Ruby. In this blog post I talk about why I started using it again, and how it feels after spending a few years working with a compiled language like Swift.

6 years ago

Thoughtful usage of technology

I gave up using Medium and here are the reasons that led me to make the decission.

6 years ago

I gave up using Medium

I gave up using Medium and here are the reasons that led me to make the decission.

6 years ago

The hermeticism and rigidity of Xcode and its projects

Xcode and its projects are not as flexible as they could be, which makes it hard for companies to optimize their workflows and processes. In this post I'll analyze some of the things that I would improve from its build system and projects.

6 years ago

This app could not be installed at this time

Because sometimes Xcode cannot install your apps, and you have to figure out why.

6 years ago

Random thoughts a Friday night in Ottawa

I sat down after work and thought about some things that have been in my mind for some time. I wrote them in this blog post that if I have to summarize it, it talks about minimalism, open source, egno, and career paths.

6 years ago

Wrapping up 2017 📦

A retrospective on what 2017 has been

6 years ago

Linting your Xcode projects with xclint

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.

6 years ago

Consistent vs convenient

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.

6 years ago

Modular Xcode projects

This post presents some elementary concepts of how Xcode projects are structured, and introduces an structural approach to build modular Xcode apps.

6 years ago

Providing mocks and testing data from your frameworks.

This post introduces an approach to share testing data and mocks from your frameworks to other frameworks that might need them for testing purposes.

6 years ago

Conditionally embed your dynamic frameworks

A command line tool written in Swift for copying the frameworks from your project to the output frameworks directory.

6 years ago

Little tweak to be more productive writing XCTest tests

Because readability might compromise productivity.

6 years ago

Introducing xcodeproj

Read, update and write your Xcode projects from Swift

6 years ago

Moving back to Berlin

A brief retrospective on what my life has been in the last few months and my thougts on my move to Berlin.

7 years ago

Composable UIs

Build UIs based on reusable components that you can compose in more complex hierarchies.

7 years ago

Divide and conquer

How modularizing your apps is helping us to scale our Xcode app.

7 years ago

📦 Wrapping up 2016

The year is almost over. In this post I summarize everything that happened this year and my new year resolutions.

7 years ago

Extensions, dependency injection and frameworks

Learn how handy protocol extensions can be, when used in a frameworks architecture.

7 years ago

Developing tools for developers

Learnings from being a core developer and providing other teams with the tools that they need for their daily work.

7 years ago

Stepping off the social world

I became addicted to social networks. What’s addicted for me? Opening apps like Facebook, Twitter and

7 years ago

Be Reactive my friend

Article that explains the benefits of reactive programming in the iOS world.

7 years ago

Micro Features Architecture for iOS

Organize your app in small features that you

7 years ago

Network Testing - Say hello to Szimpla

Introduction post for the last library that I've been working on, Szimpla.

7 years ago

A journey into Frameworks - Le Testing Framework

One of posts that tells about the migration from a monolithic architecture based in single target to have multiple reusable Frameworks.

7 years ago

Being disconnected in a connected world

In a world where social networks are moving relationships to the Internet people is becoming more disconnected.

8 years ago

Boy Scouts rule with Danger

Post where I explain how Danger helped us at SoundCloud to apply the programming Boy Scouts rule to our workflow

8 years ago

Automating iOS review tasks with Danger

Post that explains how to automate review tasks with the help of the tool Danger

8 years ago

Marcheta en la vida

Mi experiencia de haber salido a vivir fuera de España y las lecciones aprendidas

8 years ago

Xcode scripts to rule them all

Set of normalized scripts very useful for Xcode projects. Individual contributors will be familiar with them after they clone the project.

8 years ago

States - The source of truth

Overview of states in iOS apps, how we tipically handle them, current challenges with states and how to overcome them

8 years ago

Install the last Carthage version on CI services (Travis, Circle, ...)

Very simple script to keep your Carthage version updated without depending on Brew.

8 years ago

Rewriting SugarRecord, 2.0

I explain in this post how was the process of rewriting SugarRecord, a CoreData/Realm wrapper for Swift.

8 years ago

Functional is about functions (Swift)

Quick introduction to what Functional Programming in Swift is from the simple perspective of functions

8 years ago

Implementing a Mutable Collection Property for ReactiveCocoa

These are the steps I followed to create a Mutable Collection Property for ReactiveCocoa. Very useful if you want to get events about changes produced in a collection

8 years ago

Programación Reactiva en Swift: Parte 1, Introducción

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 desa...

8 years ago

Paginated API requests using Functional Reactive in Swift

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

9 years ago

Why Open Source helps you to become a better developer

Most of developers haven't tried creating an Open Source component before. Since I apply it to every of my projects I feel the results and development process has improved a lot. In this article I will describe why it's so important

9 years ago

My first Apple Watch impressions

After a day using Apple Watch I would like to share my impressions with the new Apple toy and why I wouldn’t buy the first version

9 years ago

Full control in your hybrid mobile apps with a local server, 8fit

Custom solution to have full control over your hybrid apps bundling the content locally and controlling updates

9 years ago

Modularize your mobile projects

Learn how to split your app components in different bundles instead of dealing with an unique bundle that packages the whole app

9 years ago

Boosting your mobile app with Javascript and some mobile knowledge

Learn how useful might be giving some steps on mobile (Android/iOS) launching mobile solutions with web knowledge and with the same mobile native experience as any other app

9 years ago

Swift and Objective-C playing together

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

9 years ago

Codemotion experience

After two days of Codemotion I would like to share my experience in my first time in a developers event like that one

9 years ago

VIPER, Looking for the perfect architecture

Talk I gave in the Redbooth HQ office for NSBarcelona with the iOS team talking about the VIPER architecture

9 years ago

Github as your project management tool

Github is a powerful Git platform commonly used between the developers community. It offers features like issues, labels, milestones, releases, that used properly might help you to manage not only your technical repos but different aspects around your project like design, ideas, ...

9 years ago

Leaving Redbooth

I took de decision to leave Redbooth and join to a new adventure. I explain here the reasons, everything I learned from there and my expectations for 8fit

9 years ago

Setup your iOS Projects for testing

Learn how to setup your iOS for testing using the most popular testing libraries and how to integrate your project tests in the development flow.