Swift Package Indexing

Interview with Orta Therox
Packages

Creators and Guests

Host
Dave Verwer
Independent iOS developer, technical writer, author of @iOSDevWeekly, and creator of @SwiftPackages. He/him.
Host
Sven A. Schmidt
Physicist & techie. CERN alumnus. Co-creator @SwiftPackages. Hummingbird app: https://t.co/2S9Y4ln53I

What is Swift Package Indexing?

Join Dave and Sven, the creators of the Swift Package Index open-source project, as they talk about progress on the project and discuss a new set of community package recommendations every episode.

So it's been a little while since we've actually done an episode, right Sven?

It's been a little bit of a...

It's been a minute.

A little bit of a break in the system.

I've been away on holiday, just got back, and we've been fairly busy with other things.

So we're on a...

This is the end of a little bit of a hiatus on the podcast.

Yeah.

So, and as you maybe have heard then, we have a new voice on the podcast this episode.

We have a guest on this week's episode, Orta Thurrox, who I'm sure needs no introduction,

but just in case, would you like to introduce yourself, Orta?

Yeah, I guess I was sort of there at the beginning of the iOS community, I guess, and sort of

built out a lot of the foundational ideas and sort of hung out with a lot of people

trying to do odd things and share code of each other.

So people might know me from CocoaPods or from Danger, at least in this space.

I guess we were some of the first people to experiment trying to build production apps

with Swift.

So like Swift version one and two.

And we did some pretty intense write-ups on how to do that.

And I helped make it possible for getting Swift to run in CocoaPods at all, which was

quite a lot of work.

I mean, I think it really was a...

It was a time when lots of problems needed solving, right?

It was like a period where lots of...

When Apple were not providing many solutions for community style problems.

And so it usually required someone to step up and to do the work themselves because they

were still like a very...

They were still trying to figure out the iOS SDK, I think, in my head.

Whereas we were like, "I just want to share grabbing an image and putting it onto a flat

surface somewhere."

Right.

Yeah.

Well, it was...

I mean, CocoaPods, especially, but also Danger, have both been incredibly influential tools

in iOS development and macOS development over the years.

And we are going to talk about those more, but I'd also be interested in a quick update

on what you're up to these days.

I know I'm going to preempt you slightly.

I know what it is because I'm a big fan.

I play Puzmo regularly, especially I like the crossword, which is the first crossword

that I've ever stuck with.

I've tried many crossword providers over the years and never really stuck with one.

And Puzmo has grabbed me, which is great.

I guess a TL;DR of my career is that I ran a mobile team doing iOS native, and we concluded

that the set of abstractions that were provided by Apple were not probably optimal for the

type of clients we were making.

So we switched to React Native, and that just led me down into this JavaScript massive ecosystem,

semi hellhole.

And just before you carry on, just give people a quick rundown of what Puzmo is.

Sure.

Oh yeah.

Puzmo itself.

Yeah, I was going to get to that.

Sorry.

Yeah.

But Puzmo itself is like a daily games platform.

For a lot of people, that would just be, you'll have seen something like the New York Times

games with crosswords and Wordle and things like that.

We do that same type of thing.

We're probably the biggest competitor to them at this point.

And we have like a native app and lots of cool, interesting games that we build ourselves.

That's great.

Are you aware of Puzmo, Sven?

I am.

I followed it.

I saw it come out, but I'm not really a puzzle gamer.

This episode is fantastic because I don't have imposter syndrome.

I'm straight up imposter because the last time I've actually used CocoaPods in earnest

is more than 10 years ago.

And even then it was tangential.

I didn't set it up.

I just kind of used it as part of the team.

So I'm out of my depth today, but I'm going to have fun listening in mostly, I guess.

That sounds really cool because it gives you a good insight that I think more and more

people will have, which is that this is a tool that existed that has been around, but

you don't necessarily need it.

And so they don't actually know why it's a big deal that it's being deprecated and all

these sort of things.

Yeah.

Well, I guess it's also testament to the tool in that I, at the time, I didn't have to set

it up.

I knew the basic commands I needed to run to update things.

And then it wasn't really in the way.

It was just there and did its job.

That's actually the best thing you can say about the tool, right?

Yeah.

