diff --git a/.github/workflows/android-appcenter.yml b/.github/workflows/android-browserstack.yml similarity index 62% rename from .github/workflows/android-appcenter.yml rename to .github/workflows/android-browserstack.yml index 3d4ec23..b6c020a 100644 --- a/.github/workflows/android-appcenter.yml +++ b/.github/workflows/android-browserstack.yml @@ -1,4 +1,4 @@ -name: Android AppCenter Tests +name: Android BrowserStack Tests on: workflow_dispatch: @@ -6,13 +6,13 @@ on: branches: [ main ] paths: - 'binding/android/FalconTestApp/**' - - '.github/workflows/android-appcenter.yml' + - '.github/workflows/android-browserstack.yml' - 'resources/audio_samples/**' pull_request: branches: [ main, 'v[0-9]+.[0-9]+' ] paths: - 'binding/android/FalconTestApp/**' - - '.github/workflows/android-appcenter.yml' + - '.github/workflows/android-browserstack.yml' - 'resources/audio_samples/**' defaults: @@ -21,19 +21,18 @@ defaults: jobs: build: - name: Run Android Tests on AppCenter + name: Run Android Tests on BrowserStack runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up Node.js LTS - uses: actions/setup-node@v3 + - name: Installing Python + uses: actions/setup-python@v5 with: - node-version: lts/* - - - name: Install AppCenter CLI - run: npm install -g appcenter-cli + python-version: '3.10' + - run: + pip3 install requests - name: set up JDK 11 uses: actions/setup-java@v3 @@ -66,30 +65,29 @@ jobs: - name: Build androidTest run: ./gradlew assembleDebugAndroidTest - - name: Run tests on AppCenter - run: appcenter test run espresso - --token ${{secrets.APPCENTERAPITOKEN}} - --app "Picovoice/Falcon-Android" - --devices "Picovoice/android-min-max" - --app-path falcon-test-app/build/outputs/apk/debug/falcon-test-app-debug.apk - --test-series "falcon-android" - --locale "en_US" - --build-dir falcon-test-app/build/outputs/apk/androidTest/debug + - name: Run tests on BrowserStack + run: python3 ../../../script/automation/browserstack.py + --type espresso + --username "${{secrets.BROWSERSTACK_USERNAME}}" + --access_key "${{secrets.BROWSERSTACK_ACCESS_KEY}}" + --project_name "Falcon-Android" + --devices "android-min-max" + --app_path "falcon-test-app/build/outputs/apk/debug/falcon-test-app-debug.apk" + --test_path "falcon-test-app/build/outputs/apk/androidTest/debug/falcon-test-app-debug-androidTest.apk" build-integ: - name: Run Android Integration Tests on AppCenter + name: Run Android Integration Tests on BrowserStack runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up Node.js LTS - uses: actions/setup-node@v3 + - name: Installing Python + uses: actions/setup-python@v5 with: - node-version: lts/* - - - name: Install AppCenter CLI - run: npm install -g appcenter-cli + python-version: '3.10' + - run: + pip3 install requests - name: set up JDK 11 uses: actions/setup-java@v3 @@ -122,12 +120,12 @@ jobs: - name: Build androidTest run: ./gradlew assembleReleaseAndroidTest -DtestBuildType=integ - - name: Run tests on AppCenter - run: appcenter test run espresso - --token ${{secrets.APPCENTERAPITOKEN}} - --app "Picovoice/Falcon-Android" - --devices "Picovoice/android-min-max" - --app-path falcon-test-app/build/outputs/apk/release/falcon-test-app-release.apk - --test-series "falcon-android" - --locale "en_US" - --build-dir falcon-test-app/build/outputs/apk/androidTest/release + - name: Run tests on BrowserStack + run: python3 ../../../script/automation/browserstack.py + --type espresso + --username "${{secrets.BROWSERSTACK_USERNAME}}" + --access_key "${{secrets.BROWSERSTACK_ACCESS_KEY}}" + --project_name "Falcon-Android-Integration" + --devices "android-min-max" + --app_path "falcon-test-app/build/outputs/apk/release/falcon-test-app-release.apk" + --test_path "falcon-test-app/build/outputs/apk/androidTest/release/falcon-test-app-release-androidTest.apk" diff --git a/.github/workflows/android-perf.yml b/.github/workflows/android-perf.yml index 54876f9..b8943fc 100644 --- a/.github/workflows/android-perf.yml +++ b/.github/workflows/android-perf.yml @@ -21,28 +21,26 @@ defaults: jobs: build: - name: Run Android Speed Tests on AppCenter + name: Run Android Speed Tests on BrowserStack runs-on: ubuntu-latest strategy: matrix: - device: [single-android, 32bit-android] + device: [ android-perf ] include: - - device: single-android + - device: android-perf initPerformanceThresholdSec: 1.0 - procPerformanceThresholdSec: 1.0 - - device: 32bit-android - initPerformanceThresholdSec: 1.0 - procPerformanceThresholdSec: 7.0 + procPerformanceThresholdSec: 2.0 steps: - uses: actions/checkout@v3 - - name: Setup Node.js environment - uses: actions/setup-node@v3 - - - name: Install AppCenter CLI - run: npm install -g appcenter-cli + - name: Installing Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - run: + pip3 install requests - name: set up JDK 11 uses: actions/setup-java@v3 @@ -84,12 +82,12 @@ jobs: - name: Build androidTest run: ./gradlew assembleDebugAndroidTest -DtestBuildType=perf - - name: Run tests on AppCenter - run: appcenter test run espresso - --token ${{secrets.APPCENTERAPITOKEN}} - --app "Picovoice/Falcon-Android" - --devices "Picovoice/${{ matrix.device }}" - --app-path falcon-test-app/build/outputs/apk/debug/falcon-test-app-debug.apk - --test-series "falcon-android" - --locale "en_US" - --build-dir falcon-test-app/build/outputs/apk/androidTest/debug + - name: Run tests on BrowserStack + run: python3 ../../../script/automation/browserstack.py + --type espresso + --username "${{secrets.BROWSERSTACK_USERNAME}}" + --access_key "${{secrets.BROWSERSTACK_ACCESS_KEY}}" + --project_name "Falcon-Android-Performance" + --devices "${{ matrix.device }}" + --app_path "falcon-test-app/build/outputs/apk/debug/falcon-test-app-debug.apk" + --test_path "falcon-test-app/build/outputs/apk/androidTest/debug/falcon-test-app-debug-androidTest.apk" diff --git a/.github/workflows/ios-appcenter.yml b/.github/workflows/ios-appcenter.yml deleted file mode 100644 index 75b953e..0000000 --- a/.github/workflows/ios-appcenter.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: iOS AppCenter Tests - -on: - workflow_dispatch: - push: - branches: [ main ] - paths: - - '.github/workflows/ios-appcenter.yml' - - 'binding/ios/FalconAppTest/**' - - 'resources/audio_samples/**' - pull_request: - branches: [ main, 'v[0-9]+.[0-9]+' ] - paths: - - '.github/workflows/ios-appcenter.yml' - - 'binding/ios/FalconAppTest/**' - - 'resources/audio_samples/**' - -defaults: - run: - working-directory: binding/ios/FalconAppTest - -jobs: - build: - name: Run iOS Tests on AppCenter - runs-on: macos-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Node.js environment - uses: actions/setup-node@v3 - - - name: Install Cocoapods - run: gem install cocoapods - - - name: Install AppCenter CLI - run: npm install -g appcenter-cli - - - name: Make build dir - run: mkdir ddp - - - name: Install resource script dependency - run: | - brew update - brew install convmv - - - name: Copy test_resources - run: ./copy_test_resources.sh - - - name: Run Cocoapods - run: pod install - - - name: Inject AppID - run: sed -i '.bak' 's:{TESTING_ACCESS_KEY_HERE}:${{secrets.PV_VALID_ACCESS_KEY}}:' - FalconAppTestUITests/FalconAppTestUITests.swift - - - name: XCode Build - run: xcrun xcodebuild build-for-testing - -configuration Debug - -workspace FalconAppTest.xcworkspace - -sdk iphoneos - -scheme FalconAppTest - -derivedDataPath ddp - CODE_SIGNING_ALLOWED=NO - - - name: Run Tests on AppCenter - run: appcenter test run xcuitest - --token ${{secrets.APPCENTERAPITOKEN}} - --app "Picovoice/Falcon-iOS" - --devices "Picovoice/ios-min-max" - --test-series "falcon-ios" - --locale "en_US" - --build-dir ddp/Build/Products/Debug-iphoneos diff --git a/.github/workflows/ios-browserstack.yml b/.github/workflows/ios-browserstack.yml new file mode 100644 index 0000000..700aca7 --- /dev/null +++ b/.github/workflows/ios-browserstack.yml @@ -0,0 +1,82 @@ +name: iOS BrowserStack Tests + +on: + workflow_dispatch: + push: + branches: [ main ] + paths: + - '.github/workflows/ios-browserstack.yml' + - 'binding/ios/FalconAppTest/**' + - 'resources/audio_samples/**' + pull_request: + branches: [ main, 'v[0-9]+.[0-9]+' ] + paths: + - '.github/workflows/ios-browserstack.yml' + - 'binding/ios/FalconAppTest/**' + - 'resources/audio_samples/**' + +defaults: + run: + working-directory: binding/ios/FalconAppTest + +jobs: + build: + name: Run iOS Tests on BrowserStack + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Installing Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - run: + pip3 install requests + + - name: Install Cocoapods + run: gem install cocoapods + + - name: Make build dir + run: mkdir ddp + + - name: Copy test_resources + run: ./copy_test_resources.sh + + - name: Run Cocoapods + run: pod install + + - name: Inject AccessKey + run: sed -i '.bak' 's:{TESTING_ACCESS_KEY_HERE}:${{secrets.PV_VALID_ACCESS_KEY}}:' + FalconAppTestUITests/FalconAppTestUITests.swift + + - name: XCode Build + run: xcrun xcodebuild build-for-testing + -configuration Debug + -workspace FalconAppTest.xcworkspace + -sdk iphoneos + -scheme FalconAppTest + -derivedDataPath ddp + CODE_SIGNING_ALLOWED=NO + + - name: Generating ipa + run: cd ddp/Build/Products/Debug-iphoneos/ && + mkdir Payload && + cp -r FalconAppTest.app Payload && + zip --symlinks -r FalconAppTest.ipa Payload && + rm -r Payload + + - name: Zipping Tests + run: cd ddp/Build/Products/Debug-iphoneos/ && + zip --symlinks -r FalconAppTestUITests.zip FalconAppTestUITests-Runner.app + + - name: Run tests on BrowserStack + run: python3 ../../../script/automation/browserstack.py + --type xcuitest + --username "${{secrets.BROWSERSTACK_USERNAME}}" + --access_key "${{secrets.BROWSERSTACK_ACCESS_KEY}}" + --project_name "Falcon-iOS" + --devices "ios-min-max" + --app_path "ddp/Build/Products/Debug-iphoneos/FalconAppTest.ipa" + --test_path "ddp/Build/Products/Debug-iphoneos/FalconAppTestUITests.zip" diff --git a/.github/workflows/ios-demos.yml b/.github/workflows/ios-demos.yml index c3fd74e..d1326c5 100644 --- a/.github/workflows/ios-demos.yml +++ b/.github/workflows/ios-demos.yml @@ -33,9 +33,6 @@ jobs: - name: Install Cocoapods run: gem install cocoapods - - name: Install AppCenter CLI - run: npm install -g appcenter-cli - - name: Make build dir run: mkdir ddp diff --git a/.github/workflows/ios-perf.yml b/.github/workflows/ios-perf.yml index 2f4633d..3fb9722 100644 --- a/.github/workflows/ios-perf.yml +++ b/.github/workflows/ios-perf.yml @@ -21,12 +21,12 @@ defaults: jobs: build: - name: Run iOS Tests on AppCenter + name: Run iOS Tests on BrowserStack runs-on: macos-latest strategy: matrix: - device: [ios-perf] + device: [ ios-perf ] include: - device: ios-perf procPerformanceThresholdSec: 0.5 @@ -35,30 +35,26 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Setup Node.js environment - uses: actions/setup-node@v3 + - name: Installing Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - run: + pip3 install requests - name: Install Cocoapods run: gem install cocoapods - - name: Install AppCenter CLI - run: npm install -g appcenter-cli - - name: Make build dir run: mkdir ddp - - name: Install resource script dependency - run: | - brew update - brew install convmv - - name: Copy test_resources run: ./copy_test_resources.sh - name: Run Cocoapods run: pod install - - name: Inject AppID + - name: Inject AccessKey run: sed -i '.bak' 's:{TESTING_ACCESS_KEY_HERE}:${{secrets.PV_VALID_ACCESS_KEY}}:' PerformanceTest/PerformanceTest.swift @@ -67,7 +63,8 @@ jobs: PerformanceTest/PerformanceTest.swift - name: Inject Performance Threshold - run: sed -i '.bak' 's:{PROC_PERFORMANCE_THRESHOLD_SEC}:${{ matrix.procPerformanceThresholdSec }}:' + run: sed -i '.bak' + '1,/{PROC_PERFORMANCE_THRESHOLD_SEC}/s/{PROC_PERFORMANCE_THRESHOLD_SEC}/${{ matrix.procPerformanceThresholdSec }}/' PerformanceTest/PerformanceTest.swift - name: XCode Build @@ -79,11 +76,23 @@ jobs: -derivedDataPath ddp CODE_SIGNING_ALLOWED=NO - - name: Run Tests on AppCenter - run: appcenter test run xcuitest - --token ${{secrets.APPCENTERAPITOKEN}} - --app "Picovoice/Falcon-iOS" - --devices "Picovoice/${{ matrix.device }}" - --test-series "falcon-ios" - --locale "en_US" - --build-dir ddp/Build/Products/Debug-iphoneos + - name: Generating ipa + run: cd ddp/Build/Products/Debug-iphoneos/ && + mkdir Payload && + cp -r FalconAppTest.app Payload && + zip --symlinks -r FalconAppTest.ipa Payload && + rm -r Payload + + - name: Zipping Tests + run: cd ddp/Build/Products/Debug-iphoneos/ && + zip --symlinks -r PerformanceTest.zip PerformanceTest-Runner.app + + - name: Run tests on BrowserStack + run: python3 ../../../script/automation/browserstack.py + --type xcuitest + --username "${{secrets.BROWSERSTACK_USERNAME}}" + --access_key "${{secrets.BROWSERSTACK_ACCESS_KEY}}" + --project_name "Falcon-iOS-Performance" + --devices "${{ matrix.device }}" + --app_path "ddp/Build/Products/Debug-iphoneos/FalconAppTest.ipa" + --test_path "ddp/Build/Products/Debug-iphoneos/PerformanceTest.zip" diff --git a/binding/android/FalconTestApp/falcon-test-app/build.gradle b/binding/android/FalconTestApp/falcon-test-app/build.gradle index 161f923..a60c576 100644 --- a/binding/android/FalconTestApp/falcon-test-app/build.gradle +++ b/binding/android/FalconTestApp/falcon-test-app/build.gradle @@ -114,6 +114,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'com.google.code.gson:gson:2.10' implementation 'ai.picovoice:falcon-android:1.0.0' // Espresso UI Testing @@ -121,7 +122,6 @@ dependencies { androidTestImplementation('androidx.test.espresso:espresso-core:3.2.0', { exclude group: 'com.android.support', module: 'support-annotations' }) - androidTestImplementation('com.microsoft.appcenter:espresso-test-extension:1.4') androidTestImplementation('androidx.test.espresso:espresso-intents:3.5.1') } diff --git a/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/BaseTest.java b/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/BaseTest.java index 97cc0ab..1b58de8 100644 --- a/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/BaseTest.java +++ b/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/BaseTest.java @@ -19,12 +19,7 @@ import androidx.test.platform.app.InstrumentationRegistry; -import com.microsoft.appcenter.espresso.Factory; -import com.microsoft.appcenter.espresso.ReportHelper; - -import org.junit.After; import org.junit.Before; -import org.junit.Rule; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -43,9 +38,6 @@ public class BaseTest { - @Rule - public ReportHelper reportHelper = Factory.getReportHelper(); - Context testContext; Context appContext; AssetManager assetManager; @@ -54,11 +46,6 @@ public class BaseTest { String accessKey; - @After - public void TearDown() { - reportHelper.label("Stopping App"); - } - @Before public void Setup() throws IOException { testContext = InstrumentationRegistry.getInstrumentation().getContext(); diff --git a/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/IntegrationTest.java b/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/IntegrationTest.java index ae560e5..895ee80 100644 --- a/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/IntegrationTest.java +++ b/binding/android/FalconTestApp/falcon-test-app/src/androidTest/java/ai/picovoice/falcon/testapp/IntegrationTest.java @@ -16,9 +16,6 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.microsoft.appcenter.espresso.Factory; -import com.microsoft.appcenter.espresso.ReportHelper; - import org.hamcrest.Matcher; import org.junit.After; import org.junit.Before; @@ -74,9 +71,6 @@ public void perform(UiController uiController, View view) { @RunWith(AndroidJUnit4.class) public class IntegrationTest { - @Rule - public ReportHelper reportHelper = Factory.getReportHelper(); - @Rule public ActivityScenarioRule activityScenarioRule = new ActivityScenarioRule<>(MainActivity.class); @@ -91,11 +85,6 @@ public void intentsTeardown() { Intents.release(); } - @After - public void TearDown() { - reportHelper.label("Stopping App"); - } - @Test public void testFalcon() { onView(withId(R.id.testButton)).perform(click()); diff --git a/binding/ios/FalconAppTest/FalconAppTest.xcodeproj/project.pbxproj b/binding/ios/FalconAppTest/FalconAppTest.xcodeproj/project.pbxproj index e8a48cc..3b31b67 100644 --- a/binding/ios/FalconAppTest/FalconAppTest.xcodeproj/project.pbxproj +++ b/binding/ios/FalconAppTest/FalconAppTest.xcodeproj/project.pbxproj @@ -16,10 +16,10 @@ 1E00653727CFEF02006FF6E9 /* FalconAppTestUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E00653627CFEF02006FF6E9 /* FalconAppTestUITests.swift */; }; 1E5B7B1A2800E2B200F8BDDB /* PerformanceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5B7B192800E2B200F8BDDB /* PerformanceTest.swift */; }; 1E5B7B1E2800E2DA00F8BDDB /* test.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1E5B7B1D2800E2DA00F8BDDB /* test.wav */; }; - 77FBBAF3B7C16FEE71EC1CAD /* libPods-PerformanceTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C9957497AB230993D4EC9C1F /* libPods-PerformanceTest.a */; }; - B9636C2F6AEE14FC7B18DAB4 /* libPods-FalconAppTestUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 51651D9D4B41E75D466C7557 /* libPods-FalconAppTestUITests.a */; }; + 43BA5215E3082819E42E3068 /* libPods-FalconAppTestUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A1D724DE51E91146A45DC4D /* libPods-FalconAppTestUITests.a */; }; + 43FE79A49DD0581ED9C62EF9 /* libPods-FalconAppTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 68570F666E1695DFB4659060 /* libPods-FalconAppTest.a */; }; + 64DB20CA9E8547C32CB210F6 /* libPods-PerformanceTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 60F17AEF70BAD2BD9481BBA2 /* libPods-PerformanceTest.a */; }; C7C8601229CBA3A300EB6E87 /* test_resources in Resources */ = {isa = PBXBuildFile; fileRef = C7C8601129CBA3A300EB6E87 /* test_resources */; }; - FACF06D7F1FE4F7C25090518 /* libPods-FalconAppTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9699BB183C8EF0E35242EBCA /* libPods-FalconAppTest.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -40,9 +40,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0F79AE66C3AF2BAE41C85218 /* Pods-FalconAppTestUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTestUITests.release.xcconfig"; path = "Target Support Files/Pods-FalconAppTestUITests/Pods-FalconAppTestUITests.release.xcconfig"; sourceTree = ""; }; - 1525FEBD548F1945582FBC05 /* Pods-PerformanceTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PerformanceTest.debug.xcconfig"; path = "Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest.debug.xcconfig"; sourceTree = ""; }; - 177897EF5BEEAA27B3F6798B /* Pods-FalconAppTestUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTestUITests.debug.xcconfig"; path = "Target Support Files/Pods-FalconAppTestUITests/Pods-FalconAppTestUITests.debug.xcconfig"; sourceTree = ""; }; 1E00651227CFEF00006FF6E9 /* FalconAppTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FalconAppTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1E00651527CFEF00006FF6E9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 1E00651927CFEF00006FF6E9 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -58,13 +55,16 @@ 1E5B7B1B2800E2C500F8BDDB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1E5B7B1D2800E2DA00F8BDDB /* test.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = test.wav; path = ../../../../resources/audio_samples/test.wav; sourceTree = ""; }; 1E5B7B1F2800E2E300F8BDDB /* falcon_params.pv */ = {isa = PBXFileReference; lastKnownFileType = file; name = falcon_params.pv; path = ../../../../lib/common/falcon_params.pv; sourceTree = ""; }; - 319AC9ABCF55C1028C9F619B /* Pods-PerformanceTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PerformanceTest.release.xcconfig"; path = "Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest.release.xcconfig"; sourceTree = ""; }; - 51651D9D4B41E75D466C7557 /* libPods-FalconAppTestUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FalconAppTestUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 9699BB183C8EF0E35242EBCA /* libPods-FalconAppTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FalconAppTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 22D92E6E58A9CB8D127AC856 /* Pods-FalconAppTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTest.release.xcconfig"; path = "Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest.release.xcconfig"; sourceTree = ""; }; + 60F17AEF70BAD2BD9481BBA2 /* libPods-PerformanceTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PerformanceTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 68570F666E1695DFB4659060 /* libPods-FalconAppTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FalconAppTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7B6EF088A15854942D133515 /* Pods-PerformanceTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PerformanceTest.debug.xcconfig"; path = "Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest.debug.xcconfig"; sourceTree = ""; }; + 7CD6CD38A971C75F43DA7C65 /* Pods-FalconAppTestUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTestUITests.release.xcconfig"; path = "Target Support Files/Pods-FalconAppTestUITests/Pods-FalconAppTestUITests.release.xcconfig"; sourceTree = ""; }; + 8CC29DC2C8EEA2E02313E3CE /* Pods-FalconAppTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTest.debug.xcconfig"; path = "Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest.debug.xcconfig"; sourceTree = ""; }; + 9A1D724DE51E91146A45DC4D /* libPods-FalconAppTestUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FalconAppTestUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + A4D77AE6DF2F1B3CE8D58A7C /* Pods-PerformanceTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PerformanceTest.release.xcconfig"; path = "Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest.release.xcconfig"; sourceTree = ""; }; + B55F99B23072BB0B53E10F7E /* Pods-FalconAppTestUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTestUITests.debug.xcconfig"; path = "Target Support Files/Pods-FalconAppTestUITests/Pods-FalconAppTestUITests.debug.xcconfig"; sourceTree = ""; }; C7C8601129CBA3A300EB6E87 /* test_resources */ = {isa = PBXFileReference; lastKnownFileType = folder; path = test_resources; sourceTree = ""; }; - C9957497AB230993D4EC9C1F /* libPods-PerformanceTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PerformanceTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - E8567FF9DA700265117350E1 /* Pods-FalconAppTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTest.debug.xcconfig"; path = "Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest.debug.xcconfig"; sourceTree = ""; }; - E9643B83CD94F3DAF3AE4291 /* Pods-FalconAppTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconAppTest.release.xcconfig"; path = "Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -72,7 +72,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FACF06D7F1FE4F7C25090518 /* libPods-FalconAppTest.a in Frameworks */, + 43FE79A49DD0581ED9C62EF9 /* libPods-FalconAppTest.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -81,7 +81,7 @@ buildActionMask = 2147483647; files = ( 0BDFC0A822E9A2F6228E92A8 /* BuildFile in Frameworks */, - B9636C2F6AEE14FC7B18DAB4 /* libPods-FalconAppTestUITests.a in Frameworks */, + 43BA5215E3082819E42E3068 /* libPods-FalconAppTestUITests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -89,7 +89,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 77FBBAF3B7C16FEE71EC1CAD /* libPods-PerformanceTest.a in Frameworks */, + 64DB20CA9E8547C32CB210F6 /* libPods-PerformanceTest.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,8 +103,8 @@ 1E00651427CFEF00006FF6E9 /* FalconAppTest */, 1E00653527CFEF02006FF6E9 /* FalconAppTestUITests */, 1E00651327CFEF00006FF6E9 /* Products */, - F86E3070BA0AB1892EFF0BA0 /* Pods */, - 5876D8723A9E85C5A6C000F7 /* Frameworks */, + 7F107A0FFAA38E2C00DE9330 /* Pods */, + CEE4AEA69454A6E583EE868B /* Frameworks */, ); sourceTree = ""; }; @@ -152,27 +152,28 @@ path = PerformanceTest; sourceTree = ""; }; - 5876D8723A9E85C5A6C000F7 /* Frameworks */ = { + 7F107A0FFAA38E2C00DE9330 /* Pods */ = { isa = PBXGroup; children = ( - 9699BB183C8EF0E35242EBCA /* libPods-FalconAppTest.a */, - 51651D9D4B41E75D466C7557 /* libPods-FalconAppTestUITests.a */, - C9957497AB230993D4EC9C1F /* libPods-PerformanceTest.a */, - ); - name = Frameworks; + 8CC29DC2C8EEA2E02313E3CE /* Pods-FalconAppTest.debug.xcconfig */, + 22D92E6E58A9CB8D127AC856 /* Pods-FalconAppTest.release.xcconfig */, + B55F99B23072BB0B53E10F7E /* Pods-FalconAppTestUITests.debug.xcconfig */, + 7CD6CD38A971C75F43DA7C65 /* Pods-FalconAppTestUITests.release.xcconfig */, + 7B6EF088A15854942D133515 /* Pods-PerformanceTest.debug.xcconfig */, + A4D77AE6DF2F1B3CE8D58A7C /* Pods-PerformanceTest.release.xcconfig */, + ); + name = Pods; + path = Pods; sourceTree = ""; }; - F86E3070BA0AB1892EFF0BA0 /* Pods */ = { + CEE4AEA69454A6E583EE868B /* Frameworks */ = { isa = PBXGroup; children = ( - E8567FF9DA700265117350E1 /* Pods-FalconAppTest.debug.xcconfig */, - E9643B83CD94F3DAF3AE4291 /* Pods-FalconAppTest.release.xcconfig */, - 177897EF5BEEAA27B3F6798B /* Pods-FalconAppTestUITests.debug.xcconfig */, - 0F79AE66C3AF2BAE41C85218 /* Pods-FalconAppTestUITests.release.xcconfig */, - 1525FEBD548F1945582FBC05 /* Pods-PerformanceTest.debug.xcconfig */, - 319AC9ABCF55C1028C9F619B /* Pods-PerformanceTest.release.xcconfig */, + 68570F666E1695DFB4659060 /* libPods-FalconAppTest.a */, + 9A1D724DE51E91146A45DC4D /* libPods-FalconAppTestUITests.a */, + 60F17AEF70BAD2BD9481BBA2 /* libPods-PerformanceTest.a */, ); - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -182,12 +183,12 @@ isa = PBXNativeTarget; buildConfigurationList = 1E00653C27CFEF02006FF6E9 /* Build configuration list for PBXNativeTarget "FalconAppTest" */; buildPhases = ( - E2254409ED87F802D44AD545 /* [CP] Check Pods Manifest.lock */, + 34CD95D941A8673474CE8B22 /* [CP] Check Pods Manifest.lock */, 1E00650E27CFEF00006FF6E9 /* Sources */, 1E00650F27CFEF00006FF6E9 /* Frameworks */, 1E00651027CFEF00006FF6E9 /* Resources */, - 02083A2EAC28B1520FAAE20F /* [CP] Embed Pods Frameworks */, - 4DF3A7DA966A2100B207E2E4 /* [CP] Copy Pods Resources */, + D105CA2C290337FA0E732DC7 /* [CP] Embed Pods Frameworks */, + 13158B894EF82D8A77AD626E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -202,12 +203,12 @@ isa = PBXNativeTarget; buildConfigurationList = 1E00654227CFEF02006FF6E9 /* Build configuration list for PBXNativeTarget "FalconAppTestUITests" */; buildPhases = ( - 65CAFD4EE9AC856C5D1BAC46 /* [CP] Check Pods Manifest.lock */, + 48DADE3F620835A5CF8D17E8 /* [CP] Check Pods Manifest.lock */, 1E00652E27CFEF02006FF6E9 /* Sources */, 1E00652F27CFEF02006FF6E9 /* Frameworks */, 1E00653027CFEF02006FF6E9 /* Resources */, - DEF2E87E0F120CD683B0586E /* [CP] Embed Pods Frameworks */, - 70C55C90E35E58E992CEE1C6 /* [CP] Copy Pods Resources */, + A783BF8E6EF8B702FBEB11B3 /* [CP] Embed Pods Frameworks */, + 2090E4B89248C71BD11D3B31 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -223,12 +224,12 @@ isa = PBXNativeTarget; buildConfigurationList = 1E5B7B142800E21D00F8BDDB /* Build configuration list for PBXNativeTarget "PerformanceTest" */; buildPhases = ( - 8DB6CC551CCBFE767FB29FB0 /* [CP] Check Pods Manifest.lock */, + 0D53AB14AD24B3C9DAE0A480 /* [CP] Check Pods Manifest.lock */, 1E5B7B0C2800E21D00F8BDDB /* Sources */, 1E5B7B0E2800E21D00F8BDDB /* Frameworks */, 1E5B7B102800E21D00F8BDDB /* Resources */, - 856D071E9FF3C712CE3C071F /* [CP] Embed Pods Frameworks */, - B94BA414A2F054318A5EEC69 /* [CP] Copy Pods Resources */, + FFE0BBD462CDB58A76751BAD /* [CP] Embed Pods Frameworks */, + 5857DA943FDB35891A771F88 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -312,24 +313,29 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 02083A2EAC28B1520FAAE20F /* [CP] Embed Pods Frameworks */ = { + 0D53AB14AD24B3C9DAE0A480 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PerformanceTest-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-frameworks.sh\"\n"; + 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; }; - 4DF3A7DA966A2100B207E2E4 /* [CP] Copy Pods Resources */ = { + 13158B894EF82D8A77AD626E /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -346,29 +352,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 65CAFD4EE9AC856C5D1BAC46 /* [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-FalconAppTestUITests-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; - }; - 70C55C90E35E58E992CEE1C6 /* [CP] Copy Pods Resources */ = { + 2090E4B89248C71BD11D3B31 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -385,24 +369,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FalconAppTestUITests/Pods-FalconAppTestUITests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 856D071E9FF3C712CE3C071F /* [CP] Embed Pods Frameworks */ = { + 34CD95D941A8673474CE8B22 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FalconAppTest-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks.sh\"\n"; + 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; }; - 8DB6CC551CCBFE767FB29FB0 /* [CP] Check Pods Manifest.lock */ = { + 48DADE3F620835A5CF8D17E8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -417,14 +406,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-PerformanceTest-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-FalconAppTestUITests-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; }; - B94BA414A2F054318A5EEC69 /* [CP] Copy Pods Resources */ = { + 5857DA943FDB35891A771F88 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -441,7 +430,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-resources.sh\"\n"; showEnvVarsInLog = 0; }; - DEF2E87E0F120CD683B0586E /* [CP] Embed Pods Frameworks */ = { + A783BF8E6EF8B702FBEB11B3 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -458,26 +447,38 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FalconAppTestUITests/Pods-FalconAppTestUITests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E2254409ED87F802D44AD545 /* [CP] Check Pods Manifest.lock */ = { + D105CA2C290337FA0E732DC7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FalconAppTest-checkManifestLockResult.txt", + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FalconAppTest/Pods-FalconAppTest-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + FFE0BBD462CDB58A76751BAD /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); 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"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -659,13 +660,13 @@ }; 1E00653D27CFEF02006FF6E9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E8567FF9DA700265117350E1 /* Pods-FalconAppTest.debug.xcconfig */; + baseConfigurationReference = 8CC29DC2C8EEA2E02313E3CE /* Pods-FalconAppTest.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Y6S42VUYBV; + DEVELOPMENT_TEAM = 65723695GD; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = FalconAppTest/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = FalconDemoApp; @@ -681,7 +682,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTest.albert; + PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTest; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -691,13 +692,13 @@ }; 1E00653E27CFEF02006FF6E9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E9643B83CD94F3DAF3AE4291 /* Pods-FalconAppTest.release.xcconfig */; + baseConfigurationReference = 22D92E6E58A9CB8D127AC856 /* Pods-FalconAppTest.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Y6S42VUYBV; + DEVELOPMENT_TEAM = 65723695GD; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = FalconAppTest/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = FalconDemoApp; @@ -713,7 +714,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTest.albert; + PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTest; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -723,11 +724,11 @@ }; 1E00654327CFEF02006FF6E9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 177897EF5BEEAA27B3F6798B /* Pods-FalconAppTestUITests.debug.xcconfig */; + baseConfigurationReference = B55F99B23072BB0B53E10F7E /* Pods-FalconAppTestUITests.debug.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Y6S42VUYBV; + DEVELOPMENT_TEAM = 65723695GD; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -736,7 +737,7 @@ "@loader_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTestUITests.albert; + PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTestUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; @@ -747,11 +748,11 @@ }; 1E00654427CFEF02006FF6E9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F79AE66C3AF2BAE41C85218 /* Pods-FalconAppTestUITests.release.xcconfig */; + baseConfigurationReference = 7CD6CD38A971C75F43DA7C65 /* Pods-FalconAppTestUITests.release.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Y6S42VUYBV; + DEVELOPMENT_TEAM = 65723695GD; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -760,7 +761,7 @@ "@loader_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTestUITests.albert; + PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconAppTestUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_VERSION = 5.0; @@ -771,7 +772,7 @@ }; 1E5B7B152800E21D00F8BDDB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1525FEBD548F1945582FBC05 /* Pods-PerformanceTest.debug.xcconfig */; + baseConfigurationReference = 7B6EF088A15854942D133515 /* Pods-PerformanceTest.debug.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -795,7 +796,7 @@ }; 1E5B7B162800E21D00F8BDDB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 319AC9ABCF55C1028C9F619B /* Pods-PerformanceTest.release.xcconfig */; + baseConfigurationReference = A4D77AE6DF2F1B3CE8D58A7C /* Pods-PerformanceTest.release.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; diff --git a/binding/ios/FalconAppTest/Podfile.lock b/binding/ios/FalconAppTest/Podfile.lock index 9aa0494..86dc949 100644 --- a/binding/ios/FalconAppTest/Podfile.lock +++ b/binding/ios/FalconAppTest/Podfile.lock @@ -10,7 +10,7 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: Falcon-iOS: - :commit: a93b6228a744a193888ffca9c67d46870534474f + :commit: 370e65dc3e542c99a6e72546883a937b443322ea :git: https://github.com/Picovoice/falcon.git SPEC CHECKSUMS: @@ -18,4 +18,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 6f1b6336202fa03a7de412cb08ac53bb247a2369 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/binding/ios/FalconAppTest/copy_test_resources.sh b/binding/ios/FalconAppTest/copy_test_resources.sh index 13b979c..3253d1f 100755 --- a/binding/ios/FalconAppTest/copy_test_resources.sh +++ b/binding/ios/FalconAppTest/copy_test_resources.sh @@ -11,6 +11,3 @@ cp ${RESOURCE_DIR}/audio_samples/*.wav ${ASSETS_DIR}/audio_samples echo "Copying test data file..." cp ${RESOURCE_DIR}/.test/test_data.json ${ASSETS_DIR} - -echo "Fixing filename encodings for Appcenter compatibility" -convmv --notest -f utf8 -t utf8 --nfd -r ${ASSETS_DIR} diff --git a/demo/ios/FalconDemo/FalconDemo.xcodeproj/project.pbxproj b/demo/ios/FalconDemo/FalconDemo.xcodeproj/project.pbxproj index 400842b..190e3e7 100644 --- a/demo/ios/FalconDemo/FalconDemo.xcodeproj/project.pbxproj +++ b/demo/ios/FalconDemo/FalconDemo.xcodeproj/project.pbxproj @@ -11,18 +11,18 @@ 3276967434C9CEBD0AF09237 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 327694975368499C3B7946DD /* Assets.xcassets */; }; 327698EADFD16D8F70823520 /* FalconDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 327697358B823E5B2EF0FA8C /* FalconDemoApp.swift */; }; 32769B2E1B2C5A2A897FFB10 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32769F3923C69C8C0C435CCF /* ContentView.swift */; }; - 620984C5E8341368C1451E09 /* libPods-FalconDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA58F77E1B131740569D44F3 /* libPods-FalconDemo.a */; }; + 467D8E38BB3521519FB3E678 /* libPods-FalconDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA58F77E1B131740569D44F3 /* libPods-FalconDemo.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 1449455E6EE77D08E73952D5 /* Pods-FalconDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconDemo.release.xcconfig"; path = "Target Support Files/Pods-FalconDemo/Pods-FalconDemo.release.xcconfig"; sourceTree = ""; }; 327694975368499C3B7946DD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 327695EA9D71F6A29C6D079A /* ViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewModel.swift; sourceTree = ""; }; 327697358B823E5B2EF0FA8C /* FalconDemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FalconDemoApp.swift; sourceTree = ""; }; 327699927E572962C40A7A04 /* FalconDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FalconDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 32769E49F724E169E0E13E27 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.info; path = Info.plist; sourceTree = ""; }; 32769F3923C69C8C0C435CCF /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 85C2D0CD605760D75470AB6A /* Pods-FalconDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconDemo.release.xcconfig"; path = "Target Support Files/Pods-FalconDemo/Pods-FalconDemo.release.xcconfig"; sourceTree = ""; }; - 8AEA9CD41B10DC71401F3273 /* Pods-FalconDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconDemo.debug.xcconfig"; path = "Target Support Files/Pods-FalconDemo/Pods-FalconDemo.debug.xcconfig"; sourceTree = ""; }; + B6FB75AA0D3B7FBE121325BC /* Pods-FalconDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FalconDemo.debug.xcconfig"; path = "Target Support Files/Pods-FalconDemo/Pods-FalconDemo.debug.xcconfig"; sourceTree = ""; }; FA58F77E1B131740569D44F3 /* libPods-FalconDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FalconDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -31,29 +31,20 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 620984C5E8341368C1451E09 /* libPods-FalconDemo.a in Frameworks */, + 467D8E38BB3521519FB3E678 /* libPods-FalconDemo.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1918003DDB7013A004865A81 /* Pods */ = { - isa = PBXGroup; - children = ( - 8AEA9CD41B10DC71401F3273 /* Pods-FalconDemo.debug.xcconfig */, - 85C2D0CD605760D75470AB6A /* Pods-FalconDemo.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; 327692BCE8C735F3534C318E = { isa = PBXGroup; children = ( 32769B87809678D96B1C6C55 /* Products */, 32769C17C8FD0599F872D3D1 /* FalconDemo */, - 1918003DDB7013A004865A81 /* Pods */, B33A5E35B83D1A4F9DED308C /* Frameworks */, + 77A75FFA94942AD5A249D70D /* Pods */, ); sourceTree = ""; }; @@ -77,6 +68,15 @@ path = FalconDemo; sourceTree = ""; }; + 77A75FFA94942AD5A249D70D /* Pods */ = { + isa = PBXGroup; + children = ( + B6FB75AA0D3B7FBE121325BC /* Pods-FalconDemo.debug.xcconfig */, + 1449455E6EE77D08E73952D5 /* Pods-FalconDemo.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; B33A5E35B83D1A4F9DED308C /* Frameworks */ = { isa = PBXGroup; children = ( @@ -117,7 +117,7 @@ ORGANIZATIONNAME = ""; TargetAttributes = { 327696DE3A6139B4D33CA898 = { - DevelopmentTeam = Y6S42VUYBV; + DevelopmentTeam = 65723695GD; ProvisioningStyle = Automatic; }; }; @@ -285,13 +285,13 @@ }; 3276957BE00965E54B1F13C1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8AEA9CD41B10DC71401F3273 /* Pods-FalconDemo.debug.xcconfig */; + baseConfigurationReference = B6FB75AA0D3B7FBE121325BC /* Pods-FalconDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Y6S42VUYBV; + DEVELOPMENT_TEAM = 65723695GD; ENABLE_PREVIEWS = NO; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = FalconDemo/Info.plist; @@ -303,7 +303,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconDemo.albert; + PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconDemo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -313,13 +313,13 @@ }; 327698DB666EFBD22F7AB2D5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 85C2D0CD605760D75470AB6A /* Pods-FalconDemo.release.xcconfig */; + baseConfigurationReference = 1449455E6EE77D08E73952D5 /* Pods-FalconDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Y6S42VUYBV; + DEVELOPMENT_TEAM = 65723695GD; ENABLE_PREVIEWS = NO; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = FalconDemo/Info.plist; @@ -331,7 +331,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconDemo.albert; + PRODUCT_BUNDLE_IDENTIFIER = ai.picovoice.FalconDemo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/demo/ios/FalconDemo/Podfile.lock b/demo/ios/FalconDemo/Podfile.lock index b017ea0..de634b1 100644 --- a/demo/ios/FalconDemo/Podfile.lock +++ b/demo/ios/FalconDemo/Podfile.lock @@ -13,4 +13,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 626dc8e55116037a8ef8a471e6b24b329d0225e4 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/resources/.lint/spell-check/dict.txt b/resources/.lint/spell-check/dict.txt index dc30375..4506496 100644 --- a/resources/.lint/spell-check/dict.txt +++ b/resources/.lint/spell-check/dict.txt @@ -33,8 +33,7 @@ falcondemo recyclerview constraintlayout gradlew -Appcenter -convmv notest Podfile +xcuitest xcworkspace diff --git a/script/automation/browserstack.py b/script/automation/browserstack.py new file mode 100644 index 0000000..4a8d237 --- /dev/null +++ b/script/automation/browserstack.py @@ -0,0 +1,135 @@ +import argparse +import requests +import time + +APP_URI = 'https://api-cloud.browserstack.com/app-automate/{}/v2/app' +TEST_URI = 'https://api-cloud.browserstack.com/app-automate/{}/v2/test-suite' +BUILD_URI = 'https://api-cloud.browserstack.com/app-automate/{}/v2/build' +STATUS_URI = 'https://api-cloud.browserstack.com/app-automate/{}/v2/builds/{}' + +devices_dict = { + 'android-min-max': [ + 'Samsung Galaxy S8-7.0', + 'Samsung Galaxy M52-11.0', + 'Google Pixel 9-15.0' + ], + 'android-perf': [ + 'Google Pixel 6 Pro-15.0' + ], + 'ios-min-max': [ + 'iPhone SE 2020-13', + 'iPhone 14 Pro-16', + 'iPhone 14-18' + ], + 'ios-perf': [ + 'iPhone 13-18', + ] +} + + +def main(args: argparse.Namespace) -> None: + app_files = { + 'file': open(args.app_path, 'rb') + } + + app_response = requests.post( + APP_URI.format(args.type), + files=app_files, + auth=(args.username, args.access_key) + ) + app_response_json = app_response.json() + + if not app_response.ok: + print('App Upload Failed', app_response_json) + exit(1) + + test_files = { + 'file': open(args.test_path, 'rb') + } + test_response = requests.post( + TEST_URI.format(args.type), + files=test_files, + auth=(args.username, args.access_key) + ) + test_response_json = test_response.json() + + if not test_response.ok: + print('Test Upload Failed', test_response_json) + exit(1) + + build_headers = { + 'Content-Type': 'application/json' + } + build_data = { + 'app': app_response_json['app_url'], + 'testSuite': test_response_json['test_suite_url'], + 'project': args.project_name, + 'devices': devices_dict[args.devices] + } + + while True: + build_response = requests.post( + BUILD_URI.format(args.type), + headers=build_headers, + json=build_data, + auth=(args.username, args.access_key) + ) + if (build_response is not None and 'message' in build_response.json() and '[BROWSERSTACK_ALL_PARALLELS_IN_USE]' + in build_response.json()['message']): + print('Parallel threads limit reached. Waiting...', flush=True) + time.sleep(60) + else: + break + + if build_response is None: + print('Build Failed') + exit(1) + + build_response_json = build_response.json() + + if not build_response.ok: + print('Build Failed', build_response.json()) + exit(1) + + if build_response_json['message'] != 'Success': + print('Build Unsuccessful') + exit(1) + + print( + 'View build results at https://app-automate.browserstack.com/dashboard/v2/builds/{}' + .format(build_response_json['build_id'])) + + while True: + time.sleep(60) + status_response = requests.get( + STATUS_URI.format(args.type, build_response_json['build_id']), + auth=(args.username, args.access_key) + ) + status_response_json = status_response.json() + status = status_response_json['status'] + + if not status_response.ok: + print('Status Request Failed', status_response_json) + exit(1) + + if status != 'queued' and status != 'running': + break + + print('Status:', status) + if status != 'passed': + exit(1) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--type', choices=['espresso', 'xcuitest'], required=True) + parser.add_argument('--username', required=True) + parser.add_argument('--access_key', required=True) + + parser.add_argument('--project_name', required=True) + parser.add_argument('--devices', choices=devices_dict.keys(), required=True) + parser.add_argument('--app_path', required=True) + parser.add_argument('--test_path', required=True) + args = parser.parse_args() + + main(args)