@sentry/wizard 3.42.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.node-cache/node-v22.14.0-darwin-arm64 +0 -0
- package/.node-cache/node-v22.14.0-darwin-x64 +0 -0
- package/.node-cache/node-v22.14.0-linux-arm64 +0 -0
- package/.node-cache/node-v22.14.0-linux-x64 +0 -0
- package/.node-cache/node-v22.14.0-win-x64.exe +0 -0
- package/CHANGELOG.md +26 -0
- package/COPYING +3575 -0
- package/bin.ts +85 -80
- package/dist/bin.js +44 -35
- package/dist/bin.js.map +1 -1
- package/dist/e2e-tests/jest.config.js +1 -1
- package/dist/e2e-tests/jest.config.js.map +1 -1
- package/dist/e2e-tests/tests/flutter.test.js +62 -147
- package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs.test.js +77 -175
- package/dist/e2e-tests/tests/nextjs.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-3.test.js +61 -162
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +62 -163
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/tests/remix.test.js +147 -189
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit.test.js +133 -187
- package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.d.ts +1 -1
- package/dist/e2e-tests/utils/index.js +113 -195
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/lib/Constants.js +5 -5
- package/dist/lib/Constants.js.map +1 -1
- package/dist/lib/Helper/BottomBar.d.ts +1 -1
- package/dist/lib/Helper/BottomBar.js +14 -15
- package/dist/lib/Helper/BottomBar.js.map +1 -1
- package/dist/lib/Helper/Env.js +5 -2
- package/dist/lib/Helper/Env.js.map +1 -1
- package/dist/lib/Helper/File.js +14 -27
- package/dist/lib/Helper/File.js.map +1 -1
- package/dist/lib/Helper/Git.js +24 -59
- package/dist/lib/Helper/Git.js.map +1 -1
- package/dist/lib/Helper/Logging.js +2 -2
- package/dist/lib/Helper/Logging.js.map +1 -1
- package/dist/lib/Helper/MergeConfig.js +4 -4
- package/dist/lib/Helper/MergeConfig.js.map +1 -1
- package/dist/lib/Helper/Package.d.ts +4 -1
- package/dist/lib/Helper/Package.js +12 -38
- package/dist/lib/Helper/Package.js.map +1 -1
- package/dist/lib/Helper/SentryCli.js +77 -149
- package/dist/lib/Helper/SentryCli.js.map +1 -1
- package/dist/lib/Helper/Wizard.js +29 -124
- package/dist/lib/Helper/Wizard.js.map +1 -1
- package/dist/lib/Helper/__tests__/File.js +4 -4
- package/dist/lib/Helper/__tests__/File.js.map +1 -1
- package/dist/lib/Helper/__tests__/MergeConfig.js +24 -24
- package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
- package/dist/lib/Helper/__tests__/SentryCli.js +33 -23
- package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
- package/dist/lib/Setup.js +23 -85
- package/dist/lib/Setup.js.map +1 -1
- package/dist/lib/Steps/BaseStep.js +8 -8
- package/dist/lib/Steps/BaseStep.js.map +1 -1
- package/dist/lib/Steps/ChooseIntegration.js +80 -125
- package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
- package/dist/lib/Steps/ConfigureProject.js +6 -66
- package/dist/lib/Steps/ConfigureProject.js.map +1 -1
- package/dist/lib/Steps/Initial.js +16 -104
- package/dist/lib/Steps/Initial.js.map +1 -1
- package/dist/lib/Steps/Integrations/BaseIntegration.js +24 -118
- package/dist/lib/Steps/Integrations/BaseIntegration.js.map +1 -1
- package/dist/lib/Steps/Integrations/Cordova.js +95 -183
- package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
- package/dist/lib/Steps/Integrations/Electron.js +87 -145
- package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
- package/dist/lib/Steps/Integrations/MobileProject.js +40 -148
- package/dist/lib/Steps/Integrations/MobileProject.js.map +1 -1
- package/dist/lib/Steps/OpenSentry.js +63 -126
- package/dist/lib/Steps/OpenSentry.js.map +1 -1
- package/dist/lib/Steps/PromptForParameters.js +110 -206
- package/dist/lib/Steps/PromptForParameters.js.map +1 -1
- package/dist/lib/Steps/Result.js +19 -79
- package/dist/lib/Steps/Result.js.map +1 -1
- package/dist/lib/Steps/SentryProjectSelector.js +57 -148
- package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
- package/dist/lib/Steps/ShouldConfigure.js +6 -66
- package/dist/lib/Steps/ShouldConfigure.js.map +1 -1
- package/dist/lib/Steps/WaitForSentry.js +43 -120
- package/dist/lib/Steps/WaitForSentry.js.map +1 -1
- package/dist/lib/Steps/Welcome.js +17 -76
- package/dist/lib/Steps/Welcome.js.map +1 -1
- package/dist/lib/__tests__/Env.js +3 -3
- package/dist/lib/__tests__/Env.js.map +1 -1
- package/dist/src/android/android-wizard.js +100 -176
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/android/code-tools.js +24 -33
- package/dist/src/android/code-tools.js.map +1 -1
- package/dist/src/android/gradle.js +106 -165
- package/dist/src/android/gradle.js.map +1 -1
- package/dist/src/android/manifest.js +26 -27
- package/dist/src/android/manifest.js.map +1 -1
- package/dist/src/android/templates.js +76 -23
- package/dist/src/android/templates.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +129 -225
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/apple/cocoapod.js +47 -109
- package/dist/src/apple/cocoapod.js.map +1 -1
- package/dist/src/apple/code-tools.js +32 -35
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/fastlane.js +51 -97
- package/dist/src/apple/fastlane.js.map +1 -1
- package/dist/src/apple/templates.js +41 -5
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/apple/xcode-manager.d.ts +2 -2
- package/dist/src/apple/xcode-manager.js +93 -108
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/flutter/code-tools.js +79 -127
- package/dist/src/flutter/code-tools.js.map +1 -1
- package/dist/src/flutter/flutter-wizard.js +75 -136
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/flutter/templates.js +48 -12
- package/dist/src/flutter/templates.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +527 -805
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.js +380 -40
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nextjs/utils.js +5 -5
- package/dist/src/nextjs/utils.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +91 -188
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/nuxt/sdk-example.js +68 -137
- package/dist/src/nuxt/sdk-example.js.map +1 -1
- package/dist/src/nuxt/sdk-setup.d.ts +4 -4
- package/dist/src/nuxt/sdk-setup.js +180 -336
- package/dist/src/nuxt/sdk-setup.js.map +1 -1
- package/dist/src/nuxt/templates.js +195 -18
- package/dist/src/nuxt/templates.js.map +1 -1
- package/dist/src/nuxt/utils.js +29 -76
- package/dist/src/nuxt/utils.js.map +1 -1
- package/dist/src/react-native/expo-env-file.js +41 -94
- package/dist/src/react-native/expo-env-file.js.map +1 -1
- package/dist/src/react-native/expo-metro.d.ts +1 -1
- package/dist/src/react-native/expo-metro.js +75 -130
- package/dist/src/react-native/expo-metro.js.map +1 -1
- package/dist/src/react-native/expo.js +61 -114
- package/dist/src/react-native/expo.js.map +1 -1
- package/dist/src/react-native/git.js +23 -56
- package/dist/src/react-native/git.js.map +1 -1
- package/dist/src/react-native/glob.js +3 -3
- package/dist/src/react-native/glob.js.map +1 -1
- package/dist/src/react-native/gradle.js +4 -4
- package/dist/src/react-native/gradle.js.map +1 -1
- package/dist/src/react-native/javascript.js +51 -95
- package/dist/src/react-native/javascript.js.map +1 -1
- package/dist/src/react-native/metro.js +176 -296
- package/dist/src/react-native/metro.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +267 -418
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-native/uninstall.js +37 -80
- package/dist/src/react-native/uninstall.js.map +1 -1
- package/dist/src/react-native/xcode.js +57 -55
- package/dist/src/react-native/xcode.js.map +1 -1
- package/dist/src/remix/codemods/express-server.js +27 -82
- package/dist/src/remix/codemods/express-server.js.map +1 -1
- package/dist/src/remix/codemods/handle-error.js +28 -31
- package/dist/src/remix/codemods/handle-error.js.map +1 -1
- package/dist/src/remix/codemods/root-common.js +11 -11
- package/dist/src/remix/codemods/root-common.js.map +1 -1
- package/dist/src/remix/codemods/root-v1.js +17 -67
- package/dist/src/remix/codemods/root-v1.js.map +1 -1
- package/dist/src/remix/codemods/root-v2.js +89 -140
- package/dist/src/remix/codemods/root-v2.js.map +1 -1
- package/dist/src/remix/remix-wizard.js +181 -343
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/remix/sdk-example.js +84 -66
- package/dist/src/remix/sdk-example.js.map +1 -1
- package/dist/src/remix/sdk-setup.js +161 -293
- package/dist/src/remix/sdk-setup.js.map +1 -1
- package/dist/src/remix/templates.js +10 -2
- package/dist/src/remix/templates.js.map +1 -1
- package/dist/src/remix/utils.js +13 -14
- package/dist/src/remix/utils.js.map +1 -1
- package/dist/src/run.js +106 -178
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.js +248 -372
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/angular.js +32 -66
- package/dist/src/sourcemaps/tools/angular.js.map +1 -1
- package/dist/src/sourcemaps/tools/create-react-app.js +14 -59
- package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -1
- package/dist/src/sourcemaps/tools/esbuild.js +34 -77
- package/dist/src/sourcemaps/tools/esbuild.js.map +1 -1
- package/dist/src/sourcemaps/tools/nextjs.d.ts +2 -2
- package/dist/src/sourcemaps/tools/nextjs.js +75 -102
- package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
- package/dist/src/sourcemaps/tools/remix.js +53 -93
- package/dist/src/sourcemaps/tools/remix.js.map +1 -1
- package/dist/src/sourcemaps/tools/rollup.js +35 -76
- package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +157 -289
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/tsc.js +68 -134
- package/dist/src/sourcemaps/tools/tsc.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.js +111 -196
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sourcemaps/tools/webpack.d.ts +1 -1
- package/dist/src/sourcemaps/tools/webpack.js +158 -260
- package/dist/src/sourcemaps/tools/webpack.js.map +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.js +9 -54
- package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
- package/dist/src/sourcemaps/utils/other-wizards.js +77 -144
- package/dist/src/sourcemaps/utils/other-wizards.js.map +1 -1
- package/dist/src/sourcemaps/utils/sdk-version.js +112 -191
- package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -1
- package/dist/src/sveltekit/sdk-example.js +20 -70
- package/dist/src/sveltekit/sdk-example.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup.js +250 -411
- package/dist/src/sveltekit/sdk-setup.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +107 -191
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/sveltekit/templates.js +147 -13
- package/dist/src/sveltekit/templates.js.map +1 -1
- package/dist/src/sveltekit/utils.js +3 -3
- package/dist/src/sveltekit/utils.js.map +1 -1
- package/dist/src/telemetry.d.ts +2 -2
- package/dist/src/telemetry.js +58 -108
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/ast-utils.js +39 -54
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/bash.js +28 -75
- package/dist/src/utils/bash.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +3 -7
- package/dist/src/utils/clack-utils.js +688 -1083
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/debug.js +6 -10
- package/dist/src/utils/debug.js.map +1 -1
- package/dist/src/utils/package-json.js +5 -6
- package/dist/src/utils/package-json.js.map +1 -1
- package/dist/src/utils/package-manager.js +65 -139
- package/dist/src/utils/package-manager.js.map +1 -1
- package/dist/src/utils/release-registry.js +12 -59
- package/dist/src/utils/release-registry.js.map +1 -1
- package/dist/src/utils/semver.js +3 -4
- package/dist/src/utils/semver.js.map +1 -1
- package/dist/src/utils/sentrycli-utils.js +4 -4
- package/dist/src/utils/sentrycli-utils.js.map +1 -1
- package/dist/src/utils/url.js +5 -6
- package/dist/src/utils/url.js.map +1 -1
- package/dist/test/android/code-tools.test.js +18 -18
- package/dist/test/android/code-tools.test.js.map +1 -1
- package/dist/test/apple/cocoapod.test.js +154 -299
- package/dist/test/apple/cocoapod.test.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +375 -263
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/apple/fastfile.test.js +319 -271
- package/dist/test/apple/fastfile.test.js.map +1 -1
- package/dist/test/apple/templates.test.js +114 -30
- package/dist/test/apple/templates.test.js.map +1 -1
- package/dist/test/apple/xcode-manager.test.js +230 -234
- package/dist/test/apple/xcode-manager.test.js.map +1 -1
- package/dist/test/flutter/code-tools.test.js +119 -48
- package/dist/test/flutter/code-tools.test.js.map +1 -1
- package/dist/test/flutter/templates.test.js +63 -20
- package/dist/test/flutter/templates.test.js.map +1 -1
- package/dist/test/nextjs/templates.test.js +332 -43
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/nuxt/templates.test.js +161 -33
- package/dist/test/nuxt/templates.test.js.map +1 -1
- package/dist/test/react-native/expo-metro.test.js +61 -15
- package/dist/test/react-native/expo-metro.test.js.map +1 -1
- package/dist/test/react-native/expo.test.js +37 -17
- package/dist/test/react-native/expo.test.js.map +1 -1
- package/dist/test/react-native/gradle.test.js +260 -28
- package/dist/test/react-native/gradle.test.js.map +1 -1
- package/dist/test/react-native/javascript.test.js +85 -19
- package/dist/test/react-native/javascript.test.js.map +1 -1
- package/dist/test/react-native/metro.test.js +261 -187
- package/dist/test/react-native/metro.test.js.map +1 -1
- package/dist/test/react-native/xcode.test.js +243 -62
- package/dist/test/react-native/xcode.test.js.map +1 -1
- package/dist/test/remix/client-entry.test.js +81 -21
- package/dist/test/remix/client-entry.test.js.map +1 -1
- package/dist/test/remix/server-instrumentation.test.js +21 -8
- package/dist/test/remix/server-instrumentation.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/sentry-cli.test.js +20 -72
- package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/tsc.test.js +142 -68
- package/dist/test/sourcemaps/tools/tsc.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/vite.test.js +106 -75
- package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/webpack.test.js +226 -102
- package/dist/test/sourcemaps/tools/webpack.test.js.map +1 -1
- package/dist/test/sveltekit/templates.test.js +117 -18
- package/dist/test/sveltekit/templates.test.js.map +1 -1
- package/dist/test/utils/ast-utils.test.js +99 -58
- package/dist/test/utils/ast-utils.test.js.map +1 -1
- package/dist/test/utils/clack-utils.test.js +142 -247
- package/dist/test/utils/clack-utils.test.js.map +1 -1
- package/e2e-tests/package.json +1 -1
- package/e2e-tests/tests/flutter.test.ts +20 -20
- package/e2e-tests/tests/nextjs.test.ts +2 -2
- package/e2e-tests/tests/nuxt-3.test.ts +4 -4
- package/e2e-tests/tests/nuxt-4.test.ts +3 -3
- package/e2e-tests/tests/remix.test.ts +3 -3
- package/e2e-tests/tests/sveltekit.test.ts +3 -3
- package/e2e-tests/utils/index.ts +33 -15
- package/lib/Helper/BottomBar.ts +1 -1
- package/lib/Helper/Env.ts +1 -1
- package/lib/Helper/Package.ts +12 -10
- package/lib/Helper/SentryCli.ts +18 -27
- package/lib/Helper/Wizard.ts +1 -2
- package/lib/Setup.ts +4 -5
- package/lib/Steps/ChooseIntegration.ts +40 -8
- package/lib/Steps/Initial.ts +17 -26
- package/lib/Steps/Integrations/BaseIntegration.ts +2 -8
- package/lib/Steps/Integrations/Cordova.ts +9 -15
- package/lib/Steps/Integrations/Electron.ts +23 -20
- package/lib/Steps/Integrations/MobileProject.ts +18 -15
- package/lib/Steps/OpenSentry.ts +12 -7
- package/lib/Steps/PromptForParameters.ts +12 -19
- package/lib/Steps/SentryProjectSelector.ts +30 -29
- package/lib/Steps/WaitForSentry.ts +29 -23
- package/package.json +12 -8
- package/src/apple/xcode-manager.ts +10 -10
- package/src/nextjs/templates.ts +2 -3
- package/src/nuxt/sdk-setup.ts +21 -18
- package/src/react-native/expo-metro.ts +2 -2
- package/src/react-native/react-native-wizard.ts +1 -2
- package/src/react-native/uninstall.ts +1 -2
- package/src/react-native/xcode.ts +1 -1
- package/src/run.ts +12 -5
- package/src/sourcemaps/tools/nextjs.ts +2 -2
- package/src/sourcemaps/tools/webpack.ts +3 -3
- package/src/telemetry.ts +27 -7
- package/src/utils/clack-utils.ts +50 -47
- package/test/apple/cocoapod.test.ts +4 -0
- package/test/apple/fastfile.test.ts +12 -7
- package/test/apple/xcode-manager.test.ts +13 -11
- package/test/utils/clack-utils.test.ts +40 -50
- package/types/read-env.d.ts +3 -0
- package/types/xcode.d.ts +1 -0
- package/dist/package.json +0 -128
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../../src/apple/fastlane.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../../src/apple/fastlane.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport { askForItemSelection } from '../utils/clack-utils';\nimport * as templates from './templates';\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\n\nexport function fastFile(projectPath: string): string | null {\n const fastlanePath = path.join(projectPath, 'fastlane', 'Fastfile');\n return fs.existsSync(fastlanePath) ? fastlanePath : null;\n}\n\nfunction findIOSPlatform(\n content: string,\n): { index: number; length: number } | null {\n const platformRegex = /^ *platform\\s+:([^ ]+)[^\\n]*\\n/gim;\n let match = platformRegex.exec(content);\n if (!match) {\n // No platform found, treat whole file as one platform.\n return { index: 0, length: content.length };\n }\n\n let index = -1;\n while (match) {\n if (match[1] === 'ios') {\n index = match.index + match[0].length;\n break;\n }\n match = platformRegex.exec(content);\n }\n\n if (index === -1) {\n return null;\n }\n\n //After finding the platform, we need to find the end of the platform block.\n //This solution has the assumption that the file is well formed,\n //which is not a perfect solution, but it's good enough assumption.\n const platformEndRegex = /^end[^\\n]*/gim;\n match = platformEndRegex.exec(content.slice(index));\n if (!match) {\n return null;\n }\n\n return { index, length: match.index };\n}\n\nfunction findLanes(\n content: string,\n): { index: number; length: number; name: string }[] | null {\n const laneRegex = /^ {2}lane\\s+:([^ ]+)[^\\n]*\\n/gim;\n let match = laneRegex.exec(content);\n if (!match) {\n return null;\n }\n\n const lanes: { index: number; length: number; name: string }[] = [];\n while (match) {\n const laneEnd = /^ {2}end/m.exec(\n content.slice(match.index + match[0].length),\n );\n if (laneEnd === null) {\n return null;\n }\n lanes.push({\n index: match.index + match[0].length,\n length: laneEnd.index,\n name: match[1],\n });\n match = laneRegex.exec(content);\n }\n return lanes;\n}\n\nfunction addSentryToLane(\n content: string,\n lane: { index: number; length: number; name: string },\n org: string,\n project: string,\n): string {\n const laneContent = content.slice(lane.index, lane.index + lane.length);\n const sentryCLIMatch = /sentry_cli\\s*\\([^)]+\\)/gim.exec(laneContent);\n if (sentryCLIMatch) {\n // Sentry already added to lane. Update it.\n return (\n content.slice(0, sentryCLIMatch.index + lane.index) +\n templates.getFastlaneSnippet(org, project).trim() +\n content.slice(\n sentryCLIMatch.index + sentryCLIMatch[0].length + lane.index,\n )\n );\n }\n\n // Sentry not added to lane. Add it.\n return (\n content.slice(0, lane.index + lane.length) +\n '\\n' +\n templates.getFastlaneSnippet(org, project) +\n '\\n' +\n content.slice(lane.index + lane.length)\n );\n}\n\nexport async function addSentryToFastlane(\n projectPath: string,\n org: string,\n project: string,\n): Promise<boolean> {\n const fastFilePath = fastFile(projectPath);\n if (!fastFilePath) {\n return false;\n }\n\n const fileContent = fs.readFileSync(fastFilePath, 'utf8');\n const platform = findIOSPlatform(fileContent);\n if (!platform) {\n return false;\n }\n\n const platformContent = fileContent.slice(\n platform.index,\n platform.index + platform.length,\n );\n const lanes = findLanes(platformContent);\n lanes?.forEach((l) => (l.index += platform.index));\n\n if (!lanes || lanes.length === 0) {\n clack.log.warn('No suitable lanes in your Fastfile.');\n return false;\n }\n\n let newFileContent: string | undefined;\n if (lanes.length === 1) {\n newFileContent = addSentryToLane(fileContent, lanes[0], org, project);\n } else {\n const laneNames = lanes.map((l) => l.name);\n const selectedLane = await askForItemSelection(\n laneNames,\n 'Select lane to add Sentry to:',\n );\n if (selectedLane === undefined) {\n return false;\n }\n newFileContent = addSentryToLane(\n fileContent,\n lanes[selectedLane.index],\n org,\n project,\n );\n }\n\n fs.writeFileSync(fastFilePath, newFileContent, 'utf8');\n return true;\n}\n\n/**\n * Exported for testing purposes, but should not be used in other modules.\n */\nexport let exportForTesting: {\n findIOSPlatform: typeof findIOSPlatform;\n findLanes: typeof findLanes;\n addSentryToLane: typeof addSentryToLane;\n};\nif (process.env.NODE_ENV === 'test') {\n exportForTesting = {\n findIOSPlatform,\n findLanes,\n addSentryToLane,\n };\n}\n"]}
|
|
@@ -3,23 +3,59 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getFastlaneSnippet = exports.getObjcSnippet = exports.getSwiftSnippet = exports.scriptInputPath = exports.getRunScriptTemplate = void 0;
|
|
4
4
|
function getRunScriptTemplate(orgSlug, projectSlug, uploadSource, includeHomebrewPath) {
|
|
5
5
|
// eslint-disable-next-line no-useless-escape
|
|
6
|
-
|
|
6
|
+
const includeHomebrew = includeHomebrewPath
|
|
7
7
|
? '\\nif [[ "$(uname -m)" == arm64 ]]; then\\nexport PATH="/opt/homebrew/bin:$PATH"\\nfi'
|
|
8
8
|
: '';
|
|
9
|
-
return
|
|
9
|
+
return `# This script is responsable to upload debug symbols and source context for Sentry.${includeHomebrew}\\nif which sentry-cli >/dev/null; then\\nexport SENTRY_ORG=${orgSlug}\\nexport SENTRY_PROJECT=${projectSlug}\\nERROR=$(sentry-cli debug-files upload ${uploadSource ? '--include-sources ' : ''}"$DWARF_DSYM_FOLDER_PATH" 2>&1 >/dev/null)\\nif [ ! $? -eq 0 ]; then\\necho "warning: sentry-cli - $ERROR"\\nfi\\nelse\\necho "warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases"\\nfi\\n`;
|
|
10
10
|
}
|
|
11
11
|
exports.getRunScriptTemplate = getRunScriptTemplate;
|
|
12
12
|
exports.scriptInputPath = '"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}"';
|
|
13
13
|
function getSwiftSnippet(dsn) {
|
|
14
|
-
return
|
|
14
|
+
return ` SentrySDK.start { options in
|
|
15
|
+
options.dsn = "${dsn}"
|
|
16
|
+
options.debug = true // Enabled debug when first installing is always helpful
|
|
17
|
+
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
|
18
|
+
// We recommend adjusting this value in production.
|
|
19
|
+
options.tracesSampleRate = 1.0
|
|
20
|
+
|
|
21
|
+
// Sample rate for profiling, applied on top of TracesSampleRate.
|
|
22
|
+
// We recommend adjusting this value in production.
|
|
23
|
+
options.profilesSampleRate = 1.0
|
|
24
|
+
|
|
25
|
+
// Uncomment the following lines to add more data to your events
|
|
26
|
+
// options.attachScreenshot = true // This adds a screenshot to the error events
|
|
27
|
+
// options.attachViewHierarchy = true // This adds the view hierarchy to the error events
|
|
28
|
+
}
|
|
29
|
+
// Remove the next line after confirming that your Sentry integration is working.
|
|
30
|
+
SentrySDK.capture(message: "This app uses Sentry! :)")\n`;
|
|
15
31
|
}
|
|
16
32
|
exports.getSwiftSnippet = getSwiftSnippet;
|
|
17
33
|
function getObjcSnippet(dsn) {
|
|
18
|
-
return
|
|
34
|
+
return ` [SentrySDK startWithConfigureOptions:^(SentryOptions * options) {
|
|
35
|
+
options.dsn = @"${dsn}";
|
|
36
|
+
options.debug = YES; // Enabled debug when first installing is always helpful
|
|
37
|
+
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
|
38
|
+
// We recommend adjusting this value in production.
|
|
39
|
+
options.tracesSampleRate = @1.0;
|
|
40
|
+
|
|
41
|
+
// Sample rate for profiling, applied on top of TracesSampleRate.
|
|
42
|
+
// We recommend adjusting this value in production.
|
|
43
|
+
options.profilesSampleRate = @1.0;
|
|
44
|
+
|
|
45
|
+
//Uncomment the following lines to add more data to your events
|
|
46
|
+
//options.attachScreenshot = YES; //This will add a screenshot to the error events
|
|
47
|
+
//options.attachViewHierarchy = YES; //This will add the view hierarchy to the error events
|
|
48
|
+
}];
|
|
49
|
+
//Remove the next line after confirming that your Sentry integration is working.
|
|
50
|
+
[SentrySDK captureMessage:@"This app uses Sentry!"];\n`;
|
|
19
51
|
}
|
|
20
52
|
exports.getObjcSnippet = getObjcSnippet;
|
|
21
53
|
function getFastlaneSnippet(org, project) {
|
|
22
|
-
return
|
|
54
|
+
return ` sentry_cli(
|
|
55
|
+
org_slug: '${org}',
|
|
56
|
+
project_slug: '${project}',
|
|
57
|
+
include_sources: true
|
|
58
|
+
)`;
|
|
23
59
|
}
|
|
24
60
|
exports.getFastlaneSnippet = getFastlaneSnippet;
|
|
25
61
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/apple/templates.ts"],"names":[],"mappings":";;;AAAA,SAAgB,oBAAoB,CAClC,OAAe,EACf,WAAmB,EACnB,YAAqB,EACrB,mBAA4B;IAE5B,6CAA6C;IAC7C,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/apple/templates.ts"],"names":[],"mappings":";;;AAAA,SAAgB,oBAAoB,CAClC,OAAe,EACf,WAAmB,EACnB,YAAqB,EACrB,mBAA4B;IAE5B,6CAA6C;IAC7C,MAAM,eAAe,GAAG,mBAAmB;QACzC,CAAC,CAAC,uFAAuF;QACzF,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,sFAAsF,eAAe,+DAA+D,OAAO,4BAA4B,WAAW,4CACvN,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EACxC,2OAA2O,CAAC;AAC9O,CAAC;AAbD,oDAaC;AAEY,QAAA,eAAe,GAC1B,6FAA6F,CAAC;AAEhG,SAAgB,eAAe,CAAC,GAAW;IACzC,OAAO;6BACoB,GAAG;;;;;;;;;;;;;;;iEAeiC,CAAC;AAClE,CAAC;AAlBD,0CAkBC;AAED,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO;0BACiB,GAAG;;;;;;;;;;;;;;;2DAe8B,CAAC;AAC5D,CAAC;AAlBD,wCAkBC;AAED,SAAgB,kBAAkB,CAAC,GAAW,EAAE,OAAe;IAC7D,OAAO;mBACU,GAAG;uBACC,OAAO;;MAExB,CAAC;AACP,CAAC;AAND,gDAMC","sourcesContent":["export function getRunScriptTemplate(\n orgSlug: string,\n projectSlug: string,\n uploadSource: boolean,\n includeHomebrewPath: boolean,\n): string {\n // eslint-disable-next-line no-useless-escape\n const includeHomebrew = includeHomebrewPath\n ? '\\\\nif [[ \"$(uname -m)\" == arm64 ]]; then\\\\nexport PATH=\"/opt/homebrew/bin:$PATH\"\\\\nfi'\n : '';\n return `# This script is responsable to upload debug symbols and source context for Sentry.${includeHomebrew}\\\\nif which sentry-cli >/dev/null; then\\\\nexport SENTRY_ORG=${orgSlug}\\\\nexport SENTRY_PROJECT=${projectSlug}\\\\nERROR=$(sentry-cli debug-files upload ${\n uploadSource ? '--include-sources ' : ''\n }\"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\\\\nif [ ! $? -eq 0 ]; then\\\\necho \"warning: sentry-cli - $ERROR\"\\\\nfi\\\\nelse\\\\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\\\\nfi\\\\n`;\n}\n\nexport const scriptInputPath =\n '\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}\"';\n\nexport function getSwiftSnippet(dsn: string): string {\n return ` SentrySDK.start { options in\n options.dsn = \"${dsn}\"\n options.debug = true // Enabled debug when first installing is always helpful\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = 1.0\n\n // Sample rate for profiling, applied on top of TracesSampleRate.\n // We recommend adjusting this value in production.\n options.profilesSampleRate = 1.0 \n\n // Uncomment the following lines to add more data to your events\n // options.attachScreenshot = true // This adds a screenshot to the error events\n // options.attachViewHierarchy = true // This adds the view hierarchy to the error events\n }\n // Remove the next line after confirming that your Sentry integration is working.\n SentrySDK.capture(message: \"This app uses Sentry! :)\")\\n`;\n}\n\nexport function getObjcSnippet(dsn: string): string {\n return ` [SentrySDK startWithConfigureOptions:^(SentryOptions * options) {\n options.dsn = @\"${dsn}\";\n options.debug = YES; // Enabled debug when first installing is always helpful\n // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.\n // We recommend adjusting this value in production.\n options.tracesSampleRate = @1.0;\n\n // Sample rate for profiling, applied on top of TracesSampleRate.\n // We recommend adjusting this value in production.\n options.profilesSampleRate = @1.0;\n\n //Uncomment the following lines to add more data to your events\n //options.attachScreenshot = YES; //This will add a screenshot to the error events\n //options.attachViewHierarchy = YES; //This will add the view hierarchy to the error events\n }];\n //Remove the next line after confirming that your Sentry integration is working.\n [SentrySDK captureMessage:@\"This app uses Sentry!\"];\\n`;\n}\n\nexport function getFastlaneSnippet(org: string, project: string): string {\n return ` sentry_cli(\n org_slug: '${org}',\n project_slug: '${project}',\n include_sources: true\n )`;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SentryProjectData } from '../utils/types';
|
|
2
|
-
import { PBXGroup, PBXObjects, Project } from 'xcode';
|
|
1
|
+
import type { SentryProjectData } from '../utils/types';
|
|
2
|
+
import { type PBXGroup, type PBXObjects, type Project } from 'xcode';
|
|
3
3
|
interface ProjectFile {
|
|
4
4
|
key: string;
|
|
5
5
|
path: string;
|
|
@@ -32,42 +32,39 @@ exports.XcodeProject = void 0;
|
|
|
32
32
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
33
33
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
34
34
|
// @ts-ignore - clack is ESM and TS complains about that. It works though
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
const prompts_1 = __importDefault(require("@clack/prompts"));
|
|
36
|
+
const fs = __importStar(require("node:fs"));
|
|
37
|
+
const path = __importStar(require("node:path"));
|
|
38
|
+
const templates = __importStar(require("./templates"));
|
|
39
|
+
const xcode_1 = require("xcode");
|
|
40
40
|
function setDebugInformationFormatAndSandbox(proj, targetName) {
|
|
41
|
-
|
|
42
|
-
var xcObjects = proj.hash.project.objects;
|
|
41
|
+
const xcObjects = proj.hash.project.objects;
|
|
43
42
|
if (!xcObjects.PBXNativeTarget) {
|
|
44
43
|
xcObjects.PBXNativeTarget = {};
|
|
45
44
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var value = (_a = xcObjects.PBXNativeTarget) === null || _a === void 0 ? void 0 : _a[key];
|
|
45
|
+
const targetKey = Object.keys(xcObjects.PBXNativeTarget).filter((key) => {
|
|
46
|
+
const value = xcObjects.PBXNativeTarget?.[key];
|
|
49
47
|
return (!key.endsWith('_comment') &&
|
|
50
48
|
typeof value !== 'string' &&
|
|
51
|
-
|
|
49
|
+
value?.name === targetName);
|
|
52
50
|
})[0];
|
|
53
|
-
|
|
51
|
+
const target = xcObjects.PBXNativeTarget[targetKey];
|
|
54
52
|
if (!xcObjects.XCBuildConfiguration) {
|
|
55
53
|
xcObjects.XCBuildConfiguration = {};
|
|
56
54
|
}
|
|
57
55
|
if (!xcObjects.XCConfigurationList) {
|
|
58
56
|
xcObjects.XCConfigurationList = {};
|
|
59
57
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
for (
|
|
64
|
-
|
|
65
|
-
var config = (_d = xcObjects.XCBuildConfiguration[buildListConfigId.value]) !== null && _d !== void 0 ? _d : {};
|
|
58
|
+
const buildConfigurationListId = target?.buildConfigurationList ?? '';
|
|
59
|
+
const configurationList = xcObjects.XCConfigurationList?.[buildConfigurationListId];
|
|
60
|
+
const buildListConfigurationIds = configurationList?.buildConfigurations ?? [];
|
|
61
|
+
for (const buildListConfigId of buildListConfigurationIds) {
|
|
62
|
+
const config = xcObjects.XCBuildConfiguration[buildListConfigId.value] ?? {};
|
|
66
63
|
if (typeof config === 'string') {
|
|
67
64
|
// Ignore comments
|
|
68
65
|
continue;
|
|
69
66
|
}
|
|
70
|
-
|
|
67
|
+
const buildSettings = config.buildSettings ?? {};
|
|
71
68
|
buildSettings.DEBUG_INFORMATION_FORMAT = '"dwarf-with-dsym"';
|
|
72
69
|
buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '"NO"';
|
|
73
70
|
config.buildSettings = buildSettings;
|
|
@@ -75,20 +72,18 @@ function setDebugInformationFormatAndSandbox(proj, targetName) {
|
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
function addSentrySPM(proj, targetName) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var sentrySPMUUID = proj.generateUuid();
|
|
75
|
+
const xcObjects = proj.hash.project.objects;
|
|
76
|
+
const sentryFrameworkUUID = proj.generateUuid();
|
|
77
|
+
const sentrySPMUUID = proj.generateUuid();
|
|
82
78
|
// Check whether xcObjects already have sentry framework
|
|
83
79
|
if (xcObjects.PBXFrameworksBuildPhase) {
|
|
84
|
-
for (
|
|
85
|
-
|
|
80
|
+
for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {
|
|
81
|
+
const frameworkBuildPhase = xcObjects.PBXFrameworksBuildPhase[key];
|
|
86
82
|
if (key.endsWith('_comment') || typeof frameworkBuildPhase === 'string') {
|
|
87
83
|
// Ignore comments
|
|
88
84
|
continue;
|
|
89
85
|
}
|
|
90
|
-
for (
|
|
91
|
-
var framework = _c[_i];
|
|
86
|
+
for (const framework of frameworkBuildPhase.files ?? []) {
|
|
92
87
|
// We identify the Sentry framework by the comment "Sentry in Frameworks",
|
|
93
88
|
// which is set by this manager in previous runs.
|
|
94
89
|
if (framework.comment === 'Sentry in Frameworks') {
|
|
@@ -105,18 +100,18 @@ function addSentrySPM(proj, targetName) {
|
|
|
105
100
|
productRef: sentrySPMUUID,
|
|
106
101
|
productRef_comment: 'Sentry',
|
|
107
102
|
};
|
|
108
|
-
xcObjects.PBXBuildFile[
|
|
103
|
+
xcObjects.PBXBuildFile[`${sentryFrameworkUUID}_comment`] =
|
|
109
104
|
'Sentry in Frameworks';
|
|
110
105
|
if (!xcObjects.PBXFrameworksBuildPhase) {
|
|
111
106
|
xcObjects.PBXFrameworksBuildPhase = {};
|
|
112
107
|
}
|
|
113
|
-
for (
|
|
114
|
-
|
|
108
|
+
for (const key in xcObjects.PBXFrameworksBuildPhase) {
|
|
109
|
+
const value = xcObjects.PBXFrameworksBuildPhase[key];
|
|
115
110
|
if (key.endsWith('_comment') || typeof value === 'string') {
|
|
116
111
|
// Ignore comments
|
|
117
112
|
continue;
|
|
118
113
|
}
|
|
119
|
-
|
|
114
|
+
const frameworks = value.files ?? [];
|
|
120
115
|
frameworks.push({
|
|
121
116
|
value: sentryFrameworkUUID,
|
|
122
117
|
comment: 'Sentry in Frameworks',
|
|
@@ -127,14 +122,13 @@ function addSentrySPM(proj, targetName) {
|
|
|
127
122
|
if (!xcObjects.PBXNativeTarget) {
|
|
128
123
|
xcObjects.PBXNativeTarget = {};
|
|
129
124
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
var value = (_a = xcObjects.PBXNativeTarget) === null || _a === void 0 ? void 0 : _a[key];
|
|
125
|
+
const targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter((key) => {
|
|
126
|
+
const value = xcObjects.PBXNativeTarget?.[key];
|
|
133
127
|
return (!key.endsWith('_comment') &&
|
|
134
128
|
typeof value !== 'string' &&
|
|
135
|
-
|
|
129
|
+
value?.name === targetName);
|
|
136
130
|
})[0];
|
|
137
|
-
|
|
131
|
+
const target = xcObjects.PBXNativeTarget[targetKey];
|
|
138
132
|
if (!target.packageProductDependencies) {
|
|
139
133
|
target.packageProductDependencies = [];
|
|
140
134
|
}
|
|
@@ -142,8 +136,8 @@ function addSentrySPM(proj, targetName) {
|
|
|
142
136
|
value: sentrySPMUUID,
|
|
143
137
|
comment: 'Sentry',
|
|
144
138
|
});
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
const sentrySwiftPackageUUID = proj.generateUuid();
|
|
140
|
+
const xcProject = proj.getFirstProject().firstProject;
|
|
147
141
|
if (!xcProject.packageReferences) {
|
|
148
142
|
xcProject.packageReferences = [];
|
|
149
143
|
}
|
|
@@ -162,7 +156,7 @@ function addSentrySPM(proj, targetName) {
|
|
|
162
156
|
minimumVersion: '8.0.0',
|
|
163
157
|
},
|
|
164
158
|
};
|
|
165
|
-
xcObjects.XCRemoteSwiftPackageReference[
|
|
159
|
+
xcObjects.XCRemoteSwiftPackageReference[`${sentrySwiftPackageUUID}_comment`] =
|
|
166
160
|
'XCRemoteSwiftPackageReference "sentry-cocoa"';
|
|
167
161
|
if (!xcObjects.XCSwiftPackageProductDependency) {
|
|
168
162
|
xcObjects.XCSwiftPackageProductDependency = {};
|
|
@@ -173,41 +167,39 @@ function addSentrySPM(proj, targetName) {
|
|
|
173
167
|
package_comment: 'XCRemoteSwiftPackageReference "sentry-cocoa"',
|
|
174
168
|
productName: 'Sentry',
|
|
175
169
|
};
|
|
176
|
-
xcObjects.XCSwiftPackageProductDependency[
|
|
170
|
+
xcObjects.XCSwiftPackageProductDependency[`${sentrySPMUUID}_comment`] =
|
|
177
171
|
'Sentry';
|
|
178
172
|
prompts_1.default.log.step('Added Sentry SPM dependency to your project');
|
|
179
173
|
}
|
|
180
174
|
function addUploadSymbolsScript(xcodeProject, sentryProject, targetName, uploadSource) {
|
|
181
|
-
|
|
182
|
-
var xcObjects = xcodeProject.hash.project.objects;
|
|
175
|
+
const xcObjects = xcodeProject.hash.project.objects;
|
|
183
176
|
if (!xcObjects.PBXNativeTarget) {
|
|
184
177
|
xcObjects.PBXNativeTarget = {};
|
|
185
178
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
var value = (_a = xcObjects.PBXNativeTarget) === null || _a === void 0 ? void 0 : _a[key];
|
|
179
|
+
const targetKey = Object.keys(xcObjects.PBXNativeTarget).filter((key) => {
|
|
180
|
+
const value = xcObjects.PBXNativeTarget?.[key];
|
|
189
181
|
return (!key.endsWith('_comment') &&
|
|
190
182
|
typeof value !== 'string' &&
|
|
191
|
-
|
|
183
|
+
value?.name === targetName);
|
|
192
184
|
})[0];
|
|
193
185
|
if (!xcObjects.PBXShellScriptBuildPhase) {
|
|
194
186
|
xcObjects.PBXShellScriptBuildPhase = {};
|
|
195
187
|
}
|
|
196
|
-
for (
|
|
197
|
-
|
|
188
|
+
for (const key in xcObjects.PBXShellScriptBuildPhase) {
|
|
189
|
+
const value = xcObjects.PBXShellScriptBuildPhase[key] ?? {};
|
|
198
190
|
if (typeof value === 'string') {
|
|
199
191
|
// Ignore comments
|
|
200
192
|
continue;
|
|
201
193
|
}
|
|
202
194
|
// Sentry script already exists, update it
|
|
203
|
-
if (
|
|
204
|
-
|
|
205
|
-
|
|
195
|
+
if (value.shellScript?.includes('sentry-cli')) {
|
|
196
|
+
delete xcObjects.PBXShellScriptBuildPhase?.[key];
|
|
197
|
+
delete xcObjects.PBXShellScriptBuildPhase?.[`${key}_comment`];
|
|
206
198
|
break;
|
|
207
199
|
}
|
|
208
200
|
xcObjects.PBXShellScriptBuildPhase[key] = value;
|
|
209
201
|
}
|
|
210
|
-
|
|
202
|
+
const isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');
|
|
211
203
|
xcodeProject.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Upload Debug Symbols to Sentry', targetKey, {
|
|
212
204
|
inputFileListPaths: [],
|
|
213
205
|
outputFileListPaths: [],
|
|
@@ -215,36 +207,38 @@ function addUploadSymbolsScript(xcodeProject, sentryProject, targetName, uploadS
|
|
|
215
207
|
shellPath: '/bin/sh',
|
|
216
208
|
shellScript: templates.getRunScriptTemplate(sentryProject.organization.slug, sentryProject.slug, uploadSource, isHomebrewInstalled),
|
|
217
209
|
});
|
|
218
|
-
prompts_1.default.log.step(
|
|
210
|
+
prompts_1.default.log.step(`Added Sentry upload script to "${targetName}" build phase`);
|
|
219
211
|
}
|
|
220
|
-
|
|
212
|
+
class XcodeProject {
|
|
213
|
+
projectPath;
|
|
214
|
+
project;
|
|
215
|
+
objects;
|
|
216
|
+
files;
|
|
221
217
|
/**
|
|
222
218
|
* Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.
|
|
223
219
|
*
|
|
224
220
|
* @param projectPath - The path to the Xcode project file
|
|
225
221
|
*/
|
|
226
|
-
|
|
222
|
+
constructor(projectPath) {
|
|
227
223
|
this.projectPath = projectPath;
|
|
228
224
|
this.project = (0, xcode_1.project)(projectPath);
|
|
229
225
|
this.project.parseSync();
|
|
230
226
|
this.objects = this.project.hash.project.objects;
|
|
231
227
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
var targets = (_a = this.objects.PBXNativeTarget) !== null && _a !== void 0 ? _a : {};
|
|
228
|
+
getAllTargets() {
|
|
229
|
+
const targets = this.objects.PBXNativeTarget ?? {};
|
|
235
230
|
return Object.keys(targets)
|
|
236
|
-
.filter(
|
|
237
|
-
|
|
231
|
+
.filter((key) => {
|
|
232
|
+
const value = targets[key];
|
|
238
233
|
return (!key.endsWith('_comment') &&
|
|
239
234
|
typeof value !== 'string' &&
|
|
240
235
|
value.productType.startsWith('"com.apple.product-type.application'));
|
|
241
236
|
})
|
|
242
|
-
.map(
|
|
237
|
+
.map((key) => {
|
|
243
238
|
return targets[key].name;
|
|
244
239
|
});
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
if (uploadSource === void 0) { uploadSource = true; }
|
|
240
|
+
}
|
|
241
|
+
updateXcodeProject(sentryProject, target, addSPMReference, uploadSource = true) {
|
|
248
242
|
addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);
|
|
249
243
|
if (uploadSource) {
|
|
250
244
|
setDebugInformationFormatAndSandbox(this.project, target);
|
|
@@ -252,20 +246,18 @@ var XcodeProject = /** @class */ (function () {
|
|
|
252
246
|
if (addSPMReference) {
|
|
253
247
|
addSentrySPM(this.project, target);
|
|
254
248
|
}
|
|
255
|
-
|
|
249
|
+
const newContent = this.project.writeSync();
|
|
256
250
|
fs.writeFileSync(this.projectPath, newContent);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
var fileDictionary = {};
|
|
263
|
-
files.forEach(function (file) {
|
|
251
|
+
}
|
|
252
|
+
filesForTarget(target) {
|
|
253
|
+
const files = this.projectFiles();
|
|
254
|
+
const fileDictionary = {};
|
|
255
|
+
files.forEach((file) => {
|
|
264
256
|
fileDictionary[file.key] = file.path;
|
|
265
257
|
});
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
258
|
+
const targets = this.objects.PBXNativeTarget || {};
|
|
259
|
+
const nativeTarget = Object.keys(targets).filter((key) => {
|
|
260
|
+
const value = targets[key];
|
|
269
261
|
return (!key.endsWith('_comment') &&
|
|
270
262
|
typeof value !== 'string' &&
|
|
271
263
|
value.name === target);
|
|
@@ -273,74 +265,67 @@ var XcodeProject = /** @class */ (function () {
|
|
|
273
265
|
if (nativeTarget === undefined) {
|
|
274
266
|
return undefined;
|
|
275
267
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
return ((_a = _this.objects.PBXSourcesBuildPhase) === null || _a === void 0 ? void 0 : _a[phase.value]) !== undefined;
|
|
268
|
+
const buildPhaseKey = targets[nativeTarget].buildPhases?.filter((phase) => {
|
|
269
|
+
return this.objects.PBXSourcesBuildPhase?.[phase.value] !== undefined;
|
|
279
270
|
})[0];
|
|
280
271
|
if (buildPhaseKey === undefined) {
|
|
281
272
|
return undefined;
|
|
282
273
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
274
|
+
const buildPhase = this.objects.PBXSourcesBuildPhase?.[buildPhaseKey.value];
|
|
275
|
+
const buildPhaseFiles = buildPhase?.files ?? [];
|
|
276
|
+
const baseDir = path.dirname(path.dirname(this.projectPath));
|
|
286
277
|
return buildPhaseFiles
|
|
287
|
-
.map(
|
|
288
|
-
|
|
289
|
-
var fileRef = (_b = (_a = _this.objects.PBXBuildFile) === null || _a === void 0 ? void 0 : _a[file.value]) === null || _b === void 0 ? void 0 : _b.fileRef;
|
|
278
|
+
.map((file) => {
|
|
279
|
+
const fileRef = this.objects.PBXBuildFile?.[file.value]?.fileRef;
|
|
290
280
|
if (!fileRef) {
|
|
291
281
|
return '';
|
|
292
282
|
}
|
|
293
|
-
|
|
283
|
+
const buildFile = fileDictionary[fileRef];
|
|
294
284
|
if (!buildFile) {
|
|
295
285
|
return '';
|
|
296
286
|
}
|
|
297
287
|
return path.join(baseDir, buildFile);
|
|
298
288
|
})
|
|
299
|
-
.filter(
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
var _a;
|
|
289
|
+
.filter((f) => f.length > 0);
|
|
290
|
+
}
|
|
291
|
+
projectFiles() {
|
|
303
292
|
if (this.files === undefined) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
293
|
+
const proj = this.project.getFirstProject();
|
|
294
|
+
const mainGroupKey = proj.firstProject.mainGroup;
|
|
295
|
+
const mainGroup = this.objects.PBXGroup?.[mainGroupKey];
|
|
307
296
|
if (!mainGroup || typeof mainGroup === 'string') {
|
|
308
297
|
return [];
|
|
309
298
|
}
|
|
310
299
|
this.files = this.buildGroup(mainGroup);
|
|
311
300
|
}
|
|
312
301
|
return this.files;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
var child = _d[_i];
|
|
320
|
-
var fileReference = (_b = this.objects.PBXFileReference) === null || _b === void 0 ? void 0 : _b[child.value];
|
|
321
|
-
var groupReference = (_c = this.objects.PBXGroup) === null || _c === void 0 ? void 0 : _c[child.value];
|
|
302
|
+
}
|
|
303
|
+
buildGroup(group, path = '') {
|
|
304
|
+
const result = [];
|
|
305
|
+
for (const child of group.children ?? []) {
|
|
306
|
+
const fileReference = this.objects.PBXFileReference?.[child.value];
|
|
307
|
+
const groupReference = this.objects.PBXGroup?.[child.value];
|
|
322
308
|
if (fileReference) {
|
|
323
309
|
if (typeof fileReference === 'string') {
|
|
324
310
|
continue;
|
|
325
311
|
}
|
|
326
312
|
result.push({
|
|
327
313
|
key: child.value,
|
|
328
|
-
path:
|
|
314
|
+
path: `${path}${fileReference.path.replace(/"/g, '')}`,
|
|
329
315
|
});
|
|
330
316
|
}
|
|
331
317
|
else if (groupReference) {
|
|
332
318
|
if (typeof groupReference === 'string') {
|
|
333
319
|
continue;
|
|
334
320
|
}
|
|
335
|
-
|
|
336
|
-
?
|
|
321
|
+
const groupChildren = this.buildGroup(groupReference, groupReference.path
|
|
322
|
+
? `${path}${groupReference.path.replace(/"/g, '')}/`
|
|
337
323
|
: path);
|
|
338
|
-
result.push
|
|
324
|
+
result.push(...groupChildren);
|
|
339
325
|
}
|
|
340
326
|
}
|
|
341
327
|
return result;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
}());
|
|
328
|
+
}
|
|
329
|
+
}
|
|
345
330
|
exports.XcodeProject = XcodeProject;
|
|
346
331
|
//# sourceMappingURL=xcode-manager.js.map
|