fairese.com is my company and the home of my active product work. Through Fairese, I build and maintain current products, including apps like Silvianna and Mignori. It is also where I take on professional iOS development work when there is a good fit. Going forward, Fairese is the project entry for my active products. The rest of this projects section remains as legacy work: older apps, tools, and…
This blog post serves to notify Silvianna for AniList users that the app has been transferred to a new company, Fairese LLC. I’m Andy Ibanez, the sole owner of Fairese LLC, and I’ll continue working on the app with the same level of care I’ve been putting into it over the past few years. Nothing will change for end users, and nothing changes for me either. As I grow as a developer, it’s important…
¡Hola! My name is Andy. I come from across the Andes, overwatched by the beautiful Illimani, and I am a Computer Systems Engineer, graduated from Universidad Privada Boliviana . I started programming when I was 14 years old. My career got kickstarted thanks to a website called Neoseeker . Neoseeker is one of the few old-style internet forums that is still around today. Neoseeker is a gaming…
This year marks 10 years since I started writing iOS apps. It also marks 10 years since I launched the first version of my blog, which was a thing hosted on Tumblr and on a completely different domain that I am not going to name here. A year after the Tumblr blog, I purchased andyibanez.com, got proper hosting, and started blogging on Wordpress with whatever little money I could make during my…
The Mysterious CodableWithConfiguration Protocol Every year, at WWDC, Apple gives us a lot of new things to play around with. For the big new things, they prepare session videos and labs so developers can experiment with the new technologies and hopefully integrate them in their apps by the time the new OSes are out. The “big things” are one thing, but Apple introduces a bunch of new…
Workshop Description Swift 5.5 introduced an exciting new set of concurrency APIs. Starting with async/await, the language has received a set of features that allow us to write shorter, concise, and more obvious concurrent code. You will learn how the new concurrency APIs help us avoid “pyramids of doom” with async/await, how structured concurrency is cooperative and how to apply it in…
Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift Structured Concurrency in Swift: Using async let Structured Concurrency With Group Tasks in Swift Introduction to Unstructured Concurrency in Swift Unstructured Concurrency With Detached Tasks in Swift Understanding Actors in the New Concurrency…
This article is part of my Modern Concurrency in Swift Article Series .* Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift Structured Concurrency in Swift: Using async let Structured Concurrency With Group Tasks in Swift Introduction to Unstructured Concurrency in Swift Unstructured Concurrency…
This article is part of my Modern Concurrency in Swift Article Series . Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift Structured Concurrency in Swift: Using async let Structured Concurrency With Task Groups in Swift Introduction to Unstructured Concurrency in Swift Unstructured Concurrency With…
This article is part of my Modern Concurrency in Swift Article Series . Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift Structured Concurrency in Swift: Using async let Structured Concurrency With Task Groups in Swift Introduction to Unstructured Concurrency in Swift Unstructured Concurrency With…
This article is part of my Modern Concurrency in Swift Article Series . Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift Structured Concurrency in Swift: Using async let Structured Concurrency With Task Groups in Swift Introduction to Unstructured Concurrency in Swift Unstructured Concurrency With…
This article is part of my Modern Concurrency in Swift Article Series . This article was originally written creating examples using Xcode 13 beta 1. The article, code samples, and provided sample project have been updated for Xcode 13 beta 3. Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift…
This article is part of my Modern Concurrency in Swift Article Series . This article was originally written creating examples using Xcode 13 beta 1. The article, code samples, and provided sample project have been updated for Xcode 13 beta 3. Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift…
This article is part of my Modern Concurrency in Swift Article Series . This article was originally written creating examples using Xcode 13 beta 1. The article, code samples, and provided sample project have been updated for Xcode 13 beta 3. Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift…
This article is part of my Modern Concurrency in Swift article series. This article was originally written creating examples using Xcode 13 beta 1. The article, code samples, and provided sample project have been updated for Xcode 13 beta 3. Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift…
This article is part of my Modern Concurrency in Swift article series. This article was originally written creating examples using Xcode 13 beta 1. The article, code samples, and provided sample project have been updated for Xcode 13 beta 3. Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift…
This article is part of my Modern Concurrency in Swift article series. This article was originally written creating examples using Xcode 13 beta 1. The article, code samples, and provided sample project have been updated for Xcode 13 beta 3. Table of Contents Modern Concurrency in Swift: Introduction Understanding async/await in Swift Converting closure-based code into async/await in Swift…
Introduction This article series was originally written creating examples using Xcode 13 beta 1. The articles in the series, code samples, and provided sample projects have been updated for Xcode 13 beta 3. This is a tutorial series focused on the new async/await APIs Apple introduced in WWDC2021. I do not know how many articles it is going to have yet, but they will be posted in the upcoming…
Having our apps have good reviews is generally a good thing. After all, many users look into how many stars an app has before deciding on downloading it. Apps with a general poor rating may not get many downloads (unless they are “essential” apps of any kind, such as companion app to another service). We all as developers have experienced that users are quick to give a one-star review…
WWDC is undoubtly my favorite event of the year, and it has been for the past 11 years. This week I’m taking a break from writing technical articles and I want to talk about my personal wishlist, both for features and developers tools. Writing Actual ViewControllers for the Settings App The iOS Settings.app was supposed to be a place where you as a user, have a centralized place to configure…
This may sound surprising to you, but even though we have app autoupdate on iOS now (and we have had it for a very long time), many people don’t have it on, or the system simply doesn’t prioritize app updates because users don’t prioritize it enough. In fact, in my day job, in which I maintain a user-facing banking app, the vast majority of users are not even in the latest…
As SwiftUI is still relatively new, and it is not clear yet for many people how to use MVVM on iOS, I decided to write this short article in which I explain how one would integrate Face ID/Touch ID with SwiftUI. Let’s remember that SwiftUI uses the MVVM design pattern over the traditional MVC, and this can be confusing for people who are migrating to the new pattern for the first time. That…
Somehow, this shiny new object, which was actually introduced in iOS 10, flew past my radar. Today I want to take a few minutes to talk about the NSDateInterval object. This object allows us to quickly calculate the time interval (represented as a NSTimeInterval ) between dates, it allows us to check if two dates overlap, and it allows us to check if a given date is within a certain interval.
Ah, print . Probably the most known, the most used, the most popular debugging tool, and probably the most loved line of code of all time. You have undoubtedly used print before, if not in Swift, in other languages. The vast majority of programmers have started their software building skills with a print or equivalent somewhere. We have all used print before, but this short article is about using…
We have all worked with strings before. Printing a piece of text, or displaying some information to users in a label, can all be done in strings. But regardless of how popular strings are, they actually have a lot of complex or unknown functionality that can help developers, but they struggle to see the light of day. In this article, we will explore a very interesting aspect of strings in Swift:…
JavaScriptCore and Swift Regardless how you feel about JavaScript as a programming language, there is one simple fact: JavaScript is pretty ubiquitous, and its uses have expanded beyond web scripting. It has become a pretty popular language for a vast array of domains. For this reason, making languages interoperate with it is pretty important, and both Swift and Objective-C are no exception. We…
As you work on projects, you may notice that there’s one thing that can be really improved: Creating new files. Every single developer has gone to the File > New File screen on Xcode to create files before. Whether to create new view controllers, data models, or whatever else, it is one of the most common places you may use in your day to day life as an iOS developers.
Software development can be an easy thing, as it can be a very complex thing. And one of those complex things is keeping in mind all the different languages, locations, and standards users may use in their daily lives. This makes working with certain information. From different date formats to entirely different measuring system, software is challenging, especially when working with anything that…
SwiftUI forces us to change our way of thinking when building iOS apps. It makes us change from writing our apps in MVC to MVVM. In this article, we will explore how SwiftUI can be used with certain frameworks that aren’t “SwiftUI ready”. While this article uses CoreLocation as an example, keep in mind that you can use what you learn from this to integrate almost any other…
Every iOS developer has used the simulator. Alongside Xcode, it’s probably one of the most used tool by us all. We use the simulator to test our iOS, iPadOS, and watchOS apps without having to run them in an iOS device. But other than helping us test our apps, the simulator actually has many nice features that can help make our job a little bit easier. With the use of these features we can…
What I Learned From Selling an App A few weeks ago, I sold and transferred my app, Next Anime Episode , to another developer. In this article, I will discuss the reasons I transferred my app, and what I learned along the way in the process of transferring it. Why I Sold My App As a developer who works a full time job and work on indie apps as a hobby, there are many ideas I want to work on. Having…
We have reached the point in which computers are really fast. Especially Apple’s, as they have control of both the hardware and software, so, oftentimes, some tasks that could be sped up with multithreading, are not necessary anymore. But, for those cases when you do need multithreading, we have many options available. On Apple’s platforms there is a surprising amount of concurrency…
Creating configurable APIs for other developers can be a fun task. But depending on what languages and tools you are using, you may sometimes create customizable APIs that are more pleasant than others. In today’s article, we will explore a tiny feature in Swift that allows us to create configurable APIs easily that are a joy to use by other developers: OptionSet. Introducing OptionSet Like…
Intercepting iOS Network Request Calls with Proxyman Working with network APIs can be tricky, especially when debugging. You oftentimes have to ask yourself if your app is sending and receiving the expected information. You also often worry about whether the web service returns whatever it promises it will return. Working with APIs is both easy and tricky due to all the implications behind the…
All programmers are familiar with the concept of nullability . Whether something exists or not. Whether something is there or not. Objective-C is very dynamic when it comes to dealing with nullability. All Objective-C programmers are familiar with this phrase: messages can be sent to nil. Which means that nil itself can call methods, safely enough, without crashing. In Swift, we have a bit more…
Whether you are a seasoned developer with a lot of code out in the wild world, or you started learning programming this week, chances are you hace used (and seen) dictionaries being used in many places. Also known as hashmaps or hash tables , dictionaries allow us to store key-value mappings, from one object to another. In this article we will study this structure which is known by everyone, and…
I’m introducing a short small series in which we will talk about basic data structures in Swift. My goal is not to show how they are implemented internally, but rather to show when they can be useful. In truth, unless you have studied Computer Science to some capacity, chances are you are missing on a lot of powerful existing data structures that can help you write better code. I have been…
Happy New Years everyone! To kick off this year, I wanted to write a non-technical article. This time I want to focus on a topic that you won’t find in many other places, and that is what it is like to hunt for iOS jobs in Bolivia, and what my experience has been like being one here. By the end of this article, you will hopefully understand a very different market compared to countries such…
This has been quite a year! Not only did we have the bad stuff happen (COVID-19), it has also been a crazy year for my personal development and for the growth of my blog. Thanks to the events that happened mid-year, the reach of my blog has reached wide, and I have connected to a bunch of people thanks to all that. I want to take one minute to thank you all who have reached to me with questions…
Swift gives us many interesting features to write cleaner and more obvious code. This code is more readable, and it helps both SDK consumers and code maintainers. One such feature Swift has is the ExpressibleBy- family of protocols. This is a set of protocols that allow you to instantiate objects by providing some native Swift object. For example, we can instantiate an object providing a Boolean,…
In 2018, Apple introduced the App Store Connect API. We as iOS developers interact with App Store Connect almost daily. We like to see our sales reports, analytics, check how our apps are doing. Occasionally, we may need to register a new device or manage our users. Many of these tasks are so common that it was necessary to get an App Store Connect API at some point. Having an API allows us to…
This year, Apple introduced a new feature that gives users even more control over what photos may third party apps see when they see a Photo Picker. The system will first present an alert asking users if they want to give access to their photos at all, and they have the option to give access to all their photos, or only to the photos they choose. This is great, but it has been a very confusing…
Lazy Sequences in Swift If you have been writing Swift for a while, you have undoubtedly used high order functions such as .map and filter . These higher order function work on any collection, and they are very useful when we want to quickly transform objects into something else, or when you want to do other operations in sequences that would otherwise take more than one line of code if you were…
Printing stuff to the console is a simple but powerful step we can take when debugging our apps. But there are times when we want to print an object and we actually get something entirely different, often also useless. For example, this commonly happens when working with classes and printing instances of them. class User { let id : Int let name : String init (id: Int , name: String ) { self .id =…
KeyPath. It sounds like a very fancy word. And it is a feature you have likely used it, either knowingly or unknowingly. KeyPaths are one of my favorite features in Swift, but they can be a bit tricky to understand. In this article we will explore what KeyPaths are, and when you may want to use them. Understanding KeyPaths In simple words, a KeyPath is a reference to an actual property instead of…
There are times in which you may want to host small JSON (or other small types of files) somewhere because your app needs them. Maybe you want to configure feature flags, or maybe you want to host IAP identifiers somewhere so as to not hardcode them in your app. This last case is something I did recently. The immediate thought will be get a cheap server somewhere - after all, using something like…
If you have been writing Swift in the past couple of years, you have probably been using Codable (which is really just the composition of Decodable and Encodable in the same protocol). If you have been writing iOS apps for longer, you likely know about JSONSerialization as well, which is the backbone of Codable and it allows you to do more manual work when parsing JSON, seemingly giving you more…
I had announced that I wouldn’t be able to write an article this week due to it being Elections Day in my country. that said I just can’t leave you guys without article, so this is a short one. We will write another NSFormatter subclass. It will allow us to compose E-mails easily. This should also help show that formatters can format string into anything else really. In short, we will…
Silvianna is the best Anilist client for iOS. Anilist is the popular website for anime and manga fans, where you can keep track of your favorite series, or discover something new to watch or read. Silvianna comes packed with power features for list management. The app allows you to modify anything about items on your list as long as it is supported by Anilist. FEATURES: Friendly on the smallest…
Last year we explored some NSFormatters and how to use them . We also explored some formatters introduced in iOS 13 . Finally, a few weeks ago we learned about yet more formatters, and how to better use the ones we already had . In short, we have explored how powerful NSFormatter is. One thing we haven’t done yet though, is to write our own custom NSFormatter subclass. NSFormatter…