[{"data":1,"prerenderedAt":232},["ShallowReactive",2],{"i-circle-flags:fr":3,"project-en-\u002Fprojects\u002Fesim-compatibility-checker":8,"projects-nav-en":199,"i-mdi:apple":222,"i-mdi:android":225,"i-mdi:npm":227,"i-logos:npm-icon":229},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,512,false,"\u003Cmask id=\"SVGqdEcMdXs\">\u003Ccircle cx=\"256\" cy=\"256\" r=\"256\" fill=\"#fff\"\u002F>\u003C\u002Fmask>\u003Cg mask=\"url(#SVGqdEcMdXs)\">\u003Cpath fill=\"#eee\" d=\"M167 0h178l25.9 252.3L345 512H167l-29.8-253.4z\"\u002F>\u003Cpath fill=\"#0052b4\" d=\"M0 0h167v512H0z\"\u002F>\u003Cpath fill=\"#d80027\" d=\"M345 0h167v512H345z\"\u002F>\u003C\u002Fg>",{"id":9,"title":10,"appStore":11,"body":12,"company":165,"cover":11,"description":166,"extension":167,"gallery":11,"illustration":11,"kind":168,"links":169,"live":11,"meta":176,"metrics":177,"navigation":181,"order":161,"ownership":182,"path":183,"platforms":184,"playStore":11,"role":187,"seo":188,"stack":189,"stem":195,"summary":196,"year":197,"__hash__":198},"projects_en\u002Fprojects\u002Fesim-compatibility-checker.md","react-native-esim-compatibility-checker",null,{"type":13,"value":14,"toc":151},"minimark",[15,20,29,33,36,40,65,69,74,92,96,124,127,131,134,138],[16,17,19],"h2",{"id":18},"context","Context",[21,22,23,24,28],"p",{},"Every eSIM app has the same support problem: users buy a plan, then discover their phone can't install it. The usual advice — \"dial ",[25,26,27],"code",{},"*#06#"," and look for an EID\" — confuses users, and many apps guess from a hard-coded list of models.",[16,30,32],{"id":31},"role","Role",[21,34,35],{},"Design, implementation, tests, npm publication, and integration into the GoSIM app.",[16,37,39],{"id":38},"challenge","Challenge",[41,42,43,59],"ul",{},[44,45,46,50,51,54,55,58],"li",{},[47,48,49],"strong",{},"No single API tells the truth."," Apple's ",[25,52,53],{},"supportsCellularPlan()"," depends on carrier entitlements and returns ",[25,56,57],{},"false"," on many eSIM-capable iPhones; Android signals depend on OS version and carrier builds.",[44,60,61,64],{},[47,62,63],{},"Both errors are costly."," Blocking a capable device loses a sale; allowing an incapable one creates a refund.",[16,66,68],{"id":67},"approach","Approach",[70,71,73],"h3",{"id":72},"three-answers-not-two","Three answers, not two",[21,75,76,77,80,81,84,85,88,89,91],{},"Returns ",[25,78,79],{},"supported",", ",[25,82,83],{},"unsupported"," or ",[25,86,87],{},"unknown"," — ",[25,90,87],{}," means \"ask the user\" instead of guessing.",[70,93,95],{"id":94},"per-platform-rules","Per-platform rules",[41,97,98,104,110],{},[44,99,100,103],{},[47,101,102],{},"iPhone:"," hardware generation numbers split exactly where eSIM starts — a comparison that stays correct for future models.",[44,105,106,109],{},[47,107,108],{},"iPad:"," a small table of eSIM-capable families plus cellular-radio detection, since Wi-Fi models share identifiers.",[44,111,112,115,116,119,120,123],{},[47,113,114],{},"Android:"," ",[25,117,118],{},"EuiccManager.isEnabled()"," from Android 9 and the ",[25,121,122],{},"telephony.euicc"," feature from Android 13 — either positive wins.",[21,125,126],{},"Each result reports which signal decided and warns when signals disagree.",[70,128,130],{"id":129},"a-catalog-that-updates-without-releases","A catalog that updates without releases",[21,132,133],{},"Bundled, searchable catalog of eSIM devices for \"supported devices\" screens; works offline, refreshable from a URL, and malformed updates are rejected.",[16,135,137],{"id":136},"results","Results",[41,139,140,143,148],{},[44,141,142],{},"Published on npm with native Swift and Kotlin modules and a Jest test suite.",[44,144,145],{},[47,146,147],{},"150+ downloads in the first month.",[44,149,150],{},"Powers GoSIM's pre-checkout compatibility screen in production.",{"title":152,"searchDepth":153,"depth":153,"links":154},"",2,[155,156,157,158,164],{"id":18,"depth":153,"text":19},{"id":31,"depth":153,"text":32},{"id":38,"depth":153,"text":39},{"id":67,"depth":153,"text":68,"children":159},[160,162,163],{"id":72,"depth":161,"text":73},3,{"id":94,"depth":161,"text":95},{"id":129,"depth":161,"text":130},{"id":136,"depth":153,"text":137},"Open source","Open-source React Native library that asks the device itself whether it supports eSIM — native Swift and Kotlin, tested, and running in production in GoSIM.","md","library",[170,173],{"label":171,"href":172},"GitHub","https:\u002F\u002Fgithub.com\u002FGhYoune\u002Freact-native-esim-compatibility-checker",{"label":174,"href":175},"npm","https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Freact-native-esim-compatibility-checker",{},[178,179,180],"Published on npm","150+ downloads in its first month","Used in production by GoSIM",true,"personal","\u002Fprojects\u002Fesim-compatibility-checker",[185,186,174],"ios","android","Author & maintainer",{"title":10,"description":166},[190,191,192,193,194],"TypeScript","Swift","Kotlin","React Native (Turbo Modules)","Jest","projects\u002Fesim-compatibility-checker","Open-source React Native library that detects eSIM support natively on iOS and Android.","2026","rqPYSwGnla953fCNADjxDBjPDOvg4PCDaftwtkxsJMI",[200,203,206,207,210,213,216,219],{"path":201,"title":202},"\u002Fprojects\u002Fgosim","GoSIM — eSIM app rebuilt in React Native",{"path":204,"title":205},"\u002Fprojects\u002Fpresalio","Presalio — field sales & distribution suite",{"path":183,"title":10},{"path":208,"title":209},"\u002Fprojects\u002Fefficy","Efficy — store audits & performance scoring",{"path":211,"title":212},"\u002Fprojects\u002Fgosim-landing","GoSIM website — browse and buy eSIMs on the web",{"path":214,"title":215},"\u002Fprojects\u002Fadele-invest","Adele Invest — off-market real-estate platform",{"path":217,"title":218},"\u002Fprojects\u002Fgo-landing","GO — the super-app's website",{"path":220,"title":221},"\u002Fprojects\u002Fcall360","Call360 — multi-tenant CRM, call center & clinic module",{"left":4,"top":4,"width":223,"height":223,"rotate":4,"vFlip":6,"hFlip":6,"body":224},24,"\u003Cpath fill=\"currentColor\" d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47c-1.34.03-1.77-.79-3.29-.79c-1.53 0-2 .77-3.27.82c-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51c1.28-.02 2.5.87 3.29.87c.78 0 2.26-1.07 3.81-.91c.65.03 2.47.26 3.64 1.98c-.09.06-2.17 1.28-2.15 3.81c.03 3.02 2.65 4.03 2.68 4.04c-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5c.13 1.17-.34 2.35-1.04 3.19c-.69.85-1.83 1.51-2.95 1.42c-.15-1.15.41-2.35 1.05-3.11\"\u002F>",{"left":4,"top":4,"width":223,"height":223,"rotate":4,"vFlip":6,"hFlip":6,"body":226},"\u003Cpath fill=\"currentColor\" d=\"M16.61 15.15c-.46 0-.84-.37-.84-.83s.38-.82.84-.82s.84.36.84.82s-.38.83-.84.83m-9.2 0c-.46 0-.84-.37-.84-.83s.38-.82.84-.82s.83.36.83.82s-.37.83-.83.83m9.5-5.01l1.67-2.88c.09-.17.03-.38-.13-.47c-.17-.1-.38-.04-.45.13l-1.71 2.91A10.15 10.15 0 0 0 12 8.91c-1.53 0-3 .33-4.27.91L6.04 6.91a.334.334 0 0 0-.47-.13c-.17.09-.22.3-.13.47l1.66 2.88C4.25 11.69 2.29 14.58 2 18h20c-.28-3.41-2.23-6.3-5.09-7.86\"\u002F>",{"left":4,"top":4,"width":223,"height":223,"rotate":4,"vFlip":6,"hFlip":6,"body":228},"\u003Cpath fill=\"currentColor\" d=\"M4 10v4h2v-3h1v3h1v-4zm5 0v5h2v-1h2v-4zm3 1v2h-1v-2zm2-1v4h2v-3h1v3h1v-3h1v3h1v-4zM3 9h18v6h-9v1H8v-1H3z\"\u002F>",{"left":4,"top":4,"width":230,"height":230,"rotate":4,"vFlip":6,"hFlip":6,"body":231},256,"\u003Cpath fill=\"#c12127\" d=\"M0 256V0h256v256z\"\u002F>\u003Cpath fill=\"#fff\" d=\"M48 48h160v160h-32V80h-48v128H48z\"\u002F>",1791726330176]