Description
Extension version: 2.0.0 (Mobile.Review.Ext.v2.0.0.yymps)
Device: iPhone 6s, iOS 15.8 (physical device, Debug build)
GameMaker: 2026 runtime, min iOS deployment target set to 15
Issue
The app crashes on launch (dyld symbol resolution failure) on any device running iOS < 16, purely from having the extension linked — the crash happens before any GML code runs, regardless of whether mobile_review_show() is ever called.
Crash log
dyld[20186]: Symbol not found: (_$s8StoreKit03AppA0O13requestReview2inySo13UIWindowSceneC_tFZ)
Referenced from: '.../Rooms.app/Rooms.debug.dylib'
Expected in: '/System/Library/Frameworks/StoreKit.framework/StoreKit'
Root cause found
source/src/ios/GMMobileReviewSwift.swift correctly guards the call:
guard #available(iOS 16.0, *) else { ... }
...
AppStore.requestReview(in: windowScene)
But the compiled static library ships the symbol as a hard (non-weak) undefined external reference:
nm -m Fw/GMMobileReview.xcframework/ios-arm64/libGMMobileReview.a | grep requestReview
(undefined) external _$s8StoreKit03AppA0O13requestReview2inySo13UIWindowSceneC_tFZ
Since it's not weak-imported, dyld hard-binds it at process launch and aborts if the running OS (< iOS 16) doesn't have that symbol — the #available runtime guard never gets a chance to run, because the crash happens at load time, not at call time.
Also note: GMMobileReview.yy declares StoreKit.framework with weakReference:false in iosSystemFrameworkEntries, but this setting appears to have no effect — the generated Rooms.xcodeproj doesn't even contain a separate StoreKit.framework link entry (only GMMobileReview.xcframework is linked), so there's no way to override this from the consuming project.
Expected
App should launch fine on iOS < 16 and mobile_review_show() should just report failure via callback on unsupported OS, per the documented #available guard.
Suggested fix
Recompile the library so the AppStore.requestReview symbol reference is emitted as weak (weak_import), matching the existing #available(iOS 16.0,*) guard, so dyld doesn't hard-require it on older OS.
Expected Change
App launches normally on iOS < 16 (no dyld crash). Calling mobile_review_show() on unsupported OS reports failure via the callback (success=false), matching the existing #available(iOS 16.0,*) guard in source — instead of crashing the whole app at launch before any code runs.
Sample Package
https://api.gamemaker.io/api/github/downloads/62d5adc1-ffb1-453b-8ea6-c2ebaf73b065
Steps To Reproduce
- Create/open a GameMaker project with iOS export target, min iOS deployment version set to 15
- Import Mobile.Review.Ext.v2.0.0.yymps (add MobileReview + ExtensionCore resources)
- Build and run for iOS device
- Install and launch on a physical device running iOS 15.x (tested: iPhone 6s, iOS 15.8)
- App crashes immediately on launch with a dyld symbol resolution error — before any GML code executes, without ever calling mobile_review_show()
How reliably can you recreate this issue using your steps above?
Always
Which version of GameMaker are you reporting this issue for?
IDE v2026.0.0.16 Runtime v2026.0.0.23
Which platform(s) are you seeing the problem on?
iOS
Description
Extension version: 2.0.0 (Mobile.Review.Ext.v2.0.0.yymps)
Device: iPhone 6s, iOS 15.8 (physical device, Debug build)
GameMaker: 2026 runtime, min iOS deployment target set to 15
Issue
The app crashes on launch (dyld symbol resolution failure) on any device running iOS < 16, purely from having the extension linked — the crash happens before any GML code runs, regardless of whether mobile_review_show() is ever called.
Crash log
dyld[20186]: Symbol not found: (_$s8StoreKit03AppA0O13requestReview2inySo13UIWindowSceneC_tFZ)
Referenced from: '.../Rooms.app/Rooms.debug.dylib'
Expected in: '/System/Library/Frameworks/StoreKit.framework/StoreKit'
Root cause found
source/src/ios/GMMobileReviewSwift.swift correctly guards the call:
But the compiled static library ships the symbol as a hard (non-weak) undefined external reference:
Since it's not weak-imported, dyld hard-binds it at process launch and aborts if the running OS (< iOS 16) doesn't have that symbol — the #available runtime guard never gets a chance to run, because the crash happens at load time, not at call time.
Also note: GMMobileReview.yy declares StoreKit.framework with weakReference:false in iosSystemFrameworkEntries, but this setting appears to have no effect — the generated Rooms.xcodeproj doesn't even contain a separate StoreKit.framework link entry (only GMMobileReview.xcframework is linked), so there's no way to override this from the consuming project.
Expected
App should launch fine on iOS < 16 and mobile_review_show() should just report failure via callback on unsupported OS, per the documented #available guard.
Suggested fix
Recompile the library so the AppStore.requestReview symbol reference is emitted as weak (weak_import), matching the existing #available(iOS 16.0,*) guard, so dyld doesn't hard-require it on older OS.
Expected Change
App launches normally on iOS < 16 (no dyld crash). Calling mobile_review_show() on unsupported OS reports failure via the callback (success=false), matching the existing #available(iOS 16.0,*) guard in source — instead of crashing the whole app at launch before any code runs.
Sample Package
https://api.gamemaker.io/api/github/downloads/62d5adc1-ffb1-453b-8ea6-c2ebaf73b065
Steps To Reproduce
How reliably can you recreate this issue using your steps above?
Always
Which version of GameMaker are you reporting this issue for?
IDE v2026.0.0.16 Runtime v2026.0.0.23
Which platform(s) are you seeing the problem on?
iOS