I mean, it is.

At one point it was absolutely ubiquitous.

But you're right that over the years since Swift Package Manager became a viable tool

for building iOS and Mac apps, it has certainly become less ubiquitous.

But it is a big deal that we're going to talk about today with it going into kind of maintenance

mode because these tools live forever.

Because unless there is a really good reason to switch, the things that are working tend

to stay working and tend to just persist by default, don't they?

It's like a build is fine.

You know, if it continues to work, it's just a dependency.

And for some people, they might even put their dependencies in their repo.

And so you might not even ever use CocoaPods to actually do the updates anyway.

That reminds me of a big, well not controversy, but a big talking point when CocoaPods was

at its height was, do you commit your dependency sources or not?

And at the time I was very much on the side of you should commit every source file that

you need to build your application because there's no guarantee that it will be there

in the future if you need to rebuild.

But actually with Swift Package Manager, making that probably a little bit more difficult

than it was with CocoaPods.

I certainly don't do that anymore and I don't think many people do, but that problem still

exists.

Like you may have a project that you can never build again because that dependency source

may have gone away.

Yeah, especially if it's distributed like CocoaPods and SPMR.

There's no VC backed company or megacorp holding all your source code in a single place because

it allows for many.

Unless you count GitHub as that VC backed megacorp.

Does SPM only support Git repos now?

Swift Package Manager, well no, Swift Package Manager has full support for the registry

specification that was defined and that works.

And you can, there are multiple registries out there.

You can do your own private registries if you want with various companies.

JFrog, I think has one and I think Amazon has one as well.

And there's also a mirror of all the packages in the Swift Package Index that's run by the

Tuist folks who they run a registry that vends any package that's in the Swift Package Index.

Well, also you don't even need a registry, just a different Git URL would work.

So you're not tied to the GitHub Git based URLs.

It could be GitLab or anything else.

So in that sense, it's, you know, even without a registry, it is fully distributed.

But we've kind of skirted around the main issue and I did mention it, but let's get

to the meat of what we're about to talk about here, which is that CocoaPods, the CocoaPods

team and Orta specifically have been posting for the last year and a bit on the CocoaPods

blog about the fact that CocoaPods is going to enter maintenance mode shortly.

So do you want to give us a quick rundown of what that means and what people need to

be thinking about if they're still using it?

Yeah.

So I guess one way to think about it is, you know, CocoaPods, I think this was the first

year where we didn't release an update to CocoaPods when there was an update to Xcode.

Right.

I don't think anything broke, which is actually kind of a really good news for the idea of

sort of moving it towards a much more like it through maintenance mode version of the

project.

But generally speaking, you know, CocoaPods is a dependency manager and those dependencies,

they are distributed in a similar way that you have the Swift package index.

We have something called the CocoaPods trunk and the CocoaPods trunk is sort of like an

authentication process that gives us the ability to say, hey, this person owns this exact name.

Because CocoaPods was like before the era of let's just rely entirely on GitHub for

all our dependency managers.

I think it still has support for subversion and things like that inside it.

Really, right?

Yeah.

And it's got like, we made it so that there was a single namespace basically.

So you know, there would be the pod a la stack view, so auto stack view.

And that wouldn't be like, you have to go find this repo with that one.

It would be straight up like you have to go to a central index.

It will tell you when you from that index where you can go and find the Git repo.

And so that central piece of technology is sort of both the biggest, the bit that makes

a lot of the system easy to use, but at the same time, it's the bit of the system that

has the highest attack surface for people that want to sort of do security research

and do like black hat hacking.

Because there's a huge amount of work going on in that space at the moment to try and

find out what are the holes in the sort of dependency tree for people.

Because if you can get some code, sneakily shipped into an iOS app that's used by millions

of people, you could get that there's a lot of value in that in terms of like selling

that exploit to people.

Yes.

And this has happened in many ways over the years.

Not not has it ever happened through CocoaPods?

I know it's happened through compromised versions of Xcode.

Yeah, compromised versions of Xcode is what killed Xcode plugins back in the day.

Yeah, I would say no one has ever done it through CocoaPods, especially not at scale,

right?

You can't build up a CocoaPod pretending to be another one.

So like Alamo Fire is pretty famous.

