NUIKit / CGSInternal

A collection of private CoreGraphics and SkyLight routines.
188 stars 32 forks source link

Request: Swift Package Manager support #1

Open amomchilov opened 7 years ago

amomchilov commented 7 years ago

Would you be interested in making this repo compatible with the Swift Package Manager?

I don't mind doing it and making a PR, if there's interest.

CodaFi commented 7 years ago

Sure! I'm not sure what the look and feel of these APIs is when they're imported in Swift, but if you're up to it I'd certainly appreciate the contribution.

avaidyam commented 7 years ago

@CodaFi You'll need to mark things with __Nullable and __Nonnull for starters, and I believe you can create a package overlay via NS_SWIFT_NAME pretty easily to transform it into a struct or class-like interface.

CodaFi commented 7 years ago

Determining nullability for this API surface is going to be a painful slog, I can feel it...

avaidyam commented 7 years ago

@CodaFi Yeah, not to mention you can't produce correct Swift throws overlays because of the return type. I don't know how to correct that one unfortunately.


Also, I remember you from the TwUI days... hello again! 👋

CodaFi commented 7 years ago

None of these functions should ever throw a catchable exception. Not only would it have violated an invariant across a MIG’ed interface, it would be bubbling up from across at least one framework boundary.

I think we’re going to need APINotes here too. NS_SWIFT_NAME is only fine in the small.

avaidyam commented 7 years ago

Well, I would see it as the CGError being returned would instead be caught or ignored by a try? or so. And your suggestion of APINotes is probably more correct - I was thinking of just wrapping the functions in an ObjC class and letting Swift auto-import that but it causes some unwanted (and un-needed) overhead.

CodaFi commented 7 years ago

The few CGError-returning public APIs I can find don't import as throwing. Do you have an example of what you had in mind?

avaidyam commented 7 years ago

Right - I was suggesting having them import as throwing instead. i.e. CGError CGSDoSomething(...) would import as func CGSDoSomething(...) throws.