fix(macos): probe .dylib + guard bare load-shared-object calls

ober

2ac13b7547611d4cb40985ec496a6e9623f90155

diff --git a/lib/std/crypto/native-rust.ss b/lib/std/crypto/native-rust.ss
index 1643ca8..2e93637 100644
--- a/lib/std/crypto/native-rust.ss
+++ b/lib/std/crypto/native-rust.ss
@@ -32,11 +32,16 @@
 
   ;; Load the Rust native library (for dynamic builds).
   ;; In static builds, symbols are pre-registered via Sforeign_symbol — skip loading.
+  ;; Try .so (Linux/FreeBSD) and .dylib (macOS); CWD-relative and lib/ subdir.
   (def _native-loaded
     (or (try (begin (load-shared-object "libjerboa_native.so") #t)
          (catch (e) #f))
+        (try (begin (load-shared-object "libjerboa_native.dylib") #t)
+         (catch (e) #f))
         (try (begin (load-shared-object "lib/libjerboa_native.so") #t)
          (catch (e) #f))
+        (try (begin (load-shared-object "lib/libjerboa_native.dylib") #t)
+         (catch (e) #f))
         #t))
 
   ;; Helper: extract sub-bytevector (avoids Chez extension warning)
diff --git a/lib/std/os/temporaries.ss b/lib/std/os/temporaries.ss
index dda3219..4d4df3f 100644
--- a/lib/std/os/temporaries.ss
+++ b/lib/std/os/temporaries.ss
@@ -19,7 +19,12 @@
          (catch (e) #f))
               (try (load-shared-object "libc.so.6")
          (catch (e) #f))
-              (load-shared-object "libc.so")))))
+              (try (load-shared-object "libc.so")
+         (catch (e) #f))
+              (try (load-shared-object "libSystem.dylib")
+         (catch (e) #f))
+              (try (load-shared-object "libSystem.B.dylib")
+         (catch (e) #f))))))
   (def getpid (foreign-procedure "getpid" () int))
 
   (def *temp-counter* 0)
diff --git a/tests/test-ffi.ss b/tests/test-ffi.ss
index 916a34f..9ba73f4 100644
--- a/tests/test-ffi.ss
+++ b/tests/test-ffi.ss
@@ -28,10 +28,15 @@
 
 ;; c-lambda creates a foreign-procedure
 ;; We can test that c-lambda expands and produces a procedure for libc functions
-(load-shared-object
-  (case (machine-type)
-    [(a6fb ta6fb i3fb ti3fb arm64fb) "libc.so.7"]
-    [else "libc.so.6"]))
+(case (machine-type)
+  [(a6fb ta6fb i3fb ti3fb arm64fb tarm64fb)
+   (load-shared-object "libc.so.7")]
+  [(a6osx ta6osx arm64osx tarm64osx)
+   (or (guard (_ [#t #f]) (load-shared-object "libSystem.dylib")   #t)
+       (guard (_ [#t #f]) (load-shared-object "libSystem.B.dylib") #t)
+       (error 'test-ffi "could not load libSystem on macOS"))]
+  [else
+   (load-shared-object "libc.so.6")])
 
 ;; Test c-lambda with a real C function
 (let ([my-getpid (c-lambda () int "getpid")])