And so you could make Alamo Fire where the I is an L and you can persuade people that

like that is the real one.

But that's not like a scale attack.

But the most we've ever had has been like security researchers after finding an effective

bug going in and making like post install scripts on existing pods to be like, so they

can count how many people are vulnerable to the exploit they just found, which is which

was very worrying the two times that this happened and is now impossible to happen.

But right, those are the only things that have really ever happened with CocoaPods at

scale.

And so would you say that that is was the primary driver to making the transition into

maintenance mode that as the project became less, I'm putting words in your mouth here,

as the project became less used, and therefore less maintained and less updated, that there

were less eyes on it?

And is that what drove the decision?

Yeah, in part, like I'm a bit tired of dealing with the security researchers.

I got one yesterday, for example, there was like a real I'd say it's a real it's a real

possible vulnerability.

And there's lots of people that are very financially incentivized to find these holes.

Yes.

And so, you know, we have to come out, I have to go through the full security like process.

And that usually takes a day or two of my of my time.

And then we do a fix as well.

And then if it's something that I would consider like, very bad, then I would do a write up

and do all the work.

And we had a few of those in the last two years.

And they just have not feeling great about all of it.

And then one of the other engineers that contributes a lot was like, maybe an answer is not to

shut down, but to go read only.

Right.

Which I thought was like a really elegant solution to the problem of like, we don't

want to necessarily even have the access to be able to say, hey, you are his, you have

access to upload the Facebook SDK, which I'm sure is used massively.

And so if we can get to a point where they are self hosting, because they have their

own incentives to go to Swift Package Manager over the time, then that's probably the right

pattern for us.

And it's a very thankless task to be the person who has to deal with those security problems

and maintenance issues.

And I know that I have been incredibly grateful over the years for all of the work that the

entire team has put in.

And actually, we got a couple of thank yous off, we posted yesterday on social media for

questions and stuff.

And several people said, thank you for all of your work, not just yours, but the whole

team's work over the years.

But actually, I think it is fair to call you out specifically, because you have taken that

responsibility for those security issues going forward.

And I think everybody who's been involved, you know, this project has been a wonderful,

positive influence on the iOS and macOS development community over the years.

And I certainly would love to say, you know, thank you publicly to all of you for that

work.

You know, it's amazing.

Thank you.

It's interesting, because you come from an iOS/macOS background.

And so, and obviously are deeply involved in the Swift Package Manager community.

But like, Cocoapods is getting more downloads now than it ever has by far.

It's like significantly bigger than it previously was.

That was going to be a question I was going to ask later.

But that is fascinating.

Can you quantify that at all?

Yeah, I mean, I did once.

I use a website called Ruby Toolbox to generally get a general sense of where everything is

going in terms of dependency-wise.

So there we go.

It's loading up.

But yeah, and it's still getting, you know, back when we all thought that Cocoapods was

effectively dead, which I guess would have been maybe 2020, it sort of doubled in traffic

since then, for example.

And I put that towards a very simple one, which is that like Flutter and React Native

are very, very big ecosystems.

Yeah.

Well, that's interesting.

You mentioned React Native, because one of the questions we had on social media was from

John Stube.

And his question was, what's the impact on React Native with this news?

Will React Native going to finally switch over to SPM?

And I know you probably can't answer that question, but do you have any opinion on that?

Yeah, I can read the pull requests.

They know to DM me because I helped build the Cocoapods integration that is in React

Native today.

Right, right.

So generally, yes, people are working on it.

And we gave a two year, like, here's our deprecation route.

But at heart, the interesting thing about something like React Native and Flutter are

that you don't necessarily use Cocoapods as your main dependency manager.

You would use like, I don't know what they use in Flutter, but, you know, NPM is the

big one in the React Native world.

And so people aren't actually using the Cocoapods trunk to get these dependencies.

These dependencies are coming in through their node modules.

So like an NPM dependency they've got that includes the Cocoapods pod spec.

And so it's sort of like they're actually vending their own dependencies in a different

dependency manager.

And it may well be that like, when we turn it to be read-only, that it actually doesn't

affect them at all because they're not using Cocoapods to vend their dependencies.

Do you get what I mean?

