Couple quick updates on Stream for Mac

I fixed the issue with my Context Menu’s not working. Totally stupid move by me — I knew it would be. After my last coding session I changed a property to be “weak” because I thought it was retained somewhere else. Then I committed that change because I needed to pack up and get home. Mistake! That property needed to be retained because it was passed in and the caller created it to be handed off, it was NOT retained. What a rookie move on my part. 🤦🏻

Removed the “weak” last night and now it magically works. Oh, yeah, I also made another change. Instead of using a NIB to create the menu I did it in code and I just like that better. It was extremely straight forward and felt very natrual. Works great! 🥳

A wonderful bouquet of flowers.Next, the app was approved for Testflight last night and I’ve already received some very good feedback! Thanks, John! (No we’re not competitors, John’s Unread is far and away one of the best Mac and iOS feed readers on the market. Go get it and subscribe because his sync service is fantastic!)

Look, I know Stream for Mac isn’t going to be good for everyone and even some of my testers may look at it and say “This is complete crap!” But, it makes me happy working on it and I’m especially thrilled to be making my first Mac app.

I Love RSS!It’s ok to be critical of it! I’d love to get your feedback, so if you’re using it, please share your opinion. If you’d like to see a really rough beta, let me know (if you’re reading this you’ll know how to find me!) and I’ll add you to the list!

Work Note: Stream for Mac

This morning I decided to get TestFlight setup so I could start dropping alpha and beta versions of the app. It didn’t take long, which was really nice, and I’ve submitted a build for Apple to approve for testing. I’d imagine it will take some time to get through the gauntlet since it’s the first version of Stream for Mac. Fingers crossed it doesn’t take long to get through. 🤞🏼

Besides that I added a couple new menu items to the View menu and implemented them.

The first was View > Timeline which is meant to present Stream in its two pane layout with a stream of blog posts in the left column and the text of the post in the right pane. I’ve called it Timeline but I don’t like it. It feels backwards. When Timeline is selected the leftmost list of blogs is hidden so you get that two pane view instead of three. It feels backwards because when it’s checked the blog list is hidden. I need to find a better way of presenting it. The functionality works just fine.

The other menu item is called Read/Unread Dots. I need a better name for this as well. What it does is hide or show the read/unread state dots. When I originally shipped stream I didn’t keep track of read state. It was meant to make viewing a more chill experience. I had a lot of folks reach out and ask me to add that read/unread state, so I did. Now I want a way to turn them off. This feature will make its way back to the iOS App as well, probably in a new menu item or as part of Settings. I need to think on it a bit.

Watch out! It's a blog fly! I’d intended to do a bit more but as I was running through the UI testing random stuff I noticed the context menu for the blog list wasn’t working. It worked just fine last weekend but not today. 🤬

I spent the remainder of my work time trying to understand what I’d done wrong. The actions were all hooked up, they just didn’t fire when a menu item was selected. I checked the NSMenuItem and it wasn’t nil and had all the menu items present. It just won’t invoke the associated action.

Depending on how those table view cells are configured I will remove the menu by setting the new menu to nil, but that’s only for the All and Read Later items since the menu items don’t make sense for two things.

The other thing I did was delete my toolbar from the main NIB. I put it back later in the day but it did make me wonder if that change had something to do with my other menus not working. Yeah, it’s a stretch since they’re in separate NIB files. But I sure can’t explain how I broke it. 🤔

Any tips from Mac AppKit experts would be appreciated. 🙏🏼

That’s all for today. It was a good start but that busted menu was a huge time sink and I don’t have an answer for it yet. Maybe I should see if Claude can fix it? 😁

Let’s go!

Picture of the lovely foam art on my mocha with my laptop in the background.

Work Note: Stream for Mac

Today’s progress on Stream for Mac felt great. I was able to replace the Collection View item in the Blog List — leftmost column — with a native NSCollectionViewItem, which was extremely straightforward.

I also added right mouse click menu support so you can do a few actions in your blog list; Mark All Read, Copy Feed Link, View Website, and Unsubscribe. All of the actions work as expected.

Cmd+A now selects the top most item in the list — All — and displays all items from all blogs in the middle column. You can, of course, select that item with the mouse and get the same results.

The middle column adds right mouse menu support for; Copy Link, Open, and Share… All actions work as expected.

