CGSInternal icon indicating copy to clipboard operation
CGSInternal copied to clipboard

Request: Swift Package Manager support

Open amomchilov opened this issue 8 years ago • 8 comments

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.

amomchilov avatar Jan 04 '17 02:01 amomchilov

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.

CodaFi avatar Jan 04 '17 03:01 CodaFi

@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.

avaidyam avatar Oct 09 '17 23:10 avaidyam

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

CodaFi avatar Oct 10 '17 00:10 CodaFi

@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! 👋

avaidyam avatar Oct 10 '17 00:10 avaidyam

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.

CodaFi avatar Oct 10 '17 00:10 CodaFi

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.

avaidyam avatar Oct 10 '17 00:10 avaidyam

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?

CodaFi avatar Oct 10 '17 03:10 CodaFi

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

avaidyam avatar Oct 10 '17 03:10 avaidyam