Support the platform iOS for Flutter (#1079)
This commit is contained in:
@@ -123,3 +123,225 @@ index 536165d3..9b1a1012 100644
|
||||
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
|
||||
}
|
||||
```
|
||||
|
||||
# ios
|
||||
|
||||
To support ios, run
|
||||
|
||||
```bash
|
||||
cd streaming_asr
|
||||
flutter create --platforms ios ./
|
||||
```
|
||||
|
||||
Connect your iPhone to the computer, and run `flutter devices`, which will print:
|
||||
|
||||
```bash
|
||||
Found 3 connected devices:
|
||||
iPhone (mobile) • 00008030-001064212E85802E • ios • iOS 16.3 20D47
|
||||
macOS (desktop) • macos • darwin-x64 • macOS 13.1 22C65 darwin-x64
|
||||
Chrome (web) • chrome • web-javascript • Google Chrome 126.0.6478.127
|
||||
|
||||
No wireless devices were found.
|
||||
|
||||
Run "flutter emulators" to list and start any available device emulators.
|
||||
|
||||
If you expected another device to be detected, please run "flutter doctor" to diagnose potential issues. You may also try increasing the time to wait
|
||||
for connected devices with the "--device-timeout" flag. Visit https://flutter.dev/setup/ for troubleshooting tips.
|
||||
```
|
||||
|
||||
Then run
|
||||
|
||||
```bash
|
||||
flutter run -d 00008030-001064212E85802E
|
||||
```
|
||||
|
||||
It will show:
|
||||
```
|
||||
Launching lib/main.dart on iPhone in debug mode...
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
No valid code signing certificates were found
|
||||
You can connect to your Apple Developer account by signing in with your Apple ID
|
||||
in Xcode and create an iOS Development Certificate as well as a Provisioning
|
||||
Profile for your project by:
|
||||
1- Open the Flutter project's Xcode target with
|
||||
open ios/Runner.xcworkspace
|
||||
2- Select the 'Runner' project in the navigator then the 'Runner' target
|
||||
in the project settings
|
||||
3- Make sure a 'Development Team' is selected under Signing & Capabilities > Team.
|
||||
You may need to:
|
||||
- Log in with your Apple ID in Xcode first
|
||||
- Ensure you have a valid unique Bundle ID
|
||||
- Register your device with your Apple Developer Account
|
||||
- Let Xcode automatically provision a profile for your app
|
||||
4- Build or run your project again
|
||||
5- Trust your newly created Development Certificate on your iOS device
|
||||
via Settings > General > Device Management > [your new certificate] > Trust
|
||||
|
||||
For more information, please visit:
|
||||
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/
|
||||
AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html
|
||||
|
||||
Or run on an iOS simulator without code signing
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Error: No development certificates available to code sign app for device deployment
|
||||
```
|
||||
|
||||
Follow the above instructions.
|
||||
|
||||
The following is a screenshot.
|
||||
|
||||

|
||||
|
||||
Then close `xcode` and run again
|
||||
|
||||
```bash
|
||||
flutter run -d 00008030-001064212E85802E
|
||||
```
|
||||
|
||||
You would get the following errors:
|
||||
```
|
||||
Error (Xcode): Undefined symbol: ___cxa_pure_virtual
|
||||
|
||||
|
||||
Error (Xcode): Undefined symbol: ___cxa_throw
|
||||
|
||||
|
||||
Error (Xcode): Undefined symbol: ___gxx_personality_v0
|
||||
|
||||
|
||||
|
||||
Error launching application on iPhone.
|
||||
```
|
||||
|
||||
Make the following changes:
|
||||
|
||||
```diff
|
||||
diff --git a/flutter-examples/streaming_asr/ios/Runner.xcodeproj/project.pbxproj b/flutter-examples/streaming_asr/ios/Runner.xcodeproj/project.pbxproj
|
||||
index b208c7e9..466b0afb 100644
|
||||
--- a/flutter-examples/streaming_asr/ios/Runner.xcodeproj/project.pbxproj
|
||||
+++ b/flutter-examples/streaming_asr/ios/Runner.xcodeproj/project.pbxproj
|
||||
@@ -482,6 +482,7 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
+ OTHER_LDFLAGS = "-lc++";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Profile;
|
||||
@@ -500,6 +501,7 @@
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
+ OTHER_LDFLAGS = "-lc++";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Debug;
|
||||
@@ -516,6 +518,7 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.k2fsa.sherpa.onnx.streamingAsr.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
+ OTHER_LDFLAGS = "-lc++";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Release;
|
||||
@@ -532,6 +535,7 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.k2fsa.sherpa.onnx.streamingAsr.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
+ OTHER_LDFLAGS = "-lc++";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Profile;
|
||||
@@ -666,6 +670,7 @@
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
+ OTHER_LDFLAGS = "-lc++";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
@@ -688,6 +693,7 @@
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
+ OTHER_LDFLAGS = "-lc++";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
```
|
||||
|
||||
Then re-run
|
||||
|
||||
```bash
|
||||
flutter run -d 00008030-001064212E85802E
|
||||
```
|
||||
|
||||
Finally, it shows the following:
|
||||
|
||||
```
|
||||
Launching lib/main.dart on iPhone in debug mode...
|
||||
Automatically signing iOS for device deployment using specified development team in Xcode project: N5ZH3Z63A6
|
||||
Running Xcode build...
|
||||
└─Compiling, linking and signing... 9.0s
|
||||
Xcode build done. 25.6s
|
||||
(lldb) 2024-07-06 17:43:54.970077+0800 Runner[4851:965716] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)")
|
||||
Warning: Unable to create restoration in progress marker file
|
||||
fopen failed for data file: errno = 2 (No such file or directory)
|
||||
Errors found! Invalidating cache...
|
||||
fopen failed for data file: errno = 2 (No such file or directory)
|
||||
Errors found! Invalidating cache...
|
||||
Installing and launching... 31.8s
|
||||
Syncing files to device iPhone... 1,080ms
|
||||
|
||||
Flutter run key commands.
|
||||
r Hot reload. 🔥🔥🔥
|
||||
R Hot restart.
|
||||
h List all available interactive commands.
|
||||
d Detach (terminate "flutter run" but leave application running).
|
||||
c Clear the screen
|
||||
q Quit (terminate the application on the device).
|
||||
|
||||
A Dart VM Service on iPhone is available at: http://127.0.0.1:51556/QDn_7CJ2gzk=/
|
||||
The Flutter DevTools debugger and profiler on iPhone is available at: http://127.0.0.1:9100?uri=http://127.0.0.1:51556/QDn_7CJ2gzk=/
|
||||
```
|
||||
|
||||
If it shows the following log after pressing `start` within the sherpa-onnx APP on your iPhone:
|
||||
|
||||
```
|
||||
[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.
|
||||
```
|
||||
|
||||
Please make the following changes
|
||||
```diff
|
||||
--- a/flutter-examples/streaming_asr/ios/Runner/Info.plist
|
||||
+++ b/flutter-examples/streaming_asr/ios/Runner/Info.plist
|
||||
@@ -2,6 +2,8 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
+ <key>NSMicrophoneUsageDescription</key>
|
||||
+ <string>Need microphone access for recording speech</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
```
|
||||
|
||||
And re-run
|
||||
|
||||
```bash
|
||||
flutter run -d 00008030-001064212E85802E
|
||||
```
|
||||
|
||||
The following are some screenshots of the iOS APP:
|
||||
|
||||
|1|2|3|
|
||||
|---|---|---|
|
||||
||||
|
||||
|
||||
|
||||
**Hint**: If you find that you cannot start the APP on your iPhone after
|
||||
disconnecting from the computer, please use
|
||||
|
||||
```bash
|
||||
flutter run --release -d 00008030-001064212E85802E
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user