I’m showing my hand a little bit with the item called “Read Later.” 😃 Yes, I’m adding an Share Sheet Action that will allow you to not only “Subscribe in Stream” to add a subscription from the blog you’re browsing but a new item will be called “Read Later in Stream” that will stash a reference to any site you’re browsing so you can check it out later. Hey, I really need that for myself! It’s how I collect notes for Saturday Morning Coffee. For now I’m using John Brayton’s excellent Unread to do that for me. Stream needs that support so it’s gonna get it. Both the Mac and iOS versions will have it.

I still have a lot of cleanup and tweaking to do. Mostly in the area of design. I have visual nicities to add and tightening some visual elements up to make my eye happy. It’s getting there.

Watch out! It's a blog fly!Some things that need fixing. Selection of a blog item currently has black text and a blue highlight. The text needs to become white so you can read it easier. I’d also like to round the selection rectangle a bit and give it some inset so it doesn’t look so sharp. They currently look like you could cut yourself on them! Same for the middle column. Selection needs some help and that includes the same rounding and inset work. Using the app shouldn’t result in cuts.

I have some nagivation stuff to add — like using the spacebar to advance an article and jump to the next one when you reach the bottom. I’ve already added vim J and K keys to havigate up and down the middle column. I’d like to be able to navigate the entire thing without taking your hands off of the keyboard. Need to add something for navigating the blog list with the keyboard, maybe D & F? Are there standards for that yet? I’ll see what other Feed Readers use.

I feel very close now. My current plan is to ship the first release without Settings, so no way to tip me. 😄 I will add that support next. For now I’m just really excited to kick it out the door. I can build on what I have from there. Once it gets out there are things I’d like to do for the iOS version and Mac version that will be shared. I need better article parsing, I rely on what the RSS feed provides and if it doesn’t provide the full text of the article, I can’t display it. In the future the app will go to the article and parse the full text if allowed.

I Love RSS!So little time, so many features I’d love to do!

LET’S GO!

Time to work on Stream.

Code by me, coffee by Grit

Work Note: Stream for Mac

I was able to make it to the coffee shop and work on Stream today. I’ve been revisiting how to construct a good AppKit cell view — NSCellView — that does exactly what I want. And I continue to fail.

I’ve tried using constructing a cell using a NIB. It didn’t work as I’d wanted it to and I could never get it right. I abandoned that attempt.

Next I tried doing it in code. I managed to get the same exact results. It didn’t resize properly. I abandoned it.

I decided I should do it in SwiftUI. It only took me an hour or so of tweaks to make it work exactly like I wanted! Yay! 🥳

Next I had to get the little blue read/unread indicator working. I tried a lot of stuff but I couldn’t make it work driving it from an AppKit view (more on this later.)

So, I decided to give AppKit another try. This time using NSGridView in code. I wasn’t able to get the results I was after. So, you guessed it, I abandoned the attempt.

I thought I’d be clever and let Claude do it for me because I’m so darned hung up on it working as an AppKit cell.

I gave Claude a description of what I wanted, pointed it at the working SwiftUI version, told it to use my coding style, and turned it loose. At first glance I was surprised. What it built worked exactly like my AppKit versions. The date wasn’t pinned to the right of the cell view and things didn’t flow properly as I resized the cell. These are the exact same issues my hand built versions had. 😳

I went back to Claude and explained what I wanted to change and why. It went to work and made some tweaks. I thought, this is it!

Nope. Not it. Still has the same issue. The code was tweaked but I got the exact same results. 😳

I was puzzled to say the least.

At that point I was ready to declare I was a completely incompetent developer, throw my computer in a lake, and go hide away in the woods somewhere until I died.

I decided that was a little extreme and decided I’d go back to the working SwiftUI version.

Now, how do I actually get the darned blue read/unread dot to update properly?

I poked around at how Combine and SwiftUI work and how to properly expose and use a property when it updated. This time I went right to my model and made the very simple changes. Those worked as expected. 🥳

AHHHHHH!Now, to be clear, I’d tried some combination of things prior to this attempt and they all failed. Why didn’t I do it this way to start with? Well, I’m dumb, and stubborn, and wanted it to work a certain way, so I kept trying to do it my way. Sure, I used Combine and @Publish and ObservableObject, and the other macro I’m forgetting at the moment, or some other combination of those.