Let's elaborate on that a little bit.

I am a React Native project user and I have a dependency that's called React Native Navigation,

right?

It's like something that wraps a UI navigation controller and gives you like some infrastructure

for doing that in JavaScript.

Okay.

If I include that dependency in my NPM project, right, which is a separate dependency manager,

it's going to put a file in a folder that's called React Native Navigation.

And the Cocoapods integration for React Native will look inside the NPM folder first.

So you will not go into like a pod file.

In fact, I don't know if by default it even ships with a pod file.

It's sort of one that auto-generate is generated for you.

Interesting.

And so you're not actually asking for the original things from the Cocoapods registry.

You're just using the ones that have come in from your existing dependencies.

That's really interesting.

So eventually the impact on React Native may not be what people are expecting.

I would expect so.

I'm sure there's edge cases because there always will be.

Of course, there's always edge cases.

Yeah.

Yep.

What does Cocoapods actually do in that case for React Native?

Is it sort of just to bootstrap and very rarely update it in case something at the top level

changes or what's the point of all this then?

Well, React Native, the team aren't that interested in building out all of the Xcode level integration

stuff.

So they want to be operating in JavaScript ecosystem and the same with the Flutter.

So when you want a new library, then because it's all Ruby and very dynamic, then it can

just look up the folder file system to see if there's any pod specs and then say, "Hey,

that's one that should be defined in the pod file."

Right.

So it's really a scaffolding tool rather than a dependency manager and that they just

sort of piggybacking onto the setup procedure and the discovery paths within the project

rather than managing actual dependencies.

Is that about right?

To some extent.

I think that's close enough to be accurate, but it's also that sometimes those dependencies

have dependencies, you know?

And now suddenly you're having CocoaPods do the native dependencies and in the way that

they might have Gradle do the native dependencies for Android too.

Right.

It's complicated, but these projects are really complicated at heart because they're trying

to do something strange.

Yeah.

Well, I think that's a good chance to talk about another kind of huge question with this

is are there cases that you're aware of where people, and I'm guessing this is going to

be large companies, are unable to move away from CocoaPods?

I'm sure you've heard stories over the years.

Are those stories still coming in or are you expecting a kind of a quiet transition?

So far on every blog post I have wrote, if you have problems with these timelines and

things like that, then you're welcome to contact us.

And I've not had a single contact.

So I'm assuming right now everybody, I mean, two years is such a long time.

You read a blog post and you're like, "Oh, we've got forever."

Sure.

We're at one year now.

And then suddenly it's tomorrow, right?

Yeah.

So there's a chance that next year, sometime around November, like our plan is that sometime

in November next year, trying to avoid that American holiday, Thanksgiving, we're going

to do like a short term brownout, so make it for a week.

You'll probably get a few emails that week.

And then that gives you a month afterwards of finding out that you can't upload to CocoaPods

that maybe you're going to have to make sure that that's okay in the next month.

Yeah, I mean, I think one of the things that I've really admired about the process of this

is how much notice you've given people that this is happening and how open you are to

hearing about the problems that may be caused.

And I'm happy to hear that you have not been swamped with emails and requests so far.

And I think, I mean, it's been a long time.

I know there are always edge cases, but it's been a long time, right?

Yeah.

So when I wrote that blog post about like us starting to do the support and maintenance

plans, so that's like 2024, SPM had been around for nine years.

Although not usable in iOS projects for nine years.

Absolutely.

I think in my head, it took three or four years to start being maybe more, just not

being super useful.

But, you know, for CocoaPods, from CocoaPods' perspective, the day that came out was like

the end of the value of working on CocoaPods, generally speaking.

Sure.

And I think actually that was quite a harmful thing to the community that happened, that

SPM came out and that definitely made a line in the sand of like, okay, Apple are doing

dependency management.

This is Swift dependency management.

This is going to be the standard and blah, blah, blah.

And then it wasn't actually usable in iOS and macOS projects for years afterwards.

And I think that I won't try to speak for the Swift team, but I would imagine they have

some regrets around how that happened.

Yeah.

It's one of those tricky problems, right?

Because they had to release a build for Linux as Swift, otherwise they were just like releasing

another Apple language and the rest of the world was not going to take much attention.

