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
> 

Reply via email to