diff --git a/.github/workflows/dart_plugin.yml b/.github/workflows/dart_plugin.yml index 9f8914a..0471bdc 100644 --- a/.github/workflows/dart_plugin.yml +++ b/.github/workflows/dart_plugin.yml @@ -37,7 +37,7 @@ jobs: - run: scripts/commit-formatted-code.sh $GITHUB_HEAD_REF if: env.GITHUB_HEAD_REF != null - - run: dart test + - run: dart test --exclude-tags integration - name: Build run: | @@ -53,7 +53,7 @@ jobs: id: analysis with: githubToken: ${{ secrets.GITHUB_TOKEN }} - - name: "Check scores" + - name: 'Check scores' env: TOTAL: ${{ steps.analysis.outputs.total }} TOTAL_MAX: ${{ steps.analysis.outputs.total_max }} diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml new file mode 100644 index 0000000..fd123a2 --- /dev/null +++ b/.github/workflows/integration-test.yml @@ -0,0 +1,53 @@ +name: integration-tests + +on: + push: + branches: + - main + - release/** + pull_request: + +jobs: + integration-test: + name: ${{ matrix.target }} @ ${{ matrix.host }} + runs-on: ${{ matrix.host }}-latest + strategy: + fail-fast: false + matrix: + include: + - host: macos + target: macos + - host: macos + target: ios + - host: ubuntu + target: linux + - host: ubuntu + target: web + - host: ubuntu + target: android + - host: windows + target: windows + env: + TEST_PLATFORM: ${{ matrix.target }} + steps: + - uses: actions/checkout@v4 + + - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 #2.16.0 + + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - run: sudo apt-get install ninja-build libgtk-3-dev + if: runner.os == 'Linux' + + - run: (flutter --version)[0] | Out-File flutter.version + shell: pwsh + + - uses: actions/cache@v4 + with: + path: temp/testapp-${{ matrix.target }} + key: integration-test-${{ matrix.host }}-${{ matrix.target }}-${{ hashFiles('flutter.version') }} + + - run: dart test --tags integration diff --git a/.github/workflows/integration-tests-sentry-cli.yml b/.github/workflows/integration-tests-sentry-cli.yml deleted file mode 100644 index 02e5f12..0000000 --- a/.github/workflows/integration-tests-sentry-cli.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: integration-tests-sentry-cli - -on: - push: - branches: - - main - - release/** - pull_request: - -defaults: - run: - working-directory: integration-test - -jobs: - integration-test: - runs-on: ${{ matrix.os }}-latest - strategy: - fail-fast: false - matrix: - os: [macos, ubuntu, windows] - steps: - - uses: actions/checkout@v4 - - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 #2.16.0 - - - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '11' - - - run: flutter pub get - - - run: flutter build apk - - - run: flutter build ipa --no-codesign - if: matrix.os == 'macos' - - - run: flutter build web --source-maps - - - run: scripts/test.ps1 - shell: pwsh diff --git a/README.md b/README.md index 41ab9c5..9c71b42 100644 --- a/README.md +++ b/README.md @@ -23,18 +23,10 @@ The `flutter build apk`, `flutter build ios` (or _macos_) or `flutter build web` ## Run -### Dart - ```bash dart run sentry_dart_plugin ``` -### Flutter - -```bash -flutter packages pub run sentry_dart_plugin -``` - ## Configuration (Optional) This tool comes with a default configuration. You can configure it to suit your needs. @@ -71,7 +63,7 @@ in the format `--sentry-define==`. They take precedence over your fi but not over the alternative environment variables. ```bash -flutter packages pub run sentry_dart_plugin --sentry-define=release=app-internal-test@0.0.1 +dart run sentry_dart_plugin --sentry-define=release=app-internal-test@0.0.1 ``` ### sentry.properties diff --git a/integration-test/.gitignore b/integration-test/.gitignore deleted file mode 100644 index 24476c5..0000000 --- a/integration-test/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/integration-test/.metadata b/integration-test/.metadata deleted file mode 100644 index e27f5cc..0000000 --- a/integration-test/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - platform: android - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - platform: ios - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - platform: linux - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - platform: macos - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - platform: web - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - platform: windows - create_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - base_revision: e3c29ec00c9c825c891d75054c63fcc46454dca1 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/integration-test/README.md b/integration-test/README.md deleted file mode 100644 index da1f6b4..0000000 --- a/integration-test/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Integration test project - -This is a test project which calls the plugin in that in turn calls sentry-cli and communicates with a [dummy server](integration-test-server.py). -The main goal is to check if an updated sentry-cli version would break anything, as the gh action fails if it goes down an unexpected path/endpoint that the dummy server does not implement. - -Currently there is no verification, the whether the requests are actually sent and processed by the dummy server. -In other words, if a future code change to plugin makes it stop sending some information to the server, this integration would catch it. -Instead, there are unit tests in the plugin project itself that check whether it calls sentry CLI with the appropriate arguments. -Thus, depending on Sentry CLI itself being tested, we minimize the chance of a regression, while providing quick testing (through unit tests) - -## Changes made - -There were some changes made to this project after creating it with `flutter create`: - -* added NDK support - cmakelist + native code (just called from the Android main activity) in order to generate debug symbols -* `main.dart` file was simplified to just show a simple stateless widget -* `sentry_dart_plugin` was added to pubspec with everything enabled diff --git a/integration-test/android/.gitignore b/integration-test/android/.gitignore deleted file mode 100644 index 6f56801..0000000 --- a/integration-test/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/integration-test/android/app/build.gradle b/integration-test/android/app/build.gradle deleted file mode 100644 index a0edde7..0000000 --- a/integration-test/android/app/build.gradle +++ /dev/null @@ -1,84 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion flutter.compileSdkVersion - ndkVersion flutter.ndkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.project.project" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - - externalNativeBuild { - cmake { - cppFlags '' - } - } - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } - - externalNativeBuild { - cmake { - path file('src/main/cpp/CMakeLists.txt') - version '3.18.1' - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/integration-test/android/app/src/debug/AndroidManifest.xml b/integration-test/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index af4ded5..0000000 --- a/integration-test/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/integration-test/android/app/src/main/AndroidManifest.xml b/integration-test/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 5d86531..0000000 --- a/integration-test/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - diff --git a/integration-test/android/app/src/main/cpp/.gitignore b/integration-test/android/app/src/main/cpp/.gitignore deleted file mode 100644 index 4689dcf..0000000 --- a/integration-test/android/app/src/main/cpp/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -CMakeLists.txt.user -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -_deps - diff --git a/integration-test/android/app/src/main/cpp/CMakeLists.txt b/integration-test/android/app/src/main/cpp/CMakeLists.txt deleted file mode 100644 index 30b0546..0000000 --- a/integration-test/android/app/src/main/cpp/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.18.1) - -project(HelloSantry) - -add_library( # Sets the name of the library. - hello_santry - - # Sets the library as a shared library. - SHARED - - # Provides a relative path to your source file(s). - hello_santry.cpp) - -find_library( # Sets the name of the path variable. - log-lib - - # Specifies the name of the NDK library that - # you want CMake to locate. - log) - -target_link_libraries( # Specifies the target library. - hello_santry - - # Links the target library to the log library - # included in the NDK. - ${log-lib}) \ No newline at end of file diff --git a/integration-test/android/app/src/main/cpp/hello_santry.cpp b/integration-test/android/app/src/main/cpp/hello_santry.cpp deleted file mode 100644 index 5f72794..0000000 --- a/integration-test/android/app/src/main/cpp/hello_santry.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -extern "C" JNIEXPORT jstring JNICALL -Java_com_example_project_project_MainActivity_helloSantry( - JNIEnv* env, - jobject /* this */) { - std::string hello = "Hello Native Santry!"; - return env->NewStringUTF(hello.c_str()); -} diff --git a/integration-test/android/app/src/main/kotlin/com/example/project/project/MainActivity.kt b/integration-test/android/app/src/main/kotlin/com/example/project/project/MainActivity.kt deleted file mode 100644 index d21c0ad..0000000 --- a/integration-test/android/app/src/main/kotlin/com/example/project/project/MainActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.project.project - -import io.flutter.embedding.android.FlutterActivity -import android.os.Bundle -import android.util.Log - -class MainActivity: FlutterActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - Log.d("MainActivity", helloSantry()) - } - - external fun helloSantry(): String - - companion object { - init { - System.loadLibrary("hello_santry") - } - } -} diff --git a/integration-test/android/app/src/main/res/drawable-v21/launch_background.xml b/integration-test/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f..0000000 --- a/integration-test/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/integration-test/android/app/src/main/res/drawable/launch_background.xml b/integration-test/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f..0000000 --- a/integration-test/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/integration-test/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/integration-test/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4..0000000 Binary files a/integration-test/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/integration-test/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/integration-test/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b7..0000000 Binary files a/integration-test/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/integration-test/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/integration-test/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 09d4391..0000000 Binary files a/integration-test/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/integration-test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/integration-test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d..0000000 Binary files a/integration-test/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/integration-test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/integration-test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372e..0000000 Binary files a/integration-test/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/integration-test/android/app/src/main/res/values-night/styles.xml b/integration-test/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 06952be..0000000 --- a/integration-test/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/integration-test/android/app/src/main/res/values/styles.xml b/integration-test/android/app/src/main/res/values/styles.xml deleted file mode 100644 index cb1ef88..0000000 --- a/integration-test/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/integration-test/android/app/src/profile/AndroidManifest.xml b/integration-test/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index af4ded5..0000000 --- a/integration-test/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/integration-test/android/build.gradle b/integration-test/android/build.gradle deleted file mode 100644 index 5c61a4a..0000000 --- a/integration-test/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.7.0' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/integration-test/android/gradle.properties b/integration-test/android/gradle.properties deleted file mode 100644 index 94adc3a..0000000 --- a/integration-test/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/integration-test/android/gradle/wrapper/gradle-wrapper.properties b/integration-test/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index cb24abd..0000000 --- a/integration-test/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/integration-test/android/settings.gradle b/integration-test/android/settings.gradle deleted file mode 100644 index 44e62bc..0000000 --- a/integration-test/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/integration-test/ios/.gitignore b/integration-test/ios/.gitignore deleted file mode 100644 index 7a7f987..0000000 --- a/integration-test/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/integration-test/ios/Flutter/AppFrameworkInfo.plist b/integration-test/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 9625e10..0000000 --- a/integration-test/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 11.0 - - diff --git a/integration-test/ios/Flutter/Debug.xcconfig b/integration-test/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/integration-test/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/integration-test/ios/Flutter/Release.xcconfig b/integration-test/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/integration-test/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/integration-test/ios/Runner.xcodeproj/project.pbxproj b/integration-test/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 3505fe3..0000000 --- a/integration-test/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,484 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 9ZFD4KCY8F; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.project.project; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 9ZFD4KCY8F; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.project.project; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 9ZFD4KCY8F; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.project.project; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/integration-test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integration-test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/integration-test/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/integration-test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/integration-test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/integration-test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/integration-test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/integration-test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/integration-test/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/integration-test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/integration-test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index c87d15a..0000000 --- a/integration-test/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/integration-test/ios/Runner.xcworkspace/contents.xcworkspacedata b/integration-test/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/integration-test/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/integration-test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/integration-test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/integration-test/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/integration-test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/integration-test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/integration-test/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/integration-test/ios/Runner/AppDelegate.swift b/integration-test/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4..0000000 --- a/integration-test/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fa..0000000 --- a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 28c6bf0..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2ccbfd9..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cde121..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index dcdc230..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2ccbfd9..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b86..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b86..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d16..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 6a84f41..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index d0e1f58..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2..0000000 --- a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19ea..0000000 Binary files a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and /dev/null differ diff --git a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725..0000000 --- a/integration-test/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/integration-test/ios/Runner/Base.lproj/LaunchScreen.storyboard b/integration-test/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c..0000000 --- a/integration-test/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/integration-test/ios/Runner/Base.lproj/Main.storyboard b/integration-test/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c2851..0000000 --- a/integration-test/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/integration-test/ios/Runner/Info.plist b/integration-test/ios/Runner/Info.plist deleted file mode 100644 index afe8e17..0000000 --- a/integration-test/ios/Runner/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Project - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - project - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - - - diff --git a/integration-test/ios/Runner/Runner-Bridging-Header.h b/integration-test/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a5..0000000 --- a/integration-test/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/integration-test/lib/main.dart b/integration-test/lib/main.dart deleted file mode 100644 index db23649..0000000 --- a/integration-test/lib/main.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -void main() { - runApp(const ProjectApp()); -} - -class ProjectApp extends StatelessWidget { - const ProjectApp({super.key}); - - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Sample Project', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: ProjectWidget(), - ); - } -} - -class ProjectWidget extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text("Project"), - ), - body: Center( - child: Text( - 'Sample Project', - ))); - } -} diff --git a/integration-test/pubspec.yaml b/integration-test/pubspec.yaml deleted file mode 100644 index c447180..0000000 --- a/integration-test/pubspec.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: project -description: A sample flutter application for sentry-cli integration test. -version: 1.1.0 - -environment: - sdk: '>=2.18.0 <3.0.0' - -dependencies: - flutter: - sdk: flutter - -dev_dependencies: - sentry_dart_plugin: - path: ./../ - -flutter: - uses-material-design: true - -sentry: - upload_debug_symbols: true - upload_sources: true - upload_source_maps: true - auth_token: sentry-dart-plugin-auth-token - project: sentry-dart-plugin - org: sentry-sdks - url: http://127.0.0.1:8000 - log_level: debug - commits: false diff --git a/integration-test/scripts/test.ps1 b/integration-test/scripts/test.ps1 deleted file mode 100644 index 0759a96..0000000 --- a/integration-test/scripts/test.ps1 +++ /dev/null @@ -1,162 +0,0 @@ -$ErrorActionPreference = "Stop" -Set-StrictMode -Version latest - -function RunApiServer([string] $ServerScript, [string] $Uri = "http://127.0.0.1:8000") -{ - $result = "" | Select-Object -Property process, outFile, errFile, stop, output, dispose - Write-Host "Starting the $ServerScript on $Uri" - $result.outFile = New-TemporaryFile - $result.errFile = New-TemporaryFile - - $result.process = Start-Process "python3" -ArgumentList @("$PSScriptRoot/$ServerScript.py", $Uri) ` - -NoNewWindow -PassThru -RedirectStandardOutput $result.outFile -RedirectStandardError $result.errFile - - $result.output = { "$(Get-Content $result.outFile -Raw)`n$(Get-Content $result.errFile -Raw)" }.GetNewClosure() - - $result.dispose = { - $result.stop.Invoke() - - Write-Host "Server stdout:" -ForegroundColor Yellow - $stdout = Get-Content $result.outFile -Raw - Write-Host $stdout - - Write-Host "Server stderr:" -ForegroundColor Yellow - $stderr = Get-Content $result.errFile -Raw - Write-Host $stderr - - Remove-Item $result.outFile -ErrorAction Continue - Remove-Item $result.errFile -ErrorAction Continue - return "$stdout`n$stderr" - }.GetNewClosure() - - $result.stop = { - # Stop the HTTP server - Write-Host "Stopping the $ServerScript ... " -NoNewline - try - { - Write-Host (Invoke-WebRequest -Uri "$Uri/STOP").StatusDescription - } - catch - { - Write-Host "/STOP request failed: $_ - killing the server process instead" - $result.process | Stop-Process -Force -ErrorAction SilentlyContinue - } - $result.process | Wait-Process -Timeout 10 -ErrorAction Continue - $result.stop = {} - }.GetNewClosure() - - # The process shouldn't finish by itself, if it did, there was an error, so let's check that - Start-Sleep -Second 1 - if ($result.process.HasExited) - { - Write-Host "Couldn't start the $ServerScript" -ForegroundColor Red - Write-Host "Standard Output:" -ForegroundColor Yellow - Get-Content $result.outFile - Write-Host "Standard Error:" -ForegroundColor Yellow - Get-Content $result.errFile - Remove-Item $result.outFile - Remove-Item $result.errFile - exit 1 - } - - return $result -} - -function RunWithApiServer([ScriptBlock] $Callback) -{ - # start the server - $httpServer = RunApiServer "test-server" - # run the test - try - { - $Callback.Invoke() - } - finally - { - $httpServer.stop.Invoke() - } - - return $httpServer.dispose.Invoke() -} - -function CheckSymbolServerOutput([string] $symbolServerOutput) -{ - Write-Host "Checking symbol server output" -ForegroundColor Yellow - - $expectedFiles = @( - "libapp.so", - 'libflutter.so', - "libhello_santry.so", - "libhello_santry.so.sym" - ) - - if ($IsMacOS) - { - $expectedFiles += @( - "app.so", - "Flutter", - "Runner", - "libswiftCore.dylib", - "libswiftCoreAudio.dylib", - "libswiftCoreFoundation.dylib", - "libswiftCoreGraphics.dylib", - "libswiftCoreImage.dylib", - "libswiftCoreMedia.dylib", - "libswiftDarwin.dylib", - "libswiftDispatch.dylib", - "libswiftFoundation.dylib", - "libswiftMetal.dylib", - "libswiftObjectiveC.dylib", - "libswiftQuartzCore.dylib", - "libswiftUIKit.dylib", - "libswiftos.dylib" - ) - } -# TODO: Enable again when https://github.com/getsentry/sentry-dart-plugin/issues/161 is fixed again -# if ($IsLinux) -# { -# $expectedFiles += "app.so" -# } - - Write-Host 'Verifying debug symbol upload...' - $successful = $true - :nextExpectedFile foreach ($file in $expectedFiles) - { - $alternatives = ($file -is [array]) ? $file : @($file) - foreach ($file in $alternatives) - { - # It's enough if a single symbol alternative is found - if ($symbolServerOutput -match " $([Regex]::Escape($file))\b") - { - Write-Host " $file EXISTS" - continue nextExpectedFile - } - } - # Note: control only gets here if none of the alternatives match... - $successful = $false - Write-Host " $alternatives MISSING" -ForegroundColor Red - } - if ($successful) - { - Write-Host 'All expected debug symbols have been uploaded' -ForegroundColor Green - } - else - { - exit 1 - } -} -$serverOutput = RunWithApiServer -Callback { - $pluginOutput = dart run sentry_dart_plugin | ForEach-Object { - Write-Host $_ - $_ - } - - if (!"$pluginOutput".contains('sourcemap at main.dart.js.map')) - { - Write-Error "Source map not uploaded" - } -} - -CheckSymbolServerOutput $serverOutput - -Write-Host "Test passed" -ForegroundColor Green diff --git a/integration-test/web/favicon.png b/integration-test/web/favicon.png deleted file mode 100644 index 8aaa46a..0000000 Binary files a/integration-test/web/favicon.png and /dev/null differ diff --git a/integration-test/web/icons/Icon-192.png b/integration-test/web/icons/Icon-192.png deleted file mode 100644 index b749bfe..0000000 Binary files a/integration-test/web/icons/Icon-192.png and /dev/null differ diff --git a/integration-test/web/icons/Icon-512.png b/integration-test/web/icons/Icon-512.png deleted file mode 100644 index 88cfd48..0000000 Binary files a/integration-test/web/icons/Icon-512.png and /dev/null differ diff --git a/integration-test/web/icons/Icon-maskable-192.png b/integration-test/web/icons/Icon-maskable-192.png deleted file mode 100644 index eb9b4d7..0000000 Binary files a/integration-test/web/icons/Icon-maskable-192.png and /dev/null differ diff --git a/integration-test/web/icons/Icon-maskable-512.png b/integration-test/web/icons/Icon-maskable-512.png deleted file mode 100644 index d69c566..0000000 Binary files a/integration-test/web/icons/Icon-maskable-512.png and /dev/null differ diff --git a/integration-test/web/index.html b/integration-test/web/index.html deleted file mode 100644 index 2875ea1..0000000 --- a/integration-test/web/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - project - - - - - - - - - - diff --git a/integration-test/web/manifest.json b/integration-test/web/manifest.json deleted file mode 100644 index e1032e2..0000000 --- a/integration-test/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "project", - "short_name": "project", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/pubspec.yaml b/pubspec.yaml index 410f44f..8936516 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,6 @@ name: sentry_dart_plugin version: 2.1.0 -description: > - A Dart Build Plugin that uploads symbols for Android, iOS/macOS, and Web to Sentry via sentry-cli. +description: Uploads debug symbols to Sentry for server-side symbolication. homepage: https://docs.sentry.io/platforms/dart/ repository: https://github.com/getsentry/sentry-dart-plugin diff --git a/temp/.gitignore b/temp/.gitignore new file mode 100644 index 0000000..cec9082 --- /dev/null +++ b/temp/.gitignore @@ -0,0 +1,3 @@ +* + +!.gitignore diff --git a/integration-test/assets/AndroidManifest.xml b/test/integration-server-assets/AndroidManifest.xml similarity index 100% rename from integration-test/assets/AndroidManifest.xml rename to test/integration-server-assets/AndroidManifest.xml diff --git a/integration-test/assets/artifact.json b/test/integration-server-assets/artifact.json similarity index 100% rename from integration-test/assets/artifact.json rename to test/integration-server-assets/artifact.json diff --git a/integration-test/assets/artifacts.json b/test/integration-server-assets/artifacts.json similarity index 100% rename from integration-test/assets/artifacts.json rename to test/integration-server-assets/artifacts.json diff --git a/integration-test/assets/assemble-artifacts-response.json b/test/integration-server-assets/assemble-artifacts-response.json similarity index 100% rename from integration-test/assets/assemble-artifacts-response.json rename to test/integration-server-assets/assemble-artifacts-response.json diff --git a/integration-test/assets/associate-dsyms-response.json b/test/integration-server-assets/associate-dsyms-response.json similarity index 100% rename from integration-test/assets/associate-dsyms-response.json rename to test/integration-server-assets/associate-dsyms-response.json diff --git a/integration-test/assets/debug-info-files.json b/test/integration-server-assets/debug-info-files.json similarity index 100% rename from integration-test/assets/debug-info-files.json rename to test/integration-server-assets/debug-info-files.json diff --git a/integration-test/assets/deploy.json b/test/integration-server-assets/deploy.json similarity index 100% rename from integration-test/assets/deploy.json rename to test/integration-server-assets/deploy.json diff --git a/integration-test/assets/release.json b/test/integration-server-assets/release.json similarity index 100% rename from integration-test/assets/release.json rename to test/integration-server-assets/release.json diff --git a/integration-test/assets/repos.json b/test/integration-server-assets/repos.json similarity index 100% rename from integration-test/assets/repos.json rename to test/integration-server-assets/repos.json diff --git a/test/integration_test.dart b/test/integration_test.dart new file mode 100644 index 0000000..42bb757 --- /dev/null +++ b/test/integration_test.dart @@ -0,0 +1,259 @@ +@Tags(['integration']) +library integration_test; + +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:http/http.dart' as http; +import 'package:crypto/crypto.dart'; +import 'package:test/test.dart'; + +const appName = 'testapp'; +late final String serverUri; + +// Platforms to be tested are either coming from the CI env var or +// we test everything that is possible to test on this machine. +final testPlatforms = Platform.environment.containsKey('TEST_PLATFORM') + ? [Platform.environment['TEST_PLATFORM']!] + : [ + 'android', + if (Platform.isMacOS) 'macos', + if (Platform.isMacOS) 'ios', + if (Platform.isWindows) 'windows', + if (Platform.isLinux) 'linux', + 'web' + ]; + +// NOTE: Don't run/debug this main(), it likely won't work. +// You can use main() in `sentry_native_test.dart`. +void main() async { + serverUri = 'http://127.0.0.1:${await _serverPort}'; + final repoRootDir = Directory.current.path.endsWith('/test') + ? Directory.current.parent + : Directory.current; + final tempDir = Directory('${repoRootDir.path}/temp'); + + late Process testServer; + late Future> Function() stopServer; + setUp(() async { + // Start a dummy Sentry server that would listen to CLI requests. + // Also, we collect the output so that we can check it in tests. + // Note: we're using the python dummy sever because it was already available. + // If we wanted, we could do all this in plain dart in the future. + testServer = await Process.start('python3', ['test-server.py', serverUri], + workingDirectory: '${repoRootDir.path}/test'); + + final testServerOutput = StringBuffer(); + final testServerOutputFutures = []; + + // capture & forward streams + listener(List data) { + stdout.add(data); + stdout.flush(); + testServerOutput.write(utf8.decode(data)); + } + + testServerOutputFutures.clear(); + testServerOutputFutures.add(testServer.stderr.forEach(listener)); + testServerOutputFutures.add(testServer.stdout.forEach(listener)); + + stopServer = () async { + await http.get(Uri.parse('$serverUri/STOP')); + for (var future in testServerOutputFutures) { + await future; + } + expect(await testServer.exitCode.timeout(const Duration(seconds: 5)), 0); + final serverOutput = testServerOutput + .toString() + .split(RegExp('\r?\n')) + .where((v) => v.isNotEmpty); + return serverOutput; + }; + }); + + uploadedDebugSymbols(Iterable serverOutput) => + Map.fromEntries(serverOutput + .skipWhile((v) => v != 'Upload stats:') + .skip(1) + .map((v) => v.trim()) + .map((v) { + final pair = v.split(':'); + return MapEntry( + pair[0], int.parse(pair[1].replaceFirst(' count=', ''))); + })); + + tearDown(() async { + testServer.kill(ProcessSignal.sigkill); + }); + + for (var platform in testPlatforms) { + test(platform, () async { + final appDir = await _prepareTestApp(tempDir, platform); + final pluginOutput = await _runPlugin(appDir); + final serverOutput = await stopServer(); + final debugSymbols = uploadedDebugSymbols(serverOutput).keys; + + switch (platform) { + case 'android': + expect( + debugSymbols, + containsAll([ + 'app.android-arm.symbols', + 'app.android-arm64.symbols', + 'app.android-x64.symbols', + 'app.so', + 'libflutter.so' + ])); + break; + case 'ios': + expect(debugSymbols, containsAll(['App', 'Flutter', 'Runner'])); + break; + case 'macos': + expect(debugSymbols, containsAll(['App', 'FlutterMacOS', appName])); + break; + case 'windows': + expect( + debugSymbols, + containsAll([ + 'app.so', + 'app.windows-x64.symbols', + 'flutter_windows.dll', + 'flutter_windows.dll.pdb', + ])); + break; + case 'linux': + expect( + debugSymbols, + containsAll([ + 'app.linux-x64.symbols', + 'libapp.so', + 'libflutter_linux_gtk.so', + ])); + break; + case 'web': + expect(pluginOutput, + anyElement(contains('(sourcemap at main.dart.js.map)'))); + break; + default: + fail('Platform "$platform" missing from tests'); + } + }, timeout: Timeout(const Duration(minutes: 5))); + } +} + +/// Runs [command] with command's stdout and stderr being forwrarded to +/// test runner's respective streams. It buffers stdout and returns it. +/// +/// Returns [_CommandResult] with exitCode and stdout as a single sting +Future> _exec(String executable, List arguments, + {String? cwd}) async { + print( + 'executing "$executable ${arguments.join(' ')}"${cwd != null ? ' in $cwd' : ''}'); + final process = await Process.start( + executable, + arguments, + workingDirectory: cwd, + runInShell: true, + ); + + // forward standard streams + unawaited(stderr.addStream(process.stderr)); + + final output = StringBuffer(); + final outputFuture = process.stdout.forEach((data) { + stdout.add(data); + output.write(utf8.decode(data)); + }); + + int exitCode = await process.exitCode; + await outputFuture; + if (exitCode != 0) { + throw Exception( + "$executable ${arguments.join(' ')} failed with exit code $exitCode"); + } + + return output.toString().split(RegExp('\r?\n')); +} + +Future> _flutter(List arguments, {String? cwd}) => + _exec('flutter', arguments, cwd: cwd); + +Future> _runPlugin(Directory cwd) => _exec( + 'dart', ['run', 'sentry_dart_plugin', '--sentry-define=url=$serverUri'], + cwd: cwd.path); + +// e.g. Flutter 3.24.4 • channel stable • https://github.com/flutter/flutter.git +final _flutterVersionInfo = + _flutter(['--version']).then((output) => output.first); + +Future _prepareTestApp(Directory tempDir, String platform) async { + final appDir = Directory('${tempDir.path}/$appName-$platform'); + final pubspecFile = File('${appDir.path}/pubspec.yaml'); + + final buildArgs = [ + if (platform == 'ios') + 'ipa' + else if (platform == 'android') + 'apk' + else + platform, + if (platform == 'ios') '--no-codesign', + if (platform == 'web') '--source-maps', + if (platform != 'web') '--split-debug-info=symbols', + if (platform != 'web') '--obfuscate' + ]; + + // In order to not run the build on every test execution, we store a hash. + final hashFile = File('${appDir.path}/.hash'); + final hash = md5 + .convert(utf8.encode(await _flutterVersionInfo + buildArgs.toString())) + .toString(); + + if (await hashFile.exists()) { + if (await hashFile.readAsString() != hash) { + await appDir.delete(recursive: true); + } + } else if (await appDir.exists()) { + await appDir.delete(recursive: true); + } + + if (!await hashFile.exists()) { + await _flutter(['create', appDir.path, '--project-name', appName]); + + await _flutter(['build', ...buildArgs], cwd: appDir.path); + + var pubspec = await pubspecFile.readAsString(); + // Remove the plus symbol from the version. Current python sever has trouble + // parsing requests with this. + pubspec = pubspec.replaceFirst('version: 1.0.0+1', 'version: 1.0.0'); + pubspec = pubspec.replaceFirst('dev_dependencies:', + 'dev_dependencies:\n sentry_dart_plugin:\n path: ../../'); + pubspec = ''' +$pubspec +sentry: + upload_debug_symbols: true + upload_sources: true + upload_source_maps: true + auth_token: auth-token + project: sentry-dart-plugin + org: sentry-sdks + log_level: debug + commits: false +'''; + await pubspecFile.writeAsString(pubspec); + + // Store the hash so that we don't need to rebuild the app. + await hashFile.writeAsString(hash); + } + + return appDir; +} + +// Unused port for the server +final _serverPort = + ServerSocket.bind(InternetAddress.loopbackIPv4, 0).then((socket) { + var port = socket.port; + socket.close(); + return port; +}); diff --git a/integration-test/scripts/test-server.py b/test/test-server.py similarity index 87% rename from integration-test/scripts/test-server.py rename to test/test-server.py index 9c4ea42..87659b3 100644 --- a/integration-test/scripts/test-server.py +++ b/test/test-server.py @@ -11,8 +11,8 @@ apiOrg = 'sentry-sdks' apiProject = 'sentry-dart-plugin' uri = urlparse(sys.argv[1] if len(sys.argv) > 1 else 'http://127.0.0.1:8000') -version = '1.1.0' -appIdentifier = 'project' +version = '1.0.0' +appIdentifier = 'testapp' uploads = {} @@ -32,6 +32,7 @@ def do_GET(self): if self.path == "/STOP": print("HTTP server stopping!") + self.writeResponse(HTTPStatus.OK, "text/plain", '') threading.Thread(target=self.server.shutdown).start() return @@ -41,11 +42,11 @@ def do_GET(self): '"maxRequestSize":33554432,"concurrency":1,"hashAlgorithm":"sha1","compression":["gzip"],' '"accept":["debug_files","release_files","pdbs","sources","bcsymbolmaps"]}') elif self.isApi('/api/0/organizations/{}/repos/'.format(apiOrg)): - self.writeJSONFile("assets/repos.json") + self.writeJSONFile("integration-server-assets/repos.json") elif self.isApi('/api/0/organizations/{}/releases/{}@{}/previous-with-commits/'.format(apiOrg, appIdentifier, version)): self.writeJSON('{ }') elif self.isApi('/api/0/projects/{}/{}/releases/{}@{}/files/'.format(apiOrg, apiProject, appIdentifier, version)): - self.writeJSONFile("assets/artifacts.json") + self.writeJSONFile("integration-server-assets/artifacts.json") else: self.writeNoApiMatchesError() @@ -74,17 +75,17 @@ def do_POST(self): jsonResponse = jsonResponse.rstrip(',') + '}' self.writeJSON(jsonResponse) elif self.isApi('api/0/projects/{}/{}/releases/'.format(apiOrg, apiProject)): - self.writeJSONFile("assets/release.json") + self.writeJSONFile("integration-server-assets/release.json") elif self.isApi('/api/0/organizations/{}/releases/{}@{}/deploys/'.format(apiOrg, appIdentifier, version)): - self.writeJSONFile("assets/deploy.json") + self.writeJSONFile("integration-server-assets/deploy.json") elif self.isApi('/api/0/projects/{}/{}/releases/{}@{}/files/'.format(apiOrg, apiProject, appIdentifier, version)): - self.writeJSONFile("assets/artifact.json") + self.writeJSONFile("integration-server-assets/artifact.json") elif self.isApi('/api/0/organizations/{}/releases/{}@{}/assemble/'.format(apiOrg, appIdentifier, version)): - self.writeJSONFile("assets/assemble-artifacts-response.json") + self.writeJSONFile("integration-server-assets/assemble-artifacts-response.json") elif self.isApi('/api/0/projects/{}/{}/files/dsyms/'.format(apiOrg, apiProject)): - self.writeJSONFile("assets/debug-info-files.json") + self.writeJSONFile("integration-server-assets/debug-info-files.json") elif self.isApi('/api/0/projects/{}/{}/files/dsyms/associate/'.format(apiOrg, apiProject)): - self.writeJSONFile("assets/associate-dsyms-response.json") + self.writeJSONFile("integration-server-assets/associate-dsyms-response.json") elif self.isApi('/api/0/projects/{}/{}/reprocessing/'.format(apiOrg, apiProject)): self.writeJSON('{ }') elif self.isApi('api/0/organizations/{}/chunk-upload/'.format(apiOrg)): @@ -98,9 +99,9 @@ def do_PUT(self): self.start_response() if self.isApi('/api/0/organizations/{}/releases/{}@{}/'.format(apiOrg, appIdentifier, version)): - self.writeJSONFile("assets/release.json") + self.writeJSONFile("integration-server-assets/release.json") elif self.isApi('/api/0/projects/{}/{}/releases/{}@{}/'.format(apiOrg, apiProject, appIdentifier, version)): - self.writeJSONFile("assets/release.json") + self.writeJSONFile("integration-server-assets/release.json") else: self.writeNoApiMatchesError() @@ -138,7 +139,7 @@ def isApi(self, api: str): def writeNoApiMatchesError(self): err = "Error: no API matched {} '{}'".format(self.command, self.path) - self.log_error(err) + self.log_error(err.replace('%', '%%')) self.writeResponse(HTTPStatus.NOT_IMPLEMENTED, "text/plain", err)