On-Device Design Failure

Privacy

Privacy is one of the reasons I really like Apple products. Apple tries to keep things happening on device for the sake of privacy. I try to keep to this same design principle for my apps. I have feel it is important that people can trust that you are not doing things with their data. And to that end, I’ve been working on a new app, that will contain some very personal data. That data should only be available on the device of the user.

Features

One major feature that the app MUST have is to trigger an event if the user is no longer able to respond. To achieve this feature, I had thought to send the user a local notification, on a periodic schedule of the user’s own choosing. I would then monitor for a response to the notification. The app will trigger sending data to someone if a response is not received within a certain amount of time.

I have built out the scheduling mechanism and added in logic for acknowledging that the user has tapped on the notification. Those were the easy parts. Since then I’ve investigated triggering an event via the app when the notifications are sent. This does not seem possible, as most likely the app will be in a background state. At this point, I have to use a remote notification, breaking my rule for only on device notifications.

Challenge

Given that the notification is only there for proof that the user can respond, this is probably not a big security / privacy issue, but I had not wanted to track any data about any users. This will require that I register the device, and the user being able to respond. It will then make it so much easier to add additional features which take advantage of having this server based backend.

Should I do this? Or should I call the app off?

Latest Activities

I’ve been working on a few projects lately, and it has impacted my desire to blog more often. Just a few things I have been working on include:

Building a business – yeah. this is a big deal. I retired from my “day job” back in October, and since then I’ve been working with a startup called TVPCT, Inc. As Vice President – Technical Strategy and Operations, I am helping the team focus on two things:

  1. Improving their technical solution.
  2. Improving their operational posture.

Like many startups they have been working hard on creating a technical solution, that not only meets the needs of the founder, but that also addresses the many requests from visionary early users. They have an incredible solution that allows SMB (Small and Medium Businesses) take advantage of the recent explosion of AI capabilities. I’ve been helping them understand issues like Scalability, Maintainability, and Customer onboarding. It’s an exciting time to be working on these challenges.

Improving my technical credentials – I received my AWS Architect certification and am currently working on AWS Security certification. These two certifications are both technical and challenging. Many of the practices and learnings are applicable for other platforms too.

Releasing new Applications – I’ve released a new application back in January (Quick Localizer) which allows for easy localization of your application developed within Xcode. Xcode uses a xcstrings catalog for all the strings in your application. As such, we can take advantage of Apple’s language support on macOS to translate strings from one language to another. I am currently working on two new applications:

  1. Vinyl tracker – an application that allows you to keep track of the vinyl records in your collection.
  2. Letter tracker – an application that allows you to track physical letters that you send to people.

I am really excited to work on these new applications, as they are giving me an opportunity to really stretch my knowledge of SwiftData and SwiftUI.

Greet Keeper 1.5 Feature Test

One feature I’ve been wanting to add for Greet Keeper is to allow a user to grab the image of the cards they’ve sent from the manufacturer’s site, or if they sent an e-card to include an image of the ecard.

To that end, I’ve been toying with adding a new picker to the add Card Gallery image. Here’s a prototype of it a simple one screen app. What do you think?

Greeting Keeper 1.4.1 Updated

I’m really pleased to show off the latest version of Greeting Keeper, version 1.4.1. The design has been slightly tweaked from 1.4.0 to fix a few issues with colors and navigation..

The following video shows Greeting Keeper running on the iPhone SE (3rd generation) simulator.

When you launch the app for the first time, you are presented with a simple walk through which describes what the three tabs are for:

  • Occasions – which are simply any reason you may wish to send out a greeting card. Examples include: Birthdays, Anniversaries, etc.
  • Cards – which is where you create a gallery of cards for specific occasions.
  • Recipients – which is anyone you send a card to. You can either pick them from your contacts, or manually add their information. You can even classify the recipient as family, home, or work. I added this, for a possible future feature to print address labels for mailings.
  • Sending a card to a recipient – this is about tracking what card you sent to who. You do this by selecting a resident and pressing the + .

I think the app is now fully feature complete for all the basic functions. As you can see on many of the screens you can long press on things to edit them, and even just tap on a card to see a larger version.

I’d love to hear what you think of the latest version, so please rate it and review it on the app store, and also drop me a comment here for new features you may wish to have.

So far I have the following ideas in the backlog:

  • Add an App Intent to show a gallery of a specific event type’s card. This would be used to show a widget full of cards
  • Add ability to view all the people who received a specific card from within the Card Gallery
  • Add date range selection for the various PDF reports.
  • Add additional information on the full screen card view, i.e. manufacturer

Greeting Keeper 1.4.2 Released

There’s been a few releases over the last few weeks, but I am running into one ongoing bug on the visionOS version. The PhotoPicker causes a looping situation, that I’ve spent days trying to resolve.

