Property wrappers were built using code generation, so are backwards deployable (explained here).
The odd thing is the definition literally has @available(OSX 10.15, iOS 13, tvOS 13, watchOS 6, *)
, but it still compiles when targeting my iOS 12 simulator. Strangely enough it does give me the correct error with extension Identifiable { }
.
My guess is this is a bug, or there's some automated stripping of unsupported protocols adherence that I'm unaware of. It's possible it will crash on pre-iOS 13 devices, but I don't have one handy to check.