And so they needed something.

Yes.

But like framing it as the package manager may indeed have really shot them in the foot

for a little bit.

A little bit being it was quite a while.

Yeah.

Yeah.

I mean, these decisions are never simple.

There's always more to it than is on the surface.

But yes, it was a slightly messy time for how is dependency management going to look

on for Swift around that time.

And I can see that as somebody who, well, the whole team has probably felt the same

way, is, well, why are we putting all of our time and effort into this project when it's

going to be deprecated at some point?

I used to frame my work on CocoaPods as being like, it's like a tentpole project for the

community.

Like any work you do raises the tent and makes everything a little bit bigger for everybody

to be able to do cool stuff on.

And then slowly it just started to not be as valuable.

And also like CocoaPods is built in a different technology stack than the majority of the

work you do on your iOS work.

And I think what we found is the people that started working on CocoaPods stopped building

iOS apps quite quickly because of the skills that they got doing this ended up being really

interesting.

And off they went into the Ruby world.

Yes, exactly.

Yeah.

Yeah.

I can, I can certainly see that.

Yeah.

This would all have been different if there was a Ruby SDK to build iOS apps, I suppose.

Which I think there was, wasn't there a MacOS thing?

There was, yeah, there was.

Yeah.

RubyMotion.

That's what it was called.

Yeah.

Yeah.

There was a Python one as well, right?

Oh, there was an official one.

Ruby Cocoa was built into the Mac.

That was, that was one of the originals.

That was my first job.

My first programming job.

How was it?

Was it really?

Tell us about your first programming job then.

I went and moved out to Brazil and did a sort of, worked on a blogging client that was like,

you know, it supported Tumblr, it supported WordPress.

And the guy that did it was like a Ruby fanaticist and would refuse to do anything else.

So he was like, we are going to figure out how to make this work.

And it was good, but it was not good enough to be fully production worthy.

Which is why RubyMotion ended up coming out of, like the guy that wrote that in Apple,

eventually Laurent Sansonetti, he moved out of Apple and turned it into a startup.

That was RubyMotion, the one that everybody had heard of.

And that was RubyMotion, of course it was.

Yes.

I remember that Laurent used to work for Apple, but I'd forgotten that he'd come away and

tried to do that as a startup.

Yeah.

Is it still going?

I presume it's not.

It's not.

It's not NVIDIA now, but Alloy is like the original creator of CocoaPods.

I'm just the guy that came like a few months down the line and said, this is a good idea.

He worked on RubyMotion.

So he ended up like, ended up back in this world of like runtime engine stuff before

eventually coming to work with me at Artsy.

Right.

Okay.

Right.

There you go.

Small world.

It is.

And certainly it was a very close knit community of the CocoaPods people, wasn't it?

We don't like, you know, you get to a point and people invite you to conferences and then

you go to the conference and you meet all the other people that are working on it because

there's always something interesting in that space.

So we had a couple more questions off the social media posts, which we should probably

get to.

One from Kali Coding said, there are other tools, for example, Fastlane that rely on

the Xcode project gem from CocoaPods, but this gem has not kept up to date with the

latest Xcode project file changes.

Specifically, it doesn't support buildable folders.

Is this gem also being put into maintenance mode and will that also carry over to Fastlane?

Now, I appreciate you're not the maintainer of Fastlane.

We should maybe get Josh on to answer that question.

But I wondered if you had any thoughts on that.

I think I honestly never considered it until this just came up.

But like, it's not mine to give away, but it's also like, yeah, I don't see a reason

why we couldn't just decouple it from the CocoaPods infrastructure and make it available

for people.

It in itself has value.

And of course that gem can still be maintained under, or is that gem also going to be made

archived?

Is that going to be, is there a plan to archive that gem?

The only plan officially is to make trunk read only.

But the reality I think of the situation is Xcode project is used in more than just CocoaPods.

And so I think it is more valid to move it to be able to be supported by a team that

would actually support it.

Well, Josh, if you're listening, drop us an email and we'll, I mean, I'm sure you and

Josh have talked many, many times over the years, right?

Yeah, yeah, yeah.

Josh is part of why I'm recommending my Swift package later on down the line.

Teases for later.

Don't spoil it.

