如何在 iOS 中使用 flutter_blue?

Posted

技术标签:

【中文标题】如何在 iOS 中使用 flutter_blue?【英文标题】:How to use flutter_blue with iOS? 【发布时间】:2020-10-19 15:26:47 【问题描述】:

我正在尝试在 ios 中使用 flutter 和 flutter_blue。

每个频道都有故障转储。我是新手,所以也许这是一个简单的问题。我知道人们使用这个库,所以它必须在我的使用中。奇怪的是,尽管选择了频道,但每次都会产生相同的故障转储。

重现步骤

OSX: Version 0.15.5 (19F101)
Xcode : Version 11.5 (11E608c)

使用主页上的示例和实际的 GitHub src 作为指南。这些网址:

https://pub.dev/packages/flutter_blue#-example-tab- https://github.com/pauldemarco/flutter_blue/tree/master/example/lib
    指定颤振通道并更新

我已经尝试了每个颤振通道。每个通道都会产生相同的故障转储。

$ flutter channel stable
$ flutter upgrade

Flutter 1.17.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 1ad9baa8b9 (9 days ago) • 2020-06-17 14:41:16 -0700
Engine • revision ee76268252
Tools • Dart 2.8.4

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.4, on Mac OS X 10.15.5 19F101, locale en-US)

[✓] android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 11.5)
[✓] Android Studio (version 4.0)
[!] VS Code (version 1.24.1)
    ✗ Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[✓] Connected device (1 available)

! Doctor found issues in 1 category.
    创建存根项目

为了简单起见,模仿这个例子。

$ flutter create flutter_blue_example
$ cd flutter_blue_example
    在 Xcode 中打开项目并进行运行时更改
$ open ios/Runner.xcworkspace/

选择 TARGETS: Runner 然后 General 选项卡以修改运行时 API

General->Deployment Info->Target == iOS 13.5

选择 TARGETS: Runner 然后选择 Signing & Capabilities 选项卡以修改签名包标识符和团队名称。

我注意到一些错误消息与 iOS 8.0 与 iOS 10.0 API 功能有关。因此,我选择了最新的 API iOS 13。

正确的包标识符和签名团队名称

通过 Xcode 在手机上运行示例。

停止应用关闭 Xcode。使用 cli 运行。

使用 cli 关闭并测试

$ flutter run

演示应用运行时,按q退出

    修改 pubspec.yaml 文件,使依赖部分如下所示:
dependencies:
  flutter_blue: ^0.7.2
  flutter:
    sdk: flutter
    删除 lib/main.dart 存根/模板代码并替换为 git repo 中的示例代码。
$ cd lib
$ rm main.dart
$ curl https://raw.githubusercontent.com/pauldemarco/flutter_blue/master/example/lib/main.dart --output main.dart
$ curl https://raw.githubusercontent.com/pauldemarco/flutter_blue/master/example/lib/widgets.dart --output widgets.dart
    清理并安装依赖项

每次我更改频道时,我都会执行相同的过程。

$ cd ..
# The rm iOS/Podfile command is only needed when
# switching to channel dev
# rm iOS/Podfile
$ flutter pub get
$ flutter clean
    尝试构建并运行示例代码
$ flutter run
Launching lib/main.dart on JFD_X in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode
project: Z84M4MZYKF
Running pod install...                                              1.6s
Running Xcode build...

 └─Compiling, linking and signing...                        14.3s
Xcode build done.                                           29.7s
Installing and launching...                                            ⣻

在 iPhone 上,它会闪烁显示应用程序启动的屏幕,但很快就会返回主屏幕。提示永远不会返回,并且必须使用ctrl-c 退出命令,因为q 没有响应。

使用详细选项运行可提供此信息。

<stuff snipped>
[ +155 ms] success
[        ] (lldb)     safequit
[ +109 ms] Process 20400 detached
[  +30 ms] Application launched on the device. Waiting for observatory port.
[   +9 ms] Attempting to forward device port 49232 to host port 1024
[        ] executing: /Users/davis/progs/flutter/flutter/bin/cache/artifacts/usbmuxd/iproxy 1024 49232
850f92882e33715d639b466a0ba9a01aeb601823
[+1011 ms] Forwarded port ForwardedPort HOST:1024 to DEVICE:49232
[  +17 ms] HttpException: Connection closed before full header was received, uri = http://localhost:1024/ws
[+2008 ms] HttpException: , uri = http://localhost:1024/ws
[+2007 ms] HttpException: , uri = http://localhost:1024/ws
[+2008 ms] HttpException: , uri = http://localhost:1024/ws
[+2011 ms] HttpException: , uri = http://localhost:1024/ws
[+2006 ms] Failed to connect directly, falling back to mDNS
[   +5 ms] Checking for advertised Dart observatories...
[+5020 ms] No pointer records found.
[   +2 ms] mDNS query failed. Checking for an interface with a ipv4 link local address.
[   +2 ms] Found interface "en0":
[        ]  Bound address: "192.168.86.53"
[        ] Found interface "en5":
[        ]  Bound address: "169.254.128.136" link local
[        ] An interface with an ipv4 link local address was found.
[        ] Failed to connect with mDNS, falling back to log scanning

