Hey everyone.
Welcome to another episode of empower apps.
I'm your host, Leo Dion figured it's that time of the year for me to give an update
on how things are going and I wanted an opportunity to just talk about some
of the stuff I've been working on post WWDC and what are my thoughts on just
working on some of these APIs, hands on as I'm working on some of these projects.
So, if you don't know, I've gone whole hog as far as all the depth
of DC stuff, except for, you know, I don't have a vision pro and I haven't
done any vision pro development.
So if you're looking for that.
Sorry, I'm not going to mention that in this episode because I just haven't had
the chance, but I've installed Sonoma on my two Macs one, one accidentally
and the other one on purpose.
I bought the new MacBook Air 15 inch.
I should show that to you.
I just put a cover on it today, so I'm super happy about it without
the cover, it's just an amazing.
Piece of flat metal.
I love carrying it everywhere.
I love the size on it.
Now that I have a cover on it, I can put stickers on it.
So if you have any stickers you want to send me, please do.
I'll take them.
DM me after the show and I can send you my P.
O.
box or you can send it to the BrightDigit P.
O.
box.
Which is on the BrightDigit website.
So, I'd love to have more stickers on this thing.
So, please send them to me.
So, yeah, I've installed Sonoma.
And I think like the first beta was really good.
But it was a misnomer because, or not a misnomer.
What's the term I want to use?
It was not the way.
Each beta has been, each beta has been like a roulette wheel.
I feel like each one has been different and special in its own way.
And like I've had, I had some issues, I think with the first or second
beta where the computer would just crash and freeze or just slow down
and then the display would start acting wonky and then later betas.
Now it's been more just a bunch of apps closing specifically
I'm talking about like, like.
In a row, you'll get Safari and Xcode and Final Cut and a couple
other Apple apps that will just close on you out of nowhere.
It's super weird.
Luckily, it hasn't been so bad that I felt like, oh man, I lost my data.
Like, that's not the case at all.
It's just more you know, oh, well, I just restart it.
So it isn't a big deal really.
I have installed iOS 17.
Don't really notice anything as far as that.
I'm sure I'm missing something.
I definitely can tell my iPhone 11 pro max is starting to show its age.
So yeah, I'm looking forward to getting a new one this fall.
So we'll see about that.
I really like Sonoma other than the crashing issue.
I love the desktop widgets.
It's awesome.
I love but that to me is the biggest thing I've noticed that I really like.
But.
Primarily, I wanted to work on watchOS 10 because I was just interested if
you watched my episode with Hidde, you probably, we talked extensively.
If you watched my episode with Hidde, you probably saw that, you
know, I'm geeked about watchOS 10 and all the cool stuff you can do.
So I've been definitely playing around with that.
And I installed that on the cheapo scratch up watch I bought on eBay.
Speaking of which, hey so.
If you watch the episode, you know, I sold, I don't know if I told you this,
but I sold my broken watch on eBay.
The one that just didn't boot up and power down.
And somebody bought it and they were actually able to replace
the battery and get it working, which, you know, good for them.
That's what I say.
And we figured out a way to, cause I couldn't I cloud unlock it.
The way I had to do that was you can do it through login to the
website and then removing it there.
And, then I had the person basically reset the watch.
There's a way to do that using a certain button combination.
And then from there they were able, they now have a brand new watch that
they bought for pretty discounted price.
So good for them.
And then of course going back to development, a lot of Xcode 15, like, so
you can only install Xcode 15 on Sonoma.
There is a way to do Xcode 14 on Sonoma.
If I have any work, that's going to demand it, which is probably going to
happen because that's the real world.
But There is a way to do that.
I can put it in the show notes that pretty much with every new Mac OS version,
there's a way you can run the command of Xcode in a terminal, open Xcode for you.
So, yeah, let's talk a little bit about the Apple watch.
So I've been playing around with, My, the scratch up series five
that I installed the beta on.
And it's I've been, I like watchOS 10 a lot, but it definitely takes some getting
used to, and it's a little bit difficult.
It's a little bit difficult switching between my two watches.
So I have a series seven, a large size series seven and the smaller
series five, which has the beta.
So the series seven has watchOS 9 and it just takes, it's like.
There's so much muscle memory and how I do things with watchOS for the last few years
that switching to watchOS 10, there's just been so many changes with what the side
button does, and the crown does, and how apps work, etc, and the way you bring up
control centers change, all that stuff.
And so that's really that's something I have to get used to.
And it's especially challenging when I'm switching between the two watches
every now and then, as far as app development is concerned, I really wanted
to really take animations to the next level particularly in a heart twitch,
I have this cool animation I've been working on where it shows the heart
rate using a graph and animations.
And I want to eventually get that into the app.
Heart twitch is my, I would say ideal.
Like my go to watch app that I've been working on.
And as far as that's concerned, a lot of like simplification, better
onboarding that I want to work on.
I have a couple other apps that I'm working on as well.
I'll get into some architecture ideas that I had to, I'll get into that when
I talk about the other app, but there's a couple of other apps up and working on
specifically I have a little app called objective scene where I can basically,
so you can set up like activity rings essentially for different things.
And you can, they can be manual stuff that you click on and tap on and
say, Oh, I drank this much water.
It could be hooked up to health kit.
It could hook up to all sorts of stats that you get on your phone.
So that way you can see how close you are to getting goals using activity rings.
You just customize it.
It's not all based on just.
Calories and exercise, but you can set up your own custom ones.
So that's something I want to play around with and work on as well.
It's my first chance at really deep diving into widgets and the
dynamic island and playing around with animations and stuff like that.
So those, that's, those are my smaller projects that, that I've been working
on and playing around with as far as iOS 17 and watchOS 10 and things like that.
So, yeah, the biggest focus though has been an app I've been wanting to work on
for a while that I had been working on and took some time off this year because I
was busy with some, you know, other work.
And that would be Bushel.
So let me talk a bit about how Bushel has been going since WWDC.
So I really deep dived into Bushel after WWDC, there's not a
lot of like new stuff in Bushel.
There's a couple of new APIs I really want to take advantage of the you can now save
the virtual machine state and there's some updates to the UI view or the should say
app kit view that you use to show Show the virtual machine screen, the display.
But that really isn't the bulk of it more or less.
I just regret having supported Monterey, honestly.
And now I'm just building from the ground up, but a lot of code is reusable, so it's
not the end of the world by any means.
But a lot of, cruft code in there.
So, so for instance, we just talked about safe state.
I had a whole thing using NSFileVersion for doing my own safe state.
And now I can, like, abandon that.
I will only be supporting, sorry, I will only be supporting Sonoma with with
Bushel for now because I'll probably take long enough that I don't need to.
But, yeah, so there's that.
There's the window management stuff.
There's a ton of window management stuff that they added in Ventura
that I couldn't take advantage of because I was supporting Monterey.
I just, I regret it so much.
So, like, there's just a ton of code I could rip out.
That I don't need anymore that I'm really happy about being
able to rip that code out.
So that's the background on Bushel.
I'll get a little bit more into the architecture later, but I wanted
to talk some about some of the new APIs that have come out from WWDC.
With Bushel, I did a lot of stuff with Combine.
As you may imagine, I'm a big Combine fan, and as we all know, we have the new
Observation framework, so I really want to take advantage of that, and honestly, I
don't want to do any Combine in this app.
I want it to be future proof.
I mean, I think Combine will be around for a while, but Apple really pushed
Observation, so I should really be using it, and so that's what I've done,
and I'm really trying to depend only on Observation as much as possible.
There.
Do I miss combine?
Am I sad that it's going away?
Yeah.
In a lot of ways, there's a lot of cool things you could do with reactive
programming that I'm afraid we're going to lose out on wondering really
about the testability of observation.
I haven't gotten that far yet because I just want to get functionality working.
But yeah.
Yeah, that's some of the stuff I've run into.
This is a classic example too of like, am I, is it me?
Am I crazy or do I just not know what I'm doing?
But there's a whole observation tracking that just isn't working
the way I thought it does.
And I'm a little bit intimidated to actually use it because I'm not sure that
it's working the way it's supposed to.
So.
That has me a little bit worried, like how am I supposed to track changes?
I don't want to have everything dependent on the view doing like on change.
I want the machine, I want the object to take care of it itself.
So I'm a little bit worried about that as far as observation is concerned.
Next, I want to talk about macros.
I like macros.
I think they're great, but there's some really weird
stuff that happens with macros.
So for instance, the Sunday before dub dub.
I don't know if you heard this, but I created an enum called preview.
The next day we get a macro called preview and I didn't know this, but I started
trying to use the new API and it says I had some weird error with previews.
I forgot what it does.
I'll hopefully put it on here somewhere.
And it ends up being that you can run into name conflicts.
If you have a type.
With the same name as a macro that seems like an oversight and a bug.
I did file a feed feedback for it.
So that's really weird.
There's some stuff with when I use any like Swift attributes
with a macro, it throws thing off.
So I tried to like deprecate something that was, Oh gosh, what was it?
Was it an attribute, a SwiftData attribute or something?
I tried to deprecate it.
Or maybe it was the observation thing that I tried to deprecate and it like
threw it off because it was like, I didn't know how to deal with attribute
and the macro at the same time.
So that's about it.
I am trying very hard to avoid getting down the rabbit hole
of like making my own macro.
I just don't want to go down that rabbit hole.
I just want to make an app that people can use and not just...
You know, the thing with, I want to build a developer tool.
It's like, like, Oh, I can make this swift package for me.
No, no, no, not going to do that.
Let's just use macros as a user developer user, I guess.
And not go down that rabbit hole.
So, so far so good.
There's weirdness.
And that, that kind of gets to my next thing I want to talk
about, which is SwiftData.
I've been avoiding core data all these years.
I've used core data professionally, so it's not like I don't know how it works
or I don't like it or anything like that.
I'm not that person at all.
I don't want to get into SQLite if I don't need to, things like that.
So, but I also don't want to maintain an old thing.
So I've been avoiding core data as much as I can, unless I need to, but I've
been really deep diving into SwiftData.
I think SwiftData is a.
Thing I've been waiting for to use in Bushel quite a bit.
So what use it for is essentially keeping a database of every
image and machine that you have.
So that way you can easily like create a new machine
based on a specific image file.
Or you can pull up a list of your machines.
And you don't have to go and specifically open that file, et cetera.
So SwiftData has been great.
Cause like when I was doing it, Bushel talk about ripping out old code.
I was doing it all with user defaults and it was a mess.
So I'm really happy to switch over to SwiftData again.
Does it work the way it's supposed to?
Is it me?
I'm not totally sure.
I get some weird stuff with like relationships and how with
relationships, even if I do a delete, you can't set child.
Parent is null care.
Prader has some really great stuff.
I'm gonna post links to some of her articles.
She's had some of the best SwiftData stuff out there that's really helped me.
But yeah.
Oh, that goes to another thing I've been super disappointed with.
I mean, I was going so fast in that first beta and then once they broke
SwiftData and SwiftUI previews at the same time, that just like
really slowed things down for me.
Man, I hope they get that fixed soon because that really, that.
That sucks because I will I just Going so fast i'm building stuff And moving
things along as far as using SwiftData and swift ui previews at the same time.
It's been great.
Before I close out on SwiftData.
I just want to say if you're looking for An app to like debug your
core data because it's essentially still core data behind the scenes.
Take a look at a CoreDataLab.
It's a really great app.
I've been using that to take a look at my data.
And that's been awesome.
Luckily, I've been employing if you read my recent article on micro apps.
And if you watch the episode I did with Majid, you probably
know I'm a big fan of modularity.
And so micro apps has been a way for me to Breakdown Bushel
into it's into smaller pieces.
What I'm doing is I am using a Swift package manager.
Like I said, I like to put all my code in Swift package manager, and then I
will create a basically like I have an app template in Xcode gen, and then
I use that template for building new.
for separate individual parts of Bushel.
So for instance, I have a library app.
It's not going to be posted to the app store, but it's for me to just easily be
able to just test that section of the app.
Then I have a machine app and then that tests just the machine
part of the app and so on.
And then I'm really going crazy with Swift packages and like splitting things up.
Like there's separate view.
There's like separate views for separate sections.
Like, sorry, separate targets for views.
There are separate targets for views for machines or separate
targets for views for libraries.
There's core stuff.
There's SwiftData stuff in individual SwiftData stuff for
the different sections of the app.
So I'm really trying to like break this app apart into as small of a piece
as I can so that there is, and then of course, doing that, like creating.
Dependencies in such a way that that there's not too much
like tightly coupled stuff.
It's not just because in the future I might do something else with it,
but it's just for easier testing, easier maintenance, things like that.
That's why I'm a big fan of micro apps.
In a sense, it's a little bit more difficult at macOS because
these apps tend to be bigger.
But if you're doing iOS, it makes total sense as well.
And that's really one of the big pushes I'm making with Bushel is just breaking
it into smaller pieces, hopefully maybe someday making parts of it open source.
I mean, I even, I'm creating a command line app as well.
So.
Yeah I'm just, I'm a big fan of this concept.
I hope I'm doing it the right way.
I think I am.
And so far I'm loving it.
I think the interconnectivity, I need to figure that out a little bit better.
Cause I've seen machines need to know what OS are installing
based on the image and things like that, but we'll get there soon.
So that's, that's pretty much it.
I'll put links to Bushel.
Of course, you can still sign up for the beta.
As I get closer and closer to finalizing it, I'll extend that, invite
more to people who have signed up.
But That's about it.
If you have any questions, send me a message on Twitter, ask
it on, or you can email me.
But.
I also post a link or I'll post in the show notes, the address to my PO box.
If you want to send me stickers, I'd appreciate that.
But thank you so much for joining me for this small little episode
that kind of gives you an update and went up and play around with, like
I said, sorry, no vision pro stuff.
I'm sure I'll forget something that I wanted to talk about.
But if you liked this video I hope you enjoy the next one with Joannis.
We'll be talking about the Swift servers, server side, Swift working group.
And of course I've got another episode coming up with Matt who came on to
talk about the extension kit, which I haven't even deep dive, but man, I'd
love to with Bushel and he'll be talking about his talk from Swift Toronto.
He's of course of chime and.
So you can definitely check that out.
And then Brandon Williams from point free, who's also going
to be speaking with Toronto.
We'll be on the show to talk about dependency.
So I'm really curious to hear his take on that and TCA of course.
And you can send me all those questions if you want to and the world, et cetera.
So yeah, definitely take a look at that.
And that I do have an interview planned with Christian Seelig of the formerly
Apollo and currently of Pixel Pals.
So we'll have some interesting stuff to talk about there.
So thank you again for joining me and I look forward to talking to you again.
Like, and subscribe please.
And give me a review.
Thanks everybody.
Bye.