Today I Am Bold

Well, it’s about time I got to this! Welcome to my first development log about a mobile app I’m working on titled ‘I Am’. It’s a concept I’ve had for quite some time, and it’s turning out to be a great starter project. Rather than go deep into the details right away, I want to start by sharing a little about the project - what it is, my development goals, and some of the roadblocks I expect to encounter along the way (and some I’ve already had trouble with!).

I Am - The Concept

I Am is a simple app with a simple premise. Life is stressful, and that stress can sap away our energy. When that happens, it’s nice to have a little pick-me-up to help us work through the challenges in front of us and get back to feeling like ourselves again. I Am wants to be your daily pick-me-up, and it will do it in a pretty straightforward way.

“Today I am [adjective]"

That’s the sentence you’ll see on the main page of the app, nice and large in the middle of your phone’s screen. Except, of course, you’ll see an actual adjective at the end - bold, adventurous, friendly… there’s a whole list to select from! Whichever word you choose, you’re setting an emotional goal for yourself, something that can be used as a personal mantra and can help you find a way to keep moving forward when times are tough.

Here’s an early look at how things are going:

I Am app, English, adventurous

Main Project Goals

Build, Ship, and Update a Xamarin.Forms App

I’ve been looking into Xamarin.Forms on and off for a few years now, and I’m taking this chance to build an app from start to release and beyond. I love the idea that I could build an app for iOS, Android, and more using the same codebase. Multiplatform projects are definitely big in the future of development, and it’s time I got familiar with it.

By the end of this, I expect to have a much better understanding of Xamarin.Forms, some aspects of native platform configuration, debugging, publishing, and pushing updates to a live Xamarin app - the whole project lifecycle with Xamarin. Then the second app will come out much faster!

‘Endless’ Localization Support

I’ve been super heavy into localization this year, and I’m trying hard to build up the skills and experience to get a job as a localization engineer. I think it’s important to be aware of the different audiences that use a product, and I really support the goal of speaking to people in their language on their terms. So I’m going to localize the hell out of this app!

While I do have a few target locales in mind - en-US, es-ES, vi-VN, and ja-JP - I actually have a very open-ended plan for localization. I’ll do what I can on my end to internationalize the app’s layout and text display in preparation for string localization, and from there I plan on crowdsourcing translations through collaborative online tools. Hopefully (fingers crossed), I can slot in translated resources without many issues. If that works out, I intend to keep adding languages indefinitely as long as I can find translators to support them.

I Am app, English, adventurous

Challenges and Roadblocks

No project is without challenges, but they’re also how we find and overcome limitations. Here are some roadblocks I’ve already run into along with one that I fully expect to be an issue down the line.

Visual Studio for Mac

I love that Visual Studio for Mac exists because I can work on my MacBook Air anywhere in the world I want. I don’t love that VS for Mac sometimes feels like a lower priority than the Windows version when it comes to feature support and bug fixes.

For example, the huge majority of VS extensions are only available on Windows, mostly due to the use of code libraries like WPF that don’t work on a Mac. This isn’t really anybody’s fault, specifically. It just means that I constantly find tools recommendations or even Microsoft-sponsored tutorials that show me tools I can’t use on a Mac.

Yes, VS for Mac is beautifully designed (much nicer than Windows, I think), but my tools are limited. I was especially surprised when I found out the .resx editor available for editing resources files on Windows was missing from Mac entirely. Before I found my online translation tools, I was editing multiple .resx files by hand. 😱

So why don’t I just work on Windows? Simple - I need a Mac to build the iOS app. Even if I started on Windows with all the nice toolsets, they wouldn’t build on a Mac, so I simply can’t use them if I intend to build anything on a Mac. It’s fine, though. I see this as an opportunity to discover and develop strong Mac-friendly workflows that I can use in other projects.

Localization with Xamarin

Building a localization system was a challenge for some time as well. Remember all the VS extensions I can’t use on Mac? Well, I had to build something on my own. There is very little official documentation on localization (though it’s sometimes very helpful), and it seems very few people have tried to tackle the subject in blogs and forums. I might have know that localization isn’t such a hot topic. However, I did find a workable solution that I’ll be writing about in another post.

I’m also a bit concerned about testing with pseudo-localization. I honestly don’t know how to do it, and I don’t know if there’s a way to do it properly in a Xamarin app. This requires some research.

Auto Sizing Label Fonts

I never thought this would be an issue, but it was an absolutely devilish one that completely stalled my progress for around a month. It turns out there’s currently no built-in Xamarin support for setting the font size of a label to fill up as much space as it can. It sounds like such a basic thing, but I found out the hard way that it really isn’t. But hey, when you want your text to fill up the screen, you have to figure out a way to make it happen. I’ll show you how I did it in a different post.

That’s the rundown so far! Perhaps I’ve teased more than I’ve explained, but I certainly plan on sharing more about I Am’s development in future posts. Tomorrow I continue building, but today I’m excited to share my goals and aspirations, to risk the creator’s humiliation that we all feel when sharing the fruits of our labor. Today I’m putting it out there.

Today I am bold.