Making the best possible App – Part 3: AppleWatch, SwiftUI and delete…

In this blog series we talk about how to make the best possible version of your app. In part 1, we discussed how we approach the problem. In part 2, we develop it further and explain the how and the why. In part 3, we complete the developments.

AppleWatch

As a 3th big step, we added an AppleWatch version to the application. For most developers, AppleWatch isn’t their focus. But it can be beneficial for a developer to at least look at what an AppleWatch version can bring. There are obvious limitations to what you can do on an AppleWatch, just as there are limitation on an iPhone compared to the iPad or the Mac. On the iPhone we show a calendar with all the days in the month. On the AppleWatch this doesn’t work, because the screen is too small. So we use a different way to change the day, months and years. On the iPhone we have favorite calendars. On the AppleWatch this doesn’t make sense.

SwiftUI

In a previous version of Calendar Converter, we already made an AppleWatch version, but the way you program for AppleWatch has changed since then. Now programming for AppleWatch means writing a SwiftUI app.

So, Widgets is SwiftUI, AppIntents is pure Swift (no UI), AppleWatch is SwiftUI, only the main app is still in Swift. This posses the question if it isn’t time to do everything is SwiftUI? There is only one way to find out. So we rewrote the app in SwiftUI.

The advantage of this is, that the app looks completely like you expect it to look for an Apple app. You have all the animations, the big headers… It looks as you expect, and we think it looks great. Better in fact than the app we had. Look for yourself.

Left the original UIKit version, and on the right the standard SwiftUI version.

Delete

When rewriting the app for SwiftUI we asked ourselves if we need all the functionality we added the last months. We decided to remove Quick Actions. With AppIntents you can add your own Quick Actions, which seems far more useful, so we think that’s the correct choice.

Conclusion

I don’t know if the conclusion would be the same if we chose a more complex app, but in this case, we talk about a simple app which we can easily rewrite. Our conclusion is that it makes a lot of sense to rewrite your app in SwiftUI. It’s a different way of programming but we can see the advantages. This exercise pushed us to think about our app, and the technologies we use. The fact that Apple forced us to use SwiftUI in certain situations, helped us come to the conclusion, the future and our future is SwiftUI. We better start today!

Making the best possible App – Part 2: App Intents, Shortcuts and accessibility

In part 1, we talked about adding Widgets, Quick Actions and more… We continue our App improvements with App Intents, Shortcuts and accessibility.

App Intents and shortcuts

As a user, you probably have no idea what App Intents are, and that’s normal. An App Intent, is a way an app allows the system (iOS, macOS…) to interact with the app. This way a developer can build on functionality of other apps and the OS.

An example could be a notes app that allows you to create a new note (from another app). In our case we allow an App to convert a date from one calendar to another. These App Intents are often made available though Shortcuts. These shortcuts can be given parameters to work with, and a shortcut can also return or display results, which can be used in another app or another shortcut. iOS, iPadOS and macOS all have Apple’s Shortcuts app to do the magic for you.

In the case of our Calndars app, we provide just one shortcut. The apps basic functionality is converting a date from one calendar to another. The inputs therefore are a date and a calendar, and the result is the date of the output calendar. Simple.

To make this work, you need to use the shortcuts app from Apple. To be honest I didn’t use the Shortcuts App a lot before this exercise. But once you get the hang off it, it is quiet powerful. I also understand this isn’t for everybody. Here is how Apple explains shortcuts.

In the case of the Calndars app, you can use something like this. This shortcut is set to convert to the Chinese Calendar. Input can be from manual, but you could get input from another shortcut… The result (text) will be copied to the clipboard.

Shortcuts can also be accessed by AppleScript on macOS. For those who know how to script, this can be very interesting. An example is shown below. In the example, we set the date to today, we made a shortcut to convert to the Hebrew calendar, and we ask to convert it. The shortcut will copy the result as a text to the clipboard. We than open the Notes App, create a new note, and paste the text from the clipboard.

tell application "Shortcuts Events"

      -- set theDate to current date

      set theDate to date "Saturday, 25 December 2004 at 00:00:00"

      run shortcut "Get date from Hebrew Calendar" with input theDate

end tell

tell application "Notes"

      activate --make sure Notes is running

      set theNote to make new note

      tell default account to tell folder "Notes"

            set body of theNote to the clipboard

      end tell

end tell

Technical rework of the app

The way the app was setup, wasn’t perfect. For each calendar there was a different view. This means there was a lot of code duplication. We rewrote the code so that all calendars are shown with just one view. The code is a bit more complex, but now there is no more code duplication, and the app has a smaller footprint. This is also easier to maintain. This was also a good step in supporting VoiceOver. This way we only needed to implement it once.

