cla-bot · GitHub

Auto-generated SkipFirebaseFirestore_Bridge.swift was calling
getMethodID("decoded", "()Ljava/lang/Object;")! on a method the
JVM bytecode doesn't expose — Kotlin inline reified functions are
inlined at the call site and don't emit a callable .class method.
Swift-native Android callers (non-@bridge-annotated app code)
crashed immediately with a force-unwrap nil trap as soon as the
DocumentSnapshot class was loaded.
Adding // SKIP @NoBridge tells the bridge generator to skip emitting
the JNI lookup for this declaration. Kotlin callers (Skip-transpiled
.kt and @bridge-annotated Swift) inline the body at the call site
and are unaffected.
Verified: rebuilding a downstream Skip app with this patch removes
Java_decoded_5_methodID from the generated bridge file (other
DocumentSnapshot entries — constructor, kotlin, getDoc — stay intact).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Closed

marcprux

Per review: rather than @NoBridge (which drops decoded() from the bridge
surface entirely), mark it @inline(__always). Skip emits a Kotlin
`inline fun <reified T>` so the body is inlined at the call site — no
JVM-callable `decoded` method exists, so the bridge generator emits no
broken JNI lookup, AND the reified signature stays reachable for
native-Swift Android callers. Drops the manual `// SKIP DECLARE`.
See https://skip.dev/docs/swiftsupport/#reified-types
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@marcprux

@vincentborko

Read the original on github.com ↗