Using Stream Daily

Using the Beta

I’ve been using Stream for Mac in its default mode for quite a while now and I really love it. I can see things I need to tweak but the overall shape and stability of the app put a smile on my face. It’s simple, as intended. Perhaps too simple for some but I built Stream to scratch my own itch and I hope others will enjoy it as well.

The default mode is, like the iPhone and iPad versions, a timeline like Mastodon or Bluesky. There are no unread dots in the timeline so you don’t feel compelled to read everything. It’s meant to be a casual timeline. If you don’t feel interested in a certain headline, just keep scrolling.

RibbitIf you’d like to remove a feed just display the blog list by doing Cmd+Ctrl+s to show the list, remove the feed, and do Cmd+Ctrl+s to hide the blog list. You can also show and hide the blog list by selecting View > Show Blog List or View > Hide Blog List. Easy.

I don’t think I’ve mentioned it but you can navigate up and down the feed items list by using the j and k keys, yes vi inspired, and you can press the space bar to do a page down in the article you’re viewing, doing a shift+space will go backwards. I still need to add code to detect when you’ve reached the top or bottom of a page so I know to jump to the next feed item for you automatically.

For a while I was pretty happy with the overall UI look and feel. That feeling has now disappeared and I think it looks kind of meh. I’m gonna work on that. It needs to be better.

Sync

Folks are going to hate, hate, hate, the lack of syncing between your devices. It just doesn’t exist yet. When I originally started Stream I wasn’t happy with the performance of CloudKit. I don’t know if it’s any better today but I have to support it. It’s on the list of things to do once I complete the initial Mac release. I kid of have to gut my data persistence layer and make it work with CloudKit, which I haven’t invested any time in, yet.

I’m ready to get the ★☆☆☆☆ reviews with the “This app sucks, it doesn’t even sync your data!” That’s fine.

There are great alternatives

There are many great choices out there for feed readers. Apps like Unread, NetNewsWire, Tapestry, and Reeder are great choices for more advanced feed readers. I will certainly support some things they support and hope to give you something different. We’ll see. 😄

Thank you

As always I’d like to express my gratitude for everyone who’s ever downloaded the iOS version of Stream for their phone or iPad. And I can’t thank everyone who’s supported me by giving feedback or helping me with a code problem. You’re the best. Thank you. ❤️

Work Note: Stream for Mac

What did I get done today? 🤔

I Love RSS!I did a bunch of little things to make the app have fewer rough edges.

  • Removed the border around the blog list (Thanks, Lucien)
  • Updated the selected Blog in the blog list to use white text
  • Rounded the corners of the selected blog item in the blog list
  • Adjusted the position of Blog list items to have some space around them
  • Set the divider between panes to be thin
  • If one blog is select and you refresh it, we only refresh that one item (Thanks, John)
  • Updated the All and Read Later icons to have some color

I tried to fix an issue that causes the preview text in the feed item list to sometimes display only a single line but the text view is three lines high. Weird, I know. Sometimes it will display a single line but the text could be three lines high. I know this has something to do with cell recycling. I tried some recommended things to get the cells to resize their Text but no luck yet. I’ll get there.

Another thing I need to do to fix this is decode any HTML included in the feed and strip everything at the top that’s not a paragraph marker. What happens now is you won’t get any preview text because the top bit is an image or other HTML I’m not accounting for.

I didn’t get around to fixing OPML Import so it displays some sort of progress indicator while it’s working. I’m thinking about displaying a simple spinner with text to the right that reads something like “Importing: [blog name goes here]” in the toolbar. I think I’ll hide the refresh button and the Stream title text and replace it with the spinner and import text. That sounds good in my brain at the moment. 🧠

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

MacBook Air

Out of curiosity I just configured a new MacBook Air. I’m pretty sure it’s the one I’d buy if I were in the market for a new laptop.

Here’s the configuration:

• 15in.
• Sky Blue
• 32GB Memory
• 1TB SSD
• Included power adapter
• Yearly AppleCare+

Total price: $1,899

My work laptop is a 16in M2 MacBook Pro with 32GB memory and 1TB storage and it’s a great computer. Fast and reliable.

The Air would definitely be enough horsepower for my app development.

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.

My very own Iconfactory Pixel Potrait!

Got my Pixel Portrait today!

I owe a big thank you to my friends at The Iconfactory! You’re the best! ❤️

My very own Iconfactory Pixel Portrait! I just sent them a picture and I got this back! It's incredible and I love it! 😍

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

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

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

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. 😃

Making Development Easier for Developers

Brent Simmons

And it seems retro in the worst way that we’re still using anything other than a scripting language for most of our code. We should be using something simple and light that can configure toolbars, handle networking callbacks, query databases, manage views, and so on. And maybe with a DSL for SwiftUI-like declarative UI.

Almost none of that code needs to be in a lower-level language like Swift or Objective-C. It really doesn’t. (I say this as a performance junkie!)

It could be in Ruby, Lua, Python, or JavaScript. Better still would be a new language invented specifically for the problem of writing apps, something designed to make the common challenges of app writing easier.

We did have this stuff decades ago. Not for app making in general, sure — but now it’s 25 years later, and a company like Apple could make this real for all its app makers.

Where to start? Let’s start by saying I agree 100% with Brent. Having a built in scripting language with dynamic UI updating and easier ways to build code and UI would be absolutely incredible! And, like Brent says, I’d love to see Apple make this happen.