Another question here from Alexander Steiner.

Is there anything you would have done differently in hindsight?

That's a great question.

This is interesting.

Like, because there's tons of things that I think that is fun to do on a community of

the size that we have for CocoaPods.

Like I used to spend a lot of time building really interesting statistics and try and

like generate all this.

We have like interesting analytics that were like unique within dependency managers because

we weren't just relying on whether it was, you know, seen or dependent on what its dependencies

were.

I've been really interested in like, I think there's something really cool about having

a small set of dependencies and having authors be able to say like, I trust this person and

being able to make web of trust around dependencies.

So it'd be like, I trust Dave Verwer.

Dave Verwer has said that he has read the software Llama Fire.

Yeah, yeah, exactly.

I get to choose to make those mistakes.

And that's kind of fun.

I'd love to see like a web of trust system built on top of CocoaPods' dependencies.

And I would have loved to have the technology I have today to be able to like redo a lot

of the analytics pipelines and things like that.

Back then it was like unbearably expensive to be able to generate analytics for people

on their pods.

But today I have a self-hosted system that uses Clickhouse that is honestly, you know,

the same quality as the one that I had for CocoaPods for a while that cost a thousand

dollars a month.

And so some of that stuff I would have loved to do.

But you know, for me, I'm super proud of the design work I did on CocoaPods.

That's like some of my favorite stuff.

And just like committing to something for such a long time.

It's like, it's hard.

It's been a decade or two, but it's been fun.

Well certainly many aspects of CocoaPods were inspiration for what we built with the Swift

Package Index, especially my favorite little bit of CocoaPods that shut down a long time

before CocoaPods itself is going to transition to maintenance mode, but was CocoaDocs, which

was the documentation hosting for, I think you used, what's the tool called?

Beans with a J. Jazzy, Jazzy.

I wanted to say Jazzy, but it's Jazzy.

Oh, what was the original one?

Well, Jazzy didn't support Objective-C projects.

So I first built it with an Objective-C version of that.

Oh, there you go.

But yeah, I agree.

No one else was attacking those types of problems.

You need a centralized system to do that.

Yeah.

And yeah, so what we've built with Package Index having documentation hosting and what

we consider very easy to enable documentation hosting, you just put a little configuration

file in your project and we'll take care of everything else.

That kind of problem is only possible when you've built the underlying infrastructure.

In CocoaPods case, it was CocoaPods itself and in Swift Package Index, it was the index.

And actually it's more than that.

It's the index plus the build system because with DocC, you can't build the documentation

until you've built the package.

And so we were able to kind of tack that on with less work than it would have been if

we hadn't had that build system.

So CocoaPods has been hugely influential in what we've built with Package Index.

So again, thank you for that.

Yeah, it's cool to see people trying new things from the same ideas.

Yeah, yeah, absolutely.

In terms of other open source projects, are there any precedents for a project going read-only

like this or kind of transitioning into a maintenance mode like this that you can talk

about?

Not to my knowledge.

We spent some time trying to research this to see if there is good examples of people

trying to move off dependency managers.

And honestly, I couldn't find much.

And that has made it kind of interesting.

There's like discords where people that run dependency managers hang out.

And there's also, we talked a little bit, I think with the Linux Foundation about what

they've ever done in this space.

But realistically, it's relatively unprecedented to turn a dependency manager read-only.

And so it's funny to just be just doing it and just seeing where it goes step by step.

But that's kind of why we gave it such a long process because if it takes two years, that's

fine.

Then someone might tell us where the problem is on route.

But for now, it just seems to be that we're sort of operating in a new space.

It's kind of surprising.

There's so many projects out there.

Do they just shut down?

Well, I think a lot of them do actually.

I think a lot of open source projects, when the maintainers move on, they actually don't

even shut down.

They just get abandoned.

Yeah.

Yeah.

You're giving a lot of grace period there.

I was wondering, is there anything you can think of or you might have thought of that

might block people from moving off of CocoaPods to SwiftPM?

Are there any features that are missing and that are hard to sort of replace?

The hard part, and again, I don't know all of the modern features of Swift Package Manager,

but it definitely used to be a case where adopting Swift Package Manager for a library

like OpenCV was just kind of not really feasible because it required changing that file structure

