Hello again list, Taylan,
On 2021-09-05 at 18:26 AEST, quoth Taylan Kammer
<taylan.kam...@gmail.com>:
To narrow down the issue, I'd attempt a few things, in order:
1. Compile only the C code, adding a main() function, just to
make sure the OS
and the chosen Guile version and such are working fine with
each other.
2. Compile pure Objective-C code, calling that run_guile()
function firstly
directly from the main() function in main.m of the
Objective-C program, and
commenting out the NSApplicationMain() call that would
initialize Apple's
application framework.
3. See if reactivating the NSApplicationMain() call causes
problems. (It should
be called *after* the Guile initialization.)
4. See if you can use Guile's C functions from
-applicationDidFinishLaunching:
e.g. by doing: scm_c_eval_string("(begin (display
'HelloWorld) (newline))")
If that works, we now have an Objective-C + Guile application,
and want to move
to using Swift instead. This is where my Apple knowledge hits
its limits because
I never used Swift. :-)
But I guess Swift should have something equivalent to the main()
function of C and
Objective-C, and calling Guile initialization from there might
do the trick.
Thank you very much for your tips. I was actually able to unstick
myself with your suggestions: first i created a blank Objective-C
CLI app and integrated Guile, that worked well! Next i created a
new, blank, Objective-C AppKit GUI app. The same procedure worked
well there, too.
The more challenging bit was learning how to take my existing
Swift app and (re-)introduce a main() in Objective-C. Because it
turns out that Swift has some conveniences that cause it to
autogenerate a _main symbol behind-the-scenes. In any case you
can turn that off and create an Objective-C main function (my
project didn't have Objective-C to start with, but it was enough
to create a new file with a main() copied from my earlier
from-scratch experiments) which - long story short - i was able to
modify and get Guile booting correctly! I was even able to
complete step 4, to my surprise (sort of), and call
scm_c_eval_string straight from my Application Kit code. This
takes a bit of fiddling (Apple's so-called Precompiled Bridging
Header) to make Swift aware of C-land functions, but my app
actually already has a Rust-based core which i call out to with
this mechanism so here i was on firmer ground.
I think there must have been something weird about the state of my
project last night, because initially i was still having the
EXC_BAD_ACCESS issues, but making a new branch off my main and
doing the above worked well.
It should be said that i still couldn't use the Homebrew-packaged
version of Guile because of the JIT errors i described elsewhere,
but this isn't a blocker because i'm able to compile my own
libguile with `--enable-jit=no`.
Thanks again, i spent all weekend messing with this and couldn't
figure it out, your input was super useful.
All the best,
p.