When Macros are available on Linux, we might be able to make some of this automated through Macros. Does GNUStep have a BridgeSupport file like apple's libraries used to have?
Right now the major TO DO is getting a better Swiftier version of objc_msgSend() that handles the pointer mechanics better. I updated the GitHub for this project to reflect where I am now. https://github.com/austintatiousness/GNUStepSwiftBridge > On Aug 7, 2023, at 12:57 PM, M A <[email protected]> wrote: > > A to do list would be a great edition to this project's website. > > One thing I would add it making a program that can wrap an Objective-c class > around Swift code. There are just too many classes and methods to do it all > by hand. > >> On Aug 7, 2023, at 1:51 PM, Gregory Casamento <[email protected]> >> wrote: >> >> I am extremely impressed!!! This is great! Please let me know if I can >> help in any way. >> >> GC >> >> On Mon, Aug 7, 2023 at 10:35 AM <[email protected]> wrote: >> Gregory, >> >> Thank you. I over last night, I was able to solve almost all the issues with >> calling into GNUStep's AppKit and Foundation. I've been able to set up >> buttons that respond to selectors, create objects at runtime and register >> them with the runtime. Right now, I am working on generalizing a sort of >> "Smart" version of obj_msgSend that allows me to not have to write a >> separate version of that handles each type parameters. As it is now, the >> only way I am getting it to work is to make a version of objc_msgSend that >> explicitly takes, for example, an NSRect, or id. >> >> This is probably because I just don't fully understand how pointers work in >> Swift. If anyone has any idea of how we can generalize the function, I would >> greatly appreciate it. Thanks! >> >> Below is a screen shot of a working app written in Swift. The button does >> work and does open the other window. It's pretty cool. You can see the code >> on my GitHub. It's messy still. >> >> >> <Image 8-7-23 at 9.33 AM.jpeg> >> >>> On Aug 6, 2023, at 7:59 PM, Gregory Casamento <[email protected]> >>> wrote: >>> >>> Hey, I just want you to know that this is VERY VERY cool!!! Yours, GC >>> >>> On Sun, Aug 6, 2023 at 12:05 PM <[email protected]> wrote: >>> I have solved the NSWindow initializer issue. I didn't realize I was >>> passing Swift's Foundation.NSRect and not the C version. Sill haven't >>> solved the issues regarding adding new ObjC classes to the runtime at >>> runtime through Swift. Any ideas here would be appreciated. >>> >>> The image below is an GNUStep app written in Swift. The Menu is from the >>> GORM file from the Terminal (I had to start somewhere!) >>> >>> <Screenshot 2023-08-06 at 10.54.06 AM.png> >>> >>> >>>> On Aug 5, 2023, at 9:03 PM, [email protected] wrote: >>>> >>>> I just wanted to update everyone on my progress and solicit some help if >>>> possible. >>>> >>>> State of my progress: >>>> I've had a lot of success patching into GNUStep's libobjc2 C runtime from >>>> within Swift. I've been able to create NSWindows through Swift, call >>>> methods, et cetera. You can see my progress here >>>> https://github.com/austintatiousness/GNUStepSwiftBridge . This assumes >>>> that you're running this from within OnFlapp's GNUStep Desktop. >>>> >>>> Solution to objcSendMessage: >>>> Because Swift doesn't allow variable argument parameters, I had to create >>>> various versions of objcSendMessage (e.g forSwift_objcSendMessage1, >>>> forSwift_objcSendMessage2, forSwift_objcSendMessage3) to accommodate >>>> various number of arguments. >>>> >>>> Problem 1: NSWindow initWithContentRect:styleMask:backing:defer >>>> >>>> 1) I am having trouble with the NSWindow.initWith… functions. I am sure >>>> that it is because of the way that I am casting all the values from Swift >>>> into to the C implementation. Either I just don't understand how the >>>> casting between Swift and C works OR I am just using the wrong variables. >>>> I include a C version of the NSRect struct in my project. >>>> >>>> let nsWindowClass = objc_getClass("NSWindow") >>>> var allocatedObject = forSwift_objcSendMessage(&nsWindowClass!.pointee, >>>> sel_registerName("alloc")) >>>> >>>> var styleMask: UInt64 = 1 + 2 + 4 >>>> var backingStoreType: UInt64 = 0 >>>> var deferr: UInt8 = 0 >>>> var rect = NSRect(x: 200, y: 200, width: 300, height: 300) >>>> >>>> allocatedObject = forSwift_objcSendMessage4(&allocatedObject!.pointee, >>>> sel_registerName("initWithContentRect:styleMask:backing:defer:"), &rect, >>>> &styleMask, &backingStoreType, &deferr) >>>> >>>> I've tried several times to change the various integer types from UInt64 >>>> to UInt8 to no avail. >>>> >>>> Problem 2: Registering new classes with the runtime. >>>> This is the current state of the HelloWorld target: >>>> >>>> For reasons I cannot explain, I am able to allocate a new obj-c object >>>> with objc_allocateClassPair and then register it using >>>> objc_registerClassPair but when objc_getClass using the same class name >>>> that I registered, it returns nil. >>>> >>>> Any help would be appreciated. I am currently unable to make progress on >>>> adding delegates with out being able to register new ObjC classes with the >>>> runtime. >>>> >>>> Thanks! >>> >>> >>> >>> -- >>> Gregory Casamento >>> GNUstep Lead Developer / OLC, Principal Consultant >>> http://www.gnustep.org - http://heronsperch.blogspot.com >>> https://www.patreon.com/bePatron?u=352392 - Become a Patron >>> https://www.openhub.net/languages/objective_c - OpenHub standings >> >> >> >> -- >> Gregory Casamento >> GNUstep Lead Developer / OLC, Principal Consultant >> http://www.gnustep.org - http://heronsperch.blogspot.com >> https://www.patreon.com/bePatron?u=352392 - Become a Patron >> https://www.openhub.net/languages/objective_c - OpenHub standings >