This time I told myself “Just bite the bullet and do it exactly like the documentation says, don’t try to fit it into your model.”

It works. I’m happy about it.

I stubbed out Command+click options on the cell and added some print statements just to make sure it did stuff. It did.

I packaged up my laptop and headed home. Now I sit here tying this up. I’ve been banging my head against a wall off and on since December of last year. I am an idiot and maybe I should quit?

Problem is, I really want to make this app. 😁

Time to hit publish and go mow the lawn, where I’ll think about my next steps for Stream for Mac. For the time being I’m freed of that burden I carried for so long.

Now I can do the features I need to ship the first release.

That is a good feeling. 👍🏼

Stream for Mac - View Styles

When I finally kick Stream for Mac out the door it’s going to have two modes of viewing feeda. The first will be the Classic Timeline View. It’s the reason I created Stream in the first place. I wanted something that felt like a social media timeline. A continuous stream of news in a unified timeline, flowing from newest to oldest. It’s a very simple concept and one I think some folks appreciate.

Here’s what the Timeline view will look like on the Mac.

Classic Stream Timeline View

The second view style will be Blog View — at least I think that’s what I’ll call it? This view will be the view most folks associate with Feed Readers. It will have the three column, Mail like — view with Blogs in the leftmost column, a list of Posts in the middle (the Timeline), and the Post Reader on the right side.

Stream for Mac Blog View

I need to put Thunder Chicken down for a bit and focus on Stream for Mac because I have a lot of work to build out before I’ll feel good about shipping it. 😊

Someone must’ve mentioned Stream yesterday? 😀

I had 130 downloads, which is a good day for it!

Thank you to whoever mentioned it! 🙏🏼

Decisions, decisions

Brain in a jarSitting at Grit — my favorite coffee shop — sipping my mocha trying to decide what to work on.

Stream for Mac, Stream for iOS, or Thunder Chicken?

It should be Stream for Mac. I haven’t worked on it in a while because I’ve been working on Thunder Chicken.

I’ve thought about doing a German localization for Stream.

Adding a right mouse action menu to the Mac version of Stream, and whatever else I can complete.

What about having Claude create an NSCellView for me that sizes properly when the column it’s in resizes. I could never get this working properly but did it in SwiftUI rather quickly.

How about completing the first full implementation of a network client for Thunder Chicken? Get posts, create posts, update post, delete posts, etc. I have an abstraction so I can support multiple blogging platforms.

Oh, I forgot about Arrgly. It’s my link shortener that uses YOURLS for its backend. I have a new SwiftUI version of it I need to finish off, just because.

Decisions, decisions.

Still Plugging Along

I’m mostly well now. I still have a cough that’s working hard to get those last remnants of irritation out of my lungs but I’m mostly whole. 🤧

I made it to the coffee shop this morning because I really need to work on Stream. It’s been three or four weeks since I’ve been able to work on it and I miss it.

I have lots of thoughts swirling around in my pea brain this morning. Mostly around a strong desire to retire. Retire from working for someone else, not retire from working. At this time of the year I always think about what it would be like to work on my own stuff full time. Stream and top secret project would get so much attention. I looked at top secret project last week for a moment and realized it’s been over a year since I touched the code. That didn’t seem possible but the dates don’t lie. My brain though it had been a few months, not over a year. It was a shock to the system. I’m not gonna be here forever and someday I may not want to write code any longer. Who knows? I certainly don’t. The way I feel about things now I can see writing code until I drop dead behind my keyboard. Someone finding me face down, my computer in some weird state from my face unintentionally issuing a command. 😄

Of course, as it stands today, I still need a job and I’m very happy to have one.

Oh, sorry for missing Saturday Morning Coffee yesterday. My body needed the sleep. I managed to sleep until 4:30PM and still sleep last night. I’m still tired this morning. This darned bug took it out of me.

Work Note: Stream for Mac

I managed to break the splitter on the right side of the middle column last time I worked on Stream. How? I have no idea what I did to break it. After beating my head against the wall for a half hour I finally found it. I’d set the width of the rightmost column to a fixed value. Duh! Don’t do that if you want things to automagically resize. Fixed. ✅

