Read the transcript
Jeroen Leenarts: Hi, my name is
Jeroen Leenarts. Hill. Welcome
to the 36th episode of my
podcast. I've been developing
software for over 18 years iOS
app for over nine years, and I'm
running the Dutch cocoa ads for
over seven years. If you are an
iOS app developer, you should
listen to my podcast because it
will keep you updated on
interesting articles and fancy
might not have heard about in
this episode, I'm going to talk
about new formats in iOS 15. Why
do we need another format, how
swift runs an async executable,
requiring minimal code coverage
and swift packages with GitHub
actions, structured concurrency
in Swift using async, let's
batch delete, and delete
everything in core data.
Currently, I'm working hard on
preparing something special. I'm
going to release this in about
two weeks from now. And the idea
here is that it is something
that I want to do just because I
want to take some time for
myself and be able to provide
you with some interesting
content. So while I'm not here,
and just to let you know a
little bit on what I'm thinking
about doing, I'm considering
telling you more about my
recording process, or maybe tell
you a bit more about content
creators online that I really
like and I think you should have
a look at. So stay tuned. And I
look forward to what you think
of what I'm going to release in
the coming weeks. Another big
thing that I did myself this
week was released an update of
my lead developer book, you can
find the link in the show notes.
And this is the first meaningful
edition that I wrote to my to my
book, I think I added about 10%
in content. And I do have some
more ideas for the next update,
which I am actually working on.
But it's slow going because I
just want to make sure that if
everything writes, and they have
good content to publish, just to
keep things going because I'm on
a tight schedule this evening.
The first article of this week
is new formats in iOS 15. Why do
we need another format, so
details a new format API that
has become available in iOS 15.
Apple now provides new formats
across the board for numbers for
dates for times, and much more.
In this article, he digs into
this new API to tell you what
the old API is how the new API
works, how they compare, and why
you should be looking into this
new formatter API biggest
takeaway from this article is
that the new formats API doesn't
replace the old one, you still
need to use the old formats to
do some conversions. So it seems
that the new formats API is
mostly something that reduces
complexity, and allows you to
easier get a string on screen.
So the best part is that it's a
simple interface. And you can
still fall in that you can still
format it like you used to. But
it's a lot better since there is
actually a compile time checking
involved. It looks like this is
one of those API's that we
didn't know that we needed once
it was released. All the Beckman
has an article on how swift runs
async executables. He provides
you with a small example of a
main based function that does a
little bit of sleeping
asynchronously, and he digs into
how this async executable is
actually executed on a system.
The most interesting part is
that you discovered that
something called a detached task
is created as the execution
context. For the main method.
It's this hidden task that
becomes the parent task of all
other structured child tasks in
your gut. Thomas father has an
interesting article on requiring
minimal code coverage in Swift
packages with GitHub actions,
Thomas has written about GitHub
actions before he's going to
revisit a problem they solved in
a previous article, but this
time, he is only going to be
using tools from Xcode itself
being Xcode built an XC cuff.
The downside of a previous
approach that he took with
Fastlane is that it requires you
to generate an Xcode project,
which is a deprecated feature in
Xcode 12.5. And also, it used x
cough for 14 code coverage,
which does not seem to be
maintained anymore. Therefore,
he is going to try to create a
Swift package, compile it with
GitHub actions and generate an
axial result bundle with code
coverage information. Based on
this actual result bundle, you
can actually extract line
coverage and force a minimum
code coverage level that you
want to achieve on your unit
tests. And of course, this is
all scriptable and executable on
GitHub action runtime, and in
this article, Tomas details and
explains how you can actually do
this yourself. So if you're
still looking into some
improvements to your continuous
integration pipeline, and using
something similar to get up
action, definitely have a look
at this because I think the
ideas that Tomas explains, are
transferable to pretty much any
CI environment that you can use
for building your Xcode based
applications.
So next article is by Andy
Urbanus. It's called structured
concurrency in Swift using
async. Let it's part of an
series of articles by Andy, and
you should definitely have a
look at this article series by
Andy. And you should definitely
have a look at this article
series by Andy because you need
to have read the previous
articles in this series to
actually To be able to
understand this article in his
previous articles, he has
discussed how callback based
code can be messy to manage when
you're using concurrent context.
For that reason, Apple has
released async await, which is
set of keywords. And that can
help you write concurrent code
while keeping a linear flow in
your code. This means that the
code can be read from top to
bottom, of course, things are
happening asynchronously. And
the idea that nd is putting
forward in his article is
actually a concept called
structured concurrency. And the
idea behind structured
concurrency is actually based on
same idea as structured
programming. You're right
structured code for the vast
majority of the time, so you
don't really think about it. And
structured code can be read from
top to bottom following a linear
flow in a way that outputs are
predictable and code executes in
the exact given order. When
using variables they, for
example, have a well defined
lifetime within blocks that they
are declared in. Unlike callback
based concurrency, in which you
file your task in different
threads or contexts as the main
thread keeps executing, which
has the potential to alter the
output of your program every
time it's run. If you're writing
Objective C, you need to treat
your variables as underscore
underscore blocks in order to
modify them within a block. This
creates a bit of a labyrinth of
code where everything can happen
in any order, in order to get
the result that you want. This
all sounds very messy. And with
concepts of structured
concurrency, you can actually
untangle a lot of this
complexity. And make sure that
you can actually read through
your code in a linear fashion
again, even though that things
are happening asynchronously. So
it's a more in depth article on
asynchronous programming with
new API's made available by
Apple. But it's definitely
something that will help you
deepen your understanding of the
async await language structure
that is now available in Swift.
Robert Pietta, is writing a nice
article on using Core Data.
Basically, he has dealt with the
problem that you have a Core
Data Store and that you pretty
much want to delete everything.
He explains six different ways
of deleting multiple entities in
core data with Swift, ranging
from deleting a few objects,
deleting objects with
relationships with a cascade
delete rule, deleting
relationship objects, and
deleting objects with a
predicate, batch deleting and
deleting everything, especially
delete everything option is is
interesting, because this is
actually the destruction of your
entire persistent store and then
recreating the persistent store
from scratch. In a lot of cases,
this is actually a very helpful
way of dealing with Core Data.
If you have a lot of complexity
in your model, and you want to
just do a full reset, this is
the best way to do it. And those
are this week's articles. Of
course, Donnie has done his
Monday morning tweets as well.
In response to done is Monday
morning tweets, Stewart
indicates that he's working on
three videos to update the login
to Firebase series on his
YouTube channel. And it seems
Tommy is very eager to find out
what Stuart has to tell on this
specific topic. Tommy is
actually starting his new iOS
developer job tomorrow. So he is
super nervous, scared, and
mostly excited. And Tommy, I
think you'll do great, just keep
calm and carry on dude, Phillip
is actually working on his
switch buddy app to actually
make an iPad version of it. And
he has also planned some work on
this new project called impress
kids dotnet. Patrick is working
on the foundations of his new
school app. It was surprisingly
easy in Swift UI, he only
started working on it three or
four days ago, Christiane keeps
working on his ether radio app.
So it has version 1.2 dot O for
iOS in review. And versions for
Mac OS and TV OS are pending
developer release. So he's
planning on releasing everything
at the same time this week.
Parallel is in between releases
at the moment so he can take it
a little bit slower this week.
But he's still planning on
pushing a new version to test
flights to do some close to
gameplay testing. And Tadas is
traveling with his with his dog,
and he's sitting somewhere
waiting for his car to charge.
And he's reading pocket swift
articles in hopes to get back
into Swift UI views after the
baby he needed like two weeks to
get back in the hang of things.
So he hopes to get that up and
running again posting views also
working on the game. So he
despite everything he's really
busy,
and atom has released his block
item, make sure to get it listed
on iOS def weekly because then
it also will appear in my feed
mode. It is creating an article
on deploying static websites
created with publish and swift
on GitLab CI CD. It's being
published on Wednesday. And it
took him especially some time to
get around some GitLab
specifics. But in the end, it
works nicely and it's all very
convenient. Rafael's waiting on
this XDR display. So he's, he's
pretty happy about that. And
Robin's weekend It has been all
about focus dates. He doesn't
know why it is working in V
stack and not inform or list.
Tony thinks it might be a book
editor, Chris is continuing to
power on with 100 days of threat
to AI, learning about Core Data
basics at the moment. And Hassan
is working on coach snapshots.
And Chris is wishing everybody a
Happy Monday and he's planning
to finish the import from CSV
this week. Similan is putting
the final touches on his iOS
MVVM series. He's planning on
dropping it on Wednesday. And he
sigmaz Oman is planning on
shipping his very first app on
the App Store. So good luck to
you and best wishes, which a
product and SF scary is learning
to build a back end in Swift. So
a lot of people are building new
things and actually releasing
products. And it's just so great
to see that everybody is keeping
busy and is very happy and
excited on all the new stuff
that is coming our way and all
the great stuff that you can
actually already create with iOS
14. Meanwhile, my work continues
on my backlog of interviews, and
now have three interviews
backlog at the moment that are
completely ready for release and
ready to go this evening. I'm
actually also doing another
recording session with somebody.
And I still have two recordings
that I need to process and edit
and get approval on from the
participants. So once that's
done, I got enough interviews
for the next six weeks. And I
already have my first interview
scheduled in August as well. So
keeping busy and I look forward
to talking to you again on
Thursday. That's where my next
interview drops with anunciar
Cova. And also make sure to sign
up for my newsletter at Forest
one.net/news Because then you
will get all the links from this
episode in your email as well in
an easy and convenient format.
Sign up from a newsletter on Air
Force One dotnet slash news
Wednesday, I will send you a
message with all the links from
this week's episode so that you
have a friendly reminder to have
a look at these articles. And
with that, talk to you again
soon. And if they have any
feedback, please send me a
message on Twitter. I really
like hearing what you think of
my podcast. And if you have any
suggestions do let me know
because I'm always looking for
new ideas and things I can do to
improve my workflow, my content
and everything in general. And
with that, thanks for time and
talk to you soon.