diff --git a/.circleci/config.yml b/.circleci/config.yml index ffeab99da..b7a753812 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,9 +2,10 @@ version: 2.1 orbs: android: circleci/android@2.5.0 - flutter: circleci/flutter@2.0.2 + flutter: circleci/flutter@2.1.0 node: circleci/node@5.2.0 advanced-checkout: vsco/advanced-checkout@1.1.0 + ios: circleci/macos@2.5.4 commands: setup_flutter: @@ -17,65 +18,24 @@ commands: setup_ios: steps: # Flutter doesn't support Apple Silicon yet, so we need to install Rosetta use Flutter on M1 machines. - - run: - name: Install Rosetta - command: softwareupdate --install-rosetta --agree-to-license + - ios/install-rosetta - setup_flutter - run: name: Install CocoaPods command: sudo gem install cocoapods - - run: - name: Install Pods - working_directory: example/ios - command: pod install --repo-update - setup_captain: - parameters: - platform: - type: enum - enum: - - ios - - android + - flutter/install_ios_pod: + app-dir: example + repo-update: true + setup_patrol: steps: - run: - name: Install Appium - command: npm install -g appium - - when: - condition: - equal: - - <> - - ios - steps: - - run: - name: Install XCUITest Driver - command: appium driver install xcuitest@4.35.0 - - when: - condition: - equal: - - <> - - android - steps: - - run: - name: Install UIAutomator2 Driver - command: appium driver install uiautomator2@3.1.0 - - run: - name: Launch Appium - # Enable --relaxed-security for `mobile: shell` command that Captain uses internally. - command: appium --relaxed-security - background: true - - run: - name: Install .NET 6 - command: curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 6.0.1xx - - run: - name: Add .NET to PATH + name: Add pub-cache bin to PATH command: | - echo 'export DOTNET_ROOT=$HOME/.dotnet' >> $BASH_ENV - echo 'export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools' >> $BASH_ENV + echo 'export PATH="$PATH:$HOME/.pub-cache/bin"' >> $BASH_ENV + source $BASH_ENV - run: - name: Clone Captain - command: git clone git@github.com:Instabug/Captain.git ../Instabug.Captain - - run: - name: Configure Captain Platform - command: echo 'export CAPTAIN_PLATFORM=<>' >> $BASH_ENV + name: Install patrol + command: dart pub global activate patrol_cli 3.5.0 # This runs `flutter pub get` and `dart pub get` if we pass parameter `generate_pigeons` to the job it also runs the following: # - `sh ./scripts/pigeon.sh` # - `dart run build_runner build --delete-conflicting-outputs` @@ -83,13 +43,30 @@ commands: parameters: generate_pigeons: type: boolean + remove_patrol: + type: boolean + default: false + version: + type: string + default: "3.24.0" steps: + - flutter/install_sdk: + version: <> + - when: + condition: + equal: + - <> + - true + steps: + - run: + name: remove Patrol + command: cd example && dart pub remove patrol - run: name: Install Flutter Packages - command: flutter pub get + command: flutter pub get --verbose - run: name: Install Dart Packages - command: dart pub get + command: dart pub get --verbose description: Install Dart Packages (for dart explicit packages) - when: condition: @@ -123,12 +100,21 @@ jobs: parameters: version: type: string - docker: - - image: cirrusci/flutter:<> + executor: + name: android/android-machine + resource-class: xlarge + tag: 2024.01.1 steps: - advanced-checkout/shallow-checkout - install_flutter_and_dart_packages: generate_pigeons: true + remove_patrol: true + version: <> + - run: + name: Install lcov + command: | + sudo apt-get update + sudo apt-get install -y lcov - run: flutter test --coverage - run: working_directory: coverage @@ -150,26 +136,31 @@ jobs: working-directory: example/android test-command: ./gradlew test - e2e_android_captain: + e2e_android_patrol: executor: name: android/android-machine resource-class: xlarge tag: 2024.01.1 steps: - advanced-checkout/shallow-checkout - - setup_captain: - platform: android - setup_flutter - - android/start-emulator-and-run-tests: - run-tests-working-directory: e2e - additional-avd-args: --device 3 + - setup_patrol + - android/create-avd: + avd-name: 'test' + install: true system-image: system-images;android-33;default;x86_64 - post-emulator-launch-assemble-command: cd example && flutter build apk --debug - test-command: dotnet test + - android/start-emulator: + avd-name: 'test' + post-emulator-launch-assemble-command: "" + - run: + name: Run E2E Tests + no_output_timeout: 30m + working_directory: example + command: patrol test -t integration_test/ test_ios: macos: - xcode: 15.2.0 + xcode: 16.0.0 resource_class: macos.m1.medium.gen1 environment: INSTABUG_SOURCEMAPS_UPLOAD_DISABLE: true @@ -185,31 +176,39 @@ jobs: -scheme Runner \ -resultBundlePath coverage/result.xcresult \ -sdk iphonesimulator \ - -destination 'platform=iOS Simulator,name=iPhone 15 Pro Max,OS=17.2' \ + -destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=18.0' \ + -skip-testing:RunnerUITests \ test | xcpretty - e2e_ios_captain: + e2e_ios_patrol: macos: - xcode: 15.2.0 + xcode: 16.0.0 resource_class: macos.m1.medium.gen1 steps: - advanced-checkout/shallow-checkout - - setup_captain: - platform: ios - setup_ios + - setup_patrol + - ios/preboot-simulator: + version: "18.0" + device: "iPhone 16 Pro" + - ios/wait-until-simulator-booted + - ios/wait-until-simulator-booted - run: - name: Build Example App - working_directory: example - command: flutter build ios --simulator + name: sleep 10 seconds + command: sleep 10 + - run: + name: sleep 10 seconds + command: sleep 10 - run: name: Run E2E Tests no_output_timeout: 30m - working_directory: e2e - command: dotnet test - + working_directory: example + command: patrol test -t integration_test/ --verbose --device "iPhone 16 Pro" format_flutter: - docker: - - image: cirrusci/flutter + executor: + name: android/android-machine + resource-class: xlarge + tag: 2024.01.1 steps: - advanced-checkout/shallow-checkout - install_flutter_and_dart_packages: @@ -219,8 +218,10 @@ jobs: command: dart format . --set-exit-if-changed lint_flutter: - docker: - - image: cirrusci/flutter + executor: + name: android/android-machine + resource-class: xlarge + tag: 2024.01.1 steps: - advanced-checkout/shallow-checkout - install_flutter_and_dart_packages: @@ -230,8 +231,10 @@ jobs: command: flutter analyze verify_pub: - docker: - - image: cirrusci/flutter + executor: + name: android/android-machine + resource-class: xlarge + tag: 2024.01.1 steps: - advanced-checkout/shallow-checkout - install_flutter_and_dart_packages: @@ -243,7 +246,7 @@ jobs: release: macos: - xcode: 15.2.0 + xcode: 16.0.0 resource_class: macos.m1.medium.gen1 working_directory: "~" steps: @@ -288,13 +291,13 @@ workflows: - test_flutter-stable - test_flutter: name: test_flutter-stable - version: stable + version: 3.24.0 - test_flutter: name: test_flutter-2.10.5 version: 2.10.5 - - e2e_android_captain + - e2e_android_patrol - test_ios - - e2e_ios_captain + - e2e_ios_patrol - format_flutter - lint_flutter: requires: @@ -312,9 +315,9 @@ workflows: # TODO: Fix the flaky tests and add the following jobs to the dependencies for the release # The following jobs have been removed while releasing v13.2.0 to avoid delaying the release # as they were just flaky and the tests pass locally without issues. - # - e2e_android_captain + # - e2e_android_patrol # - test_ios - - e2e_ios_captain + - e2e_ios_patrol - verify_pub filters: branches: diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 8e777d514..e42e1ea10 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -19,14 +19,19 @@ android { jvmTarget = JavaVersion.VERSION_1_8 } + testOptions { + execution "ANDROIDX_TEST_ORCHESTRATOR" + } + defaultConfig { applicationId "com.instabug.flutter.example" minSdkVersion 21 targetSdkVersion 34 versionCode flutter.versionCode versionName flutter.versionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true + testInstrumentationRunner "pl.leancode.patrol.PatrolJUnitRunner" + testInstrumentationRunnerArguments clearPackageData: "true" } buildTypes { @@ -51,6 +56,8 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20" implementation 'com.android.support:multidex:1.0.3' implementation 'org.mockito:mockito-core:1.10.19' - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:1.10.19' + androidTestUtil "androidx.test:orchestrator:1.5.1" + } diff --git a/example/android/app/src/androidTest/java/com/instabug/flutter/example/MainActivityTest.java b/example/android/app/src/androidTest/java/com/instabug/flutter/example/MainActivityTest.java new file mode 100644 index 000000000..f5ea440e9 --- /dev/null +++ b/example/android/app/src/androidTest/java/com/instabug/flutter/example/MainActivityTest.java @@ -0,0 +1,37 @@ +package com.instabug.flutter.example; + +import androidx.test.platform.app.InstrumentationRegistry; + +import com.example.InstabugSample.MainActivity; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; +import pl.leancode.patrol.PatrolJUnitRunner; + +@RunWith(Parameterized.class) +public class MainActivityTest { + @Parameters(name = "{0}") + public static Object[] testCases() { + PatrolJUnitRunner instrumentation = (PatrolJUnitRunner) InstrumentationRegistry.getInstrumentation(); + // replace "MainActivity.class" with "io.flutter.embedding.android.FlutterActivity.class" + // if in AndroidManifest.xml in manifest/application/activity you have + // android:name="io.flutter.embedding.android.FlutterActivity" + instrumentation.setUp(MainActivity.class); + instrumentation.waitForPatrolAppService(); + return instrumentation.listDartTests(); + } + + public MainActivityTest(String dartTestName) { + this.dartTestName = dartTestName; + } + + private final String dartTestName; + + @Test + public void runDartTest() { + PatrolJUnitRunner instrumentation = (PatrolJUnitRunner) InstrumentationRegistry.getInstrumentation(); + instrumentation.runDartTest(dartTestName); + } +} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 483f4dd2e..58ca8b822 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ android:networkSecurityConfig="@xml/network_security_config" android:usesCleartextTraffic="true"> assertOptionsPromptIsDisplayed(PatrolIntegrationTester $) async { + final floatingButton = await getNativeView($, + android: 'instabug_main_prompt_container', + ios: 'IBGReportBugPromptOptionAccessibilityIdentifier'); + + expect( + isAndroid + ? floatingButton.androidViews.length + : floatingButton.iosViews.length, + greaterThanOrEqualTo(1)); +} + +void main() { + group('Bug reporting end-to-end test', () { + patrolTest( + 'Report a bug', + ($) async { + await init($); + + await $.native2.tap(NativeSelector( + ios: IOSSelector( + identifier: 'IBGFloatingButtonAccessibilityIdentifier'), + android: AndroidSelector( + resourceName: + 'com.instabug.flutter.example:id/instabug_floating_button'))); + + await $.native2.tap(NativeSelector( + ios: IOSSelector(labelContains: 'Report a bug'), + android: AndroidSelector(textContains: 'Report a bug'))); + + await $.native2.enterText( + NativeSelector( + ios: IOSSelector( + identifier: + 'IBGBugInputViewEmailFieldAccessibilityIdentifier'), + android: AndroidSelector( + resourceName: + 'com.instabug.flutter.example:id/instabug_edit_text_email')), + text: 'charlie@root.me', + ); + + await $.native2.tap(NativeSelector( + ios: IOSSelector( + identifier: 'IBGBugVCNextButtonAccessibilityIdentifier'), + android: AndroidSelector( + resourceName: + 'com.instabug.flutter.example:id/instabug_bugreporting_send'))); + + bool isAndroid = defaultTargetPlatform == TargetPlatform.android; + if (isAndroid == false) { + await Future.delayed(const Duration(milliseconds: 500)); + } + final thankyou = + await $.native.getNativeViews(Selector(textContains: "Thank you")); + + expect(thankyou.length, greaterThanOrEqualTo(1)); + }, + framePolicy: LiveTestWidgetsFlutterBindingFramePolicy.fullyLive, + ); + + patrolTest( + 'Floating Button Invocation Event', + ($) async { + await init($); + + await $.native2.tap(NativeSelector( + ios: IOSSelector( + identifier: 'IBGFloatingButtonAccessibilityIdentifier'), + android: AndroidSelector( + resourceName: + 'com.instabug.flutter.example:id/instabug_floating_button'))); + + assertOptionsPromptIsDisplayed($); + }, + framePolicy: LiveTestWidgetsFlutterBindingFramePolicy.fullyLive, + ); + + patrolTest( + 'TwoFingers Swipe Left Invocation Event', + ($) async { + await init($); + + await $("Two Fingers Swipe Left").scrollTo().tap(); + await wait(second: 1); + final gesture1 = + await $.tester.startGesture(const Offset(300, 400)); // finger 1 + final gesture2 = + await $.tester.startGesture(const Offset(300, 600)); // finger 2 + +// Swipe both fingers to the left (same direction) + await gesture1.moveBy(const Offset(-150, 0)); + await gesture2.moveBy(const Offset(-150, 0)); + +// End gestures + await gesture1.up(); + await gesture2.up(); + + await wait(second: 1); + assertOptionsPromptIsDisplayed($); + }, + framePolicy: LiveTestWidgetsFlutterBindingFramePolicy.fullyLive, + ); + patrolTest('None Invocation Event hides floating button', ($) async { + await init($); + + await $('None').scrollTo().tap(); + + await wait(second: 2); + final floatingButton = await getFAB($, waitUntilVisible: false); + + expect( + isAndroid + ? floatingButton.androidViews.length + : floatingButton.iosViews.length, + equals(0)); + }); + + patrolTest('Manual Invocation shows prompt options', ($) async { + await init($); + + await $('Invoke').scrollTo().tap(); + + await wait(second: 2); + + await assertOptionsPromptIsDisplayed($); + }); + + patrolTest('Multiple Screenshots in Repro Steps', ($) async { + await init($); + + await $(#screen_name_input).scrollTo().enterText('My Screen'); + + await wait(miliSeconds: 500); + + await $('Report Screen Change').scrollTo().tap(); + await wait(miliSeconds: 500); + await $('Send Bug Report').scrollTo().tap(); + + await $.native2.tap(NativeSelector( + ios: IOSSelector( + identifier: 'IBGBugVCReproStepsDisclaimerAccessibilityIdentifier'), + android: AndroidSelector( + resourceName: + 'com.instabug.flutter.example:id/instabug_text_view_repro_steps_disclaimer'), + )); + + await wait(miliSeconds: 1000); + + final screenshots = await $.native2.getNativeViews(NativeSelector( + ios: IOSSelector( + identifier: 'IBGReproStepsTableCellViewAccessibilityIdentifier'), + android: AndroidSelector( + resourceName: + 'com.instabug.flutter.example:id/ib_bug_repro_step_screenshot'), + )); + + final count = isAndroid + ? screenshots.androidViews.length + : screenshots.iosViews.length; + + expect(count, 2); + }); + + patrolTest('Floating Button moves to left edge', ($) async { + await init($); + + await $('Move Floating Button to Left').scrollTo().tap(); + + await wait(second: 5); + + final floatingButton = await getFAB($); + + await wait(second: 2); + + final size = $.tester.view.physicalSize / $.tester.view.devicePixelRatio; + final width = size.width; + $.log(floatingButton.androidViews.length.toString()); + + bool isLeft = false; + if (isAndroid && floatingButton.androidViews.isNotEmpty) { + $.log(floatingButton.androidViews.first.visibleBounds.minX.toString()); + $.log(floatingButton.androidViews.first.visibleBounds.maxX.toString()); + $.log((width / 2).toString()); + + isLeft = + floatingButton.androidViews.first.visibleBounds.minX < (width / 2); + } else if ((!isAndroid) && floatingButton.iosViews.isNotEmpty) { + isLeft = floatingButton.iosViews.first.frame.minX < (width / 2); + } + + expect(isLeft, true); + }); + + patrolTest('onDismiss callback triggers when prompt is cancelled', + ($) async { + await init($); + + await $('Set On Dismiss Callback').scrollTo().tap(); + await wait(second: 4); + await $('Invoke').scrollTo().tap(); + + await wait(second: 4); + + await tapNativeView($, + nativeView: NativeSelector( + android: AndroidSelector(text: 'Cancel'), + ios: IOSSelector(label: 'Cancel'), + )); + + await wait(second: 4); + + final callbackWidget = await $(#dismiss_callback_dialog_test) + .waitUntilVisible(timeout: const Duration(seconds: 5)); + expect(callbackWidget, findsOneWidget); + }); + }); +} diff --git a/example/integration_test/feature_requests_test.dart b/example/integration_test/feature_requests_test.dart new file mode 100644 index 000000000..b9fc0aca8 --- /dev/null +++ b/example/integration_test/feature_requests_test.dart @@ -0,0 +1,26 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:patrol/patrol.dart'; + +import 'utils/utils.dart'; + +void main() { + group('Feature Requests tests', () { + patrolTest( + 'Show Feature Requests Screen', + ($) async { + await init($); + + await $('Show Feature Requests').scrollTo().tap(); + + await wait(second: 1); + + final title = await getNativeView($, + ios: 'IBGFeatureListTableView', android: 'ib_fr_toolbar_main'); + + expect(isAndroid ? title.androidViews.length : title.iosViews.length, + equals(1)); + }, + framePolicy: LiveTestWidgetsFlutterBindingFramePolicy.fullyLive, + ); + }); +} diff --git a/example/integration_test/instabug_test.dart b/example/integration_test/instabug_test.dart new file mode 100644 index 000000000..90de7a4bb --- /dev/null +++ b/example/integration_test/instabug_test.dart @@ -0,0 +1,31 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:patrol/patrol.dart'; + +import 'utils/utils.dart'; + +void main() { + group('instabug test', () { + patrolTest( + 'ChangePrimaryColor', + ($) async { + await init($); + + var color = "#FF0000"; + await $(#enter_primary_color_input).scrollTo().enterText(color); + await $('Change Primary Color').scrollTo().tap(); + + await wait(second: 1); + + final floatingButton = await getFAB($); + + expect( + isAndroid + ? floatingButton.androidViews.length + : floatingButton.iosViews.length, + equals(1)); + }, + framePolicy: LiveTestWidgetsFlutterBindingFramePolicy.fullyLive, + ); + }); +} diff --git a/example/integration_test/surveys_test.dart b/example/integration_test/surveys_test.dart new file mode 100644 index 000000000..d9f482951 --- /dev/null +++ b/example/integration_test/surveys_test.dart @@ -0,0 +1,28 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:patrol/patrol.dart'; + +import 'utils/utils.dart'; + +void main() { + group('Surveys tests', () { + patrolTest( + 'Show Surveys Screen', + ($) async { + await init($); + + await wait(second: 2); + + await $('Show Manual Survey').scrollTo().tap(); + + await wait(second: 2); + + final title = await getNativeView($, + ios: 'SurveyNavigationVC', + android: 'instabug_survey_dialog_container'); + + expect(isAndroid ? title.androidViews.length : title.iosViews.length, + equals(1)); + }, + ); + }); +} diff --git a/example/integration_test/utils/utils.dart b/example/integration_test/utils/utils.dart new file mode 100644 index 000000000..5c06ce217 --- /dev/null +++ b/example/integration_test/utils/utils.dart @@ -0,0 +1,62 @@ +import 'package:flutter/foundation.dart'; +import 'package:instabug_flutter/instabug_flutter.dart'; +import 'package:instabug_flutter_example/main.dart'; +import 'package:patrol/patrol.dart'; + +Future init(PatrolIntegrationTester $) async { + Instabug.init( + token: 'ed6f659591566da19b67857e1b9d40ab', + invocationEvents: [InvocationEvent.floatingButton], + debugLogsLevel: LogLevel.verbose, + ); + + Instabug.setWelcomeMessageMode(WelcomeMessageMode.disabled); + + await $.pumpWidgetAndSettle(const MyApp()); + await $.native2.initialize(); + + await wait(second: 2); +} + +Future wait({int? second, int? miliSeconds}) { + return Future.delayed( + Duration(seconds: second ?? 0, milliseconds: miliSeconds ?? 0)); +} + +Future getNativeView(PatrolIntegrationTester $, + {required String android, + required String ios, + bool waitUntilVisible = true}) async { + final nativeView = NativeSelector( + ios: IOSSelector(identifier: ios), + android: AndroidSelector( + resourceName: 'com.instabug.flutter.example:id/${android}')); + if (waitUntilVisible) { + await $.native2 + .waitUntilVisible(nativeView, timeout: const Duration(seconds: 8)); + } + + return await $.native2.getNativeViews(nativeView); +} + +Future tapNativeView(PatrolIntegrationTester $, + {required NativeSelector nativeView, bool waitUntilVisible = true}) async { + if (waitUntilVisible) { + await $.native2 + .waitUntilVisible(nativeView, timeout: const Duration(seconds: 8)); + } + + await $.native2.tap(nativeView); +} + +Future getFAB(PatrolIntegrationTester $, + {bool waitUntilVisible = true}) { + return getNativeView($, + android: 'instabug_floating_button', + ios: 'IBGFloatingButtonAccessibilityIdentifier', + waitUntilVisible: waitUntilVisible); +} + +bool get isAndroid { + return defaultTargetPlatform == TargetPlatform.android; +} diff --git a/example/ios/Podfile b/example/ios/Podfile index 00756a1dd..376e6c071 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -30,8 +30,11 @@ target 'Runner' do use_frameworks! use_modular_headers! - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + +target 'RunnerUITests' do + inherit! :complete + end end target 'InstabugTests' do @@ -47,7 +50,7 @@ post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| - config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = "11.0" + config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = "15.0" end end end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 505c29865..6bac23f8f 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,18 +1,25 @@ PODS: + - CocoaAsyncSocket (7.6.5) - Flutter (1.0.0) - Instabug (15.1.1) - instabug_flutter (15.0.2): - Flutter - Instabug (= 15.1.1) - OCMock (3.6) + - patrol (0.0.1): + - CocoaAsyncSocket (~> 7.6) + - Flutter + - FlutterMacOS DEPENDENCIES: - Flutter (from `Flutter`) - instabug_flutter (from `.symlinks/plugins/instabug_flutter/ios`) - OCMock (= 3.6) + - patrol (from `.symlinks/plugins/patrol/darwin`) SPEC REPOS: trunk: + - CocoaAsyncSocket - Instabug - OCMock @@ -21,13 +28,17 @@ EXTERNAL SOURCES: :path: Flutter instabug_flutter: :path: ".symlinks/plugins/instabug_flutter/ios" + patrol: + :path: ".symlinks/plugins/patrol/darwin" SPEC CHECKSUMS: + CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 Instabug: 3e7af445c14d7823fcdecba223f09b5f7c0c6ce1 instabug_flutter: c5a8cb73d6c50dd193fc267b0b283087dc05c37a OCMock: 5ea90566be239f179ba766fd9fbae5885040b992 + patrol: 51b76cc7c11a2933ee3e72482d930c75b9d4ec73 -PODFILE CHECKSUM: 4d0aaaf6a444f68024f992999ff2c2ee26baa6ec +PODFILE CHECKSUM: 4a29255dbdc79717b7cbe161eb557614f1be7731 COCOAPODS: 1.16.2 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index d32f983fc..06a116415 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 2001D1442B8F501000885261 /* InstabugExampleMethodCallHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2001D1432B8F501000885261 /* InstabugExampleMethodCallHandler.m */; }; 206286ED2ABD0A1F00925509 /* SessionReplayApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 206286EC2ABD0A1F00925509 /* SessionReplayApiTests.m */; }; + 21F52FD8A6CAAC58C11C4106 /* Pods_Runner_RunnerUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EBBC1AB64BB98BC76E41A42 /* Pods_Runner_RunnerUITests.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 65C88E6E8EAE049E32FF2F52 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 853739F5879F6E4272829F47 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; @@ -29,6 +30,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + BE0EAEDF2E32DC4A006C9C24 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; C090017E25D9A031006F3DAE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 97C146E61CF9000F007C117D /* Project object */; @@ -60,13 +68,14 @@ 243EF14638ECA64074771B11 /* Pods-InstabugTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugTests.release.xcconfig"; path = "Target Support Files/Pods-InstabugTests/Pods-InstabugTests.release.xcconfig"; sourceTree = ""; }; 354EA318B622513FE3FD25E4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 671EF4FEC6834993651EBC4D /* Pods-InstabugUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugUITests.release.xcconfig"; path = "Target Support Files/Pods-InstabugUITests/Pods-InstabugUITests.release.xcconfig"; sourceTree = ""; }; + 671EF4FEC6834993651EBC4D /* Pods-RunnerUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerUITests.release.xcconfig"; path = "Target Support Files/Pods-RunnerUITests/Pods-RunnerUITests.release.xcconfig"; sourceTree = ""; }; 71679BEC094CFF3474195C2E /* Pods_InstabugTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_InstabugTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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 = ""; }; 816B0520F0A0D656CA616D31 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 853739F5879F6E4272829F47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8EBBC1AB64BB98BC76E41A42 /* Pods_Runner_RunnerUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner_RunnerUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; @@ -74,13 +83,15 @@ 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 = ""; }; - A964F0D42132F93F7E4DEB73 /* Pods-InstabugUITests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugUITests.profile.xcconfig"; path = "Target Support Files/Pods-InstabugUITests/Pods-InstabugUITests.profile.xcconfig"; sourceTree = ""; }; - B03C8370EEFE061BDDDA1DA1 /* Pods-InstabugUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugUITests.debug.xcconfig"; path = "Target Support Files/Pods-InstabugUITests/Pods-InstabugUITests.debug.xcconfig"; sourceTree = ""; }; + A964F0D42132F93F7E4DEB73 /* Pods-RunnerUITests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerUITests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerUITests/Pods-RunnerUITests.profile.xcconfig"; sourceTree = ""; }; + B03C8370EEFE061BDDDA1DA1 /* Pods-RunnerUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerUITests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerUITests/Pods-RunnerUITests.debug.xcconfig"; sourceTree = ""; }; BA5633844585BB93FE7BCCE7 /* Pods-InstabugTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugTests.profile.xcconfig"; path = "Target Support Files/Pods-InstabugTests/Pods-InstabugTests.profile.xcconfig"; sourceTree = ""; }; + BE0EAED92E32DC4A006C9C24 /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; BE26C80C2BD55575009FECCF /* IBGCrashReporting+CP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IBGCrashReporting+CP.h"; sourceTree = ""; }; BF9025BBD0A6FD7B193E903A /* Pods-InstabugTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugTests.debug.xcconfig"; path = "Target Support Files/Pods-InstabugTests/Pods-InstabugTests.debug.xcconfig"; sourceTree = ""; }; C090017925D9A030006F3DAE /* InstabugTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = InstabugTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C090017D25D9A031006F3DAE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C4A4CDE185C87287F1EA293F /* Pods-Runner-RunnerUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner-RunnerUITests.release.xcconfig"; path = "Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests.release.xcconfig"; sourceTree = ""; }; CC080E102937B7DB0041170A /* InstabugApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstabugApiTests.m; sourceTree = ""; }; CC198C60293E1A21007077C8 /* SurveysApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SurveysApiTests.m; sourceTree = ""; }; CC198C62293E2392007077C8 /* IBGSurvey+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "IBGSurvey+Test.h"; sourceTree = ""; }; @@ -93,9 +104,15 @@ CC9925D8293DFD7F001FD3EE /* RepliesApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RepliesApiTests.m; sourceTree = ""; }; CCADBDD7293CFED300AE5EB8 /* BugReportingApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BugReportingApiTests.m; sourceTree = ""; }; D465CA8CFED509B46412330E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F5446C0D3B2623D9BCC7CCE3 /* Pods_InstabugUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_InstabugUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB9BABD4F8C5EA7F09F259A1 /* Pods-Runner-RunnerUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner-RunnerUITests.debug.xcconfig"; path = "Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests.debug.xcconfig"; sourceTree = ""; }; + F5446C0D3B2623D9BCC7CCE3 /* Pods_RunnerUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFD0FE808B9493168BFD329E /* Pods-Runner-RunnerUITests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner-RunnerUITests.profile.xcconfig"; path = "Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + BE0EAEDA2E32DC4A006C9C24 /* RunnerUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = RunnerUITests; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -105,6 +122,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + BE0EAED62E32DC4A006C9C24 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 21F52FD8A6CAAC58C11C4106 /* Pods_Runner_RunnerUITests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C090017625D9A030006F3DAE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -125,9 +150,12 @@ BF9025BBD0A6FD7B193E903A /* Pods-InstabugTests.debug.xcconfig */, 243EF14638ECA64074771B11 /* Pods-InstabugTests.release.xcconfig */, BA5633844585BB93FE7BCCE7 /* Pods-InstabugTests.profile.xcconfig */, - B03C8370EEFE061BDDDA1DA1 /* Pods-InstabugUITests.debug.xcconfig */, - 671EF4FEC6834993651EBC4D /* Pods-InstabugUITests.release.xcconfig */, - A964F0D42132F93F7E4DEB73 /* Pods-InstabugUITests.profile.xcconfig */, + B03C8370EEFE061BDDDA1DA1 /* Pods-RunnerUITests.debug.xcconfig */, + 671EF4FEC6834993651EBC4D /* Pods-RunnerUITests.release.xcconfig */, + A964F0D42132F93F7E4DEB73 /* Pods-RunnerUITests.profile.xcconfig */, + EB9BABD4F8C5EA7F09F259A1 /* Pods-Runner-RunnerUITests.debug.xcconfig */, + C4A4CDE185C87287F1EA293F /* Pods-Runner-RunnerUITests.release.xcconfig */, + FFD0FE808B9493168BFD329E /* Pods-Runner-RunnerUITests.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -137,7 +165,8 @@ children = ( 853739F5879F6E4272829F47 /* Pods_Runner.framework */, 71679BEC094CFF3474195C2E /* Pods_InstabugTests.framework */, - F5446C0D3B2623D9BCC7CCE3 /* Pods_InstabugUITests.framework */, + F5446C0D3B2623D9BCC7CCE3 /* Pods_RunnerUITests.framework */, + 8EBBC1AB64BB98BC76E41A42 /* Pods_Runner_RunnerUITests.framework */, ); name = Frameworks; sourceTree = ""; @@ -159,6 +188,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, C090017A25D9A031006F3DAE /* InstabugTests */, + BE0EAEDA2E32DC4A006C9C24 /* RunnerUITests */, 97C146EF1CF9000F007C117D /* Products */, 263CD21F80996ACC7964A383 /* Pods */, 54C1C903B090526284242B67 /* Frameworks */, @@ -170,6 +200,7 @@ children = ( 97C146EE1CF9000F007C117D /* Runner.app */, C090017925D9A030006F3DAE /* InstabugTests.xctest */, + BE0EAED92E32DC4A006C9C24 /* RunnerUITests.xctest */, ); name = Products; sourceTree = ""; @@ -245,6 +276,31 @@ productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; }; + BE0EAED82E32DC4A006C9C24 /* RunnerUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = BE0EAEE42E32DC4A006C9C24 /* Build configuration list for PBXNativeTarget "RunnerUITests" */; + buildPhases = ( + 8809244822A75BD310D4EE4A /* [CP] Check Pods Manifest.lock */, + BE0EAEEB2E32DD25006C9C24 /* xcode_backend build */, + BE0EAED52E32DC4A006C9C24 /* Sources */, + BE0EAED62E32DC4A006C9C24 /* Frameworks */, + BE0EAED72E32DC4A006C9C24 /* Resources */, + 43B0C4C3F926B5BC1CBF2138 /* [CP] Embed Pods Frameworks */, + BE0EAEEC2E32DD32006C9C24 /* xcode_backend embed_and_thin */, + ); + buildRules = ( + ); + dependencies = ( + BE0EAEE02E32DC4A006C9C24 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + BE0EAEDA2E32DC4A006C9C24 /* RunnerUITests */, + ); + name = RunnerUITests; + productName = RunnerUITests; + productReference = BE0EAED92E32DC4A006C9C24 /* RunnerUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; C090017825D9A030006F3DAE /* InstabugTests */ = { isa = PBXNativeTarget; buildConfigurationList = C090018325D9A031006F3DAE /* Build configuration list for PBXNativeTarget "InstabugTests" */; @@ -271,6 +327,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { @@ -278,6 +335,11 @@ CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; }; + BE0EAED82E32DC4A006C9C24 = { + CreatedOnToolsVersion = 12.3; + LastSwiftMigration = 1340; + TestTargetID = 97C146ED1CF9000F007C117D; + }; C090017825D9A030006F3DAE = { CreatedOnToolsVersion = 12.3; LastSwiftMigration = 1340; @@ -286,7 +348,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; + compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -300,6 +362,7 @@ targets = ( 97C146ED1CF9000F007C117D /* Runner */, C090017825D9A030006F3DAE /* InstabugTests */, + BE0EAED82E32DC4A006C9C24 /* RunnerUITests */, ); }; /* End PBXProject section */ @@ -316,6 +379,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + BE0EAED72E32DC4A006C9C24 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C090017725D9A030006F3DAE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -359,6 +429,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 43B0C4C3F926B5BC1CBF2138 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner-RunnerUITests/Pods-Runner-RunnerUITests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 4A34CD0A46E05A6F4E374581 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -376,6 +463,28 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-InstabugTests/Pods-InstabugTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 8809244822A75BD310D4EE4A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-RunnerUITests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -413,6 +522,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + BE0EAEEB2E32DD25006C9C24 /* xcode_backend build */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "xcode_backend build"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n\n"; + }; + BE0EAEEC2E32DD32006C9C24 /* xcode_backend embed_and_thin */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "xcode_backend embed_and_thin"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n"; + }; F3392DEBC1FBE1A1719AA7BD /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -448,6 +593,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + BE0EAED52E32DC4A006C9C24 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C090017525D9A030006F3DAE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -468,6 +620,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + BE0EAEE02E32DC4A006C9C24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = BE0EAEDF2E32DC4A006C9C24 /* PBXContainerItemProxy */; + }; C090017F25D9A031006F3DAE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 97C146ED1CF9000F007C117D /* Runner */; @@ -518,6 +675,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -599,6 +757,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -623,7 +782,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -654,6 +813,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -672,7 +832,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -746,11 +906,110 @@ }; name = Release; }; + BE0EAEE12E32DC4A006C9C24 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 56S6Q9SA8U; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.instabug.RunnerUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Runner; + }; + name = Debug; + }; + BE0EAEE22E32DC4A006C9C24 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 56S6Q9SA8U; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.instabug.RunnerUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Runner; + }; + name = Release; + }; + BE0EAEE32E32DC4A006C9C24 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 56S6Q9SA8U; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.instabug.RunnerUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Runner; + }; + name = Profile; + }; C090018025D9A031006F3DAE /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = BF9025BBD0A6FD7B193E903A /* Pods-InstabugTests.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -763,7 +1022,7 @@ DEVELOPMENT_TEAM = 56S6Q9SA8U; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = InstabugTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.3; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -785,7 +1044,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 243EF14638ECA64074771B11 /* Pods-InstabugTests.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -798,7 +1056,7 @@ DEVELOPMENT_TEAM = 56S6Q9SA8U; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = InstabugTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.3; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -818,7 +1076,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = BA5633844585BB93FE7BCCE7 /* Pods-InstabugTests.profile.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -831,7 +1088,7 @@ DEVELOPMENT_TEAM = 56S6Q9SA8U; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = InstabugTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.3; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -870,6 +1127,16 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + BE0EAEE42E32DC4A006C9C24 /* Build configuration list for PBXNativeTarget "RunnerUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE0EAEE12E32DC4A006C9C24 /* Debug */, + BE0EAEE22E32DC4A006C9C24 /* Release */, + BE0EAEE32E32DC4A006C9C24 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C090018325D9A031006F3DAE /* Build configuration list for PBXNativeTarget "InstabugTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 0b15932d1..f09f1bfdc 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -51,9 +51,9 @@ skipped = "NO"> diff --git a/example/ios/RunnerUITests/RunnerUITests.m b/example/ios/RunnerUITests/RunnerUITests.m new file mode 100644 index 000000000..bfc5dbda2 --- /dev/null +++ b/example/ios/RunnerUITests/RunnerUITests.m @@ -0,0 +1,5 @@ +@import XCTest; +@import patrol; +@import ObjectiveC.runtime; + +PATROL_INTEGRATION_TEST_IOS_RUNNER(RunnerUITests) diff --git a/example/lib/src/screens/my_home_page.dart b/example/lib/src/screens/my_home_page.dart index 404d79cdd..427a7ac7c 100644 --- a/example/lib/src/screens/my_home_page.dart +++ b/example/lib/src/screens/my_home_page.dart @@ -43,8 +43,8 @@ class _MyHomePageState extends State { return AlertDialog( title: const Text('On Dismiss'), content: Text( - 'onDismiss callback called with $dismissType and $reportType', - ), + 'onDismiss callback called with $dismissType and $reportType', + key: const ValueKey('dismiss_callback_dialog_test')), ); }, ); @@ -182,6 +182,7 @@ class _MyHomePageState extends State { InstabugTextField( controller: primaryColorController, label: 'Enter primary color', + textFieldKey: const ValueKey('enter_primary_color_input'), ), InstabugButton( text: 'Change Primary Color', @@ -238,6 +239,7 @@ class _MyHomePageState extends State { const SectionTitle('Repro Steps'), InstabugTextField( controller: screenNameController, + textFieldKey: const ValueKey('screen_name_input'), label: 'Enter screen name', ), InstabugButton( @@ -334,7 +336,7 @@ class _MyHomePageState extends State { ), ], ), - SectionTitle('FeatureFlags'), + const SectionTitle('FeatureFlags'), InstabugTextField( controller: featureFlagsController, label: 'Feature Flag name', diff --git a/example/lib/src/widget/instabug_text_field.dart b/example/lib/src/widget/instabug_text_field.dart index 3d01cc623..d38452850 100644 --- a/example/lib/src/widget/instabug_text_field.dart +++ b/example/lib/src/widget/instabug_text_field.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; class InstabugTextField extends StatelessWidget { const InstabugTextField({ Key? key, + this.textFieldKey, required this.label, required this.controller, this.labelStyle, @@ -18,6 +19,7 @@ class InstabugTextField extends StatelessWidget { final TextInputType? keyboardType; final FormFieldValidator? validator; + final Key? textFieldKey; @override Widget build(BuildContext context) { return Container( @@ -26,6 +28,7 @@ class InstabugTextField extends StatelessWidget { horizontal: 20.0, ), child: TextFormField( + key: textFieldKey, controller: controller, keyboardType: keyboardType, validator: validator, diff --git a/example/pubspec.lock b/example/pubspec.lock index 99e8f9d56..5eb6c5f4d 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -41,6 +41,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.0" + dispose_scope: + dependency: transitive + description: + name: dispose_scope + sha256: "48ec38ca2631c53c4f8fa96b294c801e55c335db5e3fb9f82cede150cfe5a2af" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + equatable: + dependency: transitive + description: + name: equatable + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" + url: "https://pub.dev" + source: hosted + version: "2.0.7" fake_async: dependency: transitive description: @@ -86,21 +102,21 @@ packages: source: sdk version: "0.0.0" http: - dependency: "direct main" + dependency: "direct overridden" description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.1.0" http_parser: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.1.2" instabug_flutter: dependency: "direct main" description: @@ -112,10 +128,18 @@ packages: dependency: "direct main" description: name: instabug_http_client - sha256: "7d52803c0dd639f6dddbe07333418eb251ae02f3f9f4d30402517533ca692784" + sha256: a38bed979f549ffe85efa46c46ca743cbfab95a51295b60f143f249b71655231 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.6.0" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -180,6 +204,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + patrol: + dependency: "direct dev" + description: + name: patrol + sha256: "254493e63a7307ee6080c2f6ab649f4dca404a9871d9b98d473563127c18823b" + url: "https://pub.dev" + source: hosted + version: "3.15.2" + patrol_finders: + dependency: transitive + description: + name: patrol_finders + sha256: "8787f9d5c3417b72e8959a55ad51c024cc0594d15e5db85bc179c4d8faa0c493" + url: "https://pub.dev" + source: hosted + version: "2.7.2" + patrol_log: + dependency: transitive + description: + name: patrol_log + sha256: "98b2701400c7a00b11533ab942bdeb44c3c714746e7cdb12e6cb93b6d06361da" + url: "https://pub.dev" + source: hosted + version: "0.3.0" platform: dependency: transitive description: @@ -196,6 +244,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.2" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" sky_engine: dependency: transitive description: flutter @@ -291,4 +347,4 @@ packages: version: "3.0.4" sdks: dart: ">=3.5.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + flutter: ">=3.24.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index fe72aaa2d..92a0b9599 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -23,7 +23,6 @@ environment: dependencies: flutter: sdk: flutter - http: ^0.13.0 instabug_flutter: path: ../ instabug_http_client: ^2.4.0 @@ -34,8 +33,17 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: 1.0.4 + patrol: 3.15.2 + +patrol: + app_name: Instabug example + android: + package_name: com.instabug.flutter.example + ios: + bundle_id: com.instabug.InstabugSample dependency_overrides: + http: 1.1.0 instabug_flutter: path: ../ diff --git a/example/test_driver/example.dart b/example/test_driver/example.dart deleted file mode 100644 index f39cb4232..000000000 --- a/example/test_driver/example.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:instabug_flutter_example/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - app.main(); -} diff --git a/scripts/pigeon.sh b/scripts/pigeon.sh old mode 100644 new mode 100755