Actually, I've got a little quiz for you. We have a quiz already, straight away? Well, yeah, we have a news quiz. Okay. It leads to news, I think. Okay. How do you add a package to a Swift package manifest? Can you, off the top of your head, give me the incantations you have to make to add a package? Well, yes I can, but only because I've been working on this thing to say. Because you've cheated, right? Yes, I have cheated. So what is it?
Because I think there's a, there's a, there's a part of it that you probably don't know, even, even though you've stared at this earlier this week. Okay. Okay. So you add the dot package clause in whatever the top area is, you find the top area, whether, where all the other package clauses are and you add one alongside it right? That's the technical, that's exactly what it says in the instructions. That's what it says in the docs, yep.
And then you find all of the other product areas and you've got a product. Yeah right, so that's the target dependencies, yeah right and there it's dot product and name and package goes in there. It's always, it's never quite clear which one it actually is, But even in the top section, that's, and what I'm alluding to is we've started some work around making package instructions easier. And it is actually quite easy if you're working in an
Xcode project because Xcode has some references for adding packages to your project. And even just by importing something, if you import a product that Xcode knows about via some mechanism, I think it's if it's in a package collection that you've added to your list of package collections Xcode knows about, then if you do an import statement of a product, it'll actually automatically add, do all the things that need to be done and add the package to your manifest. Now,
this only works if you have an Xcode project file. And if you're working in an actual Xcode project, this does not work if you are working on a on a pure Swift package. In that case, you actually need to go into the package manifest and add stuff. And for quite a while, we've had something to help you at least a little bit with that because even the package clause, the first thing you mentioned, adding the package dependency to the package clause, the top part of your package manifest,
even that is that line dot package. You're not done there because you need to specify what package version you actually want, right? And there's different variants of how you specify that. Typically it's from colon and then you give a start version and then from that start version, it picks the highest released version on the same major version. So if you do 1.0.0, it'll take any 1.xy version with the highest x and y possible. But there are a couple of other
variants of that and we do support that. For instance, if a package has a beta release, which would be a branch version that you're following, then it has a slightly different clause. And I think the clause is, and I don't even know, I'd have to look, I think it's branch colon and then the branch name. So honestly, just to interject on that, I've not done that manually since the Swift package index existed because we do have those
for the latest stable version and the latest default branch. And if there's a beta version, we have all of those ready. And I've not typed that in manually in a couple of years now. Stay Forever Yeah. But the thing is that we're working towards an adding and that was spawned by a little discussion on Mastodon where Matt Mazzucotti questioned whether it's actually useful to put installation instructions in your readme.
And a few people were quick to point out, well, it kind of is important because, because of these, you know, intricacies of, of what you need to add. And, you know, you might know the package name, you might not necessarily know the product name, and then, you know, you certainly want some instructions on what to add. And the thing we're looking to add, as triggered by that discussion, although we did have an issue in our list already, was to help with the second part of that, and
that is the product clause, or rather the product dependency in your target. And there we're looking, because we have all the information from the package manifest, so we know what products a package exports, so we can provide a selection dropdown UI element where you can pick the product that you want to add, and then we can write out the product clause that we need to copy,
at least help with that bit of it. And that's what this little quiz was about, you know, have this all in one place so that package authors can just point there rather than have this set up. And it will then automatically also always be up to date. So if you rename your products in your manifest, you don't need to worry about your readme going out of date and stuff like that. It'll all be almost up to date on that installation page. And I think that's a great
idea, especially the concept of being able to link to that. So at the moment, and it will continue to work this way, the "use this package" button on any package page does like a popover where it presents the information. If you're using Xcode, here's the URL that you paste into Xcode. And if you're using package.swift manifest, then here are and it will be the both the package clause
and the product clause as you say. The fact that that's a popover will remain but we will give people a mechanism to link directly to their package page with that already popped over so that you can link it as installation instructions in your package readme. Yeah that'd be really nice, really nice to have.
We also discussed - and this is not going to be in the first deploy of this feature - but we also discussed having a preview of a package manifest syntax highlighted with the code that you're kind of selecting with the by picking the version and the product in there too. Now I'm not sure how necessary that is, but it is the kind of thing that, especially for people just getting started with adding dependencies to pure Swift projects, that could be
helpful. Yeah, I think it would be really interesting to hear what people think because I believe we are... it's really hard to think back how weird that was adding a package dependency the first time because, I mean, even though I can't remember the syntax. I at least remember there's two things to do and roughly where to put them, and then there's enough scaffolding there to guide me. I couldn't type a package manifest,
just type it out for the life of me. I just couldn't. I always need a template. But I'd be really interested to hear if people think this is actually useful to see it in the context of a manifest, to see where stuff needs to go, or if that's just noise. It's hard to judge when you're sort of familiar enough with it. - And if we could take a look over in Apple's direction just for a second, I think Xcode being able to manipulate package manifest files better would be an amazing step forward.
- Oh yeah, yeah, definitely. I do vaguely remember there was talk about a Swift PM command, like add package that would then add it to the manifest. But I don't think that went anywhere. or I'm not sure what state that proposal is in, but it was talked about at least. - I just want Xcode to do it. - Yeah, yeah. Well, when I say Swift PM, I kind of assume that Xcode would gain that capability then also for pure Swift packages. It's always a bit weird.
Xcode is this thing that has this Xcode project kind of mechanism and then Swift PM kind of mechanism, and they're not the same. It's hard to really talk about it. It's almost like it has two different modes of operation in those contexts. It's kind of weird.
- And I had a standing prediction for a few years in IOS Dev Weekly just before the conference every year that my standing prediction was this would be the year that they would choose Xcode Project or package manifest file and just have one. And that hasn't happened yet, so I've stopped predicting it. - Yeah, well, for that to work, it would actually start, need to start supporting iOS apps and all that from a package manifest, right?
- That was where I thought they would, yeah, that's where I thought they would start going with it, but it does not seem to be the current, I mean, it may be the plan for the future, but it does not seem to be the current plan. - I mean, it has to at some point, right? I do wonder if that might happen in the context of a, there was a pitch, it's quite a while ago now, to redo the package manifest and do it in a, um, what's it called?
The builder, um, mechanism, you know, like the DSL mechanism to go away, you know, from this, um, struct that you fill in kind of mechanism to, uh, a, a builder DSL kind of mechanism. And I wonder if that might happen all at the same time, maybe for Swift six or something that, that, that format will change and then incorporate the other things at the same time. I don't know. But I do feel it's not ideal the way it is right now.
- So anyway, the good news is it will get a little bit easier if we, or should I say, when we deploy these improvements. - Yeah, definitely. - There's another thing which has been going on this week. At the end of, it was actually at the end of last week, that we submitted a pull request onto Swift.org with the first stage of an integration between some of the data coming out of the Swift package index and the official Swift.org website.
So this is something we've been working on for a little while now. And it's in pull request at the moment. So this is very much a kind of first step towards some kind of integration between the two sites. And the first thing that we're doing there is some package lists. So we've proposed a new page on Swift.org and it's in the top level menu as packages. And you can, in fact, you can actually see a mock-up or a prototype of what we are proposing to merge into the site.
If you go to the Swift.org open source project and look for the issue that was opened by me. And the very first title in that issue is a link to the hosted prototype that we've got. So it's a packages page, and on that page is a list of currently three sets of different packages. There's one called Community Showcase, which is going to link to packages that we mention here on this podcast.
And actually, this is, the reason I'm talking about this, one of the reasons is we would love to know if you write a newsletter or run a podcast or something like that where you talk about other people's Swift packages. And if you do, please get in touch.
You can get in touch via our Discord, which we'll link in the show notes, because we'd love to get more sources of people talking and writing about the package ecosystem and include those packages on the Community Showcase section of this new packages page. We then have a couple, and I think this will be expanded before the pull request is merged, a couple of lists based on keywords.
So we currently have packages that are referenced by the networking keyword and the testing keyword, but I think we're gonna potentially expand that a little bit more before we look at merging it. And of course, there will be a whole process of review before any of this gets merged.
So this is not just gonna go straight through, This is genuinely an open source pull request that's gonna go through to the site and we hope that it gets merged, but of course it may look different to what we proposed by the time that happens. - And of course the list would be changing, I mean not daily or anything, but they'd be on a refresh cycle of some sort, maybe a couple of weeks.
But the idea would be obviously that they, especially the categories are collecting packages that are good starting points for certain topics like networking and testing as the examples that would host packages there that you should take a look at if you're working in that realm. Something else I kind of thought of, but might be a nice section as I was preparing for the podcast, and that was highlighting packages that coincide with new language features.
So for instance, when Swift 5.9 comes out officially, I mean, obviously we're already using it, we're even already testing it, but it's in pre-release form. But it might be interesting to have a section about macro packages, for instance, when 5.9 officially comes out and more people will start adopting it. Obviously people are beginning to adopt it now, but I guess we're early days in the adoption curve. So in September, maybe there might be an interesting collection to have.
And then obviously, you know, other Swift languages, language versions will have other things. So stuff like that might be interesting as well for a section there. - We could definitely do that. And that could also be one of the, so the testing and networking tagged packages, they're not fully automated, but we do have a tool that will generate the data that goes into the Swift.org website for those two tags.
And anything that could go through our search system, So for example, we can now search on packages that have the macro product type in there. We could do a similar thing for really anything on that search criteria, couldn't we? - Yeah, yeah, definitely. I mean, it's a question, open question, how long those lists should be.
We probably need to sort and truncate at some point, but it's certainly easy to at least get started their list and then go through and apply some further selection criteria, I guess. So if you have, either if you do something yourself or if you know of somebody who is interested in talking about Swift packages, maybe a podcast that you listen to has a section or something like that where people can pick a package. Pick a package? It's a tongue twister.
Yeah, please do get in touch and we'll see if we can get something more structured together to do with how the Community Showcase packages are built up. Yeah, or even just for the podcast, let us know if... I mean, we do monitor new additions to the index or releases and stuff like that. But there's enough coming in now that it's easy to miss one or maybe not give it the attention it deserves. And a ping and a nudge
is a great way to highlight a package that is worth talking about. And then we discussed that one of the sections, I mean, obviously our podcast would also be a source of input for that community selection. So that's certainly a good way of getting something in. Yeah, absolutely. There's one thing I noticed looking at these lists, and I wonder if you feel the same. And I think I even mentioned this before. When I look at this networking packages, the first package is
Swift-neo. Then we have alarmofire, Pulse, Moya. It strikes me there's a, there's this weird inconsistency about Swift package names. We have a couple others that sprung out and I think it's, I got reminded because this is one of the few areas that I've seen multiple packages listed side by side and then it becomes more pronounced. Like we have combined Dash schedulers, all lowercase, Swift Dash, Snapshot Dash testing, all lowercase.
So we have a couple of packages that follow, I think it's Apple's guideline to have these package names that are lowercase and K-Bop case, you know, with dashes in between the words. Interestingly, the very first word in Swift Neo is, Swift Neo is an open source network application framework and Swift Neo there is spelled like Swift Data or Swift UI. It's Swift and then capital N I O. So apparently the actual package name is Swift Neo.
Like, like I just described in the Swift UI kind of spelling. It's weird to me that the. Identifier that is used in the package manifest is sort of like an identifier type label, you know, it's, it's almost as if something's leaking out that shouldn't be leaking out and the proper package name should be something else.
And I wonder if that's ever going to change, if there's ever going to be some sort of guideline, what the, what the name should be, but I, it strikes me as weird that these, these names pop up like this and, and we're not doing anything special, we're picking the package name here as it is defined in the package manifest and it could very well be something different. I'm a bit puzzled why it's been chosen like this. I don't know, do you feel the same or is that just me being OCD?
- Don't get me started. (both laughing) My biggest problem with all of this is why do we need Swift in the name? - Yes, yeah, yeah. - I mean, I can understand. So on GitHub, if you want your repository to be descriptive on GitHub, where it lives in an ecosystem of every possible language. I can understand it there. But why in the package name are we including the word Swift? I do not understand it. My personal preference would be to just use camel case. Sorry, not camel case, what they call it.
The one where every letter is capitalized. - Pascal case. - Pascal case, that's right. Yeah, my personal preference would be for Pascal case or something like that. But I don't really care what we pick as a community. You mentioned an Apple guideline. I'm not familiar with an Apple guideline. I'm only familiar with the way they've started to name all their packages. So maybe that's referencing a guideline I haven't seen. But it does seem to be hyphens and all lowercase.
But they all also include the word Swift, which baffles me. - I mean, by all means, call your repository Swift- if it's on GitHub and you really want to be sure that people don't stumble into your project thinking it's Rust or something.
But the package name, I mean, I mentioned this before, like if you look in your sidebar in Xcode and you look at dependencies, it's Swift-Swift-Swift- it's all Swift- and there's so much noise in there and you can't even tell at first glance what your dependencies are. And then there are the sort order because some actually start with S and they're mixed in with all the Swift ones. And it's, it's a huge mess.
And I understand why, why we've gone down this path to, to leak all this, you know, it's like, we're not naming. I mean, I know in Fortran, you used to, in your variable names, you'd have the type, you know, an integer type, I think started or ended with an I, um, and F for real, R for real and, and, you know, we're not doing that anymore because the type system can actually reflect that properly. But we're always tacking stuff into names when there's no need. It's bizarre. I don't like it.
Yeah. I forget what the convention was called, but I think that it was very popular in the C days and you would encode the type in your variable name. So the one I always remember is LPSZ and then a name, which was a long pointer to a string zero terminated. And then the name of your variable. And I agree, we don't do that anymore and that's a good thing. But that's weird. I thought everything was just "void* in C". Do you remember the naming convention name? I forgot.
But in C? No. Yeah, in C, where you did the LPSZ and I and whatever. No, no, no. I never really did that. I remember it in Fortran. Was it Hungarian? I think it might even have been required in Fortran. That's all I know. I only use C with proper variable names. I think it might have been Hungarian notation. I think that might have been the name of it, but I'm not sure. Somebody I'm sure is going to point out that I'm incorrect.
We'll be sure to follow up. The other thing we should just briefly talk about before we move onto package recommendations is our sponsors. So for quite a while now we've had the support of a couple of corporate sponsors. We've had both Stream and Emerge Tools, who have both very kindly supported the site for, I think, over a year now. In fact, yeah, way over a year. And they have been just wonderful. They believed in the project from the very beginning. And we thank them so much for
their support. But what we don't want to do is just have the same set of sponsors over and over again. And we want to keep the site a little bit fresh. We want to make sure that people coming to the site see different links every now and then. And so we've been in conversations with a couple of new companies who just went live with their sponsorships on the site last week. So those companies are Point Free and Telemetry Deck. So why don't you tell us a bit about those two companies.
Yeah so Point Free you might know Brandon Williams and Stephen Celis who are creating a great video series about architecture testing and more. It's a really great site, you should check it out. I use that stuff personally. They have lots of open source packages as well, so that's a really great place to check. Telemetry Deck is a service providing lightweight privacy focused analytics for apps and websites, so that's also a great place to check out. I think in particular recently there
was a change with Google Analytics not being supported anymore. I think you can't use it in the EU anymore. So that might be a good reason to look at Telemetry Deck to change your analytics on your website. I think just like with Stream and Emerge tools, the key thing about both of these new sponsors is they are part of this community. This is not some company that's just kind of
coming in looking for the eyeballs of iOS developers. I mean, I'm sure they would love it if you went and checked out what they do. But Stream, Emerge Tools, Telemetry Deck, and Point Free are all absolutely at the heart of this community as well. And that's really important to us because we want to, you know, we don't want to overload the site with advertising and that was something that we've been very keen to keep top of our minds since the beginning.
But we do have a little bit of advertising on the homepage. But I think it's better if that advertising comes from the community, and that's what we're trying to do here. It's also worth just noting that this is not any increase in the number of adverts or the amount of advertising or anything like that.
This is just rotating around some sponsors and we would love to have Stream and EmojTools back at some time in the future, and they would love to come back at some point, but we want to keep that cycle fresh. Yeah, definitely. I do think there's a real indie vibe there. I did mention Brandon and Steven. I should also mention Daniel Jiig, who's the creator of Telemetry Deck.
And these are, you know, just indie developers that have started these companies and they're now supporting us and that's just great. - And Lisa Figas as well is at Telemetry Deck too. - Right, yeah, sorry, I only knew of Daniel. - No problem. Yes, I've been doing most of the conversations with them. So yeah, thank you so much to our new sponsors And thank you also to our sponsors who are currently cycling out. So that's just a little bit of an update on the sponsorship of the site.
Of course, the other main sponsorship we have is we have GitHub sponsors. So if you can go to any of our open source repositories, there should be a button there for GitHub sponsors. Or on the site itself, just above the two advertisements is a button for how to support us on GitHub sponsors. And then of course the other sponsor that we have is Apple. And you can see all of that information on our supporters page, which is on the home page, linked from the menu bar on the home page of the site.
- There you go. - So thank you so much to all of everybody who keeps this project going. - Absolutely, thank you. - All right, let's do some recommendations. - Do you wanna kick us off? Let's start with a package called Color Toolbox. I'm continuing my theme of color-based packages from last episode. Color Toolbox by Ramon Torres. And this is, unlike the last one that I mentioned, this is not a color palette library. This is a individual color utility library.
So it provides, it's not a huge package. it's a kind of utility package. It will help you kind of shorthand a little bit of your color management code. And then probably one of the most useful things, which I am surprised that the standards, well, we talked about how complex color is last time, but also at the same time, it would be great to be able to bring in web hex colors into UI and NS colors and SwiftUI colors. And that's one of the things that this does.
You can also take a color and get a hex value out of it. But then it's got a couple of also useful little features like you can detect the contrast ratio, which is really useful when you're checking your site for accessibility. So you can check the WCAG contrast ratio of any color to any other color. And you can also, and this is something I really find very useful. you can lighten or darken a color by a certain amount. So you can say, make this color 20% lighter than it was previously.
And that's so useful for little things like, if you have like a header and you might want to have, to differentiate the background color of page or a view or something like that from the header, you can just lighten it or darken it a little bit. And that's a really nice way to get some subtlety in there. So it's a small package. It's the kind of thing that if you use it, it's only been developed for 22 days, so it's fairly new, but it might come in useful. And it's Color Toolbox by Ramon Torres.
- Nice. Right, my first pick is called File Monitor by Kris Simon. That's a really nice package. And what it does is monitor file system changes. So imagine you want to monitor a directory for any changes within, you know, like creations, deletions, and modifications of files, you can spin this up and then have a sort of a subscription or a callback to notify you of stuff that's happening. And it's really nice.
The thing that I noticed that I've found especially nice is that it supports Linux as well. And obviously you can imagine there might be some significant differences in doing this on Linux. believe there are. So this is a nice package if you have need for this both on macros and Linux. It's a very simple interface, you can try it out on a playground as well to get a feel for it. It works as advertised and it's a nice neat package giving you file system notifications
for whenever you need that. You know, might be doing some... I remember seeing this being used for instance, in Publish the other day where it's monitoring the file system for changes and then retrigger a build of the package. Publish obviously being a package to create a website and then you could automatically trigger rebuilds and then you would have to reload your page and all that. So that's perhaps a nice application for that if you're looking for for that sort of thing.
So that's File Monitor by Kris Simon. - Yeah, sounds useful. My next package continues a theme that I think I'm becoming, like I think it's becoming my thing on-- - Is it about colors? - It's not about colors, no. It's about having an amazing name for a package. Actually, it goes on to our discussion around Swift-lovercase uppercase. This does not have the word Swift in the name. And it instantly stood out to me as I need to know what that package does.
So the package is called Rearrange and it's by Matt Masigotti, who I think you mentioned earlier in the podcast actually. - I did, yeah. - So again, this is a small package that is dealing with extensions and utilities for making it easier to work with ranges. So NS range, NS text range. Matt says in the readme, it says it's particularly handy when used with the Cocoa text system. So the kind of thing you can do here with like an NS range, you can shift a range by a delta.
You can shift the start of a range. You can shift the end of a range. So you can very quickly, if you're, for example, as Matt mentions that if you're working with text, you might want to change the range of a selection of text and you might want to shrink it or shift it left or right. And then there are various other things you can do with NSTextRange and UITextRange and IndexSet and String.
And again, not a package that's going to be immediately useful to everybody, but I'm a sucker for a good name and this is a great name. - Nice. Yeah, Matt, he's here, he's there, he's everywhere. - He is, yes. He's actually a great supporter of the project as well. So it's nice to give him a shout out on the podcast. - Absolutely, yeah. Right, my second package is called Swift-Concurrency Extras. And it's a package by Point Free.
And disclosure, which we've just given you, Point Free are a sponsor, but anyone who's been following me knows I'm a huge Point Free fan and can hardly be surprised that I'm again mentioning a package of theirs. So here you go, Swift concurrency extras. This is a package they released just last week, I believe. And it's about testing asynchronous code, which is notoriously difficult.
There is sort of a motivational link that I'll add to the show notes where they've raised issues around testing, in particular, Swift concurrency code on the Swift forums that sort of spawned all their investigation into this. And they actually came up with a solution to deal with this.
And the problem is that it's, in a heavily concurrent system, it's difficult to do testing because you sort of need to assert on an order of tasks or an order of execution, which you don't really have because if it's concurrent, stuff can happen out of order. But that's really hard to assert on then.
And what they've done is they came up with something to actually use a serial executor in test context, so that everything really happens deterministically and you can actually rely on the order of the tests. So you're not actually changing your production code, that stays all the same, but you inject a serial executor that sort of then takes all the concurrency out of the equation and just execute stuff serially, as if you had only one single task and a single executor that's doing everything.
And that then allows you to assert on all the steps and have reason about the order in which things are happening. And in case that wasn't clear, this is really for testing only. You shouldn't be messing with this in production, obviously, because, you know, you'd screw, you'd screw over your concurrency system with that. And the repository comes with a really good example to illustrate why that is necessary, why you might want that, why you would need that.
Um, and it's not a convoluted example. You, you very easily end up in situations where it might appear to be working, but if you run a test often enough, it'll eventually fail and eventually isn't, isn't a large number, it can be tens or 20 or a hundred runs where it'll happen. And obviously that's, that's no good in CI. If every 10th run fails, that's, that's terrible because you'll always be chasing some odd failures. So this is a really great tool to be able to deal with that.
The package comes with a couple of other nice things, things that we're actually already using in the Swift package index, because they are structures that have actually published individually earlier on, and they've now pushed this into this package, and they're called actor isolated and lock isolated.
These are little wrappers around structs to make them safe for use in testing and to make them, to avoid race conditions in your testing when you're asserting on stuff that, you know, for instance, you have a variable that you want to save stuff into, and it's not living in a concurrency context. You could use lock_isolator to allow access to that struct without worrying about race conditions and stuff like that.
So this is a really nice package if you're into testing And if you're having trouble with testing of things that are heavily concurrent or making use of async/await. And that's called Swift Concurrency Extras by Point Free. - I think if there was a feature in Swift Package Manager where you could subscribe to every package from an organization, then Point Free would be added to the Swift Package Index manifest in that way. - Well, you're trolling me right now, right?
Because-- (laughing) - A little bit. - All right. I'm not gonna bite then. (laughing) - Okay, my final package for today is a SwiftUI package. And it's from Vansun Leung, and it's called SwiftUI-VPSwitch. And it's basically a replacement for the iOS style toggle, where you have a rounded kind of lozenge shape with a circle at one end and in one position it's on, and when you slide that across it into the other position, it's off.
And this is just a really nice implementation of a design style that I've seen all over the place actually. If you ever look through Dribbble or any of the design inspiration sites, you'll see this kind of effect quite often. And this is an implementation of it in SwiftUI. So imagine if you had, for example, a switch that was representing day mode and night mode.
You might have an image that at the top of the image represented a starry night sky, something like that, with maybe the moon in it or something similar to represent the concept of night. And on the bottom of the image, you could have a set of clouds and bright blue sky
something like that to represent a daytime toggle. And as you toggle the switch from on to off, what it does is it animates the background of the switch up and down to move between the day and the night states in the kind of viewport, the masking viewport of the switch itself. Hard to explain. Go and have a look at the readme. There's a beautiful animation there. I was just going to ask if it's in the readme because I had trouble following along.
Yeah, I got halfway through, Anil, I had to continue because I couldn't just stop it halfway. But also the best thing to look at here is just go and have a look at the readme. And it's the kind of thing that I think is a lovely little... I wouldn't advocate putting this kind of effect on every switch in your application. But if you've got a really important switch, then this is the kind of thing that can highlight how important that switch is. - Yeah, nice. Definitely need to check that out.
That sounded really interesting. - Yeah, go and have a look at the readme. So it's SwiftUI-VPSwitch by Vanson Leong. - Nice. Right, my third pick is called TLD Extract Swift by Marco Eidinger. Not sure why he put Swift in the name there, but otherwise the name gives away what it does. It's one of these packages. I picked it mainly to talk a bit about things that are deceptively simple. Not that it's overly complicated, but it's really easy to fall into this slight trap.
And what it does is it extracts the TLD top-level domain and the root domain and subdomain from a host name. And this package is recommended to you by the Ministry of How Hard Can It Be, right? because you just split by the dots and then take the last two elements, right? That's your root domain. Except greetings for example, .co.uk, right? Because that isn't the root domain, the last two, because that co.uk are considered as the root domain. So that's not a domain you can register.
And there's actually, I didn't know this, a public suffix list on the web that lists out and Japan has the same. There's .co.jp and Australia I think as well. Some countries have a second level of official domains under their national domain that they hand out. They're sort of, I don't know what you call them, like
like Lamented, you know, you can't freely get those domains there. And it's one of these things, right, it's very easy to not consider that when you're doing that sort of thing and then suddenly Co is your subdomain or rather your top domain and when it actually isn't because you've had enough by one error. The other thing this package has, it has a CI setup to actually refresh from from this public suffix list automatically.
So it does checks and I guess releases as well, if it changes and you can even run, if you use the package, you can run it yourself. So you can actually refresh this list on the fly. Not that I think it changes that often, but it's always nice to have this sort of thing considered because you can rely on this package to track any sort of changes there. So nice little package, TLD Extract Swift by Marco Eidinger.
When you first said the name of that package, I thought you said TLDR, but no, it's TLD. And that brings another episode of the podcast to an end. So we will be back in a couple of weeks. Please do let us know if you have any packages or ideas for sources of community package recommendations for our Swift.org community showcase. And yeah, we will be back in a couple of weeks. - Yeah, see you in two weeks. Bye bye. - See you then, bye bye.
