SDK reference
iOS
What the SDK does on iOS specifically — and the honest answer about native code: there isn't any.
@fictura/sdk is TypeScript all the way down: no Swift, no CocoaPods, no native module. That is a deliberate trade — installation stays one npm install, and nothing about your Xcode build changes. On iOS it behaves as follows:
- Device identity lives in the Keychain via
expo-secure-store(accessible after first unlock), so it survives reinstalls; Android uses the SSAID viaexpo-application. - StoreKit is reached through your adapter, never directly. The SDK never imports
react-native-purchases; you hand it aPurchasesAdapterwrapping whatever billing SDK you run, and purchases execute natively through it. - Web checkout opens Safari — the system browser, via
Linking.openURL, never an in-app webview. That is the compliance-load-bearing rule; see How web checkout works. - Push uses Expo's push service:
registerForPush()obtains the Expo token (the EASprojectIdis picked up from your app config when present) and registers it. No APNs keys touch Fictura. - Native crashes are not captured — a Swift/Kotlin crash needs a native handler. Keep a crash reporter for those; JS crashes, rejections and logged errors are covered.
Testing identity on device
Because the device id lives in the Keychain, deleting the app does not mint a new user. For QA runs set EXPO_PUBLIC_GROWTH_TEST_IDENTITY=1, which keeps the id in plain storage so an uninstall starts fresh.