diff --git a/.github/workflows/ios-browserstack.yml b/.github/workflows/ios-browserstack.yml index 882f4a5..be866e4 100644 --- a/.github/workflows/ios-browserstack.yml +++ b/.github/workflows/ios-browserstack.yml @@ -36,14 +36,11 @@ jobs: - run: pip3 install requests - - name: Install Cocoapods - run: gem install cocoapods - - name: Make build dir run: mkdir ddp - - name: Run Cocoapods - run: pod install + - name: Copy test_resources + run: ./copy_test_resources.sh - name: Inject AccessKey run: sed -i '.bak' 's:{TESTING_ACCESS_KEY_HERE}:${{secrets.PV_VALID_ACCESS_KEY}}:' @@ -52,7 +49,7 @@ jobs: - name: XCode Build run: xcrun xcodebuild build-for-testing -configuration Debug - -workspace OctopusAppTest.xcworkspace + -project OctopusAppTest.xcodeproj -sdk iphoneos -scheme OctopusAppTest -derivedDataPath ddp diff --git a/.github/workflows/ios-demos.yml b/.github/workflows/ios-demos.yml index f120e40..e336a54 100644 --- a/.github/workflows/ios-demos.yml +++ b/.github/workflows/ios-demos.yml @@ -25,24 +25,10 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Set up Node.js LTS - uses: actions/setup-node@v3 - with: - node-version: lts/* - - - name: Install Cocoapods - run: gem install cocoapods - - - name: Make build dir - run: mkdir ddp - - - name: Run Cocoapods - run: pod install - - name: Build run: xcrun xcodebuild build -configuration Debug - -workspace OctopusDemo.xcworkspace + -project OctopusDemo.xcodeproj -sdk iphoneos -scheme OctopusDemo -derivedDataPath ddp diff --git a/.github/workflows/ios-perf.yml b/.github/workflows/ios-perf.yml index 32c0f4d..11b5d84 100644 --- a/.github/workflows/ios-perf.yml +++ b/.github/workflows/ios-perf.yml @@ -43,16 +43,13 @@ jobs: - run: pip3 install requests - - name: Install Cocoapods - run: gem install cocoapods - - name: Make build dir run: mkdir ddp - - name: Run Cocoapods - run: pod install + - name: Copy test_resources + run: ./copy_test_resources.sh - - name: Inject AppID + - name: Inject AccessKey run: sed -i '.bak' 's:{TESTING_ACCESS_KEY_HERE}:${{secrets.PV_VALID_ACCESS_KEY}}:' PerformanceTest/PerformanceTest.swift @@ -73,7 +70,7 @@ jobs: - name: XCode Build run: xcrun xcodebuild build-for-testing -configuration Debug - -workspace OctopusAppTest.xcworkspace + -project OctopusAppTest.xcodeproj -sdk iphoneos -scheme PerformanceTest -derivedDataPath ddp diff --git a/.gitignore b/.gitignore index 44c3ac5..49e63df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ .idea multiple_keywords.idx -.DS_Store \ No newline at end of file +.DS_Store +.build +Package.resolved +.swiftpm \ No newline at end of file diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..5acc12f --- /dev/null +++ b/Package.swift @@ -0,0 +1,37 @@ +// swift-tools-version:5.3 +import PackageDescription +let package = Package( + name: "Octopus-iOS", + platforms: [ + .iOS(.v13) + ], + products: [ + .library( + name: "Octopus", + targets: ["Octopus"] + ) + ], + targets: [ + .binaryTarget( + name: "PvOctopus", + path: "lib/ios/PvOctopus.xcframework" + ), + .target( + name: "Octopus", + dependencies: ["PvOctopus"], + path: ".", + exclude: [ + "binding/ios/OctopusAppTest", + "demo" + ], + sources: [ + "binding/ios/Octopus.swift", + "binding/ios/OctopusErrors.swift", + "binding/ios/OctopusMetadata.swift" + ], + resources: [ + .copy("lib/common/param/octopus_params.pv") + ] + ) + ] +) diff --git a/binding/ios/Octopus-iOS.podspec b/binding/ios/Octopus-iOS.podspec index 31ab27f..233adf9 100644 --- a/binding/ios/Octopus-iOS.podspec +++ b/binding/ios/Octopus-iOS.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = 'Octopus-iOS' s.module_name = 'Octopus' - s.version = '2.0.0' + s.version = '2.0.1' s.license = {:type => 'Apache 2.0'} s.summary = 'iOS binding for Picovoice\'s Octopus Speech-to-Index engine' s.description = @@ -12,11 +12,15 @@ Pod::Spec.new do |s| DESC s.homepage = 'https://github.com/Picovoice/octopus/tree/master/binding/ios' s.author = { 'Picovoice' => 'hello@picovoice.ai' } - s.source = { :git => "https://github.com/Picovoice/octopus.git", :tag => "Octopus-iOS-v2.0.0" } + s.source = { :git => "https://github.com/Picovoice/octopus.git", :tag => s.version.to_s } s.ios.deployment_target = '13.0' s.swift_version = '5.0' s.vendored_frameworks = 'lib/ios/PvOctopus.xcframework' - s.resources = 'lib/common/param/octopus_params.pv' + s.resource_bundles = { + 'OctopusResources' => [ + 'lib/common/param/octopus_params.pv' + ] + } s.source_files = 'binding/ios/*.{swift}' s.exclude_files = 'binding/ios/OctopusTestApp/**' end diff --git a/binding/ios/Octopus.swift b/binding/ios/Octopus.swift index 6019e1e..636c71a 100644 --- a/binding/ios/Octopus.swift +++ b/binding/ios/Octopus.swift @@ -1,5 +1,5 @@ // -// Copyright 2021-2023 Picovoice Inc. +// Copyright 2021-2024 Picovoice Inc. // You may not use this file except in compliance with the license. A copy of the license is located in the "LICENSE" // file accompanying this source. // Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on @@ -25,6 +25,31 @@ public struct OctopusMatch { /// iOS binding for Octopus Speech-to-Index engine. It transforms audio into searchable metadata. public class Octopus { +#if SWIFT_PACKAGE + + static let resourceBundle = Bundle.module + +#else + + static let resourceBundle: Bundle = { + let myBundle = Bundle(for: Octopus.self) + + guard let resourceBundleURL = myBundle.url( + forResource: "OctopusResources", withExtension: "bundle") + else { + fatalError("OctopusResources.bundle not found") + } + + guard let resourceBundle = Bundle(url: resourceBundleURL) + else { + fatalError("Could not open OctopusResources.bundle") + } + + return resourceBundle + }() + +#endif + /// Required audio sample rate for PCM data public static let pcmDataSampleRate = Int(pv_sample_rate()) @@ -50,11 +75,9 @@ public class Octopus { var modelPathArg = modelPath if modelPath == nil { - let bundle = Bundle(for: type(of: self)) - - modelPathArg = bundle.path(forResource: "octopus_params", ofType: "pv") + modelPathArg = Octopus.resourceBundle.path(forResource: "octopus_params", ofType: "pv") if modelPathArg == nil { - throw OctopusIOError("Could not retrieve default model from app bundle") + throw OctopusIOError("Could not find default model file in app bundle.") } } diff --git a/binding/ios/OctopusAppTest/.gitignore b/binding/ios/OctopusAppTest/.gitignore index ef9bbed..85753b6 100644 --- a/binding/ios/OctopusAppTest/.gitignore +++ b/binding/ios/OctopusAppTest/.gitignore @@ -17,4 +17,7 @@ build/* *.pbxuser xcuserdata Pods -ddp \ No newline at end of file +ddp + +OctopusAppTestUITests/test_resources/* +!OctopusAppTestUITests/test_resources/.gitkeep \ No newline at end of file diff --git a/binding/ios/OctopusAppTest/OctopusAppTest.xcodeproj/project.pbxproj b/binding/ios/OctopusAppTest/OctopusAppTest.xcodeproj/project.pbxproj index 0120893..ffee148 100644 --- a/binding/ios/OctopusAppTest/OctopusAppTest.xcodeproj/project.pbxproj +++ b/binding/ios/OctopusAppTest/OctopusAppTest.xcodeproj/project.pbxproj @@ -7,35 +7,21 @@ objects = { /* Begin PBXBuildFile section */ - 0A4DF03AB93039DC6A992730 /* libPods-OctopusAppTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 498BE0F0C0B5145436720B55 /* libPods-OctopusAppTest.a */; }; - 16197350434656617777BDDE /* libPods-OctopusAppTestUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B652FC67B3D9F1FAF609384 /* libPods-OctopusAppTestUITests.a */; }; 1E0064C827CEEA65006FF6E9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0064C727CEEA65006FF6E9 /* AppDelegate.swift */; }; 1E0064CC27CEEA65006FF6E9 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0064CB27CEEA65006FF6E9 /* ViewController.swift */; }; 1E0064CF27CEEA65006FF6E9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1E0064CD27CEEA65006FF6E9 /* Main.storyboard */; }; 1E0064D127CEEA66006FF6E9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1E0064D027CEEA66006FF6E9 /* Assets.xcassets */; }; 1E0064D427CEEA66006FF6E9 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1E0064D227CEEA66006FF6E9 /* LaunchScreen.storyboard */; }; - 1E00654527CFF101006FF6E9 /* multiple_keywords.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1E0064F827CEEB98006FF6E9 /* multiple_keywords.wav */; }; 1E00654627CFF260006FF6E9 /* OctopusAppTestUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0064E827CEEA66006FF6E9 /* OctopusAppTestUITests.swift */; }; 1E5B7B042800D9BE00F8BDDB /* PerformanceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5B7B032800D9BE00F8BDDB /* PerformanceTest.swift */; }; 1E5B7B072800DD6600F8BDDB /* multiple_keywords.wav in Resources */ = {isa = PBXBuildFile; fileRef = 1E5B7B062800DD6600F8BDDB /* multiple_keywords.wav */; }; - 36696536961DE78B3E1C06FA /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; + 36696536961DE78B3E1C06FA /* (null) in Frameworks */ = {isa = PBXBuildFile; }; C757D8CD28A1C77100F391C8 /* BaseTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C757D8CB28A1C77100F391C8 /* BaseTest.swift */; }; C757D8CE28A1C77100F391C8 /* OctopusLanguageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C757D8CC28A1C77100F391C8 /* OctopusLanguageTests.swift */; }; - C757D8D628A1C85200F391C8 /* multiple_keywords_ko.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8CF28A1C85100F391C8 /* multiple_keywords_ko.wav */; }; - C757D8D728A1C85200F391C8 /* multiple_keywords_fr.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8D028A1C85100F391C8 /* multiple_keywords_fr.wav */; }; - C757D8D828A1C85200F391C8 /* multiple_keywords_it.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8D128A1C85100F391C8 /* multiple_keywords_it.wav */; }; - C757D8D928A1C85200F391C8 /* multiple_keywords_pt.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8D228A1C85100F391C8 /* multiple_keywords_pt.wav */; }; - C757D8DA28A1C85200F391C8 /* multiple_keywords_ja.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8D328A1C85200F391C8 /* multiple_keywords_ja.wav */; }; - C757D8DB28A1C85200F391C8 /* multiple_keywords_es.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8D428A1C85200F391C8 /* multiple_keywords_es.wav */; }; - C757D8DC28A1C85200F391C8 /* multiple_keywords_de.wav in Resources */ = {isa = PBXBuildFile; fileRef = C757D8D528A1C85200F391C8 /* multiple_keywords_de.wav */; }; - C757D8E428A1D08B00F391C8 /* octopus_params_ko.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8DD28A1D08B00F391C8 /* octopus_params_ko.pv */; }; - C757D8E528A1D08B00F391C8 /* octopus_params_ja.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8DE28A1D08B00F391C8 /* octopus_params_ja.pv */; }; - C757D8E628A1D08B00F391C8 /* octopus_params_es.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8DF28A1D08B00F391C8 /* octopus_params_es.pv */; }; - C757D8E728A1D08B00F391C8 /* octopus_params_pt.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8E028A1D08B00F391C8 /* octopus_params_pt.pv */; }; - C757D8E828A1D08B00F391C8 /* octopus_params_it.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8E128A1D08B00F391C8 /* octopus_params_it.pv */; }; - C757D8E928A1D08B00F391C8 /* octopus_params_de.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8E228A1D08B00F391C8 /* octopus_params_de.pv */; }; - C757D8EA28A1D08B00F391C8 /* octopus_params_fr.pv in Resources */ = {isa = PBXBuildFile; fileRef = C757D8E328A1D08B00F391C8 /* octopus_params_fr.pv */; }; - F80AD4648813F37825025113 /* libPods-PerformanceTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 44786E307CC71BBF2D5286B6 /* libPods-PerformanceTest.a */; }; + E10B23702CFE741F009CDD3D /* test_resources in Resources */ = {isa = PBXBuildFile; fileRef = E10B236F2CFE741F009CDD3D /* test_resources */; }; + E10DF5122CFE60E5008D4AA0 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E10DF5112CFE60E5008D4AA0 /* Octopus */; }; + E10DF5142CFE60E9008D4AA0 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E10DF5132CFE60E9008D4AA0 /* Octopus */; }; + E10DF5162CFE60EC008D4AA0 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E10DF5152CFE60EC008D4AA0 /* Octopus */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -71,13 +57,6 @@ 1E5B7B032800D9BE00F8BDDB /* PerformanceTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceTest.swift; sourceTree = ""; }; 1E5B7B052800D9D700F8BDDB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1E5B7B062800DD6600F8BDDB /* multiple_keywords.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = multiple_keywords.wav; path = ../../../../res/audio/multiple_keywords.wav; sourceTree = ""; }; - 3159E42AF97125B3BF92F4E2 /* Pods-OctopusAppTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OctopusAppTest.debug.xcconfig"; path = "Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest.debug.xcconfig"; sourceTree = ""; }; - 44786E307CC71BBF2D5286B6 /* libPods-PerformanceTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PerformanceTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 498BE0F0C0B5145436720B55 /* libPods-OctopusAppTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OctopusAppTest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B652FC67B3D9F1FAF609384 /* libPods-OctopusAppTestUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OctopusAppTestUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4D2D4D3777C0F0BA199911F2 /* Pods-OctopusAppTestUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OctopusAppTestUITests.debug.xcconfig"; path = "Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests.debug.xcconfig"; sourceTree = ""; }; - 7FCC31E53F4723E8437124BC /* Pods-OctopusAppTestUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OctopusAppTestUITests.release.xcconfig"; path = "Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests.release.xcconfig"; sourceTree = ""; }; - BEE19B0361C1913B6BC6BAAB /* 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 = ""; }; C757D8CB28A1C77100F391C8 /* BaseTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTest.swift; sourceTree = ""; }; C757D8CC28A1C77100F391C8 /* OctopusLanguageTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OctopusLanguageTests.swift; sourceTree = ""; }; C757D8CF28A1C85100F391C8 /* multiple_keywords_ko.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = multiple_keywords_ko.wav; path = ../../../../res/audio/multiple_keywords_ko.wav; sourceTree = ""; }; @@ -94,8 +73,25 @@ C757D8E128A1D08B00F391C8 /* octopus_params_it.pv */ = {isa = PBXFileReference; lastKnownFileType = file; name = octopus_params_it.pv; path = ../../../../lib/common/param/octopus_params_it.pv; sourceTree = ""; }; C757D8E228A1D08B00F391C8 /* octopus_params_de.pv */ = {isa = PBXFileReference; lastKnownFileType = file; name = octopus_params_de.pv; path = ../../../../lib/common/param/octopus_params_de.pv; sourceTree = ""; }; C757D8E328A1D08B00F391C8 /* octopus_params_fr.pv */ = {isa = PBXFileReference; lastKnownFileType = file; name = octopus_params_fr.pv; path = ../../../../lib/common/param/octopus_params_fr.pv; sourceTree = ""; }; - D0F4BDAB8DCEFACB0DD878B2 /* Pods-OctopusAppTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OctopusAppTest.release.xcconfig"; path = "Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest.release.xcconfig"; sourceTree = ""; }; - F596BBCDD422A8A148A60A99 /* 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 = ""; }; + E10B23592CFE7307009CDD3D /* octopus_params.pv */ = {isa = PBXFileReference; lastKnownFileType = file; name = octopus_params.pv; path = ../../../lib/common/param/octopus_params.pv; sourceTree = ""; }; + E10B235B2CFE73F8009CDD3D /* multiple_keywords.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords.wav; sourceTree = ""; }; + E10B235C2CFE73F8009CDD3D /* multiple_keywords_de.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_de.wav; sourceTree = ""; }; + E10B235D2CFE73F8009CDD3D /* multiple_keywords_es.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_es.wav; sourceTree = ""; }; + E10B235E2CFE73F8009CDD3D /* multiple_keywords_fr.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_fr.wav; sourceTree = ""; }; + E10B235F2CFE73F8009CDD3D /* multiple_keywords_it.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_it.wav; sourceTree = ""; }; + E10B23602CFE73F8009CDD3D /* multiple_keywords_ja.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_ja.wav; sourceTree = ""; }; + E10B23612CFE73F8009CDD3D /* multiple_keywords_ko.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_ko.wav; sourceTree = ""; }; + E10B23622CFE73F8009CDD3D /* multiple_keywords_pt.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = multiple_keywords_pt.wav; sourceTree = ""; }; + E10B23642CFE73F8009CDD3D /* octopus_params.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params.pv; sourceTree = ""; }; + E10B23652CFE73F8009CDD3D /* octopus_params_de.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_de.pv; sourceTree = ""; }; + E10B23662CFE73F8009CDD3D /* octopus_params_es.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_es.pv; sourceTree = ""; }; + E10B23672CFE73F8009CDD3D /* octopus_params_fr.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_fr.pv; sourceTree = ""; }; + E10B23682CFE73F8009CDD3D /* octopus_params_it.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_it.pv; sourceTree = ""; }; + E10B23692CFE73F8009CDD3D /* octopus_params_ja.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_ja.pv; sourceTree = ""; }; + E10B236A2CFE73F8009CDD3D /* octopus_params_ko.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_ko.pv; sourceTree = ""; }; + E10B236B2CFE73F8009CDD3D /* octopus_params_pt.pv */ = {isa = PBXFileReference; lastKnownFileType = file; path = octopus_params_pt.pv; sourceTree = ""; }; + E10B236D2CFE73F8009CDD3D /* .gitkeep */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitkeep; sourceTree = ""; }; + E10B236F2CFE741F009CDD3D /* test_resources */ = {isa = PBXFileReference; lastKnownFileType = folder; name = test_resources; path = OctopusAppTestUITests/test_resources; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -103,7 +99,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0A4DF03AB93039DC6A992730 /* libPods-OctopusAppTest.a in Frameworks */, + E10DF5122CFE60E5008D4AA0 /* Octopus in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -111,8 +107,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 36696536961DE78B3E1C06FA /* BuildFile in Frameworks */, - 16197350434656617777BDDE /* libPods-OctopusAppTestUITests.a in Frameworks */, + E10DF5142CFE60E9008D4AA0 /* Octopus in Frameworks */, + 36696536961DE78B3E1C06FA /* (null) in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -120,7 +116,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F80AD4648813F37825025113 /* libPods-PerformanceTest.a in Frameworks */, + E10DF5162CFE60EC008D4AA0 /* Octopus in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -130,12 +126,14 @@ 1E0064BB27CEEA65006FF6E9 = { isa = PBXGroup; children = ( + E10B236E2CFE73F8009CDD3D /* test_resources */, + E10B236F2CFE741F009CDD3D /* test_resources */, + E10B23592CFE7307009CDD3D /* octopus_params.pv */, 1E5B7B022800D9A500F8BDDB /* PerformanceTest */, 1E0064C627CEEA65006FF6E9 /* OctopusAppTest */, 1E0064E727CEEA66006FF6E9 /* OctopusAppTestUITests */, + E10DF5102CFE60E5008D4AA0 /* Frameworks */, 1E0064C527CEEA65006FF6E9 /* Products */, - C61A87423E5B220A51E25364 /* Frameworks */, - 3B3C264F62BB7B471FB94F36 /* Pods */, ); sourceTree = ""; }; @@ -198,26 +196,50 @@ path = PerformanceTest; sourceTree = ""; }; - 3B3C264F62BB7B471FB94F36 /* Pods */ = { + E10B23632CFE73F8009CDD3D /* audio */ = { isa = PBXGroup; children = ( - 3159E42AF97125B3BF92F4E2 /* Pods-OctopusAppTest.debug.xcconfig */, - D0F4BDAB8DCEFACB0DD878B2 /* Pods-OctopusAppTest.release.xcconfig */, - 4D2D4D3777C0F0BA199911F2 /* Pods-OctopusAppTestUITests.debug.xcconfig */, - 7FCC31E53F4723E8437124BC /* Pods-OctopusAppTestUITests.release.xcconfig */, - F596BBCDD422A8A148A60A99 /* Pods-PerformanceTest.debug.xcconfig */, - BEE19B0361C1913B6BC6BAAB /* Pods-PerformanceTest.release.xcconfig */, - ); - name = Pods; - path = Pods; + E10B235B2CFE73F8009CDD3D /* multiple_keywords.wav */, + E10B235C2CFE73F8009CDD3D /* multiple_keywords_de.wav */, + E10B235D2CFE73F8009CDD3D /* multiple_keywords_es.wav */, + E10B235E2CFE73F8009CDD3D /* multiple_keywords_fr.wav */, + E10B235F2CFE73F8009CDD3D /* multiple_keywords_it.wav */, + E10B23602CFE73F8009CDD3D /* multiple_keywords_ja.wav */, + E10B23612CFE73F8009CDD3D /* multiple_keywords_ko.wav */, + E10B23622CFE73F8009CDD3D /* multiple_keywords_pt.wav */, + ); + path = audio; sourceTree = ""; }; - C61A87423E5B220A51E25364 /* Frameworks */ = { + E10B236C2CFE73F8009CDD3D /* model_files */ = { + isa = PBXGroup; + children = ( + E10B23642CFE73F8009CDD3D /* octopus_params.pv */, + E10B23652CFE73F8009CDD3D /* octopus_params_de.pv */, + E10B23662CFE73F8009CDD3D /* octopus_params_es.pv */, + E10B23672CFE73F8009CDD3D /* octopus_params_fr.pv */, + E10B23682CFE73F8009CDD3D /* octopus_params_it.pv */, + E10B23692CFE73F8009CDD3D /* octopus_params_ja.pv */, + E10B236A2CFE73F8009CDD3D /* octopus_params_ko.pv */, + E10B236B2CFE73F8009CDD3D /* octopus_params_pt.pv */, + ); + path = model_files; + sourceTree = ""; + }; + E10B236E2CFE73F8009CDD3D /* test_resources */ = { + isa = PBXGroup; + children = ( + E10B23632CFE73F8009CDD3D /* audio */, + E10B236C2CFE73F8009CDD3D /* model_files */, + E10B236D2CFE73F8009CDD3D /* .gitkeep */, + ); + name = test_resources; + path = OctopusAppTestUITests/test_resources; + sourceTree = ""; + }; + E10DF5102CFE60E5008D4AA0 /* Frameworks */ = { isa = PBXGroup; children = ( - 498BE0F0C0B5145436720B55 /* libPods-OctopusAppTest.a */, - 44786E307CC71BBF2D5286B6 /* libPods-PerformanceTest.a */, - 4B652FC67B3D9F1FAF609384 /* libPods-OctopusAppTestUITests.a */, ); name = Frameworks; sourceTree = ""; @@ -229,12 +251,9 @@ isa = PBXNativeTarget; buildConfigurationList = 1E0064EE27CEEA66006FF6E9 /* Build configuration list for PBXNativeTarget "OctopusAppTest" */; buildPhases = ( - 6D3A5791552EFDF0A035C668 /* [CP] Check Pods Manifest.lock */, 1E0064C027CEEA65006FF6E9 /* Sources */, 1E0064C127CEEA65006FF6E9 /* Frameworks */, 1E0064C227CEEA65006FF6E9 /* Resources */, - 099DC105C4C090417630866D /* [CP] Embed Pods Frameworks */, - C0A683631E64F2C172582FED /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -249,12 +268,9 @@ isa = PBXNativeTarget; buildConfigurationList = 1E00650827CFEC95006FF6E9 /* Build configuration list for PBXNativeTarget "OctopusAppTestUITests" */; buildPhases = ( - 051297945D889D2994D839D4 /* [CP] Check Pods Manifest.lock */, 1E0064FA27CFEC95006FF6E9 /* Sources */, 1E0064FB27CFEC95006FF6E9 /* Frameworks */, 1E0064FC27CFEC95006FF6E9 /* Resources */, - F55BCF9ECEB148EE2668A8B5 /* [CP] Embed Pods Frameworks */, - EE663D5CAC5BE0282F78B220 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -270,12 +286,9 @@ isa = PBXNativeTarget; buildConfigurationList = 1E5B7AFE2800D98500F8BDDB /* Build configuration list for PBXNativeTarget "PerformanceTest" */; buildPhases = ( - 1E5B7AF52800D98500F8BDDB /* [CP] Check Pods Manifest.lock */, 1E5B7AF62800D98500F8BDDB /* Sources */, 1E5B7AF82800D98500F8BDDB /* Frameworks */, 1E5B7AFA2800D98500F8BDDB /* Resources */, - 1E5B7AFC2800D98500F8BDDB /* [CP] Embed Pods Frameworks */, - 1E5B7AFD2800D98500F8BDDB /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -319,6 +332,9 @@ Base, ); mainGroup = 1E0064BB27CEEA65006FF6E9; + packageReferences = ( + E1F353012D0105170069B0E6 /* XCRemoteSwiftPackageReference "octopus" */, + ); productRefGroup = 1E0064C527CEEA65006FF6E9 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -345,21 +361,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C757D8D728A1C85200F391C8 /* multiple_keywords_fr.wav in Resources */, - C757D8D928A1C85200F391C8 /* multiple_keywords_pt.wav in Resources */, - C757D8E528A1D08B00F391C8 /* octopus_params_ja.pv in Resources */, - C757D8E728A1D08B00F391C8 /* octopus_params_pt.pv in Resources */, - C757D8EA28A1D08B00F391C8 /* octopus_params_fr.pv in Resources */, - C757D8D628A1C85200F391C8 /* multiple_keywords_ko.wav in Resources */, - C757D8DB28A1C85200F391C8 /* multiple_keywords_es.wav in Resources */, - C757D8DA28A1C85200F391C8 /* multiple_keywords_ja.wav in Resources */, - C757D8E628A1D08B00F391C8 /* octopus_params_es.pv in Resources */, - 1E00654527CFF101006FF6E9 /* multiple_keywords.wav in Resources */, - C757D8D828A1C85200F391C8 /* multiple_keywords_it.wav in Resources */, - C757D8E428A1D08B00F391C8 /* octopus_params_ko.pv in Resources */, - C757D8DC28A1C85200F391C8 /* multiple_keywords_de.wav in Resources */, - C757D8E928A1D08B00F391C8 /* octopus_params_de.pv in Resources */, - C757D8E828A1D08B00F391C8 /* octopus_params_it.pv in Resources */, + E10B23702CFE741F009CDD3D /* test_resources in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -373,177 +375,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 051297945D889D2994D839D4 /* [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-OctopusAppTestUITests-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; - }; - 099DC105C4C090417630866D /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 1E5B7AF52800D98500F8BDDB /* [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-PerformanceTest-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; - }; - 1E5B7AFC2800D98500F8BDDB /* [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 = "\"${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 1E5B7AFD2800D98500F8BDDB /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PerformanceTest/Pods-PerformanceTest-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 6D3A5791552EFDF0A035C668 /* [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-OctopusAppTest-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; - }; - C0A683631E64F2C172582FED /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OctopusAppTest/Pods-OctopusAppTest-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - EE663D5CAC5BE0282F78B220 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F55BCF9ECEB148EE2668A8B5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OctopusAppTestUITests/Pods-OctopusAppTestUITests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 1E0064C027CEEA65006FF6E9 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -723,7 +554,6 @@ }; 1E0064EF27CEEA66006FF6E9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3159E42AF97125B3BF92F4E2 /* Pods-OctopusAppTest.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -753,7 +583,6 @@ }; 1E0064F027CEEA66006FF6E9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D0F4BDAB8DCEFACB0DD878B2 /* Pods-OctopusAppTest.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -783,7 +612,6 @@ }; 1E00650627CFEC95006FF6E9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4D2D4D3777C0F0BA199911F2 /* Pods-OctopusAppTestUITests.debug.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -808,7 +636,6 @@ }; 1E00650727CFEC95006FF6E9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7FCC31E53F4723E8437124BC /* Pods-OctopusAppTestUITests.release.xcconfig */; buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -832,7 +659,6 @@ }; 1E5B7AFF2800D98500F8BDDB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F596BBCDD422A8A148A60A99 /* Pods-PerformanceTest.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; @@ -859,7 +685,6 @@ }; 1E5B7B002800D98500F8BDDB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BEE19B0361C1913B6BC6BAAB /* Pods-PerformanceTest.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; @@ -922,6 +747,42 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + E10DF50F2CFE60DE008D4AA0 /* XCLocalSwiftPackageReference "../../../../octopus" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../../../../octopus; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCRemoteSwiftPackageReference section */ + E1F353012D0105170069B0E6 /* XCRemoteSwiftPackageReference "octopus" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Picovoice/octopus/"; + requirement = { + kind = exactVersion; + version = 2.0.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + E10DF5112CFE60E5008D4AA0 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + package = E10DF50F2CFE60DE008D4AA0 /* XCLocalSwiftPackageReference "../../../../octopus" */; + productName = Octopus; + }; + E10DF5132CFE60E9008D4AA0 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + package = E10DF50F2CFE60DE008D4AA0 /* XCLocalSwiftPackageReference "../../../../octopus" */; + productName = Octopus; + }; + E10DF5152CFE60EC008D4AA0 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + package = E10DF50F2CFE60DE008D4AA0 /* XCLocalSwiftPackageReference "../../../../octopus" */; + productName = Octopus; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 1E0064BC27CEEA65006FF6E9 /* Project object */; } diff --git a/binding/ios/OctopusAppTest/OctopusAppTest.xcworkspace/contents.xcworkspacedata b/binding/ios/OctopusAppTest/OctopusAppTest.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 3d39c5e..0000000 --- a/binding/ios/OctopusAppTest/OctopusAppTest.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/binding/ios/OctopusAppTest/OctopusAppTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/binding/ios/OctopusAppTest/OctopusAppTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/binding/ios/OctopusAppTest/OctopusAppTest.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusAppTestUITests.swift b/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusAppTestUITests.swift index b0d08e2..e0eaa24 100644 --- a/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusAppTestUITests.swift +++ b/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusAppTestUITests.swift @@ -20,7 +20,10 @@ class OctopusAppTestUITests: BaseTest { func testIndexAndSearchFile() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) @@ -39,7 +42,10 @@ class OctopusAppTestUITests: BaseTest { func testIndexAndSearchData() throws { let bundle = Bundle(for: type(of: self)) - let fileURL: URL = bundle.url(forResource: "multiple_keywords", withExtension: "wav")! + let fileURL: URL = bundle.url( + forResource: "multiple_keywords", + withExtension: "wav", + subdirectory: "test_resources/audio")! let audioData = try Data(contentsOf: fileURL) var pcm = [Int16](repeating: 0, count: (audioData.count - 44) / 2) _ = pcm.withUnsafeMutableBytes { @@ -63,7 +69,10 @@ class OctopusAppTestUITests: BaseTest { func testMetadataMarshalling() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) var metadata: OctopusMetadata? = try octopus.indexAudioFile(path: audioFilePath) @@ -90,7 +99,10 @@ class OctopusAppTestUITests: BaseTest { func testEmptySearchPhrase() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) @@ -111,7 +123,10 @@ class OctopusAppTestUITests: BaseTest { func testWhitespaceSearchPhrase() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) @@ -132,7 +147,10 @@ class OctopusAppTestUITests: BaseTest { func testNumericSearchPhrase() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) @@ -153,7 +171,10 @@ class OctopusAppTestUITests: BaseTest { func testHyphenInSearchPhrase() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) @@ -174,7 +195,10 @@ class OctopusAppTestUITests: BaseTest { func testInvalidSearchPhrase() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) @@ -195,7 +219,10 @@ class OctopusAppTestUITests: BaseTest { func testSpacesInSearchPhrase() throws { let bundle = Bundle(for: type(of: self)) - let audioFilePath = bundle.path(forResource: "multiple_keywords", ofType: "wav")! + let audioFilePath = bundle.path( + forResource: "multiple_keywords", + ofType: "wav", + inDirectory: "test_resources/audio")! let octopus = try Octopus(accessKey: accessKey) let metadata = try octopus.indexAudioFile(path: audioFilePath) diff --git a/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusLanguageTests.swift b/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusLanguageTests.swift index a50fadc..55251a3 100644 --- a/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusLanguageTests.swift +++ b/binding/ios/OctopusAppTest/OctopusAppTestUITests/OctopusLanguageTests.swift @@ -33,8 +33,16 @@ class OctopusLanguageTests: BaseTest { for testCase in OctopusLanguageTests.testData { let suffix = (testCase[0]) as! String == "en" ? "" : "_\(testCase[0])" - let modelPath = bundle.path(forResource: "octopus_params\(suffix)", ofType: "pv")! - let testAudioPath = bundle.path(forResource: "multiple_keywords\(suffix)", ofType: "wav")! + + let testAudioPath = bundle.path( + forResource: "multiple_keywords\(suffix)", + ofType: "wav", + inDirectory: "test_resources/audio")! + let modelPath = bundle.path( + forResource: "octopus_params\(suffix)", + ofType: "pv", + inDirectory: "test_resources/model_files")! + let expectedResults = testCase[1] as! [String: [[Double]]] try XCTContext.runActivity(named: "(\(testCase[0]))") { _ in diff --git a/binding/ios/OctopusAppTest/OctopusAppTestUITests/test_resources/.gitkeep b/binding/ios/OctopusAppTest/OctopusAppTestUITests/test_resources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/binding/ios/OctopusAppTest/Podfile b/binding/ios/OctopusAppTest/Podfile deleted file mode 100644 index 842f884..0000000 --- a/binding/ios/OctopusAppTest/Podfile +++ /dev/null @@ -1,14 +0,0 @@ -source 'https://cdn.cocoapods.org/' -platform :ios, '13.0' - -target 'OctopusAppTest' do - pod 'Octopus-iOS', '~> 2.0.0' -end - -target 'OctopusAppTestUITests' do - pod 'Octopus-iOS', '~> 2.0.0' -end - -target 'PerformanceTest' do - pod 'Octopus-iOS', '~> 2.0.0' -end diff --git a/binding/ios/OctopusAppTest/Podfile.lock b/binding/ios/OctopusAppTest/Podfile.lock deleted file mode 100644 index 1cf72b6..0000000 --- a/binding/ios/OctopusAppTest/Podfile.lock +++ /dev/null @@ -1,16 +0,0 @@ -PODS: - - Octopus-iOS (2.0.0) - -DEPENDENCIES: - - Octopus-iOS (~> 2.0.0) - -SPEC REPOS: - trunk: - - Octopus-iOS - -SPEC CHECKSUMS: - Octopus-iOS: b080b854eabe191e1bc90ff95248249123d98548 - -PODFILE CHECKSUM: 69ef501829b3c0bd33a90dca86df4aca3748b08b - -COCOAPODS: 1.16.2 diff --git a/binding/ios/OctopusAppTest/copy_test_resources.sh b/binding/ios/OctopusAppTest/copy_test_resources.sh new file mode 100755 index 0000000..db09a15 --- /dev/null +++ b/binding/ios/OctopusAppTest/copy_test_resources.sh @@ -0,0 +1,14 @@ +LIB_DIR="../../../lib" +RESOURCE_DIR="../../../res" +ASSETS_DIR="./OctopusAppTestUITests/test_resources" + +echo "Creating test resources asset directory" +mkdir -p ${ASSETS_DIR} + +echo "Copying test audio samples..." +mkdir -p ${ASSETS_DIR}/audio +cp ${RESOURCE_DIR}/audio/*.wav ${ASSETS_DIR}/audio + +echo "Copying test model files..." +mkdir -p ${ASSETS_DIR}/model_files +cp ${LIB_DIR}/common/param/*.pv ${ASSETS_DIR}/model_files \ No newline at end of file diff --git a/binding/ios/OctopusErrors.swift b/binding/ios/OctopusErrors.swift index 1c67ad5..dd3fecc 100644 --- a/binding/ios/OctopusErrors.swift +++ b/binding/ios/OctopusErrors.swift @@ -1,5 +1,5 @@ // -// Copyright 2022-2023 Picovoice Inc. +// Copyright 2022-2024 Picovoice Inc. // You may not use this file except in compliance with the license. A copy of the license is located in the "LICENSE" // file accompanying this source. // Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on @@ -7,6 +7,8 @@ // specific language governing permissions and limitations under the License. // +import Foundation + public class OctopusError: LocalizedError { private let message: String private let messageStack: [String] diff --git a/binding/ios/README.md b/binding/ios/README.md index 314b67c..c881b1c 100644 --- a/binding/ios/README.md +++ b/binding/ios/README.md @@ -14,8 +14,15 @@ hypothesis (e.g. homophones) ## Installation -The Octopus iOS binding is available via [Cocoapods](https://cocoapods.org/pods/Octopus-iOS). To import it into your iOS project, add the following line to your Podfile: +The Octopus iOS binding is available via [Swift Package Manager](https://www.swift.org/documentation/package-manager/) or [CocoaPods](https://cocoapods.org/pods/Octopus-iOS). + +To import the package using SPM, open up your project's Package Dependencies in XCode and add: +``` +https://github.com/Picovoice/octopus.git +``` +To import it into your iOS project using CocoaPods, add the following line to your Podfile: + ```ruby pod 'Octopus-iOS' ``` @@ -108,4 +115,4 @@ handle.delete(); ## Running Unit Tests -Copy your `AccessKey` into the `accessKey` variable in [`OctopusAppTestUITests.swift`](OctopusAppTest/OctopusAppTestUITests/OctopusAppTestUITests.swift). Open `OctopusAppTest.xcworkspace` with XCode and run the tests with `Product > Test`. +Copy your `AccessKey` into the `accessKey` variable in [`OctopusAppTestUITests.swift`](OctopusAppTest/OctopusAppTestUITests/OctopusAppTestUITests.swift). Open [`OctopusAppTest.xcodeproj`](OctopusAppTest/OctopusAppTest.xcodeproj) with XCode and run the tests with `Product > Test`. diff --git a/demo/ios/OctopusDemo/OctopusDemo.xcodeproj/project.pbxproj b/demo/ios/OctopusDemo/OctopusDemo.xcodeproj/project.pbxproj index feef3f1..832fc82 100644 --- a/demo/ios/OctopusDemo/OctopusDemo.xcodeproj/project.pbxproj +++ b/demo/ios/OctopusDemo/OctopusDemo.xcodeproj/project.pbxproj @@ -3,15 +3,18 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 02447A8D26D94F75004A6CE9 /* OctopusDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02447A8C26D94F75004A6CE9 /* OctopusDemoApp.swift */; }; 02447A8F26D94F75004A6CE9 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02447A8E26D94F75004A6CE9 /* ContentView.swift */; }; 02447A9126D94F7C004A6CE9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 02447A9026D94F7C004A6CE9 /* Assets.xcassets */; }; - AC225D30A2525B57122E3EA8 /* libPods-OctopusDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 296AE0E11E4CD7EF81795CE2 /* libPods-OctopusDemo.a */; }; C76A41602703B17000DB57D6 /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76A415F2703B17000DB57D6 /* ViewModel.swift */; }; + E10DF5192CFE6104008D4AA0 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E10DF5182CFE6104008D4AA0 /* Octopus */; }; + E15A378B2CF7E15700A96F85 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E15A378A2CF7E15700A96F85 /* Octopus */; }; + E15A378E2CF7E1C000A96F85 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E15A378D2CF7E1C000A96F85 /* Octopus */; }; + E1F353042D0105300069B0E6 /* Octopus in Frameworks */ = {isa = PBXBuildFile; productRef = E1F353032D0105300069B0E6 /* Octopus */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -20,9 +23,6 @@ 02447A8E26D94F75004A6CE9 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 02447A9026D94F7C004A6CE9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 02447A9526D94F7C004A6CE9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 04E786B497520913E4659643 /* Pods-OctopusDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OctopusDemo.debug.xcconfig"; path = "Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo.debug.xcconfig"; sourceTree = ""; }; - 296AE0E11E4CD7EF81795CE2 /* libPods-OctopusDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OctopusDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 52D655E8EB36634981EB5888 /* Pods-OctopusDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OctopusDemo.release.xcconfig"; path = "Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo.release.xcconfig"; sourceTree = ""; }; C76A415F2703B17000DB57D6 /* ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModel.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -31,7 +31,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AC225D30A2525B57122E3EA8 /* libPods-OctopusDemo.a in Frameworks */, + E1F353042D0105300069B0E6 /* Octopus in Frameworks */, + E10DF5192CFE6104008D4AA0 /* Octopus in Frameworks */, + E15A378E2CF7E1C000A96F85 /* Octopus in Frameworks */, + E15A378B2CF7E15700A96F85 /* Octopus in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -43,8 +46,6 @@ children = ( 02447A8B26D94F75004A6CE9 /* OctopusDemo */, 02447A8A26D94F75004A6CE9 /* Products */, - 7983C9752CBB2C0CDEFFB371 /* Pods */, - 16ACDC30B9AECAEF966FEDBC /* Frameworks */, ); sourceTree = ""; }; @@ -68,23 +69,6 @@ path = OctopusDemo; sourceTree = ""; }; - 16ACDC30B9AECAEF966FEDBC /* Frameworks */ = { - isa = PBXGroup; - children = ( - 296AE0E11E4CD7EF81795CE2 /* libPods-OctopusDemo.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 7983C9752CBB2C0CDEFFB371 /* Pods */ = { - isa = PBXGroup; - children = ( - 04E786B497520913E4659643 /* Pods-OctopusDemo.debug.xcconfig */, - 52D655E8EB36634981EB5888 /* Pods-OctopusDemo.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -92,12 +76,9 @@ isa = PBXNativeTarget; buildConfigurationList = 02447AAE26D94F7D004A6CE9 /* Build configuration list for PBXNativeTarget "OctopusDemo" */; buildPhases = ( - 0573C65CEB54A4BB02C3C891 /* [CP] Check Pods Manifest.lock */, 02447A8526D94F75004A6CE9 /* Sources */, 02447A8626D94F75004A6CE9 /* Frameworks */, 02447A8726D94F75004A6CE9 /* Resources */, - F7C08396E7037F25F0AB6119 /* [CP] Embed Pods Frameworks */, - 9930A78981D8A8E0A964A124 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -131,6 +112,9 @@ Base, ); mainGroup = 02447A8026D94F74004A6CE9; + packageReferences = ( + E1F353022D0105300069B0E6 /* XCRemoteSwiftPackageReference "octopus" */, + ); productRefGroup = 02447A8A26D94F75004A6CE9 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -151,65 +135,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 0573C65CEB54A4BB02C3C891 /* [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-OctopusDemo-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; - }; - 9930A78981D8A8E0A964A124 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F7C08396E7037F25F0AB6119 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OctopusDemo/Pods-OctopusDemo-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 02447A8526D94F75004A6CE9 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -342,7 +267,6 @@ }; 02447AAF26D94F7D004A6CE9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 04E786B497520913E4659643 /* Pods-OctopusDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -365,7 +289,6 @@ }; 02447AB026D94F7D004A6CE9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52D655E8EB36634981EB5888 /* Pods-OctopusDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -408,6 +331,37 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + E1F353022D0105300069B0E6 /* XCRemoteSwiftPackageReference "octopus" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Picovoice/octopus/"; + requirement = { + kind = exactVersion; + version = 2.0.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + E10DF5182CFE6104008D4AA0 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + productName = Octopus; + }; + E15A378A2CF7E15700A96F85 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + productName = Octopus; + }; + E15A378D2CF7E1C000A96F85 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + productName = Octopus; + }; + E1F353032D0105300069B0E6 /* Octopus */ = { + isa = XCSwiftPackageProductDependency; + package = E1F353022D0105300069B0E6 /* XCRemoteSwiftPackageReference "octopus" */; + productName = Octopus; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 02447A8126D94F74004A6CE9 /* Project object */; } diff --git a/demo/ios/OctopusDemo/OctopusDemo.xcworkspace/contents.xcworkspacedata b/demo/ios/OctopusDemo/OctopusDemo.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 87355fa..0000000 --- a/demo/ios/OctopusDemo/OctopusDemo.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/demo/ios/OctopusDemo/OctopusDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demo/ios/OctopusDemo/OctopusDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/demo/ios/OctopusDemo/OctopusDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/demo/ios/OctopusDemo/OctopusDemo/ViewModel.swift b/demo/ios/OctopusDemo/OctopusDemo/ViewModel.swift index 1b6d3e4..5cb5065 100644 --- a/demo/ios/OctopusDemo/OctopusDemo/ViewModel.swift +++ b/demo/ios/OctopusDemo/OctopusDemo/ViewModel.swift @@ -10,6 +10,7 @@ import AVFoundation import Foundation import Octopus +import UIKit enum UIState { case INTRO diff --git a/demo/ios/OctopusDemo/Podfile b/demo/ios/OctopusDemo/Podfile deleted file mode 100644 index 4e2041b..0000000 --- a/demo/ios/OctopusDemo/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://cdn.cocoapods.org/' -platform :ios, '13.0' - -target 'OctopusDemo' do - pod 'Octopus-iOS', '~> 2.0.0' -end diff --git a/demo/ios/OctopusDemo/Podfile.lock b/demo/ios/OctopusDemo/Podfile.lock deleted file mode 100644 index 45062cf..0000000 --- a/demo/ios/OctopusDemo/Podfile.lock +++ /dev/null @@ -1,16 +0,0 @@ -PODS: - - Octopus-iOS (2.0.0) - -DEPENDENCIES: - - Octopus-iOS (~> 2.0.0) - -SPEC REPOS: - trunk: - - Octopus-iOS - -SPEC CHECKSUMS: - Octopus-iOS: b080b854eabe191e1bc90ff95248249123d98548 - -PODFILE CHECKSUM: 550f7da05d7c9f47c9fc4eefcda36ca8ea96651f - -COCOAPODS: 1.11.3 diff --git a/demo/ios/README.md b/demo/ios/README.md index e845ef9..522af01 100644 --- a/demo/ios/README.md +++ b/demo/ios/README.md @@ -8,14 +8,10 @@ Signup or Login to [Picovoice Console](https://console.picovoice.ai/) to get you ## Setup -1. Before building the demo app, run the following from this directory to install the Octopus CocoaPod: -```console -pod install -``` -2. Replace `"YOUR_ACCESS_KEY_HERE"` inside [`ViewModel.swift`](OctopusDemo/OctopusDemo/ViewModel.swift) with -your AccessKey obtained from [Picovoice Console](https://console.picovoice.ai/). +Replace `{YOUR_ACCESS_KEY_HERE}` inside [`ViewModel.swift`](OctopusDemo/OctopusDemo/ViewModel.swift) with your AccessKey obtained from [Picovoice Console](https://console.picovoice.ai/). ## Usage + Open the OctopusDemo Xcode project and build. Launch the demo on a simulator or a physical iOS device. 1. Press the record button. diff --git a/lib/ios/PvOctopus.xcframework/ios-arm64/PvOctopus.framework/PvOctopus b/lib/ios/PvOctopus.xcframework/ios-arm64/PvOctopus.framework/PvOctopus index e0c2f1f..56fe525 100755 Binary files a/lib/ios/PvOctopus.xcframework/ios-arm64/PvOctopus.framework/PvOctopus and b/lib/ios/PvOctopus.xcframework/ios-arm64/PvOctopus.framework/PvOctopus differ diff --git a/lib/ios/PvOctopus.xcframework/ios-arm64_x86_64-simulator/PvOctopus.framework/PvOctopus b/lib/ios/PvOctopus.xcframework/ios-arm64_x86_64-simulator/PvOctopus.framework/PvOctopus index 51d202f..c20c4b0 100755 Binary files a/lib/ios/PvOctopus.xcframework/ios-arm64_x86_64-simulator/PvOctopus.framework/PvOctopus and b/lib/ios/PvOctopus.xcframework/ios-arm64_x86_64-simulator/PvOctopus.framework/PvOctopus differ diff --git a/res/.lint/spell-check/dict.txt b/res/.lint/spell-check/dict.txt index f88e5a9..be29dc4 100644 --- a/res/.lint/spell-check/dict.txt +++ b/res/.lint/spell-check/dict.txt @@ -43,6 +43,8 @@ reindex testapp wargv whitespaces +xcframework +xcodeproj xcuitest xcworkspace ytdlp \ No newline at end of file