Summer Planning for Retrospective Timelines

I am beginning the planning process for Retrospective Timelines 2.0. Below I listed some of the areas that I want to focus on this summer. My hope is that the latest round of updates to SwiftUI, iOS 14, and iPadOS 14 will enable me to make significant improvements to the app. I have only just started to learn about the new features, so I do not know which of these items are possible yet.  

Modal Windows / Views 

The current version of Retrospective Timelines uses sort of a hacky solution to be able to present the data entry screens in a modal mode. There were some weird bugs with SwiftUI sheets last year where onDismiss was not always called. Are these issues solved? Can I now present modal views where the user must use the Cancel and Done buttons to close the view? 

Alternatively, can I rethink my design entirely to omit this type of data flow? Currently I am using modal views to validate the data before the user saves the record. Perhaps I should rethink this process and save each change that the user makes on the data entry screen. 

Toolbars 

The current implementation of toolbars is a real mess. I found a lot of issues with buttons when placed in a navigation view (some of them having to do with opening and closing modals). Can I use the new toolbar features in SwiftUI 2 to replace all this stuff?  

Navigation Structure and List Views 

The current navigational structure of the app is less than ideal. It looks fine on an iPhone but on an iPad it is really quite bad. I would love to make a three-column interface for iPadOS. I think I might be able to use the new Sidebar APIs to accomplish this. 

I also want to use a new feature in List to group my main list view. The new child keypath feature could let me place all three top level elements in one list. Those are Reports, Active Timelines, and Archived Timelines. 

Something that annoyed me on iPad was the lack of a readable width setting for list views. Has this been added? It might not be as important if I can get the three-column interface working. 

Other stuff

  • Data Entry: TextField in SwiftUI 1.0 is bad. I mean really really bad. It has so many issues that I think nobody should be using it in a shipping app. Because of all of the bugs and missing features I ended up rewriting all my data entries screens in UIKit. I would love to write these in SwiftUI if I can. 
  • Grids: SwiftUI 2 has a new grid feature. I think I can use this to replace my hacky solution for the color and icon pickers for timelines.  
  • Accent Color: I did this the hard way last year. I am going to use this new method for the next version of my app. 
  • SwiftUI now has a feature for opening URLs. I can remove my hack for this as well. 
  • Core Data: I would love to learn some new ways to work with Core Data and CloudKit in SwiftUI. The approach I took last year has a lot of limitations and issues. 

As you can probably tell, I have no idea yet what is possible and what is not. I have a lot of work cut out for me over the next few weeks. I’m going to start a new branch in my repo and dive in. I’m also going to try a whole new code path in my project. Rather than try to update my current views, I’m going to start with a new top level view and work my way through reimplementing each core feature of the app, with an emphasis on learning the new APIs along the way.