I need to sit down and read about state management with SwiftUI because it’s clear to me I’m too stupid to use it. 😄

I want to do what I though was a simple thing. I just want to hide, or change the background color of, my read/unread dot. The iPhone app just updates a value in a view model to be true or false and the UI is updated, easy peasy. It’s using UIKit instead of SwiftUI so it’s something I’m very familiar with.

AHHHHHH!Is it that easy in SwiftUI? Probably, but I don’t currently understand how to change a simple boolean value and convince the UI to refresh itself. I thought, like a big dummy, that I could make a boolean value on the View, decorate it with @State, and by calling toggle() on it, it would cuase the UI to update. Nope. Didn’t work. 😳

I’ve tried a few things to make it happen and it’s obvious I don’t understand how to do it. So… it’s time to go sit down and read how to do it. The View I’m trying to update is hosted in an NSHostingView and I can’t imagine that has anything to do with it? Do I need to using @Binding and @State together in a way I haven’t tried? Or, perhaps, I need use something completely different. ❌

Pretty big fail on my part today. Which is pretty frustrating. I have such little time to work on it that I need to have productive days. Failure is part of the process. I’ll figure it out and be better for it.

I guess I did manage to fix a bug. That’s a good thing. Just not enough.

Time to go home and make a Turkey sandwich. 🦃

Work Note: Stream for Mac

Another slow start to the day. I’ve hit a point in my todo list of items I don’t want to do. 😄 That’s always a good sign. It means I’m getting to the end of what I’d like to do to get a 1.0 out the door.

Today I covered three things.

J and K Navigation

I like the way Reeder and Unread use the J and K keys to navigate between feed items, so I added that. I need to figure out if I want to add it to blog navigation as well.

Persist and Restore Window Positions

This was a lot easier than I expected! Thank you Interface Builder! I was able to set a couple properties and it’s taken care of for me.

BUG: Fix Feed Item Refresh

I had an ugly bug that would cause the feed items table view to not refresh properly. I was final able to find the set of properties I needed to tweak to make this do what I wanted. Now the middle column — feed items — now updates properly. Bug squashed.

What Next?

Well, I still have a list of things I’d like to do and I need to work on polishing up how the app feels. When redrawing feed item cells the associated favicon image doesn’t fill in as quickly as I’d like. I’ll just cache all of them so hopefully we won’t have that issue any longer.

I also added a new container type for blog display — leftmost column — so I can add static type items in the column. I need at least to column headers; Articles and Subscriptions, so I can have an All Articles item and have all of the blogs display under Subscriptions for a bit of separation. The All Articles item will behave the same way as Cmd+A and display all feed items mixed together in the middle column. It’s also where I’ll place the items saved to “Read Later” but that may not be a 1.0 item, we’ll see how it goes.

I also need to make sure to get my Action Extension “Subscribe in Stream” working on the Mac so folks will be able to subscribe right from Safari.

Oh, one other annoying thing. I created a separate target for the Mac build and I had to name it Stream-macOS because Xcode wouldn’t let me have two Stream Targets. I suspect this was a mistake and to fix it I’ll have to add a new Target to the existing Target. I know, that may sound weird, but there is a way to do it and I didn’t know about it until I read up on it today. That will be a real pain in the butt to fix because of file inclusion per target. Ack! Not looking forward to that! 🤣

Work Note: Stream for Mac

I got an early start this morning and managed to get to the coffee shop before they opened at 7AM. 😀

Once I got my coffee and settled in I got right to work. Got the app built and running then I noticed it wasn’t updating. DOH! Turns out my Mac had lost its mind and refused to connect to the network until I rebooted it. Even a Mac needs a reboot every now and then I suppose.

I’m still trying to figure out my feed item list UI rendering problem. When it reloads it goes through the proper code path; filters based on selection and tells the table view to reload itself. It does reload but half the time the items display off screen. I can get it to draw properly by scrolling the view. That’s when I noticed it would draw properly every other selection. 😳

Red sock.This got me thinking about my choice to use SwiftUI for the table view cells. One thing about that choice is cell reuse is kind of strange. The only way I’ve been able to get them to draw properly is to make a new view, just the SwiftUI part, so it gets laid out properly. I’m fairly certain I could get this working by using SwiftUI’s state mechanism but I decided to try doing a proper cell using AppKit and hook up the constraints manually. I have the cell put together and was working on constraints when I ran out of time for the day.

