How does `@available(obsoleted)` work?

I was experimenting with @available to get a sense of how it works. I started with:

@available(OSX, introduced: 13.0)
struct Foo { }

func foo() {
  _ = Foo()

and easy enough, when I tried to compile it to a mac target, I get an error:

'Foo' is only available in macOS 13.0 or newer

with a fix-it to add #available. This is pretty much what I expect.

However, when I tried the same code with deprecated: 13.0 and obsoleted: 13.0, there is no error/warning. I set the platforms on Package.swift to platforms: [.macOS(.v10_14)], so it's well out-of-range.

Is it expected to not produce any warning? What does the compiler pick up on when figuring out if something needs to be behind #available?

I'm confused about your question. If an API is to be deprecated in macOS 13, then of course there are no warnings when you compile it for macOS 10.14?


Don’t feel bad. I forget the 10. in front all the time too.


Ok, I was too restless to wait for 13.0 announcement in 2052 :joy:.