Accessibility

VoiceOver is an accessibility technology from Apple, that allows you to navigate your app in different ways. This allows people with disabilities to use your app.

Family sharing

I never looked at Family Sharing and I have never used it. So when somebody asked me if an app supports Family Sharing, I had to look for it. Turns out it is by default enabled, so I didn’t have to do anything to enable it. In case you work with subscriptions of in-app purchases, you need to implement it.

Making the best possible App – Part 3: AppleWatch, SwiftUI and delete…

Making the best possible App – Part 1: Widgets, Quick Actions and more…

Isn’t my app good enough?

We had a look at our apps on iOS, iPadOS en macOS and asked ourself, what can we do to improve these apps. As a developer you often think we have to add new magical features. I don’t want to fool you, but the aim to improve apps, is to get more sales. And there is nothing wrong with that.

So what brings more sales? Marketing of course, but that can cost a lot of money, and if it doesn’t work, the marketing person will probably say the app was the problem… So whichever way you turn, you better make sure your apps are as good as you can possibly make them!

So how do we do that? Make sure the app is useful. Make sure there are no or no critical bugs (there are always bugs). Make sure the apps are stable, a joy to use. And that the app is distinguishable from other apps, in one or several ways.

How do we do that?

We take one app, which is not to complicated, and we are going to improve it to be the best possible app for that kind of application. We will push it to the limit of what is possible. We will make the app as discoverable as possible, as easy as possible, as clean and simple as possible… We will also make sure it can be used by as many people as possible, including impaired people.

For this, we selected our Calendar Converter app Calndars. The app basically allows you to select a date and see what the date is in another calendar. For example take a date of the Gregorian Calendar and see what that date is in the Hebrew Calendar. The app is already localised to support 35 languages, so adding extra languages is not the first item on the list. If you look at the app, you see it is useful, not difficult to use. But what can be improved.

Widgets

Widgets were introduced in iOS14 (2020), and are tiles that are places on your Home Screen. You have several widget sizes: small, medium, large and extra large. The tiles display information from the app. This can be static or dynamic information. In our case, you have several Calendars to convert from, and there isn’t enough room to show them all. So you need a way to tell the app which Calendars you want to see in the widgets. The order in which you want to see the Calendars can also be important for you.

Widgets small, medium and large

For this we added a favorites section to Calndars, so you can define which Calendars are your favourites. On top of that, you can define if you want a favourite calendar to be in the widget or not (tap the 4 squares). We also added drag and drop to reorder the Calendars, so you can set the order of the Calendars. You can set a maximum of 3 calendars to a widget, but you can also choose just 2 Calendars.

Main view before and after

An app doesn’t need to add all the different sizes for the widgets. But each size should provide something extra to the user. We decided to us the small size to show the date of today. Medium for today and tomorrow. Large for today, tomorrow, in 2 days and in 3 days.

Quick Actions

Quick actions appear when you tap-hold an app icon. Every app will show the move and delete quick action, but we can add extra quick actions to it. For Calndars, we decide to add quick actions to get the date of today. With widgets, we already set the favourite calendars, and calendars to be shown in the widgets. These calendars now also have a quick actions. Tapping the quick action, will open the app, get the date and copy it to the clipboard.

The app icon is important

We also looked at the app icon, and decided to change it completely. The previous icon represented circles, like the movement of the sun and the moon. We liked it because it made us think of a Victor Vasarely drawing. This maybe beautiful, but doesn’t provide a lot of information or context to the user. In the new icon, the user clearly recognizes the standard calendar icon. In this case, 2 calendars, indicating there are different calendars. We used 2 different fonts for the date (number), using and older serif font and a more modern sans serif font. This tell your the calendars are not the same, indicating a conversion. We believe this matches better with the functionality of the app.

Making the best possible App – Part 2: App Intents, Shortcuts and accessibility

A blog restart, again

It’s a bit early to call it a new years resolution, but here it goes. From now on, I will be posting a blog every month. I’ll talk about what we are working on, what we are looking at, what we would like to see, and more. Basically an open and honest conversation about what we do. When we talk about products, this is of course in agreement with our customers.

We’ll see how it goes. No pressure.

I’ll be posting a blog this week, talking about our Calndars app.

Text Recognition in action

Genea allows you to use text recognition on images. Everybody would like to see text recognition on hand written documents, and believe me we tried, but it just isn’t going to happen soon. Fortunately you can use text recognition on a whole lot of other documents, like newspapers, books and so on.

Below we demonstrate the use of Genea’s text recognition on images use in the blog from GenealogyBank about Newspaper Articles That Reveal Her Maiden Name.