If I’m feeling rambunctious I may work on it a bit this week. If all else fails there’s always next Sunday.

Work Note: Stream for Mac

I was slow to start today. I wasn’t sure what I wanted to work on at first. It took me a couple hours to really get rolling.

So, what I did was fix a refresh bug that was bugging me. When I added a new blog the blog table view didn’t update. It took me a long time to decide how I wanted to fix it. I went through a bunch of ideas then I noticed that I’d already had some stuff in place that would allow me to fix it pretty quickly. Unfortunately it took me forever to get to that point. That’s now fixed. ✅

I had another bug that was really bugging me but I keep forgetting what it is until I run into it again. This week I decided to save the offending Atom feed into my collection of test feeds so I’d get it fixed. Bug exterminated. ✅

AHHHHHH!I have a small list of things to do before making a 1.0 release. Once I get those items completed I’ll put together a limited beta and collect some feedback. I need to do a lot of polishing. My tables flicker too much during updates because I reload everything and force the UI to render. Yeah, very heavy handed. If I can minimize the flicker I may ship it like that. Once the Mac version is out I can focus on catching it up to the iOS version and start adding new things to both at the same time. I have so much work ahead of me but that’s perfectly fine!

Work Note: Stream for Mac

Brain in a jarWorked on Stream for Mac today since we’re celebrating our granddaughters birthday tomorrow, should be a super good time. Looking forward to it.

So, today when I started I had to fix a couple of outlets in my Mac NIB for the main window. How this got busted I’ll never know but it was and it caused the app to crash at startup. I do this so rarely that I forget how to do it, so it sucked to have to start off that way. Fixed. ✅

Next thing on the fix it list was a bug I’d introduced three weeks back. When I’d refresh the blog list using a pull to refresh on the iOS build or Cmd+R for the Mac build it would make all the network requests and tell the view controller to do its thing, however I messed up my view model when I added the ability to filter down to single blog selection in the UI, whoops! That was a simple fix. ✅

I decided, with the time I had left, to add some keyboard support. Doing a Cmd+A will now select all feeds. I need to add an All item in the blog list so folks can click on it if they’d prefer to select to display all feed items for all blogs that way. Maybe next time.

I also added support for using the up and down arrows to navigate through the list of blogs or the list of feed items. That went together pretty quickly and I really like the results. Done. ✅

I’m going to add some vi support to the keyboard to do some navigating as well as making the space bar scroll the through the article you’re viewing or moving on to the next item once you reach the bottom of an article. Stuff like this are kind of table stakes in existing feed readers. Future addition.

Until next weekend I’ll have some new features to play with on my Mac. I’m tempted to start a TestFlight but it’s still so early days. Reach out if you’d like to try it now. It may crash and misbehave but it’s kind of fun to play with, if you can tolerate it. 😄

Work Note: Stream for Mac

More work on Stream for Mac today.

I renamed some stuff because I had Feed and FeedItem used in various places. A Feed represents the Blog’s RSS Feed information. A FeedItem is a single entry from an RSS feed for a particular feed.

Those are accurate names in my opinion but just glancing at them can be confusing in their use in the code. So, what I did was rename the table view BlogListTableView and the view model for it BlogViewModel. I also added new classes for table views called BlogItemCellView and BlogItemTableCellView. It made things a lot easier for me to read and understand. The base models of Feed and FeedItem remain as they were.

I finally got around to filling in the left side table view of the three columns. This is a simple list of blogs. I also added a little code to allow me to filter the list of feed items based on the selected row in the blog list. Simple, expected, stuff.

After doing that I adjusted the blog cell and feed item cell to use a different font for the blog title and feed item title. They look a lot better now. I also added some padding around the outer edge to space things out so they’re not all jammed together.

The final task was fetching and caching the favicon for each blog. That’s where I wrapped up for the day.

I can now display a list of blogs. By default all feed items display in the middle column. When you select an individual blog the middle column displays just the items for that blog. I still have to add a new top level item to the blog list to allow you to select All items, but not today.

Image of Stream for Mac

Stream Work Note

