{"_id":"@artim-industries/stacktrace-sdk-react-native","_rev":"9-a990317d51e0ac43b014b5f8cd61a618","name":"@artim-industries/stacktrace-sdk-react-native","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.0","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.0","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"25c347f2b391076bff84d055a60b7f894dd059ff","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.0.tgz","fileCount":17,"integrity":"sha512-Fao5zzdEAr9CGjOH6nc9mr9GsGwuqiXjHXR2NaebqSfNPO3famhg5Id6CSurYBUmnnz+8RrOTJnVz1E7sCQWkA==","signatures":[{"sig":"MEUCIQDAeuXELyE+RicVHWfNtJmPVeWqooHdamevs61mtpvykQIgE4PsqjtjPzIKQECDsjYF7vl9uZfolRf0ftawMyiWCjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15315},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"a58253cbb8cb2a0c39288bd4a71f033fa57f744c","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"react-native":"^0.85.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.0_1776618725441_0.9125569704958003","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.1","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.1","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"ee748a784b06aba604ada795a540ee8b2ef1d2c1","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.1.tgz","fileCount":17,"integrity":"sha512-wg//V9oKo7Nf/bYAPi72TaswUJS3mXTJpeRZ93K4Bw62pD22mkX5+kqStR8zajuClF6R5qR1nXG91kLP4vNoAw==","signatures":[{"sig":"MEQCIGKd+UU3c3ug1Yf4N4XRIW+W0euKww9e3AcpdCygSEQBAiBIra6L1ny3PIB8PJz0mcfMHogYZPgY8uAxPr4MOKreaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15315},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"212fe86a2f2823a0ecf8ae1262367cbdfc3a8ca6","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"react-native":"^0.85.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.1_1776618920135_0.7052604034098302","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.2","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.2","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"55e1f36a6ff297fc9dbe8cd89a5462ea4731c21d","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.2.tgz","fileCount":19,"integrity":"sha512-FkYS8llw6T5tIqNgP3RdERfGxsyHVLV88gQorEZB3mOmjSMwye4eXRXWxV71YaL7TBdqc5+5h8PgPvs9IqNKCw==","signatures":[{"sig":"MEYCIQCy2g1aQ/bDUMhaZq4aNiz1HV6LeQQUQ8RAryT7PRlopgIhAK6xtqcvKivibTZmhvNe3bqVwkloEeToOONQt1MBIDwX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70946},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"83737043d435189567c2944b70b3a7622500d310","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependencies":{"react":"^19.2.5","react-native":"^0.85.1","react-native-svg":">=15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.2_1776717123959_0.8234553575236598","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.3","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.3","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"6d8a5b6cd465a5ba7321cf0e924967e9ee00734a","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.3.tgz","fileCount":19,"integrity":"sha512-T6Q59qlpWs+zmOtpLjjIa03/X7aIqLLxoJuOfiYtaCQgHFRYl71N3zxT3A7hsBzPW6eoG8zbpagL7qTd3G1g7w==","signatures":[{"sig":"MEUCIEYr2GBs8Rawkwg9BLtc+7n03g7supFlWZu7CH+i6zuIAiEArtmIS+k1lSuzJ+tPjiAQxU4c/2Ei+JR3o6T6TsrNxIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70978},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"b3868bd5fcbac55c4ee1f5579d2c80f347d47afd","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependencies":{"react":"^19.2.5","react-native":"^0.85.1","react-native-svg":">=15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.3_1776718095989_0.6122969162895056","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.4","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.4","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"9f160e78f20d63ce8b57868b44663ed300b59114","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.4.tgz","fileCount":19,"integrity":"sha512-6yu7Z5T6m4geOrllamHeAfsBlIoSvyQXbZrvC7EiikyLGnqVEI37frycrJEd3RVWTNBco5IetxBGrZN3tItabg==","signatures":[{"sig":"MEYCIQDwUa0WZDGTwkgEWa/+Yp43rn4QSAzBS3czderEx2khSgIhAI+VVpKGo0wN0GCQwMLoV8ZExMNL+X1BLKtNux96pKp5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70978},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"d4896dccfbcadc68d93a25073d0703a0b2b0a6fa","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependencies":{"react":"^19.1.0","react-native":"^0.85.1","react-native-svg":">=15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.4_1776718443588_0.8224809285926362","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.5","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.5","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"2c08efbc1823f56d138b37af8331acd672993d61","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.5.tgz","fileCount":19,"integrity":"sha512-RZPvyRwiC+KklaFRO3R7PdQY/qwWRdvmYS7Om6DTvhNBDz8uDT48UhRF/I1gS6sQ7AgM0jgtiRW2HeZfaVZlrQ==","signatures":[{"sig":"MEQCICCwqK8hBHm9xdop27pwMbxHQKfdvzcmso6xi1dEXfHRAiBLZY1FVH+yZI4g1r6L9phkaC4vZ5fdhYL0Xp19Ooxecg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70978},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"948efa08ceb787e86e5f22f3c68b5c3bf5fa56da","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependencies":{"react":"^19.1.0","react-native":"^0.81.5","react-native-svg":">=15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.5_1776718627811_0.3028584140178252","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.6","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.6","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"7601b7d03b8e7854eb22da513b81cdfc22f556db","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.6.tgz","fileCount":63,"integrity":"sha512-8dss+MwxTpqhHOwlViFP8caV2suNDpSNBJgfr6MQdvcg/olOC5kDYuKD45H9J4AkJx+Dio4pBBK5JuaygH533g==","signatures":[{"sig":"MEYCIQDdTJRpzgwHaRD0UirHIMfFUaskQ2do8kQttHli43enMgIhAM79B83cto/APygzczne7rpuYKO7m7DRI+auwqD6Nr1d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288341},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"115de66d2f1f6d12e07a9e20019ae39ce6574961","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","react-native":{"platforms":{"ios":"ios","android":"android"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependencies":{"react":"^19.1.0","react-native":"^0.81.5","react-native-svg":">=15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.6_1776776887349_0.8384522009545379","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.0.7","_id":"@artim-industries/stacktrace-sdk-react-native@1.0.7","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"dist":{"shasum":"70e19f66e1859d2e69435f48a881db779b098109","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.0.7.tgz","fileCount":63,"integrity":"sha512-Y7bIyPfAh9hD2NDSze8KPdzv/DTKZ1cjFDzrIMHZKFwO6dqTsSDXL1lRWrLH/GwaLK3ytfevOdnOe3GJcPZwqg==","signatures":[{"sig":"MEUCIDy83ovfSQAAlJ7C7qNgp9qNDIRrxmHHLhbRzqQRF3CLAiEA7+PgNlgikgPzBUdPzhPfk85PowQ7sNQlV6WSTBLW46U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288341},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"gitHead":"7fdb4c8a62f5485306fc2cc30d8f5c9a560028ab","scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"_npmVersion":"10.9.2","description":"React Native SDK for Artim Stacktrace.","directories":{},"_nodeVersion":"22.17.0","react-native":{"platforms":{"ios":"ios","android":"android"}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependencies":{"react":"^19.1.0","react-native":"^0.81.5","react-native-svg":">=15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/stacktrace-sdk-react-native_1.0.7_1776777223435_0.5342519532797791","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@artim-industries/stacktrace-sdk-react-native","version":"1.1.0","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":"./dist/index.js"},"react-native":{"platforms":{"ios":"ios","android":"android"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --out-dir dist"},"peerDependencies":{"react":"^19.1.0","react-native":"^0.81.5","react-native-svg":">=15.0.0","expo-constants":">=15.0.0"},"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.3","@types/react":"^19.2.14","react-native-svg":"^15.11.2"},"peerDependenciesMeta":{"expo-constants":{"optional":true},"react-native-svg":{"optional":true}},"gitHead":"2da8703d83e6095d65a907d514d35c8879623046","_id":"@artim-industries/stacktrace-sdk-react-native@1.1.0","description":"React Native SDK for Artim Stacktrace.","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-5GewnvZNjCfYsxnXE3sOHC/oXOROZUm7+627AKDTUVrU8+BGh8Y1o/LxC6iz12KwK73a0m3mUuuIRifdadRrmA==","shasum":"42fc9f065704bd6ac57d2a48908532905eec2fa2","tarball":"https://registry.npmjs.org/@artim-industries/stacktrace-sdk-react-native/-/stacktrace-sdk-react-native-1.1.0.tgz","fileCount":24,"unpackedSize":114501,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEBAFJ8izYLYw4L3vgh4R2xr277hRibEVUHeKkKPeWWhAiBN8odcyhdkLjMiSpS9IDylVRpd1Rl08PN1nk3QkoFXnA=="}]},"_npmUser":{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"},"directories":{},"maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/stacktrace-sdk-react-native_1.1.0_1787578018920_0.6291515671781893"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-19T17:12:05.370Z","modified":"2026-08-24T13:26:59.233Z","1.0.0":"2026-04-19T17:12:05.638Z","1.0.1":"2026-04-19T17:15:20.342Z","1.0.2":"2026-04-20T20:32:04.101Z","1.0.3":"2026-04-20T20:48:16.141Z","1.0.4":"2026-04-20T20:54:03.735Z","1.0.5":"2026-04-20T20:57:07.955Z","1.0.6":"2026-04-21T13:08:07.538Z","1.0.7":"2026-04-21T13:13:44.707Z","1.1.0":"2026-08-24T13:26:59.050Z"},"description":"React Native SDK for Artim Stacktrace.","maintainers":[{"name":"mauritzlemgen","email":"mauritzlemgen@artim-industries.com"}],"readme":"# @artim-industries/stacktrace-sdk-react-native\n\nReact Native SDK for Artim Stacktrace.\n\n## Installation\n\n```bash\nnpm install @artim-industries/stacktrace-sdk-react-native\n\n(npm install react-native-svg)\n```\n\n## Usage\n\n```ts\nimport { ArtimStacktrace } from '@artim-industries/stacktrace-sdk-react-native'\n\nArtimStacktrace.init({\n  apiKey: 'your-api-key',\n  projectId: 'your-project-id',\n})\n\nArtimStacktrace.captureMessage('Hello from React Native')\n```\n\nEnvironment and release are detected automatically — pass them only to override\nthe detection.\n\n## Environment detection\n\nOne project holds several environments (`development`, `staging`, `production`,\nplus any custom ones). Resolved in this order:\n\n1. `environment` passed to `init()`\n2. `EXPO_PUBLIC_ARTIM_ENV` / `ARTIM_ENV`\n3. `__DEV__` → `development`\n4. Expo update channel or release channel (`preview` and `staging` → `staging`),\n   or `extra.artimEnvironment` in `app.json`\n5. otherwise `production`\n\n```json\n// app.json\n{\n  \"expo\": {\n    \"extra\": { \"artimEnvironment\": \"staging\" }\n  }\n}\n```\n\n## Release detection\n\n1. `release` passed to `init()`\n2. `EXPO_PUBLIC_ARTIM_RELEASE` / `ARTIM_RELEASE`\n3. `expo-constants` — `expoConfig.version`, or `nativeAppVersion` plus\n   `nativeBuildVersion` (`1.4.0+42`)\n4. `\"unknown\"` plus a console warning\n\n`expo-constants` is an optional peer dependency. Bare React Native apps without\nit should pass `release` to `init()` or set `EXPO_PUBLIC_ARTIM_RELEASE`.\n\nTo check what the SDK resolved:\n\n```ts\nArtimStacktrace.getEnvironment()\nArtimStacktrace.getRelease()\n```\n\n## API\n\n- `init(config)`\n- `captureException(error, level)`\n- `captureNativeException(payload, level)`\n- `captureMessage(message, level)`\n- `setUser(user)`\n- `identify(fn)`\n- `getEnvironment()` / `getRelease()`\n- `ArtimErrorBoundary`\n\n## Native error tracking\n\nFür native Fehler brauchst du eine zusätzliche native Brücke in iOS/Android:\n\n- `init(config)` startet den JS-ErrorHandler und installiert automatisch den nativen Handler, sofern das native Modul vorhanden ist\n- `captureNativeException(payload)` kann von einem nativen Modul aufgerufen werden, wenn ein Crash oder eine native Ausnahme auftritt\n\nDie Payload sollte mindestens enthalten:\n\n```ts\n{\n  message: string\n  stacktrace: string[]\n  level: 'error' | 'warning' | 'fatal'\n  native: true\n  exceptionType?: string\n  osName?: string\n  osVersion?: string\n  threadName?: string\n  extra?: Record<string, any>\n}\n```\n\n`ArtimStacktrace` schickt diese Daten dann wie normale Fehler an den Backend-Endpunkt.\n\n## Native Auto-Capture\n\nDie Bibliothek liefert native Auto-Capture-Unterstützung für iOS und Android. Dabei werden native Crash-Handler installiert und native Ausnahmen automatisch an den Artim Stacktrace-Endpunkt gesendet.\n\n### JS Initialisierung\n\n`ArtimStacktrace.init({ enableNativeErrors: true })` startet den JS-Error-Handler und ruft zusätzlich das native Modul `ArtimStacktraceNative.installNativeHandler(config)` auf.\n\nDas ist ausreichend für native Errors, die nach dem Laden der React Native-Engine passieren.\n\n### iOS (früher Install-Pfad)\n\nFür echte Startup-Crash-Abdeckung unter iOS sollte der native Handler so früh wie möglich installiert werden, also im App-Startcode, bevor die React Native-UI geladen wird.\n\n1. Füge den nativen Header zur Bridging Header-Datei hinzu:\n\n```objc\n#import <ArtimStacktraceSdkReactNative/ArtimStacktraceNative.h>\n```\n\n2. Installiere den Handler in `AppDelegate.swift` vor `factory.startReactNative(...)`:\n\n```swift\nprivate func installArtimStacktraceNativeHandler() {\n  let config: [String: Any] = [\n    \"apiKey\": \"your-api-key\",\n    \"endpoint\": \"https://stacktrace-backend.artim-industries.com/api/events\",\n    \"environment\": \"production\",\n    \"release\": \"1.0.0\",\n    \"platform\": \"react-native\",\n  ]\n\n  let module = ArtimStacktraceNative()\n  module.installNativeHandler(config)\n}\n```\n\n3. Rufe `installArtimStacktraceNativeHandler()` in `application(_:didFinishLaunchingWithOptions:)` auf.\n\nDas sorgt dafür, dass native Abstürze wie `fatalError` oder frühzeitige Objective-C-Ausnahmen ebenfalls erfasst werden.\n\n### Android\n\nUnter Android wird der native Handler durch das native Modul installiert, wenn `ArtimStacktrace.init(...)` ausgeführt wird und das native Modul geladen wurde.\n\nDas ist häufig ausreichend für native Fehler nach dem Start der React Native-Engine.\n\nFür einen noch früheren Schutz, z. B. vor JS-Bundle-Initialisierung, solltest du den Handler direkt in `MainApplication.java` oder in der Android-`Application.onCreate()`-Methode installieren, bevor die React Native-Instanz erstellt wird.\n\nIn diesem Fall muss der Handler ähnlich wie im SDK konfiguriert werden:\n\n- `Thread.setDefaultUncaughtExceptionHandler(...)`\n- Erstelle und sende das Payload an denselben Backend-Endpunkt\n\n### Manuelle native Übergabe\n\nFalls du zusätzliche native Fehler manuell erfassen möchtest, kannst du das native Modul ebenfalls direkt verwenden:\n\n```ts\nimport { ArtimStacktrace } from '@artim-industries/stacktrace-sdk-react-native'\n\nArtimStacktrace.captureNativeException({\n  message: 'Native error from Android/iOS',\n  stacktrace: ['line 1', 'line 2'],\n  level: 'fatal',\n  native: true,\n  exceptionType: 'NullPointerException',\n  osName: 'Android',\n  osVersion: '14',\n  threadName: 'main',\n})\n```\n\n## Error boundary\n\n```ts\n// providers/ErrorProvider.tsx\n\n\"use client\";\n\nimport { useRef } from \"react\";\nimport { ArtimErrorBoundary } from \"@artim-industries/stacktrace-sdk-react-native\";\nimport { ArtimStacktrace } from \"@artim-industries/stacktrace-sdk-react-native\";\nimport { router } from \"expo-router\";\nimport { Linking } from \"react-native\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\n\nexport default function ErrorProvider({\n  children,\n  pathname,\n}: {\n  children: React.ReactNode;\n  pathname?: string;\n}) {\n  const initialized = useRef(false);\n\n  if (typeof window !== \"undefined\" && !initialized.current) {\n    ArtimStacktrace.init({\n      apiKey: \"your_api_key\",\n      environment: \"production\",\n      release: \"1.0.0\",\n    });\n    initialized.current = true;\n  }\n\n  const onContactSupport = () => {\n    // for example\n\n    Linking.openURL(\"https://support.artim-industries.com\");\n  };\n\n  const onClearCache = async () => {\n    // for example\n\n    await AsyncStorage.clear();\n    router.reload();\n  };\n\n  const onSignOut = async () => {\n    // for example\n\n    await AsyncStorage.clear();\n    router.push(\"/splash\");\n  };\n\n  return (\n    <ArtimErrorBoundary\n      pathname={pathname}\n      onContactSupport={onContactSupport}\n      onClearCache={onClearCache}\n      onSignOut={onSignOut}\n      errorComponent={<h1> Hello from Custom Error Component </h1>}\n    >\n      {children}\n    </ArtimErrorBoundary>\n  );\n}\n\n```\n\n`ArtimErrorBoundary` fängt Rendering- und Lifecycle-Fehler in React Native-Komponenten ab und meldet sie an Artim Stacktrace. Du kannst per `errorComponent` ein eigenes Error-Page-Design übergeben.\n","readmeFilename":"README.md"}