再次打开 xcode 并尝试从 Xcode 运行。

$ open ios/Runner.xcworkspace/

运行应用程序,它会提供以下故障转储

频道稳定

libsystem_kernel.dylib`__abort_with_payload:
    0x1b44c97ec <+0>:  mov    x16, #0x209
    0x1b44c97f0 <+4>:  svc    #0x80
->  0x1b44c97f4 <+8>:  b.lo   0x1b44c9810               ; <+36>     Thread 3: signal SIGABRT
    0x1b44c97f8 <+12>: stp    x29, x30, [sp, #-0x10]!
    0x1b44c97fc <+16>: mov    x29, sp
    0x1b44c9800 <+20>: bl     0x1b44a9ad0               ; cerror_nocancel
    0x1b44c9804 <+24>: mov    sp, x29
    0x1b44c9808 <+28>: ldp    x29, x30, [sp], #0x10
    0x1b44c980c <+32>: ret    
    0x1b44c9810 <+36>: ret    

版本检查

huo-yang~/progs/flutter/flutter-testy/flutter_blue_example$ flutter --version
Flutter 1.17.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 1ad9baa8b9 (12 days ago) • 2020-06-17 14:41:16 -0700
Engine • revision ee76268252
Tools • Dart 2.8.4

频道测试版

提供与上述相同的堆栈跟踪。

版本检查

huo-yang~/progs/flutter/flutter-testy/flutter_blue_example$ flutter --version
Flutter 1.19.0-4.2.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 9b9b543d92 (7 days ago) • 2020-06-22 12:19:28 -0700
Engine • revision 9a28c3bcf4
Tools • Dart 2.9.0 (build 2.9.0-14.1.beta)

频道开发

提供与上述相同的堆栈跟踪。

版本检查

$ flutter run --version
Flutter 1.20.0-2.0.pre • channel dev • https://github.com/flutter/flutter.git
Framework • revision 15a28159bc (6 days ago) • 2020-06-23 04:52:58 -0700
Engine • revision 91a63d6a44
Tools • Dart 2.9.0 (build 2.9.0-19.0.dev 7e72c9ae7e)

【问题讨论】:

【参考方案1】:

我尝试了至少两个月的 flutter_blue,但我无法以任何可靠的方式开始工作。我不想详述,但你可以在flutter_blue github存储库中搜索我的ID并获得一张不错的照片。

我终于切换到flutter_ble_lib https://pub.dev/packages/flutter_ble_lib 并让我所有的东西都在几天内工作。 我的代码非常抽象,切换库也没问题。一切都在 Android 和 IOS 上运行。试试看吧。

【讨论】:

我会看看的。我的赏金明天到期。既然你至少给了我一个答案,我就给了你赏金。注意我已经解决了。我只是讨厌看到赏金被浪费。再次感谢。 好吧,谢谢。我仍然会在之前给另一个库。只是说。 哦,是的。我确实尝试过flutter blue,它工作了几次,但正如你所说的那样崩溃了。我会按照你的建议换。再次感谢。【参考方案2】:

我尝试了适用于他但不适用于我的朋友版本的代码。

见here

由于该代码在同一个地方失败,我再次检查了堆栈跟踪,发现堆栈跟踪中有一个较早的失败。

TCC`__CRASHING_DUE_TO_PRIVACY_VIOLATION__:

结果,我添加了以下内容

<key>NSBluetoothAlwaysUsageDescription</key>
    <string>This app uses bluetooth</string>

ios/Runner/Info.plist file

之后它就可以工作了。

【讨论】:

那么谁得到了赏金呢? 我不确定。我花了声望点。它没有退款/奖励给我。每天,赏金到期一天。当为零时,我会看看会发生什么。

以上是关于如何在 iOS 中使用 flutter_blue?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter BLE应用的开发-flutter_blue

Flutter BLE应用的开发-flutter_blue

Flutter BLE应用的开发-flutter_blue

Flutter BLE应用的开发-flutter_blue

Flutter_Blue 无法扫描我的设备。 (我的BT音箱)安卓

flutter_blue 蓝牙插件实战及那些坑