We show the images use in the blog and the text recognised by Genea. As you’ll notice, it’s not a 100 percent perfect but pretty good.

DEATH OF DERS. E. A. PARKS.
Mrs. Louisa, wife of E. A. Parks of
Waterford, died very suddenly at the
home of her son, Charles E. Parks, in
Somerville, Mass., last
Thursday
evening of pneumonia. She went to
Boston two weeks ago last Saturday
to visit relatives and take a needed
rest. She was unwell most of the
time while there, but was taken
worse On Tuesday evening of last
week and died the following Thurs-
dav.
Her husband, her daughter,
Mrs. Richard Eastman of Brooklyn,
N. Y., and her son, Charles E., were
with her during the last hours. Mrs.
Parks was born at Concord 68 years
ago. She was married 49 cars ago
and she and Judge Parks had planned
to celebrate their 50th wedding anni-
versary in August next. She was a
very exemplary woman and had
been a member of the Universalist
church in St. Johnsbury since its or-
ganization.
Her remains
were
brought home, where funeral services
were held on Sunday, her pastor of-
ficiating. Her husband and children
have the sympathy of the entire com-
munity in their great affliction.

The example below is an example that doesn’t work well. The 2 text blocks on the bottom of the image are seen as one block of text (left to right), so the resulting text is a mix of the 2 text blocks. This will be addressed in a future version of Genea. Some errors are the result of the low quality of the image.

CELEBRATE 50TH WEDDING ANNIVERSARY
MIR. AND MRS. PETER DOBBIN OF WILMAMS.
Mr. and Mrs. Peter Dobbin of 1’11• tial mass was celebrated by Rev. Pran-
lams celebrated their 60th wedding an- cia Bowen, d nephew.
St.
Augue
niversary, Friday, August 20. The happy tine’s church, during which the wedding
couple have rosidad In Alamo towniln. ceremony was repeated.
during their entire married life and
Mr. and Mra. Dobbin during the day
aro well and favorably known by many entertained at their beautiful home In
Kalamazoo and Van Buren county res- Williams the following guests: Mr. 9nd
Idents.
Three children were born to
Mrs, M. K. Cavannugh, Mr. and Mra. P.
them, all of whom realde In WE:llams. Bowen, Mr, and Mrs, John J. Flanigan.
In honor of the occasion, high nup- Mr. and Mrs, J. O’Connor, Mesdames E.
Cloney, 1. Luby, Miss B. McElroy and
Messes, Charles McCrorey, Chrence

The text below is recognised correctly. On the bottom line you’ll see the word year is recognised as vear, but that’s because the the text is cut off and you see a v and not a y.

HOLD FAMILY REUNION
Descendants of Albert and Anna In-
singer Celebrate Anniversary
Sixty members of the Insinger family,
direct descendants of Albert and Anna
Insinger, who. with their children, land-
ed at Philadelphia on the ship Tus-
carora, on November 8, 1848, celebrated
the sixty-first anniversary of their ar-
rival with a family reunion at Schuetzen
Park, Tabor, yesterday.
Little Insingers, as young as three
months, up to aged Insingers with sil-
very hair, attended the reunion, and
when the roll was called there were
but five absentees.
An appropriate program was arranged
by the five male members of the fam-
ily, including Alfred Insinger, Emile In-
singer, Albert Insinger, and Edward In-
singer, who had the affair in charge.
Mrs. Lena Kreig, the oldest daughter
of the family, came all the way from
a town near Akron, Ohio, to attend the
ceremonies, while Mrs. Elizabeth Good-
rich, another daughter, came from Bos-
ton. All the family, with the exception
of the two daughters, reside in or near
Philadelphia.
Speeches were made, and while the
reunion was the first, and given for the
purpose of bringing together for once
all the descendants of Albert and Anna
Margaretta Insinger, it is likely that
other reunions will take place each Vear.

Text below is recognised reasonably well considering the image.

Little Compton, May, 31. This Morning died here Mrs. Elizabers
Paybody late Wife of Mr William Paybody in the 93d Year Of he
Age, She was the Daughter of John Alden
Elg and Prifcilla
Wife Daughter of Mr. William Mullins. This John Alden and *roo
fcilla Mullins were Married at Plymouth in New-England wher
their Daughter Elizabeth was bern. She was Exemplarily Vertuca,
and Pious, and her Memory is bleffed Hag left a very numerou
Potterity ; Her Grand-daughter Bradford is a Grand-mother.

In general we feel the text recognition works well, but there are a few things you can do to help.

Rotated text will not work, so always make sure the text is correctly rotated.

The image quality is an important factor for text recognition. The better the image quality the better the result. A good image quality means that the letters and numbers are clear, and that there is no dust or dirt that would change the image.