The code works fine on macOS, iOS, and iPadOS, as such I am thinking that it is a SwiftUI behavioral difference on visionOS. So far, I’ve not had much uptake on the visionOS version, and as such I am thinking that it is not a big deal.

My base assumption is that visionOS users also have either a mac or iPhone, and as such they can work around the PhotoPicker bug by just using the other versions. visionOS still makes a great viewer, and instead of spending more time on it, I would like to add additional features.

What do you think?

Quick Localizer – Now available!

If you are a developer, who uses Xcode, then you need Quick Localizer! This app helps you get started on the path to support multiple languages in your app.


Check out the coming soon post I wrote a while back.


The app is really easy to use, and has a simple $4.99 one time charge.

I’d love your feedback and reviews. I am leveraging Apple’s own translation features, but packaging it up nicely for your Localizable.xcstrings file.

Coming Soon Greeting Keeper 1.3.0

It’s been a lot of fun updating Greeting Keeper, and I really appreciate the help I am getting from all my testers. This coming release will have a new “one time” getting started view. Should make it easier for new users to understand the application as a whole. You can see a demo of it here.


The other BIG change is a total rewrite of the PDF generator. While I am guessing very few people use this feature, it is a great way to get a backup of your data.

You can generate a listing of:

  • all the specific cards you’ve sent by “Occasion”
  • all the “Occasion” cards (including how many you’ve sent of a specific card – great for re-ordering your favorite “Thank You” card),
  • listing of all the cards you’ve sent to a specific “Recipient”
Detail Screen for a Recipient (in German)

Additionally, I used my new Quick Localizer to update the app for over 10 languages! Can’t wait to see what everyone thinks about this.

Coming Soon – Quick Localizer

This past weekend I attended a monthly Hacking with Swift session to build an app within two hours. Paul Hudson does these sessions as part of the paid “plus” service and usually recommends that someone clean up and/or complete the app and get it on the app store.

My Completed App

This is the first month where i decided to take him up on the challenge. Introducing “Quick Localizer”.

This app allows a developer to either start from scratch, or take an existing Xcode Localization strings catalog, and generate translations for Apple supported languages. The output can then be saved to a Localizable.xcstrings file to be included in your Xcode project.

Initial Features

The session on Saturday created a great frame work with the following features:

  • A picklist of “supported” languages, based on macOS Sequoia’s
  • Ability to create a .xcstring output file
  • Ability to translate a list of strings to export

A few additions

While this was a great starting point, it wasn’t enough to ship the app. I spent time on Sunday then adding the following features:

  • Ability to import an existing .xcstring file and display the source strings in the translation view
  • A secondary screen that allows you to look at the translations for the strings. You can select which language you’ve translated
  • A base set of instructions as the default view in the text editor
  • A cool icon

Polishing it

Putting this all together I quickly submitted the app on Sunday night, only to discover Monday morning that it did not correctly handle two key errors:

  • Loading an incomplete .xcstrings file, would silently not allow for translations
  • Saving the file should defaults to Localizable.xcstrings
  • Localized the application using the translations for all the supported languages.
  • Don’t forget my privacy policy.

I’ve also decided to charge for this app. It’s a one time charge of only $4.99 in the US, with the appropriate amount in other countries.

I will post a new blog post when Apple approves the app.

Starting off 2025

I had posted a while back that after 29 plus years, I had been “retired” by IBM. I’ve had the last two months (over the holidays) to think thru what that means to me and what I’d like to do. While I would love to still have the income that a high paying corporate job provided me, i.e. I got to buy a lot of tech toys, write apps for fun, and do a weekly podcast without any advertising or support, I didn’t like the culture of driving all activities based on a quarterly report to the stock market. What I want to do is actually spend time making things.

While I will continue to pursue a traditional job, you can’t beat the price of company supported healthcare, I am going to take this year to try and make a go of my own app development. Hopefully, I will be able to make a livable income through my work, and at the same time, improve my skills as a developer. I didn’t get to do much development work in my day job.

If you’d like to help me, I would appreciate if you pick up either of my current apps, which are minimally priced, and spend some time providing me feedback. I know a big area of improvement is needed in UI design, but having spent so much time with them over the years, I need feedback on what I can do, not just that I should improve them.

My two apps are both available on all major Apple platforms:

For feedback – send me an email at support@theapapp.com

Let me Edit your Podcast

One of the things that I enjoy is doing my weekly podcast. I’ve been podcasting since 2006, and have edited 800+ podcast episodes.

I have been using a whole set of different tools over the years. Audacity, when I first started out, GarageBand, Logic Pro/X, and now Ferrite. If you are thinking about starting a podcast, I can help you learn how to set it all up, and I can edit your show for you.

Drop me an email at michaelrowe@michaelrowerowe01.com!