A hojillion years ago when I worked at Visio we had VBA (Visual Basic for Applications) integrated right into Visio. It was a fantastic way to build custom Add-Ons for Visio. You could embed your VBA solution right into your template or document so folks could invoke it right from the app. This allowed folks to make fancy automation to fit their particular need and do it in a high level scripting language that could control Visio in all kinds of ways! I loved it! I spent a lot of time working on Add-Ons to Visio in C and C++ but I used VBA to test things before implementing them as an Add-On — Add-Ons had the advantage of being usable app wide.

I’m not sure how VBA is used in Visio today but before I left Microsoft had added a way to build your solution code into binary form so it could be signed before including it as a part of your solution package. It was such a marvelous development environment.

Now, if you’ve ever used VBA in Visio, Excel, or Word you know exactly how powerful it is. Could you imagine having access to something like that within your Xcode dev environment that was fully integrated, or even supported like VBA in an application? Yes, it’s a lot of work to make something like VBA work but it is so worth it.

Brent mentions Ruby, Lua, Python, and JavaScript as the scripting languages but I have to say Microsoft’s Visual Basic for Applications is so much easier to understand and use than any of those languages and it was easy to open functionality to it using Microsoft COM, IDispatch specifically, in the app. I know, COM has a bad reputation for being difficult. Yes, like I said earlier, it’s a LOT of work, but it’s so worth it when you can open all that power to your users and yourself! Taking that to the next level, like Brent’s talking about, would be a huge boon to Apple Platform Developers. AppKit, UIKit, SwiftUI, Objective-C, and Swift are still too deep to move quickly. If developers creating code for any of Apple’s platforms ever took some time to use VBA they’d see what I’m talking about. The paradigm is a bit different than they’re used to but, hell, I was so confused when I came to iOS development! They’d get used it after a time.

Building UI and code behind VBA forms is so easy. Drag and drop a UI, double-click on the element you’d like to add code for, and write your code. That’s it. It’s that easy! I would totally embrace this idea for application development on Apple platforms.

You can build at a higher level today using awesome tools like Xojo that give you a very Visual Basic like experience complete with a drag-and-drop forms builder just like Visual Basic!

Psst, did you know that folks have been scripting applications for iOS, complete with dynamic UI updating, with React Native? Yeah, it’s true! I’ve been working on an application like that for the last two years. We’ve almost completely rewritten the application in 100% React Native, which uses JavaScript as its backing language and a way to build UI in a very HTML/CSS manner. Think SwiftUI with web technologies. It works.

I know of many applications using Electron to deliver cross platform apps, like 1Password. They used Rust for mission critical code and put an Electron “front end” on top of it. Microsoft has fully embraced React Native. They like it so much they’re the primary maintainer of React Native for Windows!

Am I saying React Native is a perfect solution? Hell no! It’s a terrible developer experience in my opinion. Most folks use Visual Studio Code — I prefer Nova myself — as their editor and don’t have a nice debugger to fall back on. Nothing is integrated. It’s a bunch of tools losely hung together by duct tape that let you kind of see what’s happening in your app. Hey, if you think console.log is the height of debugging then this environment is for you! 🤣

In the end I, like Brent, would love to see a modern scripting environment that’s embedable or standalone that is fully supported by and used by Apple internally to create applications. The embedded environment is very enticing to me. Something like Visual Basic for stand alone development and Visual Basic for Applications for embedded scripting would be absolutely incredible!

Modern means easy to use UI builder and code behind that is a super simple language like BASIC and on top of it make it easy for third-parites to make extensions to the environment and provide code modules that give developers the power they need for specialized applications.

Look at Xojo. That’s it. Apple, buy it and make a version that’s 100% built for your platforms and is embedable in applications.

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?🤞🏼

Iconfactory Apps for Sale! 😲

Iconfactory • The Breakroom

While the Iconfactory is hard at work on Tapestry, Linea Sketch, Wallaroo, and Tot, we also find ourselves at a crossroads: we have too many apps and not enough time to keep them all up-to-date.

Whoa! Based on my reading here it looks like whoever reaches out is going to get their hands on some good stuff. I’m surprised xScope is not on the list of keepers!

If anyone from Apple happens upon this post. Please, please buy xScope and make it available as a tool for all developers. It’s an amazing piece of software and is darned useful. Oh, also snap up Frenzic and make it a permanent addition to your games collection!

Hell, just buy Iconfactory, it’s a small company and you’d get a bunch of really amazing people and fantastic apps to boot!

Hire Iconfactory

Sean Heber via Mastodon

ChatGPT and other AI services are basically killing @Iconfactory and I’m not exaggerating or being hyperbolical.

Reading this sent chills down my spine.

Iconfactory has a very long history of creating beloved applications and designs for Mac and iOS.

Ollie! The beloved Twitterrific MascotTheir designers craft beautiful interfaces, icons, and other illustrations.

To think they could go away because people are using AI generated slop designs and icons is gut wrenching.

I’m a huge fan of Iconfactory work. I use their apps everyday. Two in particular; Tot and Tapestry.

I’m writing this blog post using Tot. It’s perfect for it. Simple text editor with Markdown support and automatic save that syncs with iCloud. It’s an example of simplicity that is absolutely useful. I’ve been using Tot for years to write all of my blog posts, including Saturday Morning Coffee. ☕️

Tapestry is a new app. It is a new take on feed readers. Sure, it’s a competitor to Stream but it’s beautifully designed and implemented.

I’m a Wallaroo and xScope user and I’ve heard wonderful things about Linea Sketch.

Their craft is second to none.

Stream had the honor of being featured in the App Store in October of 2023. I worked with Iconfactory to create the banner Apple needed for the feature. It was a completely painless process and the results were beautiful and better than I could’ve imagined.

If you need someone to design your app, icon, or other materials, give Iconfactory a shout you will not regret it. ❤️