to fit and to be usable in a way where Xcode was a priority of the build system.

And so you do, I think, have quite a few of these crazy C libraries that people use that

may or may not be possible to migrate over.

I'm not entirely sure.

We were very build flexible.

Right.

So I don't have an answer for those.

At the same time, if you were vending it, you may have the technical experience to be

able to put it in your Xcode project, like natively.

Maybe you're not updating so often.

Right.

That's my guess, but no one has said anything.

Right.

Right.

And what happens after the maintenance period?

Is that the end?

Is that the end of it?

I think we've been on such like a, again, because there was no releases this year.

I think we're definitely at a point where people are not fully operating the machine.

So I don't know.

By removing the authentication and moving to be read-only, we effectively allow the

key server to sort of, it doesn't need to turn off because it only costs a 10 or a month

to operate.

But I think trying to figure out, do we do updates to the CLI client to be like, you

have touched a pod that came from KUKA.PODS's trunk.

This will never get an update.

Are you sure you want to do this?

Yeah.

Is probably something we're not going to do.

I think that would be a good idea.

Yeah.

Yeah.

I think that would be a good idea.

Just so that those people see it every time they update.

Yeah, exactly.

And it might not be that often, but some people might be using a dependency that was built

10 years ago and has never updated since.

And it was probably just fine.

I think that's the only situation that is going to be a problem.

And it's not really going to be a problem because it is just the passage of time is

that there are a lot of iOS and macOS projects that were built at a point in time and haven't

been touched since.

And resurrecting those projects will become even harder.

But honestly, resurrecting those projects is already an enormous task because the APIs

have changed so much.

The tooling has changed so much.

The Swift has changed so much.

You know, it's more than a few years old.

It's not going to compile.

Well, if it's Objective-C, I mean, it'll compile, but maybe people are replacing that stuff

anyway.

And those won't see any changes probably either.

So that'll just age out, I suppose.

Yeah.

Yeah.

That's our theory that like, you know, people that are using building Swift projects at

this point will probably have moved to Swift Package Manager.

People that don't control their projects like React Native or Flutter are at a point where

eventually there'll be a point release in their Flutter or React Native that switches

fully over to Swift Package Manager.

But most of the time their dependencies are not coming through CocoaPods.

And anybody with an old build still works perfectly fine because the same pods are going

to be there.

There just won't be updates to new ones.

That's right.

Yeah.

The tooling still runs.

The pods still exist.

The GitHub repository is still there.

Yeah, absolutely.

Yeah.

It's good.

I hope and predict a smooth transition.

Well, I've gained enough internet credit over these years to take a few flames if we need

to.

Yes, you have.

Well, I hope you don't need to.

And I hope nobody does that because it is not deserved.

Well, that's been very interesting.

And thank you so much for coming on the podcast to talk about that.

But before we finish, let's do some package picks, shall we?

Shall I start?

Sven, why don't you kick us off?

All right, I can do that.

My pick this week or this time is Swift Configuration, a package by Apple that I believe was just

announced this week or last week with the 1.0 release.

So it's very fresh.

And this package is about app configuration in terms of configuration files, environment

variables, command line arguments.

So there's lots of ways you can get configuration into your app.

It supports hierarchy.

So you can have overrides, like for instance, typically command line arguments would override

file-based configuration, that sort of thing.

Yeah, 1.0 came out.

It supports these things I mentioned.

Also, it redacts.

You can declare a configuration value as secret.

So it'll be redacted from logs automatically, which is very nice.

I also want to mention another package while I mention this one.

And that is called Swift Configs by Danil Voidilov.

And that is slightly older.

So he published that four months ago.

Danil is two months old.

So he was with Sherlock within two months of starting his package.

I actually have to say I like the API in Danil's package a bit better than Apple's.

There are trade-offs here because Apple's package has a couple more features like the

overrides.

But, you know, pick the one that you prefer.

If you don't need the overrides, Danil's package might be the way to go with.

And both packages will surely do the job if you need to configure your app.

So there you go.

That's Swift Configuration by Apple and Swift Configs by Danil Voidilov.

Interesting.

Sherlock's after two months is certainly a prize of sorts.

Congratulations on winning that competition.

