On March 2021 I started building Basico, an iOS lab where I’m building SwiftUI apps. After finishing the 100 Days of SwiftUI course by Paul Hudson, I was really excited to start building my own apps. Even though I had already built multiple throughout the course, I wanted to consolidate my learnings by working on my own ideas.
Why Basico?
When learning a new skill, the transition between consuming and creating can be overwhelming. Everything looks easier when you have someone guiding you through the process of learning than when you’re put in front of an empty document. I wanted to make sure I didn’t fall into the trap of setting too ambitious goals, so I created Basico to set some constraints to get started:
The name Basico (Spanish for basic) frames the complexity of the apps I could build under the brand.
None of the apps would attempt to create something radically new.
I would make use of native SwiftUI views where possible to ensure brand consistency.
I would aim to limit myself to a weekend worth of work on each app.
A bit about each app
The first three apps I’ve built are a weather app, a memory game and a birthday reminders app. Here’s a short description about each of them, including some of the key learnings.
Weather
The first app under the Basico brand was a weather app. It uses OpenWeather API to fetch weather data. It started as a single view that showed the current weather for a city selected by the user. But then it quickly evolved to show the current weather, hourly and daily forecast based on the user’s location. The initial option to search for the current weather on most cities around the world was relegated to a secondary sheet view. I used Datahub to get the list of cities, and used their geonameid to get an accurate weather for each location.
Key learnings from this project:
Getting user’s location
Fetching data from weather API based on coordinates
Accessibility features - Optimising accessibility labels and values for Voice Over
Date and time formatting
Some things I’d like to add in the future:
Weather widget
Squares
Squares is a minimal memory game. Players are shown a sequence they have to memorise and repeat to move on to the next level. The sequence increases by one on every level, and players can pick between 4 different grids to play - 2x2, 3x3, 4x4 and 5x5 square grids.
Key learnings from this project:
Using haptic feedback to improve UX
Using one view for all grids
Storing scores on User Defaults
Grid view
Using timers
Birthdays (Beta)
Birthdays helps people keep track of… ermm… Birthdays. I’m not great at remembering people’s birthdays and, while Facebook has helped in the past, I still miss birthdays I want to remember. Maybe it’s the fact the Facebook’s notifications are something like “Jane Doe and 4 others have their birthdays today…” or maybe I just tend to ignore Facebook notifications altogether - I needed a better way to be reminded. And yes, I know you can add birthdays to contacts on your iPhone. But I’m still learning SwiftUI, so I thought it was a great opportunity to put some concepts into practice.
Key learnings from this project:
Working with local notifications
Importing images from camera roll
Adding, editing and storing contacts and images in Documents’ Directory
Date formatting
Filtering and sorting lists
Some things I’d like to add in the future:
Option to import contacts from device
Upcoming birthdays widget
Basico.xyz
Finally, I’ve built a website to serve as a library of all the apps I’m building under the Basico brand. The goal for the site was to keep it as simple as possible, in line with the apps. I used Jordan Singer’s ibuildmyideas.com code (available on Github) as a starting point, and made a few modifications:
The site switches between light and dark mode based on the device’s colour scheme.
It uses the system font, which makes it more in line with the native feeling of Basico apps.
What’s next for Basico?
I’m currently taking a short break from SwiftUI. Since I started learning back in November, I’ve spent at least 1 hour a day on Xcode every day. However, I’m still planning to build more Basico apps over the next few months!
Feel free to reach out on twitter, I’d love to hear your thoughts on Basico!