@sentry/wizard 4.0.0 → 4.0.1
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/CHANGELOG.md +6 -2
- package/dist/lib/Steps/Integrations/Electron.js +1 -1
- package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
- package/package.json +5 -2
- 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/COPYING +0 -3575
- package/bin.ts +0 -143
- package/codecov.yml +0 -15
- package/e2e-tests/.env.example +0 -11
- package/e2e-tests/README.md +0 -63
- package/e2e-tests/jest.config.ts +0 -22
- package/e2e-tests/package.json +0 -14
- package/e2e-tests/run.sh +0 -15
- package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj +0 -52
- package/e2e-tests/test-applications/apple/damaged-missing-configuration-list/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +0 -78
- package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/project.pbxproj +0 -62
- package/e2e-tests/test-applications/apple/no-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +0 -78
- package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj +0 -470
- package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project.xcodeproj/xcshareddata/xcschemes/Project1.xcscheme +0 -78
- package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/ContentView.swift +0 -7
- package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project1/Project1App.swift +0 -10
- package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/ContentView.swift +0 -7
- package/e2e-tests/test-applications/apple/spm-swiftui-multi-targets/Project2/Project2App.swift +0 -10
- package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/project.pbxproj +0 -382
- package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Project.xcodeproj/xcshareddata/xcschemes/Project.xcscheme +0 -78
- package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/ContentView.swift +0 -7
- package/e2e-tests/test-applications/apple/spm-swiftui-single-target/Sources/MainApp.swift +0 -10
- package/e2e-tests/test-applications/flutter-test-app/.metadata +0 -45
- package/e2e-tests/test-applications/flutter-test-app/README.md +0 -16
- package/e2e-tests/test-applications/flutter-test-app/analysis_options.yaml +0 -28
- package/e2e-tests/test-applications/flutter-test-app/android/app/build.gradle +0 -44
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/debug/AndroidManifest.xml +0 -7
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/AndroidManifest.xml +0 -45
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/kotlin/com/example/flutter_magic/MainActivity.kt +0 -5
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/drawable/launch_background.xml +0 -12
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/drawable-v21/launch_background.xml +0 -12
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/values/styles.xml +0 -18
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/main/res/values-night/styles.xml +0 -18
- package/e2e-tests/test-applications/flutter-test-app/android/app/src/profile/AndroidManifest.xml +0 -7
- package/e2e-tests/test-applications/flutter-test-app/android/build.gradle +0 -18
- package/e2e-tests/test-applications/flutter-test-app/android/gradle/wrapper/gradle-wrapper.properties +0 -5
- package/e2e-tests/test-applications/flutter-test-app/android/gradle.properties +0 -3
- package/e2e-tests/test-applications/flutter-test-app/android/settings.gradle +0 -25
- package/e2e-tests/test-applications/flutter-test-app/lib/main.dart +0 -125
- package/e2e-tests/test-applications/flutter-test-app/linux/CMakeLists.txt +0 -145
- package/e2e-tests/test-applications/flutter-test-app/linux/flutter/CMakeLists.txt +0 -88
- package/e2e-tests/test-applications/flutter-test-app/linux/flutter/generated_plugin_registrant.cc +0 -11
- package/e2e-tests/test-applications/flutter-test-app/linux/flutter/generated_plugin_registrant.h +0 -15
- package/e2e-tests/test-applications/flutter-test-app/linux/flutter/generated_plugins.cmake +0 -23
- package/e2e-tests/test-applications/flutter-test-app/linux/main.cc +0 -6
- package/e2e-tests/test-applications/flutter-test-app/linux/my_application.cc +0 -124
- package/e2e-tests/test-applications/flutter-test-app/linux/my_application.h +0 -18
- package/e2e-tests/test-applications/flutter-test-app/macos/Flutter/Flutter-Debug.xcconfig +0 -2
- package/e2e-tests/test-applications/flutter-test-app/macos/Flutter/Flutter-Release.xcconfig +0 -2
- package/e2e-tests/test-applications/flutter-test-app/macos/Flutter/GeneratedPluginRegistrant.swift +0 -10
- package/e2e-tests/test-applications/flutter-test-app/macos/Podfile +0 -43
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/AppDelegate.swift +0 -9
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -68
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Base.lproj/MainMenu.xib +0 -343
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/AppInfo.xcconfig +0 -14
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/Debug.xcconfig +0 -2
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/Release.xcconfig +0 -2
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Configs/Warnings.xcconfig +0 -13
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/DebugProfile.entitlements +0 -12
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Info.plist +0 -32
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/MainFlutterWindow.swift +0 -15
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner/Release.entitlements +0 -8
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcodeproj/project.pbxproj +0 -705
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +0 -98
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcworkspace/contents.xcworkspacedata +0 -7
- package/e2e-tests/test-applications/flutter-test-app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/e2e-tests/test-applications/flutter-test-app/macos/RunnerTests/RunnerTests.swift +0 -12
- package/e2e-tests/test-applications/flutter-test-app/pubspec.lock +0 -213
- package/e2e-tests/test-applications/flutter-test-app/pubspec.yaml +0 -89
- package/e2e-tests/test-applications/flutter-test-app/test/widget_test.dart +0 -30
- package/e2e-tests/test-applications/flutter-test-app/web/favicon.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-192.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-512.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-maskable-192.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/web/icons/Icon-maskable-512.png +0 -0
- package/e2e-tests/test-applications/flutter-test-app/web/index.html +0 -38
- package/e2e-tests/test-applications/flutter-test-app/web/manifest.json +0 -35
- package/e2e-tests/test-applications/flutter-test-app/windows/CMakeLists.txt +0 -108
- package/e2e-tests/test-applications/flutter-test-app/windows/flutter/CMakeLists.txt +0 -109
- package/e2e-tests/test-applications/flutter-test-app/windows/flutter/generated_plugin_registrant.cc +0 -11
- package/e2e-tests/test-applications/flutter-test-app/windows/flutter/generated_plugin_registrant.h +0 -15
- package/e2e-tests/test-applications/flutter-test-app/windows/flutter/generated_plugins.cmake +0 -23
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/CMakeLists.txt +0 -40
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/Runner.rc +0 -121
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/flutter_window.cpp +0 -71
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/flutter_window.h +0 -33
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/main.cpp +0 -43
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/resource.h +0 -16
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/resources/app_icon.ico +0 -0
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/runner.exe.manifest +0 -14
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/utils.cpp +0 -65
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/utils.h +0 -19
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/win32_window.cpp +0 -288
- package/e2e-tests/test-applications/flutter-test-app/windows/runner/win32_window.h +0 -102
- package/e2e-tests/test-applications/nextjs-test-app/next.config.mjs +0 -4
- package/e2e-tests/test-applications/nextjs-test-app/package.json +0 -22
- package/e2e-tests/test-applications/nextjs-test-app/src/app/layout.tsx +0 -20
- package/e2e-tests/test-applications/nextjs-test-app/src/app/page.tsx +0 -90
- package/e2e-tests/test-applications/nuxt-3-test-app/README.md +0 -75
- package/e2e-tests/test-applications/nuxt-3-test-app/nuxt.config.ts +0 -5
- package/e2e-tests/test-applications/nuxt-3-test-app/package.json +0 -18
- package/e2e-tests/test-applications/nuxt-3-test-app/public/favicon.ico +0 -0
- package/e2e-tests/test-applications/nuxt-3-test-app/public/robots.txt +0 -1
- package/e2e-tests/test-applications/nuxt-4-test-app/README.md +0 -75
- package/e2e-tests/test-applications/nuxt-4-test-app/nuxt.config.ts +0 -6
- package/e2e-tests/test-applications/nuxt-4-test-app/package.json +0 -18
- package/e2e-tests/test-applications/nuxt-4-test-app/public/favicon.ico +0 -0
- package/e2e-tests/test-applications/nuxt-4-test-app/public/robots.txt +0 -1
- package/e2e-tests/test-applications/remix-test-app/app/entry.client.tsx +0 -18
- package/e2e-tests/test-applications/remix-test-app/app/entry.server.tsx +0 -140
- package/e2e-tests/test-applications/remix-test-app/app/root.tsx +0 -30
- package/e2e-tests/test-applications/remix-test-app/app/routes/_index.tsx +0 -48
- package/e2e-tests/test-applications/remix-test-app/app/tailwind.css +0 -3
- package/e2e-tests/test-applications/remix-test-app/package.json +0 -37
- package/e2e-tests/test-applications/remix-test-app/postcss.config.js +0 -6
- package/e2e-tests/test-applications/remix-test-app/tailwind.config.ts +0 -9
- package/e2e-tests/test-applications/remix-test-app/vite.config.ts +0 -16
- package/e2e-tests/test-applications/sveltekit-test-app/package.json +0 -21
- package/e2e-tests/test-applications/sveltekit-test-app/src/app.d.ts +0 -13
- package/e2e-tests/test-applications/sveltekit-test-app/src/app.html +0 -11
- package/e2e-tests/test-applications/sveltekit-test-app/src/lib/index.ts +0 -1
- package/e2e-tests/test-applications/sveltekit-test-app/src/routes/+page.svelte +0 -2
- package/e2e-tests/test-applications/sveltekit-test-app/svelte.config.js +0 -18
- package/e2e-tests/test-applications/sveltekit-test-app/vite.config.ts +0 -6
- package/e2e-tests/tests/flutter.test.ts +0 -127
- package/e2e-tests/tests/nextjs.test.ts +0 -161
- package/e2e-tests/tests/nuxt-3.test.ts +0 -189
- package/e2e-tests/tests/nuxt-4.test.ts +0 -188
- package/e2e-tests/tests/remix.test.ts +0 -277
- package/e2e-tests/tests/sveltekit.test.ts +0 -284
- package/e2e-tests/utils/index.ts +0 -456
- package/index.ts +0 -2
- package/lib/Constants.ts +0 -118
- package/lib/Helper/BottomBar.ts +0 -28
- package/lib/Helper/Env.ts +0 -7
- package/lib/Helper/File.ts +0 -65
- package/lib/Helper/Git.ts +0 -39
- package/lib/Helper/Logging.ts +0 -44
- package/lib/Helper/MergeConfig.ts +0 -19
- package/lib/Helper/Package.ts +0 -80
- package/lib/Helper/SentryCli.ts +0 -139
- package/lib/Helper/Wizard.ts +0 -58
- package/lib/Helper/__tests__/File.ts +0 -15
- package/lib/Helper/__tests__/MergeConfig.ts +0 -98
- package/lib/Helper/__tests__/SentryCli.ts +0 -86
- package/lib/Helper/test-fixtures/next.config.1-merged.js +0 -18
- package/lib/Helper/test-fixtures/next.config.1.js +0 -6
- package/lib/Helper/test-fixtures/next.config.2.js +0 -8
- package/lib/Helper/test-fixtures/next.config.3-merged.js +0 -21
- package/lib/Helper/test-fixtures/next.config.3.js +0 -9
- package/lib/Helper/test-fixtures/next.config.4-merged.js +0 -21
- package/lib/Helper/test-fixtures/next.config.4.js +0 -9
- package/lib/Setup.ts +0 -40
- package/lib/Steps/BaseStep.ts +0 -25
- package/lib/Steps/ChooseIntegration.ts +0 -144
- package/lib/Steps/ConfigureProject.ts +0 -10
- package/lib/Steps/Initial.ts +0 -35
- package/lib/Steps/Integrations/BaseIntegration.ts +0 -42
- package/lib/Steps/Integrations/Cordova.ts +0 -283
- package/lib/Steps/Integrations/Electron.ts +0 -164
- package/lib/Steps/Integrations/MobileProject.ts +0 -72
- package/lib/Steps/OpenSentry.ts +0 -80
- package/lib/Steps/PromptForParameters.ts +0 -200
- package/lib/Steps/Result.ts +0 -22
- package/lib/Steps/SentryProjectSelector.ts +0 -83
- package/lib/Steps/ShouldConfigure.ts +0 -10
- package/lib/Steps/WaitForSentry.ts +0 -56
- package/lib/Steps/Welcome.ts +0 -21
- package/lib/Steps/index.ts +0 -10
- package/lib/__tests__/Env.ts +0 -29
- package/scripts/NextJs/configs/_error.js +0 -39
- package/scripts/NextJs/configs/next.config.js +0 -36
- package/scripts/NextJs/configs/next.config.template.js +0 -12
- package/scripts/NextJs/configs/sentry.client.config.js +0 -17
- package/scripts/NextJs/configs/sentry.edge.config.js +0 -17
- package/scripts/NextJs/configs/sentry.server.config.js +0 -17
- package/scripts/NextJs/sentry_sample_error.js +0 -47
- package/scripts/craft-pre-release.sh +0 -10
- package/src/android/android-wizard.ts +0 -192
- package/src/android/code-tools.ts +0 -170
- package/src/android/gradle.ts +0 -250
- package/src/android/manifest.ts +0 -180
- package/src/android/templates.ts +0 -86
- package/src/apple/apple-wizard.ts +0 -269
- package/src/apple/cocoapod.ts +0 -73
- package/src/apple/code-tools.ts +0 -147
- package/src/apple/fastlane.ts +0 -170
- package/src/apple/templates.ts +0 -65
- package/src/apple/xcode-manager.ts +0 -404
- package/src/flutter/code-tools.ts +0 -284
- package/src/flutter/flutter-wizard.ts +0 -164
- package/src/flutter/templates.ts +0 -90
- package/src/nextjs/nextjs-wizard.ts +0 -1007
- package/src/nextjs/templates.ts +0 -525
- package/src/nextjs/utils.ts +0 -21
- package/src/nuxt/nuxt-wizard.ts +0 -188
- package/src/nuxt/sdk-example.ts +0 -135
- package/src/nuxt/sdk-setup.ts +0 -352
- package/src/nuxt/templates.ts +0 -303
- package/src/nuxt/types.ts +0 -8
- package/src/nuxt/utils.ts +0 -42
- package/src/react-native/expo-env-file.ts +0 -55
- package/src/react-native/expo-metro.ts +0 -212
- package/src/react-native/expo.ts +0 -175
- package/src/react-native/git.ts +0 -25
- package/src/react-native/glob.ts +0 -13
- package/src/react-native/gradle.ts +0 -26
- package/src/react-native/javascript.ts +0 -103
- package/src/react-native/metro.ts +0 -599
- package/src/react-native/options.ts +0 -5
- package/src/react-native/react-native-wizard.ts +0 -512
- package/src/react-native/uninstall.ts +0 -109
- package/src/react-native/xcode.ts +0 -302
- package/src/remix/codemods/express-server.ts +0 -44
- package/src/remix/codemods/handle-error.ts +0 -118
- package/src/remix/codemods/root-common.ts +0 -63
- package/src/remix/codemods/root-v1.ts +0 -41
- package/src/remix/codemods/root-v2.ts +0 -153
- package/src/remix/remix-wizard.ts +0 -261
- package/src/remix/sdk-example.ts +0 -120
- package/src/remix/sdk-setup.ts +0 -546
- package/src/remix/templates.ts +0 -11
- package/src/remix/utils.ts +0 -96
- package/src/run.ts +0 -211
- package/src/sourcemaps/sourcemaps-wizard.ts +0 -364
- package/src/sourcemaps/tools/angular.ts +0 -42
- package/src/sourcemaps/tools/create-react-app.ts +0 -19
- package/src/sourcemaps/tools/esbuild.ts +0 -65
- package/src/sourcemaps/tools/nextjs.ts +0 -114
- package/src/sourcemaps/tools/remix.ts +0 -90
- package/src/sourcemaps/tools/rollup.ts +0 -67
- package/src/sourcemaps/tools/sentry-cli.ts +0 -287
- package/src/sourcemaps/tools/tsc.ts +0 -144
- package/src/sourcemaps/tools/types.ts +0 -11
- package/src/sourcemaps/tools/vite.ts +0 -300
- package/src/sourcemaps/tools/webpack.ts +0 -383
- package/src/sourcemaps/utils/detect-tool.ts +0 -46
- package/src/sourcemaps/utils/other-wizards.ts +0 -167
- package/src/sourcemaps/utils/sdk-version.ts +0 -266
- package/src/sveltekit/sdk-example.ts +0 -56
- package/src/sveltekit/sdk-setup.ts +0 -667
- package/src/sveltekit/sveltekit-wizard.ts +0 -192
- package/src/sveltekit/templates.ts +0 -185
- package/src/sveltekit/utils.ts +0 -50
- package/src/telemetry.ts +0 -144
- package/src/utils/ast-utils.ts +0 -270
- package/src/utils/bash.ts +0 -57
- package/src/utils/clack-utils.ts +0 -1536
- package/src/utils/debug.ts +0 -20
- package/src/utils/package-json.ts +0 -51
- package/src/utils/package-manager.ts +0 -172
- package/src/utils/release-registry.ts +0 -19
- package/src/utils/semver.ts +0 -33
- package/src/utils/sentrycli-utils.ts +0 -24
- package/src/utils/string.ts +0 -7
- package/src/utils/types.ts +0 -77
- package/src/utils/url.ts +0 -27
- package/src/utils/vendor/is-unicorn-supported.ts +0 -29
- package/test/android/code-tools.test.ts +0 -49
- package/test/apple/cocoapod.test.ts +0 -310
- package/test/apple/code-tools.test.ts +0 -1042
- package/test/apple/fastfile.test.ts +0 -555
- package/test/apple/templates.test.ts +0 -191
- package/test/apple/xcode-manager.test.ts +0 -1068
- package/test/flutter/code-tools.test.ts +0 -212
- package/test/flutter/templates.test.ts +0 -100
- package/test/nextjs/templates.test.ts +0 -429
- package/test/nuxt/templates.test.ts +0 -255
- package/test/react-native/expo-metro.test.ts +0 -81
- package/test/react-native/expo.test.ts +0 -86
- package/test/react-native/gradle.test.ts +0 -310
- package/test/react-native/javascript.test.ts +0 -134
- package/test/react-native/metro.test.ts +0 -396
- package/test/react-native/xcode.test.ts +0 -401
- package/test/remix/client-entry.test.ts +0 -122
- package/test/remix/server-instrumentation.test.ts +0 -36
- package/test/sourcemaps/tools/sentry-cli.test.ts +0 -57
- package/test/sourcemaps/tools/tsc.test.ts +0 -181
- package/test/sourcemaps/tools/vite.test.ts +0 -149
- package/test/sourcemaps/tools/webpack.test.ts +0 -303
- package/test/sveltekit/templates.test.ts +0 -152
- package/test/utils/ast-utils.test.ts +0 -264
- package/test/utils/clack-utils.test.ts +0 -224
- package/types/read-env.d.ts +0 -3
- package/types/xcode.d.ts +0 -527
package/src/apple/templates.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
export function getRunScriptTemplate(
|
|
2
|
-
orgSlug: string,
|
|
3
|
-
projectSlug: string,
|
|
4
|
-
uploadSource: boolean,
|
|
5
|
-
includeHomebrewPath: boolean,
|
|
6
|
-
): string {
|
|
7
|
-
// eslint-disable-next-line no-useless-escape
|
|
8
|
-
const includeHomebrew = includeHomebrewPath
|
|
9
|
-
? '\\nif [[ "$(uname -m)" == arm64 ]]; then\\nexport PATH="/opt/homebrew/bin:$PATH"\\nfi'
|
|
10
|
-
: '';
|
|
11
|
-
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 ${
|
|
12
|
-
uploadSource ? '--include-sources ' : ''
|
|
13
|
-
}"$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`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const scriptInputPath =
|
|
17
|
-
'"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}"';
|
|
18
|
-
|
|
19
|
-
export function getSwiftSnippet(dsn: string): string {
|
|
20
|
-
return ` SentrySDK.start { options in
|
|
21
|
-
options.dsn = "${dsn}"
|
|
22
|
-
options.debug = true // Enabled debug when first installing is always helpful
|
|
23
|
-
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
|
24
|
-
// We recommend adjusting this value in production.
|
|
25
|
-
options.tracesSampleRate = 1.0
|
|
26
|
-
|
|
27
|
-
// Sample rate for profiling, applied on top of TracesSampleRate.
|
|
28
|
-
// We recommend adjusting this value in production.
|
|
29
|
-
options.profilesSampleRate = 1.0
|
|
30
|
-
|
|
31
|
-
// Uncomment the following lines to add more data to your events
|
|
32
|
-
// options.attachScreenshot = true // This adds a screenshot to the error events
|
|
33
|
-
// options.attachViewHierarchy = true // This adds the view hierarchy to the error events
|
|
34
|
-
}
|
|
35
|
-
// Remove the next line after confirming that your Sentry integration is working.
|
|
36
|
-
SentrySDK.capture(message: "This app uses Sentry! :)")\n`;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function getObjcSnippet(dsn: string): string {
|
|
40
|
-
return ` [SentrySDK startWithConfigureOptions:^(SentryOptions * options) {
|
|
41
|
-
options.dsn = @"${dsn}";
|
|
42
|
-
options.debug = YES; // Enabled debug when first installing is always helpful
|
|
43
|
-
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
|
44
|
-
// We recommend adjusting this value in production.
|
|
45
|
-
options.tracesSampleRate = @1.0;
|
|
46
|
-
|
|
47
|
-
// Sample rate for profiling, applied on top of TracesSampleRate.
|
|
48
|
-
// We recommend adjusting this value in production.
|
|
49
|
-
options.profilesSampleRate = @1.0;
|
|
50
|
-
|
|
51
|
-
//Uncomment the following lines to add more data to your events
|
|
52
|
-
//options.attachScreenshot = YES; //This will add a screenshot to the error events
|
|
53
|
-
//options.attachViewHierarchy = YES; //This will add the view hierarchy to the error events
|
|
54
|
-
}];
|
|
55
|
-
//Remove the next line after confirming that your Sentry integration is working.
|
|
56
|
-
[SentrySDK captureMessage:@"This app uses Sentry!"];\n`;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function getFastlaneSnippet(org: string, project: string): string {
|
|
60
|
-
return ` sentry_cli(
|
|
61
|
-
org_slug: '${org}',
|
|
62
|
-
project_slug: '${project}',
|
|
63
|
-
include_sources: true
|
|
64
|
-
)`;
|
|
65
|
-
}
|
|
@@ -1,404 +0,0 @@
|
|
|
1
|
-
/* eslint-disable max-lines */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
5
|
-
// @ts-ignore - clack is ESM and TS complains about that. It works though
|
|
6
|
-
import clack from '@clack/prompts';
|
|
7
|
-
import * as fs from 'node:fs';
|
|
8
|
-
import * as path from 'node:path';
|
|
9
|
-
import type { SentryProjectData } from '../utils/types';
|
|
10
|
-
import * as templates from './templates';
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
project as createXcodeProject,
|
|
14
|
-
type PBXBuildFile,
|
|
15
|
-
type PBXGroup,
|
|
16
|
-
type PBXNativeTarget,
|
|
17
|
-
type PBXObjects,
|
|
18
|
-
type PBXSourcesBuildPhase,
|
|
19
|
-
type Project,
|
|
20
|
-
type XCConfigurationList,
|
|
21
|
-
} from 'xcode';
|
|
22
|
-
|
|
23
|
-
interface ProjectFile {
|
|
24
|
-
key: string;
|
|
25
|
-
path: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function setDebugInformationFormatAndSandbox(
|
|
29
|
-
proj: Project,
|
|
30
|
-
targetName: string,
|
|
31
|
-
): void {
|
|
32
|
-
const xcObjects = proj.hash.project.objects;
|
|
33
|
-
if (!xcObjects.PBXNativeTarget) {
|
|
34
|
-
xcObjects.PBXNativeTarget = {};
|
|
35
|
-
}
|
|
36
|
-
const targetKey: string = Object.keys(xcObjects.PBXNativeTarget).filter(
|
|
37
|
-
(key) => {
|
|
38
|
-
const value = xcObjects.PBXNativeTarget?.[key];
|
|
39
|
-
return (
|
|
40
|
-
!key.endsWith('_comment') &&
|
|
41
|
-
typeof value !== 'string' &&
|
|
42
|
-
value?.name === targetName
|
|
43
|
-
);
|
|
44
|
-
},
|
|
45
|
-
)[0];
|
|
46
|
-
const target = xcObjects.PBXNativeTarget[targetKey] as
|
|
47
|
-
| PBXNativeTarget
|
|
48
|
-
| undefined;
|
|
49
|
-
|
|
50
|
-
if (!xcObjects.XCBuildConfiguration) {
|
|
51
|
-
xcObjects.XCBuildConfiguration = {};
|
|
52
|
-
}
|
|
53
|
-
if (!xcObjects.XCConfigurationList) {
|
|
54
|
-
xcObjects.XCConfigurationList = {};
|
|
55
|
-
}
|
|
56
|
-
const buildConfigurationListId = target?.buildConfigurationList ?? '';
|
|
57
|
-
const configurationList = xcObjects.XCConfigurationList?.[
|
|
58
|
-
buildConfigurationListId
|
|
59
|
-
] as XCConfigurationList | undefined;
|
|
60
|
-
const buildListConfigurationIds =
|
|
61
|
-
configurationList?.buildConfigurations ?? [];
|
|
62
|
-
for (const buildListConfigId of buildListConfigurationIds) {
|
|
63
|
-
const config =
|
|
64
|
-
xcObjects.XCBuildConfiguration[buildListConfigId.value] ?? {};
|
|
65
|
-
if (typeof config === 'string') {
|
|
66
|
-
// Ignore comments
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const buildSettings = config.buildSettings ?? {};
|
|
71
|
-
buildSettings.DEBUG_INFORMATION_FORMAT = '"dwarf-with-dsym"';
|
|
72
|
-
buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '"NO"';
|
|
73
|
-
|
|
74
|
-
config.buildSettings = buildSettings;
|
|
75
|
-
xcObjects.XCBuildConfiguration[buildListConfigId.value] = config;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function addSentrySPM(proj: Project, targetName: string): void {
|
|
80
|
-
const xcObjects = proj.hash.project.objects;
|
|
81
|
-
|
|
82
|
-
const sentryFrameworkUUID = proj.generateUuid();
|
|
83
|
-
const sentrySPMUUID = proj.generateUuid();
|
|
84
|
-
|
|
85
|
-
// Check whether xcObjects already have sentry framework
|
|
86
|
-
if (xcObjects.PBXFrameworksBuildPhase) {
|
|
87
|
-
for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {
|
|
88
|
-
const frameworkBuildPhase = xcObjects.PBXFrameworksBuildPhase[key];
|
|
89
|
-
if (key.endsWith('_comment') || typeof frameworkBuildPhase === 'string') {
|
|
90
|
-
// Ignore comments
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
for (const framework of frameworkBuildPhase.files ?? []) {
|
|
94
|
-
// We identify the Sentry framework by the comment "Sentry in Frameworks",
|
|
95
|
-
// which is set by this manager in previous runs.
|
|
96
|
-
if (framework.comment === 'Sentry in Frameworks') {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (!xcObjects.PBXBuildFile) {
|
|
104
|
-
xcObjects.PBXBuildFile = {};
|
|
105
|
-
}
|
|
106
|
-
xcObjects.PBXBuildFile[sentryFrameworkUUID] = {
|
|
107
|
-
isa: 'PBXBuildFile',
|
|
108
|
-
productRef: sentrySPMUUID,
|
|
109
|
-
productRef_comment: 'Sentry',
|
|
110
|
-
};
|
|
111
|
-
xcObjects.PBXBuildFile[`${sentryFrameworkUUID}_comment`] =
|
|
112
|
-
'Sentry in Frameworks';
|
|
113
|
-
|
|
114
|
-
if (!xcObjects.PBXFrameworksBuildPhase) {
|
|
115
|
-
xcObjects.PBXFrameworksBuildPhase = {};
|
|
116
|
-
}
|
|
117
|
-
for (const key in xcObjects.PBXFrameworksBuildPhase) {
|
|
118
|
-
const value = xcObjects.PBXFrameworksBuildPhase[key];
|
|
119
|
-
if (key.endsWith('_comment') || typeof value === 'string') {
|
|
120
|
-
// Ignore comments
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const frameworks = value.files ?? [];
|
|
125
|
-
frameworks.push({
|
|
126
|
-
value: sentryFrameworkUUID,
|
|
127
|
-
comment: 'Sentry in Frameworks',
|
|
128
|
-
});
|
|
129
|
-
value.files = frameworks;
|
|
130
|
-
|
|
131
|
-
xcObjects.PBXFrameworksBuildPhase[key] = value;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (!xcObjects.PBXNativeTarget) {
|
|
135
|
-
xcObjects.PBXNativeTarget = {};
|
|
136
|
-
}
|
|
137
|
-
const targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(
|
|
138
|
-
(key) => {
|
|
139
|
-
const value = xcObjects.PBXNativeTarget?.[key];
|
|
140
|
-
return (
|
|
141
|
-
!key.endsWith('_comment') &&
|
|
142
|
-
typeof value !== 'string' &&
|
|
143
|
-
value?.name === targetName
|
|
144
|
-
);
|
|
145
|
-
},
|
|
146
|
-
)[0];
|
|
147
|
-
const target = xcObjects.PBXNativeTarget[targetKey] as PBXNativeTarget;
|
|
148
|
-
|
|
149
|
-
if (!target.packageProductDependencies) {
|
|
150
|
-
target.packageProductDependencies = [];
|
|
151
|
-
}
|
|
152
|
-
target.packageProductDependencies.push({
|
|
153
|
-
value: sentrySPMUUID,
|
|
154
|
-
comment: 'Sentry',
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
const sentrySwiftPackageUUID = proj.generateUuid();
|
|
158
|
-
const xcProject = proj.getFirstProject().firstProject;
|
|
159
|
-
if (!xcProject.packageReferences) {
|
|
160
|
-
xcProject.packageReferences = [];
|
|
161
|
-
}
|
|
162
|
-
xcProject.packageReferences.push({
|
|
163
|
-
value: sentrySwiftPackageUUID,
|
|
164
|
-
comment: 'XCRemoteSwiftPackageReference "sentry-cocoa"',
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
if (!xcObjects.XCRemoteSwiftPackageReference) {
|
|
168
|
-
xcObjects.XCRemoteSwiftPackageReference = {};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {
|
|
172
|
-
isa: 'XCRemoteSwiftPackageReference',
|
|
173
|
-
repositoryURL: '"https://github.com/getsentry/sentry-cocoa/"',
|
|
174
|
-
requirement: {
|
|
175
|
-
kind: 'upToNextMajorVersion',
|
|
176
|
-
minimumVersion: '8.0.0',
|
|
177
|
-
},
|
|
178
|
-
};
|
|
179
|
-
xcObjects.XCRemoteSwiftPackageReference[`${sentrySwiftPackageUUID}_comment`] =
|
|
180
|
-
'XCRemoteSwiftPackageReference "sentry-cocoa"';
|
|
181
|
-
|
|
182
|
-
if (!xcObjects.XCSwiftPackageProductDependency) {
|
|
183
|
-
xcObjects.XCSwiftPackageProductDependency = {};
|
|
184
|
-
}
|
|
185
|
-
xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {
|
|
186
|
-
isa: 'XCSwiftPackageProductDependency',
|
|
187
|
-
package: sentrySwiftPackageUUID,
|
|
188
|
-
package_comment: 'XCRemoteSwiftPackageReference "sentry-cocoa"',
|
|
189
|
-
productName: 'Sentry',
|
|
190
|
-
};
|
|
191
|
-
xcObjects.XCSwiftPackageProductDependency[`${sentrySPMUUID}_comment`] =
|
|
192
|
-
'Sentry';
|
|
193
|
-
|
|
194
|
-
clack.log.step('Added Sentry SPM dependency to your project');
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function addUploadSymbolsScript(
|
|
198
|
-
xcodeProject: Project,
|
|
199
|
-
sentryProject: SentryProjectData,
|
|
200
|
-
targetName: string,
|
|
201
|
-
uploadSource: boolean,
|
|
202
|
-
): void {
|
|
203
|
-
const xcObjects = xcodeProject.hash.project.objects;
|
|
204
|
-
if (!xcObjects.PBXNativeTarget) {
|
|
205
|
-
xcObjects.PBXNativeTarget = {};
|
|
206
|
-
}
|
|
207
|
-
const targetKey = Object.keys(xcObjects.PBXNativeTarget).filter((key) => {
|
|
208
|
-
const value = xcObjects.PBXNativeTarget?.[key];
|
|
209
|
-
return (
|
|
210
|
-
!key.endsWith('_comment') &&
|
|
211
|
-
typeof value !== 'string' &&
|
|
212
|
-
value?.name === targetName
|
|
213
|
-
);
|
|
214
|
-
})[0];
|
|
215
|
-
|
|
216
|
-
if (!xcObjects.PBXShellScriptBuildPhase) {
|
|
217
|
-
xcObjects.PBXShellScriptBuildPhase = {};
|
|
218
|
-
}
|
|
219
|
-
for (const key in xcObjects.PBXShellScriptBuildPhase) {
|
|
220
|
-
const value = xcObjects.PBXShellScriptBuildPhase[key] ?? {};
|
|
221
|
-
if (typeof value === 'string') {
|
|
222
|
-
// Ignore comments
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// Sentry script already exists, update it
|
|
227
|
-
if (value.shellScript?.includes('sentry-cli')) {
|
|
228
|
-
delete xcObjects.PBXShellScriptBuildPhase?.[key];
|
|
229
|
-
delete xcObjects.PBXShellScriptBuildPhase?.[`${key}_comment`];
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
xcObjects.PBXShellScriptBuildPhase[key] = value;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const isHomebrewInstalled = fs.existsSync('/opt/homebrew/bin/sentry-cli');
|
|
236
|
-
xcodeProject.addBuildPhase(
|
|
237
|
-
[],
|
|
238
|
-
'PBXShellScriptBuildPhase',
|
|
239
|
-
'Upload Debug Symbols to Sentry',
|
|
240
|
-
targetKey,
|
|
241
|
-
{
|
|
242
|
-
inputFileListPaths: [],
|
|
243
|
-
outputFileListPaths: [],
|
|
244
|
-
inputPaths: [templates.scriptInputPath],
|
|
245
|
-
shellPath: '/bin/sh',
|
|
246
|
-
shellScript: templates.getRunScriptTemplate(
|
|
247
|
-
sentryProject.organization.slug,
|
|
248
|
-
sentryProject.slug,
|
|
249
|
-
uploadSource,
|
|
250
|
-
isHomebrewInstalled,
|
|
251
|
-
),
|
|
252
|
-
},
|
|
253
|
-
);
|
|
254
|
-
clack.log.step(`Added Sentry upload script to "${targetName}" build phase`);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
export class XcodeProject {
|
|
258
|
-
projectPath: string;
|
|
259
|
-
project: Project;
|
|
260
|
-
objects: PBXObjects;
|
|
261
|
-
files: ProjectFile[] | undefined;
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Creates a new XcodeProject instance, a wrapper around the Xcode project file `<PROJECT>.xcodeproj/project.pbxproj`.
|
|
265
|
-
*
|
|
266
|
-
* @param projectPath - The path to the Xcode project file
|
|
267
|
-
*/
|
|
268
|
-
public constructor(projectPath: string) {
|
|
269
|
-
this.projectPath = projectPath;
|
|
270
|
-
this.project = createXcodeProject(projectPath);
|
|
271
|
-
this.project.parseSync();
|
|
272
|
-
this.objects = this.project.hash.project.objects;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
public getAllTargets(): string[] {
|
|
276
|
-
const targets = this.objects.PBXNativeTarget ?? {};
|
|
277
|
-
return Object.keys(targets)
|
|
278
|
-
.filter((key) => {
|
|
279
|
-
const value = targets[key];
|
|
280
|
-
return (
|
|
281
|
-
!key.endsWith('_comment') &&
|
|
282
|
-
typeof value !== 'string' &&
|
|
283
|
-
value.productType.startsWith('"com.apple.product-type.application')
|
|
284
|
-
);
|
|
285
|
-
})
|
|
286
|
-
.map((key) => {
|
|
287
|
-
return (targets[key] as PBXNativeTarget).name;
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
public updateXcodeProject(
|
|
292
|
-
sentryProject: SentryProjectData,
|
|
293
|
-
target: string,
|
|
294
|
-
addSPMReference: boolean,
|
|
295
|
-
uploadSource = true,
|
|
296
|
-
): void {
|
|
297
|
-
addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);
|
|
298
|
-
if (uploadSource) {
|
|
299
|
-
setDebugInformationFormatAndSandbox(this.project, target);
|
|
300
|
-
}
|
|
301
|
-
if (addSPMReference) {
|
|
302
|
-
addSentrySPM(this.project, target);
|
|
303
|
-
}
|
|
304
|
-
const newContent = this.project.writeSync();
|
|
305
|
-
fs.writeFileSync(this.projectPath, newContent);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
public filesForTarget(target: string): string[] | undefined {
|
|
309
|
-
const files = this.projectFiles();
|
|
310
|
-
const fileDictionary: Record<string, string> = {};
|
|
311
|
-
files.forEach((file) => {
|
|
312
|
-
fileDictionary[file.key] = file.path;
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
const targets = this.objects.PBXNativeTarget || {};
|
|
316
|
-
const nativeTarget = Object.keys(targets).filter((key) => {
|
|
317
|
-
const value = targets[key];
|
|
318
|
-
return (
|
|
319
|
-
!key.endsWith('_comment') &&
|
|
320
|
-
typeof value !== 'string' &&
|
|
321
|
-
value.name === target
|
|
322
|
-
);
|
|
323
|
-
})[0];
|
|
324
|
-
|
|
325
|
-
if (nativeTarget === undefined) {
|
|
326
|
-
return undefined;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
const buildPhaseKey = (
|
|
330
|
-
targets[nativeTarget] as PBXNativeTarget
|
|
331
|
-
).buildPhases?.filter((phase) => {
|
|
332
|
-
return this.objects.PBXSourcesBuildPhase?.[phase.value] !== undefined;
|
|
333
|
-
})[0];
|
|
334
|
-
|
|
335
|
-
if (buildPhaseKey === undefined) {
|
|
336
|
-
return undefined;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
const buildPhase = this.objects.PBXSourcesBuildPhase?.[
|
|
340
|
-
buildPhaseKey.value
|
|
341
|
-
] as PBXSourcesBuildPhase;
|
|
342
|
-
const buildPhaseFiles = buildPhase?.files ?? [];
|
|
343
|
-
|
|
344
|
-
const baseDir = path.dirname(path.dirname(this.projectPath));
|
|
345
|
-
|
|
346
|
-
return buildPhaseFiles
|
|
347
|
-
.map((file) => {
|
|
348
|
-
const fileRef = (
|
|
349
|
-
this.objects.PBXBuildFile?.[file.value] as PBXBuildFile
|
|
350
|
-
)?.fileRef;
|
|
351
|
-
if (!fileRef) {
|
|
352
|
-
return '';
|
|
353
|
-
}
|
|
354
|
-
const buildFile = fileDictionary[fileRef];
|
|
355
|
-
if (!buildFile) {
|
|
356
|
-
return '';
|
|
357
|
-
}
|
|
358
|
-
return path.join(baseDir, buildFile);
|
|
359
|
-
})
|
|
360
|
-
.filter((f: string) => f.length > 0);
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
projectFiles(): ProjectFile[] {
|
|
364
|
-
if (this.files === undefined) {
|
|
365
|
-
const proj = this.project.getFirstProject();
|
|
366
|
-
const mainGroupKey = proj.firstProject.mainGroup;
|
|
367
|
-
const mainGroup = this.objects.PBXGroup?.[mainGroupKey];
|
|
368
|
-
if (!mainGroup || typeof mainGroup === 'string') {
|
|
369
|
-
return [];
|
|
370
|
-
}
|
|
371
|
-
this.files = this.buildGroup(mainGroup);
|
|
372
|
-
}
|
|
373
|
-
return this.files;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
buildGroup(group: PBXGroup, path = ''): ProjectFile[] {
|
|
377
|
-
const result: ProjectFile[] = [];
|
|
378
|
-
for (const child of group.children ?? []) {
|
|
379
|
-
const fileReference = this.objects.PBXFileReference?.[child.value];
|
|
380
|
-
const groupReference = this.objects.PBXGroup?.[child.value];
|
|
381
|
-
if (fileReference) {
|
|
382
|
-
if (typeof fileReference === 'string') {
|
|
383
|
-
continue;
|
|
384
|
-
}
|
|
385
|
-
result.push({
|
|
386
|
-
key: child.value,
|
|
387
|
-
path: `${path}${fileReference.path.replace(/"/g, '')}`,
|
|
388
|
-
});
|
|
389
|
-
} else if (groupReference) {
|
|
390
|
-
if (typeof groupReference === 'string') {
|
|
391
|
-
continue;
|
|
392
|
-
}
|
|
393
|
-
const groupChildren = this.buildGroup(
|
|
394
|
-
groupReference,
|
|
395
|
-
groupReference.path
|
|
396
|
-
? `${path}${groupReference.path.replace(/"/g, '')}/`
|
|
397
|
-
: path,
|
|
398
|
-
);
|
|
399
|
-
result.push(...groupChildren);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
return result;
|
|
403
|
-
}
|
|
404
|
-
}
|