Otto, do you want to give us your pick?

So I have Danger in Swift is a Swift package manager package.

So I guess to some extent that is one of them.

But I only use one Swift package in Pusmo's iOS app, and that is RevenueCat.

I've been really happy with that.

So I just vendor the entire thing, put it inside the source code, and they make my life

quite a lot easier considering how much work I had to do to do the web version of RevenueCat.

Well, that was going to be my next question.

Do you use their web?

Because they have a web SDK as well, right?

They do.

Yeah, you can hook it into like Stripe and stuff like that.

But I had already built all that stuff by hand.

You'd already built that, right.

Like giving them extra revenue from going back and undoing all that work, and this wasn't

worth it for me.

Oh, if it's already done, absolutely.

Yeah.

Yeah.

And so, yeah, just one Swift package, that's some kind of record.

Although I presume many, many JavaScript dependencies as well, right?

Oh, you don't want to know.

You do not want to know.

Does JavaScript encourage lots of dependency?

I had no idea.

Imagine.

Well, thank you for the pick.

And certainly, it's a popular pick.

I'm not sure if it's ever been recommended on here before, Sven.

Do you recollect?

Possibly, but it's been a while, if it has been.

So yeah.

Yeah, yeah, yeah.

It's a good one.

My first package this week is called Monocle by Dennis Muller.

And it is a Swift symbol lookup CLI powered by SourceKit LSP tuned for coding agents.

And so it's a command line tool where you can, for example, ask Monocle, this tool,

to inspect a specific file at a specific line, even a specific column in that line.

And it will describe what it's seeing at that position.

You can have it output in human readable output or in JSON.

And what you can do is you can tell if you're using something like Cloud Code or any of

the agents, you can, in your agents.markdown file, you can give instructions to the agent

on how to use Monocle.

So for example, they actually give you a little snippet here that you can say, treat the Monocle

CLI as your default tool for Swift symbol information.

If you need definition file signature parameters or document comments for any Swift symbol,

run this tool.

And on it goes, you know, list checked out Swift dependencies, resolve any symbol at

a specific location.

And so it gives the agent the knowledge of how to properly inspect Swift symbols inside

your project.

And I thought it was a really interesting little tool.

It's also got a server mode where you can keep the LSP server running constantly so

that calls to the Monocle tool are really quick because it's already booted up that

whole infrastructure of LSP.

And I thought it was a very, very interesting tool and a fantastic readme file.

Looks really easy to get started with.

So yeah, it looked great.

Well I think, are there any other package picks?

Not for me, no.

Well, I just have one, one lightweight one at the end then, which is a package called

Swift for Swifts.

It's by Rob Whittaker and it actually goes along with a website and the website is swiftforswifts.org.

And it is a project to help save the humble Swift bird, not the language, the bird.

It is a project which is, the package can add a link to the website and a little badge

into your about screen or wherever you want in your application.

And what they're doing is they're trying to save the Swift.

Yeah, in the UK, numbers of Swifts have plummeted by 66% in the past 30 years and the species

is globally threatened.

So it would be a terrible shame if the birds with which our favorite language is named

after were to become endangered.

And so it's great to see this project, great to see Rob take this initiative and get this

up and running.

And even if you don't integrate the package into your application, check out the website

and get involved with what they're doing there.

Save the Swifts.

Swift for Swifts.org.

And we'll include links to that in the show notes and also various links to the Cocoa

Pods announcements if you need the kind of official timeline.

Just so that we actually do mention the date, what's the date of the maintenance switchover?

December of next year.

That's the final turn off.

So a year.

And then there was a kind of a test in November, right?

Yeah, that's my plan.

Yeah, wonderful.

All right.

Well, thank you so much for your time, Orta, for coming on and talking all about this.

And thank you so much as well.

Not just to you, but to the whole team and whoever contributed to Cocoa Pods over the

years.

It was an incredible tool that revolutionized iOS development.

It really did.

Yeah, I agree.

It was fun.

I'm glad it's had its time.

Thank you, Orta.

All right.

And we'll be back in a few weeks.

So we'll speak to you then.

All right.

See you next time.

Thank you for having me.

All right.

Take care.

Bye bye.

Bye bye.