AirTerminal 是一个蓝牙终端和 XMODEM 文件传输工具。具体功能可参考我过去的文章。
在这个春节,我为 AirTerminal 增加了日志记录功能,同时改用 SwiftTerm 实现终端模拟器。新版本可在 App Store 中下载。
日志记录
大部分 SSH/Telnet 工具都具备日志记录功能,能够将终端输出的内容保存在文本文件中。
对于调试嵌入式设备等应用场景,如果设备通过串口输出大量信息,同时又不支持通过 less
、more
这样的工具进行翻页,就可以使用日志记录功能,保存输出内容,方便后续查阅。
启用日志记录功能,只需要在终端中点击右上角的按钮,选择 Enable Logging 即可:
记录下的日志文件,可以在 iOS/iPad OS 的「文件」App 中查看。也可以将 iPhone/iPad 连接电脑,通过 iTunes 或 Finder 导出:
目前 AirTerminal 的日志记录功能比较基础,只是将蓝牙接收到的数据原封不动地记录到文件。如果在 AirTerminal 中使用 vim、tmux 等工具,则记录的日志不方便用户阅读。这部分功能需要进一步优化。
日志记录的功能建议,是由 Twitter 用户 @AllAboutJake 提出的,非常感谢这位推友。如果读者对 AirTerminal 还有其他建议,也欢迎与我联系。
改用 SwiftTerm
AirTerminal 原先基于 WKWebView 和 xterm.js,通过 Web 的方式实现终端模拟器。简单说,就是 AirTerminal 调用浏览器,在浏览器中加载网页,来显示终端。终端的大部分功能都是在网页中实现的。
通过这种方式实现终端,在开发与调试的过程中,遇到了不少 UI 细节的问题,为了规避这些问题,代码中增加了不少处理。同时,还需要使用 JavaScriptCore,实现 Web 页面与 App 之间的交互。整体上代码不是很优雅。
最近我在使用 Secure ShellFish 时,发现这款 App 使用了 SwiftTerm。SwiftTerm 是用 Swift 实现的终端模拟器,专门为 iOS 和 macOS 打造。使用 SwiftTerm,能让 AirTerminal 的代码简洁不少,同时后续可以基于 SwiftTerm 实现更多功能。所以,在 AirTermnal 1.3 中,我使用 SwiftTerm 替换了 xterm.js,来实现终端模拟器。
后续计划
由于工作等各方面的的原因,在 2022 年,我的空闲时间不是很多,AirTerminal 也主要保持在维护状态。如果还有时间的话,可能会尝试为 AirTerminal 优化 UI、增加多 Tab 和多窗口支持、完善 CJK 支持等……
留言
一直在你你这款产品,也在推荐给淘宝卖ble串口设备推荐你的产品,就是希望提高你产品知名度,你在更新1.3版本后就升级了,现在有个bug,命令后显示的信息,不能触摸上下滚动了,这样信息多了就错过了,希望改进一下,这么好用的产品买断价格太低了
周末我研究下怎么把滚动条加上去
新版本已经加上了滚动条,有空可以试一下有没有问题
已经测试过了,暂时没发现问题,非常好用
你好,我也想做一个这样的软件,初次接触Swift,SwiftTerm怎么接入SwiftUI里呢。
AirTerminal 没有用到 SwiftUI。 SwiftTerm 和 SwiftUI 一起使用,可以参考一下这个文档:https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit
提一个以后版本的需求,查询完的命令,能添加个选择复制粘贴功能最好,没有也不影响使用
复制粘贴应该已经支持了,双击一下文字试试
复制粘贴是支持,之前直接按住屏幕以为出呢,原来是双击屏幕
一直在使用Air Terminal配合水木行BT578 v2蓝牙串口调试器在iPad上做交换机调试。非常好用的工具,可以说是蓝牙传口连接console口最好用的工具。但在使用中一直有以下几个痛点不知道开发者是否可以帮忙改进:1、central mode模式下选择设备uuid的时候,是否可以增加一个筛选有设备名的筛选模式,用于只显示有设备名的设备。因为机房有很多AP有隐性蓝牙模式,会搜出很多unknown的设备,把我们需要连的设备大量淹没在里面,不容易找到;2、升级iPad OS 16后,添加设备uuid时会一直搜索周边蓝牙,特别是周围设备量很大的时候,会闪退
OK,后续版本我修复一下闪退功能,并试着增加一下设备名搜索和过滤功能。
您好,airterminal是一个很好用的串口工具,后续能否增加修改波特率的选项呢?以便适配更多设备的调试工作。谢谢了。
波特率的修改一般是通过发送 AT 指令到 BLE 串口模块实现的,不同的模块,用的指令也不一样。感觉没法简单适配后支持所有模块。 不过后面可以考虑加上命令片段的功能,能够自定义并快速发送常用命令。