Red sock.Today I worked on some refactoring so I could support another column in the Mac version of stream and I migrated away from my singleton instance of the database because it just felt gross.🤮

That removes the only singleton in the app and I feel a lot better about it.

I’m splitting some functionality out of a view model and putting it into a different view model to better support the third column Stream will now have.

Yes, I’m adding a feed column. Stream for Mac is the only version that will have that extra column because it feels natural for the “Big Dog” app to have it.

I still plan on keeping the app extremely simple and will provide a Timeline Mode that hides the feed column so it behaves just like the Stream we’re accustomed to.

More to come. Today was a lot of infrastructure work and rebuilding the iOS to make sure it still works as expected.

The Mac version is in a bit of a busted state because I ran out of time today. But I’ll get it fixed ASAP. 😃

Until next week, take ‘er easy.

Work Note: Stream for Mac

I decided to go with working on Stream for Mac today.

The feed item cell has been a complete mess for years, yes, you read that right. It’s been a complete wreck for years now. I kept on insisting I do all the work using AppKit.

Today that changed. I needed to make progress and even though my SwiftUI experience is very limited I was able to get the general layout working the way I’d like it. It’s not complete by any means but each UI element is displaying in the place I want it to (mostly) and the cell resizes properly, oh, and the date label/text remains pinned to the right side of the cell. That was a big issue with my AppKit NIB attempt.

Polish, polish, polish is the next course of business with the new cell. It needs spacing updates, text size fixes, color changes, highlighting support, keyboard support, so many things. But, now that it lays out the way I want I can move forward.

This is the first SwiftUI code introduced to the Stream codebase, which began life in 2018.

Stream Work Note: Post Stream 1.6 Work

I was so focused on getting a single feature done for Stream 1.6, and add a little Liquid Glass support that I don’t know what I want to work on today. 🤣

Brain in a jarI want to get back to the Mac version but it feels like so much work. I need to get my table view cells to behave properly. Perhaps I’ll punt on having the date attached to the right side of the cell and put it somewhere on the left just to make some progress today. 🤔

Would different cell layouts between iOS and Mac versions put folks off?

Something else I’ve been considering is adding a third column to Stream for Mac! Yes, it would make it behave just like every other feed reader on the market. Going 100% against what Stream was built to be. My reasoning? It’s strange, at best. On iPhone it has a single column, on iPad it has two, so it makes sense that the Mac — being the big dog — would have three, right? RIGHT!?

Should I add keyboard shortcuts to better support iPad? That would also make the iPad app a better citizen on the Mac!

Do I being my journey into SwiftUI by replacing some of the lazy UI I threw together just to get 1.0 out the door?

Oh, how about that new subscribing UI I wanted to do? I got some lovely feedback from a friend about onboarding! I’ve been thinking about that a lot myself. It’s a great idea and I need it! Perhaps that’s my first SwiftUI code? I think y’all would like it, at least I hope you will.

Anywho. Lots of thoughts spinnging around in my brain. 🧠

I have such a huge list of things I want to add to Stream. Like full page parsing and stripping of formatting, fix some things that annoy me, syncing, connection to feed services like feedbin, recommendations (curated and LLM recommended), a Mac version, and the list goes on and on and on. 😃

Stream Work Note

I’ve managed to kick nine builds of Stream out to beta testers. That’s the most I’ve ever done! I owe this all to the four hours of time I’ve reserved on Sunday morning for working on Stream. It’s been seven weeks of work. Like I said in my last Stream Work Note I’m overjoyed at having this time to focus work on Stream and, of course, have a really great Mocha while I do it. 😄

During my testing I noticed that the one new feature I’ve been adding to the app would fail when Stream was tiled with another app. That really stunk because otherwise it looked great to me! Today I managed to fix that outstanding critter and it feels really great!

I’ve had two other bug reports come in specifically for my iPad support — thanks Lucian and Sean!

Red sock.The first bug was occuring when you’d pick a feed to subscribe to. That porting of the code has been synchronous since day one. I figured why do it asynchronously when the UI was going to be blocked while I added the feed to your list and parsed it. Well, newer versions of iPadOS didn’t like that and the app would crash hard. Yikes! Can’t have that. I fixed that bug earlier in the week or maybe last week, I don’t remember, but it’s out of the way and now asynchronously updates the app, be it iOS or iPadOS.