We hope this demonstrates the use use of text recognition in Genea, and helps you to better use this feature.

Genea: See your events on a map

It’s always good to visually see events on a map. If you click on Notes, you see all the notes, regardless in which notebook they are stored. Use the search field to filter events linked to the notes. In the example below we only want to see events between 1750 and 1800. This results in 4 out of 52 notes.

You can also search / filter on name, description, places etc.

Now click on the MAP icon in the right to corner, next to the + icon. This will show you the filtered events on a map. On MacOS and iPad, this is a popover window. On iOS this is a new sheet.

MacOS example

SwiftUI – Baby it’s time

We recently released our first SwiftUI app – Baby it’s time – on the App Store.

Baby it’s time – is a simple iOS app that tracks when you baby last ate, so you can see if it’s time for the next milk bottle or meal or… This was an interesting exercise in SwiftUI development. Let me explain.

In 2014 Apple released the Swift programming language. The language is open source and replaces the existing Objective C language. All our apps available on the App Store have been rewritten in Swift for several years now.

A few years ago Apple releases SwiftUI. SwiftUI is a declarative way of describing the UI (User Interface) of an application. This is a mind shift in how to write an application. This is the way forward for more and more applications. It allows you to write an app faster and without bugs, which is a big accomplishment. Not everything is possible yet, but every year a lot of functionality is added. So – Baby it’s time – is not only an app that was written in one day, it’s the start to write more and more apps in SwiftUI.

Genea 2.1

In this release we add support for the following languages: Dutch, French, German, Spanish and Portuguese.

We also added a new setting for showing or hiding gedcom tags.
When you are searching for an event type, so you can also search on BIRT (for birth), DEAT (for death)… etc. For people that don’t know or are not sure what gedcom tag is used, it can be useful to see what the used tag is.
In Settings, you can now select “Show gedcom tags” to show or hide gedcom tags throughout the app.
You can see the gedcom tags in Settings > Available events and when you select an event in the Events view (see image).

We hope this is useful for some people. If you have any requests for Genea, please let us know.

Genea 2.0

About a year after our first release, we present genea 2.0 – your genealogy research. Genea has matured over the last year and has become more powerful and has added a lot of features.

Let’s start with research logs. In version 2 we introduce research logs to help you with your research. A research log is where you keep track of everything you do for a specific research objective. You can have multiple research logs. You typically create a research log for a person and his or her family members (spouse and children). Maybe you finally want to break through this brick wall of the birth date and place of an ancestor… In the research log you register what you have found, and what you are looking for. You may want to plan ahead for a visit to an archive for a specific reason, or you plan the work you intend to do online on familysearch.org.
But most importantly, you keep track of everything you do. Creating a note that you didn’t find anything in a location is as important as making a note of what you did find. That way you can review your research and think of other places to look. Research logs are extremely useful if you don’t immediately find what you are looking for. Genea helps you structure you work. You can schedule research in your calendar and share your research log with others so they know where you already looked and what you found.

Notes has become more powerful. Searching on notes, events, places and people has become better than ever before. You can now search on dates of events, including searching on events before, after or between dates. You can search on gedcom tags like MARR, BIRT, BAPM etc. You can search on places and get all related events and much more…
Details are added in several views, to give you more context. A popover is added to get info about the places in the notes view. Another popover is added in the event view to quickly look at the image of the note. Images can now be adjusted for brightness and contrast. Text recognition is added to convert an image to text for normal text, not hand writing of old archives (unfortunately). Now you can import a text file as a note, and set a default text for notes and family sheets.

Research logs together with notes allow you to better organise your family research in a structured and well documented way.

Familysearch.org explains the use of a research log, but there are several YouTube movies of genealogists who explain how to use it.

We will set up a YouTube channel for Genea in de coming weeks, to explain some of the Genea features. We will post the channel here when it is up and running.

https://www.familysearch.org/wiki/en/Research_Logs

Marketing

Hello everybody. For developers, marketing is a necessary evil, something we don’t understand, and we dislike. It is of course a reality, that marketing in one form or another is almost mandatory is you want to be successful.

As developers we some times think, we just need to make a good app, and everybody will find it… but in the back of your head you know it doesn’t work that way. In our case we rely mostly on recurring business from our customers, but it would be nice to have a monster hit on the App Store 😊

So, it’s time to try this out.

Over the next weeks we will spend time to increase our visibility on the internet. More precisely, we will add some Facebook pages, we will add a YouTube channel for some apps, we will blog more actively and we will use Apple’s Search Ads to see what the effect is on app sales.

We will share our experience on this blog page and any changes we make, hoping it will be of interest for somebody.

Ok, let’s do this!