An exploration of Apple business news and technology. We talk about how businesses can use new technology to empower their business and employees, from Leo Dion, founder of BrightDigit.
Leo Dion (host): Welcome to
another episode of Empower Apps.
I'm your host Leo Dion.
Today I'm joined by Pol Piella Abadia.
Pol, thank you so much for coming on.
Pol Piella Abadia (guest): Yeah.
Thank you for having me.
Yeah.
Been
time listener of the podcast.
I'm happy to be here.
Leo Dion (host): well, I'm
happy to have you big fan of
your blog and your newsletter.
And we started using your app,
which we'll talk about QReate.
So I am super excited to have you on.
We met in Italy in person.
And so, yeah, before we get
started, I'll let you go
ahead and introduce yourself.
Pol Piella Abadia (guest): Yeah.
So, Pol I'm yeah, I'm an IS engineer.
I've been for the past about six years.
I've been living in the UK,
I'm originally from Spain,
but I've been living in the
UK for the last nine years.
So I work at the BBC at the moment,
that's all about to change so I'm
gonna move countries in about a month.
So I'm going back to Spain going
back home, and I'm starting, like,
a new chapter, a new adventure
and everything next month.
So that's why...
My background is very
empty at the moment.
I've got boxes all over the place.
So just tidying up my whole life
in this flat and everything.
Yeah, but other than, my iOS
role, I write, as you said, I
write a lot of content online.
I've got my newsletter
and the IOC newsletter.
I've got my blog, which is PolPietro.
dev.
Yeah, just trying to like keep up with,
the community and write as I learn and
as I kind of like do a bunch of stuff.
I focus like mainly as well
on like tooling CICB, which is
like my main kind of like area
of like interest and expertise.
Yeah, I write a lot of like
tooling, talk a lot about
tooling as well at conferences.
So yeah, that's, that's
a bit about, about me.
Leo Dion (host): And we did an
episode a few years ago with Kyle
Newsome and it's, some things have
changed a bit in that space what's
been the big, big changes in the
last few years when it comes to CI,
Pol Piella Abadia (guest): So I think
in terms of like the, like CI, CICD and
how it's like changed over the years,
I think the introduction of things
like GitHub Actions has like really
Opened up like a world of possibilities
for like people wanting to learn
more about what goes like under the
hood and wanted to like make things
for like their own, their own apps.
Like since I started my career, it's
been, it was always like a gray area
that there was one person who was some
form of like wizard in the company or
someone who really knew about CSCD that
all of the work was dumped onto them.
So that was one of my,
my passions was to like.
Learn a lot about it and, properly
understand it and make, everyone in
your team as well involved with it
because we're all like responsible
as part of like, I think mainly big
changes you don't like, there's a
lot of like, things now that you can.
Like find out there, like in the
open, you can do for free as well.
So you've got GitHub actions.
If you've got a public repository,
for example, you can get unlimited
minutes for macros runners.
Arguably it's not the fastest, but
you can literally, there's no barrier
of entry to your, like CICD if
you've got like public repositories.
Leo Dion (host): It doesn't
have the fastest updates.
Let's not forget
Pol Piella Abadia (guest): no, it really
doesn't like they, it probably has the
slowest updates actually, I would say.
So, yeah, and it's actually very
expensive if you want to get the, macOS
runners on like private repos as well.
It's, it's fairly pricey and it
doesn't come with like fast updates
either if you go like GitHub hosted.
But yeah, there's, there's that like
how open like things are becoming,
how much content there is out there.
I feel like.
There is quite a lot of, like, resources
that from people I don't know, one
that comes to mind is Roger, who's one
of the core contributors at Fastlane.
He writes a ton about, like, CICD as
well, and there's, like, Manu Herrera
as well, who I share a lot in my blog,
who also writes a lot about CICD.
And I feel like the, this is one of like
the main like changes I've seen over
the past few years where a lot of people
have seen to be like very interested
and writing a lot of content about the
actual building side of an application.
And obviously the big like game
changer in the past few years
for like iOS apps is Xcode Cloud.
Obviously, I think it was last year
or the year before that it got.
Yeah, I got introduced.
Leo Dion (host): Right.
Pol Piella Abadia (guest): but yeah,
it's made in my, from my point of
view, it's made like deploying apps,
like super, super easy and setting
up a CICD pipeline for your IOS
app is literally just a no brainer
and directly from, from Xcode,
then it's just super, super easy.
So for me, that's in terms of like
IOS CICD, that's the big game changer
over the past couple of years.
Leo Dion (host): What's your thoughts?
Like, if you were gonna get
started today without any
experience, what would you use?
Pol Piella Abadia (guest): So if I,
yeah, if I was a company that was
starting today or if I was an indie
dev and I've actually done that for,
for curate as well I would go for
either Xcode cloud, or I would go for
whatever, like either the company's
using and people are most familiar
with I think there's like options,
which are very, if it's not Xcode
cloud, GitHub actions is risky.
I would probably go with.
If you go in github hosted runners,
it's risky because you're gonna get
pretty slow runners Or you're gonna
have to pay a lot for the fast ones
and you're gonna be waiting a long long
time for updates and Yeah, but if you,
like, this is what we use at the BBC,
it's GitHub Actions with self hosted
runners that seems to be like, a very,
you're in charge of your machines, you
can basically just commission them and
sign them, provision them yourself.
You can also, I think a lot of people
are going down the route of like,
AWS like EC2 instances with, you can
basically spin up, so you don't actually
have to maintain the physical hardware.
So you can just.
Spin up, machines in, in AWS,
personally, I would go for Xcode
cloud if I'm doing a, yeah an app
to be honest, I think I found that
workflow absolutely frictionless.
I'm a big fan of like fast
lane as well and how much it's
improved, like the, code signing,
which is for me, the biggest.
troublemaker when it comes to, CICD and,
Leo Dion (host): Match is amazing.
Pol Piella Abadia (guest):
it really, really is.
And it's made things super easy, but
when you've got Xcode cloud, you forget
that, code signing actually exists.
It all happens.
Under the hood for you.
It's all managed.
They will create like all
your provisioning profiles
everything you need So yeah,
that's that's where I would go.
It's been What i've used for
any like in the kind of like
small apps that I have made.
There is a big Problem with that.
There's a limitation with that At
the moment and the limitation is
that you can't have standalone swift
packages basically on on xcode cloud so
Leo Dion (host): Yeah, right.
That's not their forte.
That makes
Pol Piella Abadia (guest): So
if you're developing a library,
basically and you just want to use
Xcode Cloud for your Swift package
you can't do it, like, standalone.
You need to embed it in an
application and then create a an
app on App Store Connect as well,
so that it can have a link to it.
It's a bit, yeah,
Leo Dion (host): Oh, wow.
That's
Pol Piella Abadia (guest): yeah,
Leo Dion (host): Yeah
Pol Piella Abadia (guest): Yeah.
Yeah.
Leo Dion (host): You're really trying
to put a square peg in a round hole
there Yeah, cuz I mean their interest
is a getting stuff on the App Store.
So it makes total sense Yeah,
so I use github actions for
all my Swift package stuff.
That's just the easiest way to go
Yeah, the headache with versioning
so There's one issue, maybe I don't
know how you'd get around this is
like, how could you do like something
like self hosted on a public repo?
Cause they definitely discourage
that for security reasons.
Like if somebody forks, they can run
on your machine and stuff, but it's
like, I don't know how else to get
around the fact that they don't update
their machines, but then I want to
test my public repo on a modern OS
that's been around for a few months.
You know what I mean?
Pol Piella Abadia (guest): I think you
can, so I think you can I understand
why it would be discouraged, but I think
you can prevent people from running
the actions if they're like on a fork.
I think you can, you
can do certain like.
Security measures around it.
So you can like really be in control
of what gets run on your machine.
I think other than that, I know
it is like, yeah, it's a massive
like limitation that you can't.
Yeah, the versions are so
old, but for my open source,
lots of packages, I just use.
Like github actions with github
hosted runners because they're free
basically and that's something that
I really appreciate But it's not
Leo Dion (host): Right.
Right.
Right.
Pol Piella Abadia (guest):
yeah, it's not great though.
Like the performance.
I think they're intel machines
at the moment I don't know last
time I checked the road map.
It was the fourth quarter
of this year that they were
introducing M1 like silicon.
I don't know if they've done it yet.
But yeah, there's still intel runners
limited to three cores on the free
tier, which is really not ideal.
Yeah, you can go for the
Leo Dion (host): So I
run all my, my apps.
I do get lab cause it's super cheap.
And then I do get lab CI,
whatever they call it.
I forgot what it's called.
And then run fast lane.
What are some besides the simplicity,
what are some advantages or
disadvantages with like Xcode
cloud over using another service?
Pol Piella Abadia (guest):
I think advantages.
It's how Easy it is to set up.
And how, like how fast everything is
in terms of like the support, not that
the runners are actually that fast.
I think the last time this was a long
time ago, but I had a conversation
with someone about the runner still
being like Intel virtual machines.
It was like a, a bit of a
strange set up they had.
So it made like builds a bit slow.
Leo Dion (host): Yeah.
It's whatever they got from BuildBuddy.
Pol Piella Abadia (guest): Yeah so
yeah, I think the main advantage
for me is how quickly they, it makes
sense because it's their tech, right?
Like their tech stack and their versions
and their machines, but how quickly
they actually adopt new, like, beta
versions, new like software releases
for like macOS as well, and how
quickly you can run on an Xcode beta.
And how many options you've got so
yeah, I think that's that's one very
big advantage like probably I've not
really looked into how quickly they do
it But every time I check there's like
the latest beta there's like You know
the the most stable release and you go
back like a couple of versions as well
of xcode usually and so I would say
that's the main like advantage It feels
like it's like the native approach like
they're gonna have access to everything
Before everyone else does in a way.
So they've got like more time to
like prep for it and they're going
to be quicker, like putting out
like workflows, one thing that.
Leo Dion (host): I think they're gonna
financially invest it, being that Apple
is trying to pivot towards service.
It's like, okay, like, they're already
trying to upsell you when you have
Xcode, so it makes total sense.
Pol Piella Abadia (guest):
Disadvantages.
I would say one of them is
the Swift package thing.
I was really, really hoping for, they
actually have some documentation about
how to build Swift packages on Xcode
cloud, but it literally just says
it's not supported, like standalone.
As soon as you click on
it, it's very misleading.
You go on it and it says
you can't do it standalone.
You need to create an app target and
then put your package in it, add it to
the test plan and then run the tests,
which is not what you want to do.
Yeah, another disadvantage I
would say is that it's, it's quite
young, like it as a, as like a
technology, like they was only
released like a couple of years ago.
So there's still like limitations,
for example, with fastlane, you can,
you could do on GitHub actions, you
could do like deliver, like very,
very quickly to, upload metadata and
release notes and all that stuff.
And there was no native way of doing it
in Xcode cloud until fairly recently,
where they introduced, like, a directory
called, I think it's release notes
or text files or something where you
can actually say what you want to put
in your release notes in test flight.
So that was added only recently,
so it's gonna get better over time
and they're gonna invest time, and
the last thing I would say about
disadvantages is there's not.
There's a free tier at the moment,
which is ideal for any like indie devs.
You're not, it's like 25 hours
a month, I think, and you're
probably not going to use them.
Leo Dion (host): Yeah.
Pol Piella Abadia (guest): if you're
like a solo dev but that's some,
something that's in the like little
writing on the pricing page is that
that's ending at the end of this year.
So there's not going to be a free
tier from the beginning of next year.
So you're going to be paying 1499, I
think, the cheapest tier and that will.
Yeah.
Leo Dion (host): Four 99, like 5 or 50.
Pol Piella Abadia (guest):
15, as in 1499.
Yeah.
Leo Dion (host): Got it.
Got it.
Okay.
Okay.
Pol Piella Abadia (guest): So that's a
month for 25 hours of like compute time.
So yeah it's going to be a paid service.
Basically that's, there's not going
to be an option for a, for a free
tier, regardless of the usage.
Yeah,
Leo Dion (host): That kind of sucks.
If you already have an infrastructure
existing infrastructure for CI, like,
like for me, like I use fast lane and I
have custom tools that I have prebuilt.
Like Xcode gen using get
lab and all that stuff.
Is there any reason I should
be switching to Xcode cloud?
Pol Piella Abadia (guest): I, I
wouldn't say so, to be honest, at
the time, if you've got a setup that
works for you and you're adapted to
that workflow and you like you, it
works for you, then I wouldn't say
there is like a reason to do so.
If you were to switch as well.
I don't know how it works with like
Xcode gen, because I think it needs
the Xcode project committed to.
Like to the repository
for Xcode cloud to work.
So
Leo Dion (host): you
can't run any pre stuff.
Pol Piella Abadia (guest):
yeah, it might be a bit tricky.
So I think you can run a post clone.
So maybe you're able to kind
of like generate the project.
Then I think that's where you install
like the third party dependencies.
So maybe you're able to generate
the Xcode project there.
And it might like pick it up.
I'm not, I'm not quite sure
how that, how that will work.
But if you wanted to use your Fastlane
scripts that you already have.
You can like use them still
with with expert cloud.
You can put like little
hooks at different places.
You can install like Fastlane
as well on the runners.
So you can still like reuse
some of the logic you have.
As to whether I would switch or not,
if you've got something that works
for you, to be honest, I probably
wouldn't, like, wouldn't bother.
If you start something fresh and
you want to try it out and see
if it like works for you, I would
maybe like suggest trying it out
because it's, it's pretty good.
But it has to be like,
a specific use case.
It has to be an application.
If you're releasing a, an open source
package or a library or anything
like that, I wouldn't, I wouldn't
bother because it, it doesn't,
you'll be jumping through like
hoops to make things work and it'll
be more painful than, than useful.
Leo Dion (host): So let's talk a
little bit about Xcode 15 and what
do you think are like the biggest?
Game changers that's come
out Last few months that's
gonna like really help Okay.
Pol Piella Abadia (guest): I think
in terms of like project structure
and something that I've been like
frustrated for some time now and with
like modular projects because I, I
work in iPlayer in the BBC, I work in
a very big like modular project and
we've got a bunch of like dependencies
that are internal to the organization
that are still like Cocoapods so we
can't really use Some of our packages,
some of our modules are swift packages.
Some of them, some of the other ones
are Xcode projects like frameworks.
So we, we've got like some dynamic
frameworks and some of the pain
that we actually experienced is that
you can't in like Apple ecosystems
in iOS, you can't really have like
umbrella frameworks that embed
like other frameworks basically.
So you need to embed them.
Link them dynamically on a library
or a framework and then embed them
at the root of your application.
So, say you've got like a feature,
your home feature, and you split
your feature into two different
modules, which is the UI and the core.
Only if everything's dynamic, only
have to import home on your app target.
You also have to import home UI and
home core because like an embed them.
So it can fight, the app
can find them at runtime.
So that was one of the like biggest like
pain points that I always had, because
this, even though you can enforce
it with like some coding practices,
it actually leaks like the, the two
modules, because you have to import them
out and embed them up a target level.
So
Leo Dion (host): Right.
Right.
Pol Piella Abadia (guest): this is all
changing with marriageable libraries.
So we do something that they
introduced with Xcode 15.
I think it's, yeah, I've tried it on,
on a couple of like modules as well.
I worked just on a few, like demo, like
spikes and tests it works very well,
like what you can basically do is you
can tell it to create like a binary.
It works like umbrella frameworks.
You can.
Technically have embedded,
embedded libraries in a framework
in a, in a project and what it
does is it gets the best of like
static and dynamic frameworks.
It does a lot of like magic as well.
And it, it makes like your
dependency list at the app target
level a lot, a lot simpler.
So that's one of the things
that for maybe selfish reasons,
because I work in like modular
applications quite a lot I'm
Leo Dion (host): Yeah.
Yeah.
Yeah.
Pol Piella Abadia (guest): about.
Leo Dion (host): So is this like you
would set up a framework, you set
up frameworks and Xcode and then you
say, make them, make them mergeable
libraries, or how does that work?
Pol Piella Abadia (guest): you
basically do it at the framework,
so there's two ways it can work.
So at the framework level, at the
library level, you tell it whether
you want automatic or manual mergeable
libraries so library merging or
whatever it's called, and it will
grab all of the dependencies, and if
you select automatic, it will try to
merge all of the dependencies into
the final binary of that library.
And then whenever you embed or import
that library into your app, you will
no longer have to embed any of the
dynamic libraries it's linking against.
It will just happen magically.
And the other mode is, I think it's
called manual, and then you choose,
you basically pick and choose
whichever libraries you want to merge
and whichever you actually don't.
So it's a bit like manually
you do it manually.
In that case, it is pretty cool.
It's one of the things
that got like missed.
It didn't get a lot of attention.
But if you've got a modular application
and you're struggling with like massive
dependency lists and embeds in your
app target, this has come to fix it.
Like it's, yeah, it's
absolutely fantastic.
And they've done some, yeah,
pretty amazing work on it.
Leo Dion (host): So with with
Bushel, I think I'm up to like
20 different like targets.
And I, I do all Swift packages.
Is there any advantage I would have with
like mergeable libraries when it comes
to everything being in a Swift package?
Pol Piella Abadia (guest): So I think
you get all of the cool things for
free if you're in a Swift package.
So in a Swift package, you
can declare whether you want
it to be dynamic or static.
You want the type to be dynamic or
static, or you can leave it blank, which
means that Xcode will do some magic for
you, and it will pick what suits best.
So you get, all of this is
free for you on Swift packages.
This is for Xcode frameworks, basically.
Which...
Leo Dion (host): it.
Got it.
So if I'm automatically creating a
project and referring to the product
in my app, then it'll automatically
use whatever it's supposed to use.
Pol Piella Abadia (guest):
Yeah, as a, as a, yeah, exactly.
Yeah.
It's fantastic.
Like, I think the only reason why
we've got Xcode frameworks is because
we've got like some limitations
where we need to import like Cocoapod
dependencies and stuff like that,
which is, yeah, it's a bit annoying.
Leo Dion (host): it.
Objective C.
Python.
God
Pol Piella Abadia (guest): that as well.
Leo Dion (host): One of the
things you have on here is, well,
let's talk about Swift packages.
There's a couple of things
we've got this year.
So macros now is essentially
a part of the Swift packet.
Like there's no way of doing
building your own macro without
going around Swift packages.
You pretty much have
to do it through that.
Correct.
Pol Piella Abadia (guest): Yeah.
Leo Dion (host): What's been
your experience with macros?
Have you built your own yet?
Pol Piella Abadia (guest): So I
tried the like demo URL one, like
the type safe URL and I tried the
Leo Dion (host): Yeah, yeah, yeah.
Pol Piella Abadia (guest):
stringify one as well.
I am still struggling a bit.
I'm not gonna lie.
They're pretty complex to
kind of like understand.
Leo Dion (host): Yeah,
Pol Piella Abadia (guest): Yeah,
I'm working on one that's now
a like little testing library.
So something I did with
like, with sorcery a while
back where you can basically
Leo Dion (host): yeah, that makes
Pol Piella Abadia (guest): Yeah,
directly just trying to do it with
macros just to learn basically and get.
Some more like level of modularity
with those macros, it's pretty
impressive what it can do.
It's yeah, it's, it's very, very cool.
And I do like anything that's
like compile time and build time.
And it kind of like gives you
that compiler safety as well.
And you can even write
like unit tests around it.
I'm a big fan of and it doesn't
require having to go use another tool
to like generate code as well, which
is, yeah, it's pretty impressive.
And obviously.
It makes sense to be familiar
with all of that, right?
Because SwiftData is using that.
And obviously the new observable
stuff, it's all going to
be using macros as well.
So, yeah, it makes a lot of sense
to get as familiar as possible.
I have to say I've been avoiding it a
bit as much as I could, because I feel
like it messes with my head quite a lot.
Like when I start looking at the
syntax trees and all that kind of
thing, I end up just writing...
A ton of strings of code just trying to
like, this is what I want to generate.
Do this for me.
But yeah, how, how
Leo Dion (host): on chat GPT.
Pol Piella Abadia (guest):
Yeah, exactly.
Exactly.
Leo Dion (host): Come on.
Pol Piella Abadia (guest):
How have you found it?
Have you made any macros
Leo Dion (host): so I I am say
I'm a consumer not a like not a
developer of macros I just I just
to once I go down that rabbit hole
I'm just never gonna get out and
the next thing I know I've had like
20 200 macros uploaded to Get hub.
And it's like, no, no,
I need to build an app.
I need to like actually use them.
So in that case, what, what, so
as a user I think I mentioned
this, just a couple of weird
things where like, it messes like
some stuff just doesn't work.
The way you think it would, I have
had some weird issues where I had
like the day before WWDC, I had like
a class or struck called preview.
And then I'm like trying to use new live
previews and it wasn't working because
it was, there was a name conflict.
And of course I didn't know that.
Like, and I'm like, these live previews
don't even work in my version of Xcode.
What's going on?
And then I realized, Oh, it's
because I had a type I put in the
day before without even knowing
they're going to set these up.
And then like there's some weird stuff
if you have still have like avail,
availability markers or availability
attributes that kind of messes with it.
So I have to figure
out a way around that.
But yeah, it works.
I'm glad we have expansion so we can
actually see what the heck is going on.
Cause without that, I think, it'd
be weird, but yeah, I'm using
observation and SwiftData everywhere.
So, I'm totally a consumer
now of macros everywhere.
Pol Piella Abadia (guest): Yeah.
We, yeah, I've, I've started using like
SwiftData in quite a lot of places now
and I think it was yesterday I had like
Twitter rant because So we, yeah, if
you've got like a big chunk of data
that you're loading from the database
and you're doing like expensive stuff
like your UI suffers quite a lot.
And the reason, yeah, the reason
for that, even though they release
like model actors and you can put
everything in like an isolated actor
that runs on a different thread.
The database access is all, has all
been synced up to the main thread.
And that's, yeah, it's, it's very,
very strange, but I think there was
an issue in before beta seven where
you were able to kind of like do
things on the background, but then.
That those changes wouldn't
synchronize to the main thread, so
the UI wouldn't refresh until you
kind of like restarted the app.
And then people like devs complained
about it, and then the solution
seemed to be to put synchronized
changes on like the main thread,
so put all the database access
on the main thread, which is.
Yeah, which is pretty annoying.
That issue is still on the, like, RC
as well, and on that thread, like,
someone replied saying that they were,
like, a few people replied saying they
were experiencing the same issues as
well, and, yeah, I feel like it's been,
it's been a bit frustrating, but I, I
actually love, like, SwiftData and how,
Easy makes everything so I'm hoping
that that gets fixed like at some
point soon before before the release
Leo Dion (host): Wasn't that like
one of the big things with managed
object context was you're supposed
to run it on the background.
So it's like weird, like
SwiftData required, I see,
okay, you're updating the view.
So you want to have the main
thread, but still I could see in
your case that being a pain in the
Pol Piella Abadia (guest): yeah So I
think you're able to run all of the
kind of like code all the way up until
up until the you know It needs to
insert into yeah into the database.
I think all of that can happen in a
in enough in another thread, but It's
just the database access and stuff
that seems to be on the main thread.
I'm not entirely sure why, but
yeah, it's something that we're like
struggling with at the moment, but
yeah, hopefully it'll get fixed.
Leo Dion (host): Do you miss
anything with core data?
Pol Piella Abadia (guest):
I don't, I don't think so.
I wasn't like, I know, like,
QReate still uses Core macOS.
Leo Dion (host): Okay.
Pol Piella Abadia (guest):
But I, I quite like it.
I'm quite happy with
the way Core Data works.
And I, at any of my jobs, we
never really used Core Data.
So my experience is not,
like, amazing with it either.
Like, I've not used it, like,
extensively other than my own apps.
And my experience has been alright,
apart from, like, some weird
crashes that you get every so
often that you need to look into.
But yeah, other than that, I'm
quite, yeah, quite happy with it.
There's nothing, and I
think there was a Swift
Leo Dion (host): yeah.
No, I like SwiftData.
I feel like now it's like I don't feel
apprehensive about using core data.
Like I didn't have anything
against it, but I was like, I
don't really want to put this in
if they're going to replace it.
So to finally have that replacement,
it's like, okay, now I can, like, I
don't care if there's bugs with it.
I'd rather work with this and
know Apple's going to maintain it.
As opposed to like core
data, which is like, yeah,
Pol Piella Abadia (guest): I think
Leo Dion (host): in
the neck to deal with.
And, and the interface is
still so object objective.
See, like, it's just like, yeah.
Pol Piella Abadia (guest): Yeah,
I think if there's something that
you're missing from core data that
you don't have in, in SwiftData, I
think someone made I read it in like,
ISDev Weekly a couple of weeks ago.
Someone made a Swift
package called SwiftDataKit.
Which kind of like bridges the gap and
gives you like some extra functionality.
Then you, it exposes some like core
data, more like, complex functionality
that's not available to Swift.
SwiftData, I've not tried it yet, but
it sounds pretty interesting as well.
If you want like some, some extra
bits or there's, there's something
that you, you, like you wish
SwiftData had that core data.
Leo Dion (host): Yeah.
Any other developer stuff you
want to talk about before we
hop in and talk about some of
the projects you're working on?
Pol Piella Abadia (guest): I think, I
think that's that's about everything.
I think other like Xcode 15, well,
that's more of a, like a Swift 5.
9 feature that I think it's great.
Is the fact that you're now going
to be able to do a network requests
from like Swift package management.
Leo Dion (host): Explain
that a little bit.
What does that mean?
Pol Piella Abadia (guest): so basically
the way plugins used to work, so they're
the equivalent to, like, build cases in
in Xcode projects, so you can run build
scripts where, or even command plugins
where you either run them as part of the
build process, or you run them manually
when, within a soft package, basically.
So SwiftPackage plugins for like the
safety of the developer and for, for
safety reasons, they run on a very
tight like sandboxing environment,
which means that you need to, you can
only write to a specific directory.
If you've got a command plugin, if you
want to write to the package director,
you for permissions, basically.
But from Swift, they also don't
allow you to do any network requests
to either like a local server or
to a remote server, basically.
And from Swift 5.
9, there's a new permission you can ask.
So you can ask the user for
permissions to make network requests.
So it's going to make like
command plugins super, super.
Useful because you'll be able to make
a network request you want and this
is an example of this is the I don't
know if you've used the swift aws
lambda runtime project so they've got a
Leo Dion (host): Yeah.
I did a client project with that.
So yeah.
Pol Piella Abadia (guest): so they've
got a command plug in to Package
your, your Swift Lambda into a
zip file which is called archive.
And that requires you to disable
the sandbox so that you can
make requests to like a Docker
daemon to build the application.
Leo Dion (host): Hmm.
Yeah.
Pol Piella Abadia (guest):
So you're no longer going to
have to disable the sandbox.
You'll, they'll just need to
add a permission from Swift 5.
9 that says.
We need your permission to make
contact with the Drer Damon and
it will be like a lot simpler and
you'll build a bit more like trust.
You won't have to ask the user to
be like, oh yeah, disabled like your
sandbox to, for us to run all this code.
You'll be able to say why you
wanna disable the sandbox and
only for that specific reason.
So I think that's a big like game
changer for tools like that that
need to make network requests either
to like a local server remote or
like to a Docker like Damon as well.
So yeah, that's another
big thing coming in.
Yeah, so it's 5.
9.
Leo Dion (host): We're talking
about us with packages.
Like what kind of stuff do you
do in your CI to make sure that
your, your packages are easily
consumable and working properly?
Pol Piella Abadia (guest): So I
think in my like CICD, what I do
is I tend to run them in like, if
I support like multiple platforms,
I tend to just run them in both.
Like I usually tend to
support like macOS and Linux.
So I just run them on like both and
I spin up like a couple of workflows.
Tend to have like automated,
like release workflows as well.
I've written like a bunch of
blogs about how you can automate
like, all this kind of stuff.
Leo Dion (host): Okay.
Pol Piella Abadia (guest): and I think
in terms of like making sure that
everything still works, like having
tests and actually running them on ci
on all the platforms you support is
the only way you can actually achieve,
like, make sure that everything works.
And I'm a very, very forgetful person
and I think the passion for like
tooling and CSV comes from that.
From like,
Leo Dion (host): Yeah.
Pol Piella Abadia (guest):
yeah, mistakes I have done.
Yeah, I've done in the past
that I want to fix basically.
Leo Dion (host): Yeah.
So I've got like, yeah,
I'm doing the same thing.
I'll run, I'll set up a matrix for
Linux Ubuntu to run, a couple of
versions of Ubuntu, a few versions
of Swift, whatever I support.
And then like, same thing, try to
do the whole gamut of macOS versions
and then you do like Xcode build
for iOS Or else I want to support.
So yeah, I'm on the same page as you.
Pol Piella Abadia (guest): Nice.
Leo Dion (host): What's this thing
about automated accessibility audits?
Pol Piella Abadia (guest): Yeah.
So that's, that's another of the
things I was like super excited
about because we so at, at the BBC,
we've got like a very big focus on
like accessibility for, for our app.
And one thing that I wanted to
do a while ago, and there's an
amazing like library that it's no
longer maintained anymore, but.
By Rob Whittaker who speaks a
lot about like accessibility and
he's yeah absolutely amazing.
He made a library to automate
accessibility checks on UI tests.
So it would just spin up a screen in
your app and you could check for like,
whether your controls had enough,
like target size that were big enough,
like, enough of a like a touch area.
And whether your images were labeled
accordingly, whether you were
missing like some accessibility
labels, all that kind of thing.
But yeah, it was still like
a third party library and you
had to kind of like import it.
That is all now part of XE UI test or XE
UI test element, whatever it's called.
So yes, as with with Xcode 15,
you're going to be able to run
accessibility audits basically.
So you can spin up your
application in a specific screen.
And you can call on XE UI
application, you can call
perform audit, I think, or check
accessibility or something like that.
And then it will just check for
whether you've got clipped text,
whether your app resizes for
like dynamic type whether there's
sufficient like color contrast for
all of your texts and elements.
It's.
Literally zero effort.
Like it's minimal effort to
set it up and it can save you
like a lot of like trouble.
You can automate it on C I C D and
if you've implemented a new feature
like a UI and you've made a mistake,
you've not, for example, not you've
made your text like a color that's not
got enough contrast, it will just flag
it up and fail your, your bill before
you release so you can go and fix it.
Leo Dion (host): okay.
Pol Piella Abadia (guest):
cool and there's no need for
like a third party library.
I guess it's all inspired by projects
that you know Open source project
that existed before I guess so yeah
Leo Dion (host): Rob, Rob
was happily Sherlocked as a
Pol Piella Abadia (guest):
yeah But yeah,
Leo Dion (host): So, yeah.
Pol Piella Abadia (guest):
Amazing project to be honest, so
Leo Dion (host): Yeah,
Rob's, Rob's amazing.
I met him, and He's, yeah, like
you said, he's really dedicated
to accessibility and stuff, so
Yeah, maybe I need to have him on,
okay, what have you been working on?
Well, first of all, let's plug your
app that I've been using if you're
watching this on YouTube, if you
look, I think I'm going to put it
on the lower end, assuming you're,
we're on the top, usually it's one
of the two you'll see a QR code
there that I always put that goes to
either the transistor Social media
page for this episode, or it'll go.
I've been lately linking them to
break digit podcast episode page.
And I always have that there on YouTube.
So people who want to subscribe
to the podcast can do that.
And if you want to subscribe to
the YouTube page, that's good too.
So.
Do that right now while
you're listening to this.
But yeah, I had been
just pulling them up.
There was a website I used
to create the QR codes.
It was fine.
There was always finagling
to get it to work properly.
And then I'm like, Oh, Pol, you did it.
You created what I've been looking for.
Cause I was like, it was on my bucket
list of apps to create, but I'm super
glad in this case, I'm super glad
somebody else has done it for me.
We have curiate, curate, curate, curate.
Pol Piella Abadia (guest): I, I
think it, yeah, however you want to
pronounce it, I feel like I don't
even know how to pronounce it myself.
So yeah.
Leo Dion (host): But it's awesome.
It's been a great tool, a great
asset for the production of the show.
So, I'll let you explain
it and why you made it.
And what are some bells and whistles
that you really love about it?
Pol Piella Abadia (guest): Yeah.
So I, the reason why I made it, so for
anyone who doesn't know the app, it's,
yeah, it's Curate, QR8, however you
want to call it, you can call it that.
Leo Dion (host): Curate.
I like curate.
Like curating.
Yeah.
No, that's
Pol Piella Abadia (guest):
So yeah, curate is a QR
code generator, basically.
So you can create any QR codes, give
it some content, choose the, it's pre
customizable at the moment, so you
can choose like the shape of your...
QR code, the color, background color,
all that, all that kind of stuff.
And you can quickly export it to like
your clipboard or put into like an
image like jpeg Or I think it's png
as well that I allow to export and
it's got no tracking no anything like
that Everything stays on on device
as well, which is something that
people people love and something I
wanted to make Because one of the
frustrating parts is that finding
a QR code service or website that
actually works well, it's pretty hard.
And sometimes you don't really
want to, and most of them
offer like tracking by default.
So it basically will give you,
they're either like paid services
or they give you like some.
Leo Dion (host): a UTM type
Pol Piella Abadia (guest):
Yeah, yeah, awesome.
Like,
Leo Dion (host): yeah,
Pol Piella Abadia (guest): yeah, some
specific, like how many people have
viewed it, all that kind of stuff,
which is, which can be useful, but
sometimes you don't actually need it.
Like, for example, I, the reason why
I made it was because I wanted to
create like QR codes for my talks,
for the talks I give conferences
and for like Twitter sometimes.
And I just wanted something
very, very simple.
And yes, I, I honestly thought
no one was going to use it.
It was just going to be me.
And I was happy about that because I
needed the app and it turns out like
it got a very like nice reception, like
people that have been using it a lot.
I, every time I go to like
conference people like I went to
ISWK a to speak and the organizers.
Yeah, the organizers were using like
use create for all the like QR codes
in the slides for the introduction
and they were like, oh, yeah, we
used your app and I was like, oh,
yeah, that's that's very nice.
And then I got a message today
as well that someone was used
my app to create QR codes for
the slides in Spain as well.
So yeah, it's pretty nice.
It fits like the use case that
I had, which is, creating QR
codes for Presentations and for
like sharing your your work.
Basically.
I think that's how I brand it
like a simple way of like just
sharing what you do So yeah
Leo Dion (host): could put
a little logo in the middle,
which is what I do if you see.
And it's like super simple.
It's just exactly what I need.
It's like all I want is something
I can import into Final Cut
and put it in my videos.
And
Pol Piella Abadia (guest):
Yeah, and there's
Leo Dion (host): there, there it is.
There it is.
Yeah.
Yeah, and it worked great.
Pol Piella Abadia (guest): there's
nothing in the middle either So like
it's all just a qr code with a url.
So and the url you provide so there's
no proxy or anything in the middle
So the qr codes are not gonna stop
working like ever so yeah, that that's
one of the things that I like because
I I went back to like a presentation
I did last year and I grabbed all the
QR codes that I had and none of them
worked because I was using like some
service that I had a free trial on.
And so they all stopped working because
they pointed to either the redirected
to the URL, which is quite annoying.
Don't want people to have to do that.
And I think I got asked when I launched,
someone asked, does it have tracking?
And I was like, Oh no, I might implement
it in the future if people want it.
And they were like, no, no,
no, please don't like we
don't, I don't want tracking.
Like I don't care about it.
I really don't want it.
Like it's fine as it is.
So yeah, that was some nice, like
feedback less work for me as well,
Leo Dion (host): what what was like
so QR codes like I assume there's a
tunnel is there any native libraries
to generate those I know there's
obviously native stuff to read them.
Pol Piella Abadia (guest): I think there
is a way you can, and Paul Hudson has
a way of like, some article on how you
can generate like QR codes natively.
I don't think it's very
customizable though.
So you can generate like a
box standard like QR code that
then you can share with people.
But I've used a library
called, I think it's called qr.
Code?
I can't remember what it's called.
I can share it, like, with you
later and you can put it in
Leo Dion (host): Yeah,
we'll put it in the
Pol Piella Abadia (guest): yeah.
But it's pretty cool,
Leo Dion (host): What was the
biggest challenge with building
this app or what was the challenge
that surprised you the most?
Pol Piella Abadia (guest):
I think the challenge was my
lack of experience with macOS.
I think that was my biggest challenge.
I use SwiftUI, like, for the
whole thing, to be honest.
Leo Dion (host): Yeah.
Pol Piella Abadia (guest): up the
core data stack was a bit off and
then getting it to sync with like
cloud kit because I'm working on
the IOS version at the moment.
So that that was the biggest
like challenge for me.
I had very little experience with
core data and I thought it was a
bit of a pain to get it all set up.
Leo Dion (host): Yeah, yeah.
Pol Piella Abadia (guest): I think
that was the biggest like thing and
my lack of experience again with with
Mac OS made it a bit hard to kind of
like, just how do I, make this like
split view and all that kind of thing.
Turns out with SwiftUI it's pretty
simple but I think once I get
to more complicated stuff And
that's what I have been dreading.
So I'm currently working on the iOS
part and also working on like templates.
So someone requested, if you wanted
to kind of like share a wifi password,
QR code, so you could generate
like a template that would just.
Have the fields already for you
rather than having to hard code like
the URL and type it out yourself.
I think, I don't know how I'm going
to model the core data stack at
the moment, but I'll figure it out.
It's going to be a bit tricky.
Maybe I'll wait until
Leo Dion (host): yeah.
Yeah, yeah,
Pol Piella Abadia (guest): a
thing and it's live and I don't
know how I'm going to do it.
I'll figure it out.
It's one of the beautiful things
about like being a developer, right?
It's just fun.
Find solutions to problems.
Leo Dion (host): Yay!
So, what else have you
been working on lately?
Pol Piella Abadia (guest): So yeah,
apart from Curate, I think about a month
ago, I started working with Hide, who
I think you you met in Turin as well.
And
Leo Dion (host): Yeah, we did an
episode about the Watch OS X, so yeah.
Pol Piella Abadia (guest): So yeah,
I've been, yeah, I've joined him
in an app called NowPlaying, so
we're now both working on it and
yeah, just working with him on the
iOS 17 update as well and we're,
Leo Dion (host): What's now playing?
Pol Piella Abadia (guest): NowPlaying
is an app it's a music app basically
that allows you to discover data
and trivia about songs and you
can, like, save songs as well into
your, like, collection and you can
basically, like, create your own
little collection of music as well.
You can see for a song if you're playing
on Apple Music and you jump over to...
To now playing as well.
It will show what you're currently
playing so you can tap on it.
And it makes sense because
it's called now playing, right?
So it shows you what it's playing now.
And then you can jump on it and you
can see how many awards it's got.
We collect data from like a
bunch of different APIs as well.
And we show lyrics, we show like
certain notes and trivia and
facts about the song itself.
Who wrote it, like other
than just like the...
The artists themselves, where it was
recorded, all that kind of things.
So it's...
Like your companion kind of
to Apple music at the moment.
So yeah, we're just
working together on it,
Leo Dion (host): Does it plug
into Apple Music or the Apple
Music API or any of that
Pol Piella Abadia (guest): yeah,
so it does, it does work with
the music kit basically alongside
other other APIs as well.
But the main source is music kit for,
Leo Dion (host): If you're
listening to something in Apple
Music, does it give you the, the
trivia or you have to pull up the
Pol Piella Abadia (guest): so you need
to go to the app to give you the trivia.
So yeah, it,
Leo Dion (host): and you listen you can
listen to music through the app itself
Pol Piella Abadia (guest): You can't
at the moment, you can listen to small.
Previews and snippets, but it all I
can say is it might in the future.
We'll see.
Yeah, we'll see It's one of the things
Leo Dion (host): Maybe maybe
some Shazam kit where I can see
in the future or do you already
Pol Piella Abadia (guest): we've got
that so we've got some kits so you
can basically listen So it's it was
built as well as like the watch app
was built as like a party companion
as well so you could just like have it
listening to songs and it would just
like give you, facts about them as
well as you were in a party and stuff.
So yeah, that's, that's very exciting.
I think yeah, so he had the app before
he released it, like on his own.
And then we, yeah, we met in
Amsterdam last year and we got
on like very well together.
We both like have a
passion for music as well.
We both like collect records.
And then he moved to Manchester
where I lived as well from Amsterdam.
So it was like the, a lot of things
fell, like fell into place as well.
And then after a while we were
discussing and he was like, Oh, I
would love to just continue building
this, like, but with you in this case.
So we kind of like, just decided to
both like take ownership of the app
and work on it together and just take
it forward and kind of like take it
to, to the next like step, and that's.
Yeah, that's
Leo Dion (host): lot of, a lot
of devs love buying records.
Like Adam had his
Pol Piella Abadia (guest):
oh yeah, yeah, the albums.
Yeah.
Leo Dion (host): Like, that's
like, yeah, that must be a thing.
Which I appreciate but
yeah, that's, that's great.
Pol Piella Abadia (guest):
feels, feels a bit weird, right?
That we, as like tech people
and like developers, we go back
to analog stuff quite a lot.
Yeah.
It does feel a bit weird,
but yeah, I don't know.
Leo Dion (host): Just to plug our
next episode Casey list is going to
come on and talk about call sheet,
a very similar app to now playing.
So, just basically like
a movie counterparts of
beyond the look for that.
Yeah, yeah, yeah.
So yeah, that seems like
a thing people want.
It's like, what do they call it?
We talked, I think I talked to
Hiday about this, like the, I
think we did talk about this app.
So it was like the x ray on
Amazon, like that kind of thing.
Yeah, yeah, yeah.
So, and I, that sounds like kind
of what Casey's doing as well.
So, cool.
Yeah, yeah, I love that stuff.
So, nice.
So before we close out, I do want
to geek out about one more topic.
You want to build a ready to use
UI components for CLIs and Swift.
This is something that
I've geeked out about.
There was a really forgot the name,
but I'll post the link to the repo.
I mentioned it to you, but there's
like a ton of projects out there where
people have been trying to do this.
I've been trying to do this.
How's that doing going?
And you want to explain what
you're trying to do exactly.
Pol Piella Abadia (guest): Yeah.
So my work has been like, so I'm very,
when I started like developing command
line applications before I went to just
making everything with like Swift, I did
a lot of like JavaScript for like CLIs.
And I was very, very jealous
when I moved over to Swift about
how many libraries there were
to do like pretty, like, like
stunning UI on like the terminal.
You could even have like
react components as well.
Like some form of like react components,
like a very obviously like narrowed down
version of reacting in the terminal.
That's what kind of like inspired
me to, yeah, to like migrate.
And the reason why I did it was because
I wanted to use a library called Clack
which is a JavaScript library that
allows you to do a like step by step
form of you can, I can send you the link
and you can put it on the show notes
as well, but it's like a step by step
form with like async, like spinners
and loaders and like, text fields and.
Like placeholders, like it's got
selects, like multi select speakers.
It's pretty amazing, like all it can do.
And, and I want just to build
like a Swift port that I can use.
Cause I really, really like the library.
It's made by one of the creators
of Astro, the web framework who's
called Nate Moore, I think, so yeah,
it's it's got like a lot of backing.
I think astro used it.
I don't know if they still use it
Cloudflare the cli also uses clack
under the hood, I believe so yeah,
there's a bunch of like people using it.
But I have recently so i'm giving a
talk next month in leets about like
cli applications and i'm going to be
talking a lot about How to make like
a beautiful, like UI on the terminal.
So I'm going to be talking about like
all of these geeky things you can do.
And I've come across like
a ton of like libraries.
I hadn't come across the one you
showed me and I'm going to be trying it
Leo Dion (host): Rens Brewer
who posted it on on the Swift
UI or the Swift subreddit.
A while ago, and I'm like, I've been
looking for something like this.
Cause there's like a
lot of tools out there.
I used to be subscribing to
forgot the subreddit where it
was like basically a showcase of
like different terminal tools.
And I'm just like, I wish, so we have
argument parser, which is awesome
and fantastic, but I wish there
were something like to build these
really cool terminal applications.
And I'm just like waiting
for the use case to use this.
And like, I think.
I think I'm thinking like maybe one
use case is like when you're running
a vapor server, it'd be nice to have
an interface, like a dashboard to
show you what's going on on vapor.
That's one thing I've had
in the back of my head.
I have a few ideas, but
like, yeah, it's just like.
The, the ability to see progress,
the ability to like do colors.
And it's all like, like
I started playing around
like ASCII codes and stuff.
So I've definitely gone down that rabbit
Pol Piella Abadia (guest): Yeah.
Leo Dion (host): like, you're like,
okay, so that stuff is actually easy.
It's when I start doing like,
okay, how do I use, like, how
does, how the heck does Swift UI?
do view builders and how do they
do states and how do they do
like all this stuff that's just
like like what is going on here?
And how do they build these views?
Cause I want to do something like that.
Like I know how to do it with
characters, but I don't know how to do,
make it as friendly as with two eyes.
You know what I mean?
Pol Piella Abadia (guest):
I know what you mean.
I.
Leo Dion (host): So yeah,
that's where I got stuck.
Pol Piella Abadia (guest):
It's yeah, that, that project
looks super, super promising.
Like I'll be trying it out
is what I'm doing for the,
for my Tolkien Swift leads.
I'm doing a command line
tool that uses music kit to
like fetch song information.
So similar to now playing basically
where we, yeah, I get a ton of like,
songs information from like a text
field where the user can type in,
and then I'm going to do a list where
the user can like scroll and pick.
From that list, and then it's going
to launch an application and it's
going to like play the song basically.
So it's like a heavy, like
involved, like, Swift CLI.
And,
Leo Dion (host): what are they, so he
works, Renz works at SoundCloud and
he has an example of using SoundCloud.
Pol Piella Abadia (guest): oh, nice.
Leo Dion (host): So,
Pol Piella Abadia (guest):
That is pretty cool.
Leo Dion (host): gotta, you gotta,
you gotta, you gotta starter
Pol Piella Abadia (guest): Nice.
I'll have a look.
Yeah, I'll have a look.
Amazing.
But yeah, there's, there's
some like projects out there.
I don't know if you've come
across and see terminal.
There's like a, it's a swift
package that you can, it simplifies
all of the changing colors and
making things like bold and stuff.
And you can also read like
the cursor position as well.
And you can like jump around,
you can move the cursor.
It's.
Pretty entertaining.
It's pretty cool, but your code
gets very messy very quickly
and it's very easy to kind
Leo Dion (host): does.
It does.
Yeah.
Yeah.
Yeah.
So, yeah, that's awesome.
So yeah, we've, we've got
to keep trading notes on
Pol Piella Abadia (guest):
yeah, absolutely.
Yeah.
I was going to say, give me, give
me updated with how you get on and
stuff like that, because I'd be
super interested to hear what you do
Leo Dion (host): And if you're
somebody who's also interested
listener, let us know in the notes.
We'd,
Pol Piella Abadia (guest): Absolutely.
Yeah.
Leo Dion (host): So anything
else before we close out?
Pol Piella Abadia (guest):
I don't think so.
Yeah, no.
Well, obviously thanks for having me.
Like I, yeah, I've been, as I
said before, I've been a fan of
the podcast and I got, yeah, I
met you in, in Turin as well.
And we, yeah, we spoke for a bit and
yeah, it's a pleasure to be here.
Really, really enjoyed it.
Leo Dion (host): Where
can people find you, Pol?
Okay.
Pol Piella Abadia (guest):
pretty much everywhere now.
I'm completely overwhelmed
with social media.
So you can find me on run
a newsletter called the...
Well, actually, there's one link
where you can find everything.
So you can either go to bento.
me slash poll, or you can go to a
little service that I have called poll.
link.
If you go to that, it will
show you all of my links.
So you can find me everywhere
there and whatever suits you,
whatever social media you're
on, you can like find me there.
I'll probably be, I'm not on blue
sky or threads in the other ones.
I think I am.
I think I have enough social
media now can't cope with anymore.
Leo Dion (host): So if you want
to find Pol's MySpace or AOL
instant messenger name, go there.
Thank you, Pol.
Really appreciate it.
Pol Piella Abadia (guest): Yeah.
Same.
Thank you so much for having me.
Leo Dion (host): People can find
me on, I'm still not used to saying
this X at Leo G Dion mass and I'll
at Leo G Dion dot C at C dot I am.
My company is bright digit.
You can find all my links there as well.
Thank you so much for joining
us for this episode and I look
forward to talking to you again.
Bye everyone.