The second bug was a bit more difficult to fix only because I couldn’t reproduce it. It turns out it was happening consistently on iPadOS 16.8.2. So, I added that simulator setup and kerpow! 💣 It happened right away. YAY! 🥳 It turns out I’ve been stacking two navigation controllers on top of each other since I added iPad support a few years back. DOH! The OS was just tolerating it so I didn’t know. Well, it looks like Apple decided it wouldn’t allow that any longer, and rightfully so! I fixed that issue yesterday.

This morning was spent fixing the tiling bug and it’s now done and a new TestFlight build it up. If everything goes well with that build it could be my final build before Tuesday’s Apple Awe Dropping event. 🤞🏼

Have I ever mentioned I’d love to work on Stream full time? I didn’t think so. 😄

Stream Work Note

I’ve been going to Grit, my favorite coffee shop, for the last six Sunday’s to work on Stream. It’s been really rewarding to spend the morning working on it. I typically work from around 8AM to noon, then grab Chipotle for my daughter and I and head back home.

That four hours of time has given me so much joy and recharges me for the week ahead. I cannot imagine how much better Stream could be if I were able to do this five days a week for five to eight hours a day! I might actually be able to make some real progress on the Mac version! 😱

Today I’ve managed to kick a beta build out the door. What I expect to release is version 1.6.0 as soon as Apple opens the door for glassified releases. Now, don’t expect much. Even with my four hours at a time to work on it I’m still very slow and the feature I’ve added isn’t glassy, at all. It’s something I’ve wanted to add for a very long time. It’s a feature meant to make things easier to subscribe to feeds. That’s all I’ll say about it for now.

What’s next?

Well, I had wanted to create an entire new view for adding and managing your subscriptions. I really need a nice way to populate the app your first time launching it and give you some great options when you pop open the Subscribe view controller. My plan is to create a nice set of hand picked feeds for users and, perhaps, add a set of recommended feeds using Apple’s built in LLM models. We’ll see at some point I hope! As long as I’m able to continue spending my Sunday mornings coding I think I’ll be able to achieve a lot on the app. I have a lot of features to add and bugs to fix! There are a lot of usability things I could do to improve the app and a few bugs I need to take care of.

Where’s the Mac version?

Brain in a jarThis is a tough one. And it’s only tough because I don’t know AppKit as well as I do UIKit. Yes, Stream is still 100% UIKit and the Mac parts I’ve done are all AppKit. I’m thinking I may do some new features in SwiftUI because I need the practice. I’ve never built anything with SwiftUI.

I’ve struggled to get layout on the Mac working the way I’d like. My table view cells look like crap and even with help from a dear friend — hi, Josh — I haven’t been able to get it right. It’s terribly frustrating and makes me want to jump out a window.🤣 Maybe SwiftUI will let me make those cells work on Mac?🤞🏼

Stream Work Note

I haven’t done a development work note in a long time.

I’ve started working on a new feature for Stream that required creating an App Group so I can share data.

I’ve added everything to my new Action Target and I have the code put together using existing classes, it was honestly pretty easy to do.

Brain in a jarNow comes the interesting bit. If I understand how an App Group works I am going to have to move my existing database to the group container so the extension will be able to access it?

If that’s not the case I’m sure someone will let me know. 😂

The thing I’ve never tried to do is open a SQLite database from two processes. Does that even work?

If it doesn’t work, things are gonna get very interesting.

I can always create a separate database just for the Action Extension that matches the structure of the main database and have the main app import it at a later time.

I’m hoping I’ll be able to open it from the main app and the extension and have it work as expected, but I’m not holding my breath.

I just looked at my Cotton Bureau store earnings. I’ve sold one t-shirt and one phone case, if I’m reading it correctly. 🤣

Thank you to whoever bought the t-shirt. I do appreciate the business! 🙏🏼

I bought the case. Guess I should go grab a t-shirt while supplies last!

Holy cow, when did this happen? 😃

I just decided to browse around the App Store to see if Stream was anywhere in the Apps tab, and it was! 😍

It’s under Apps You Might’ve Missed. Thank you! 🙏🏼

P.S. The reason it doesn’t look like I’ve installed it is because I’m running a Beta build.