SwiftTerm是用于Swift应用程序的VT100/XTERM终端模拟器库,可以嵌入MACOS,iOS应用程序,基于文本,无头应用程序或其他自定义方案中。它已用于多个可商购的SSH客户端,包括安全贝类,LA Terminal和Codeedit
检查API文档
该存储库既包含UI不可知论的终端模拟器引擎,也包含使用Uikit的iOS的前端,也是使用AppKit的MacOS。基于诅咒的终端仿真器(在控制台应用程序中模拟Xterm)作为术语Kit库的一部分。
示例代码有几个最小的Mac和iOS示例应用程序,显示了如何在TerminalApp目录中使用库。
Companion App SwiftTermApp构建了一个实际使用此库的iOS应用程序,并且比该模块中的测试应用程序更完整,并提供了适当的配置UI。
这是我原始Xtermsharp的港口,它本身是基于Xterm.js的。在这一点上,我认为SwiftTerm是比这两个(Modulo选择/可访问性)更高级的终端模拟器,因为它可以更好地处理UTF,UNICODE和GREPHEME簇,并且对终端仿真的覆盖率更高。 Xtermsharp通常试图跟上。
SwiftTerm库本身包含引擎和前端的源代码。前端是根据目标平台有条件编译的。
该引擎位于此目录中,而MacOS的代码则属于Mac下,而iOS代码则属于iOS下的iOS。鉴于这两个共享许多共同特征,因此共享代码在Apple下。
SwiftTerm使用Swift Package Manager进行构建,您可以将库添加到您的项目中,将其用于此项目或该项目的叉子。
MacOS AppKit NSView实现TerminalView是可重复使用的NSView控件,可以通过实现TerminalViewDelegate连接到任何源。
我预计一个常见的方案将是托管本地unix命令,因此我包括LocalProcessTerminalView ,它是将TerminalView连接到Unix pseudo-terminal的实现,并在那里运行命令。
TerminalView有一个等效的UIKIT UIVIEW实现,它像其NSView Companion一样是可嵌入且可重复使用的视图,可以通过实现相同的终端ViewDelegate来连接到您的应用程序。与在Mac上运行的NSVIEW案例不同,鉴于iOS不提供对进程的访问权限,最常见的情况将是运行本地命令,因此最常见的情况是将此终端连接到远程主机。连接到远程系统的最安全方法是使用SSH。
iOS和UIKIT代码共享许多代码,该代码属于Apple目录下的代码。
核心库当前没有提供连接到SSH的方便方法,纯粹是为了避免额外的依赖性。但是,该GIT模块引用了一个将预编译SSH客户端(Frugghi的Swiftsh)的模块以及iOS示例中的UIKitSsshTerminalView ,该模块将iOS的TerminalView连接到SSH连接中。
如果您使用的是Xcode,则有两个高级项目,一个用于MAC,一个用于TerminalApp目录中的iOS,一个称为“ iosterminal.xcodeproj”,另一个称为“ MacTrynilal.xcodeproj”。
这是需要的,因为如果您在项目中有MAC项目,则Xcode不会为iOS提供代码完成。所以我不得不将它们分开。两个项目都引用相同的SwiftTerm软件包。
使用这些项目时,如果您选择终端应用程序,它将运行此项目。要运行测试套件,请选择“ SwiftTerm”目标,然后可以使用“ SwiftTermFuzz”来运行Fuzzer。
您可以使用swift build构建软件包,然后swift test运行测试套件 - 但请注意,测试套件期望将目录esctest签出来运行。如果您想在本地执行此操作,您可以在文件.github/workflows/swift.yml中查看我如何在github操作中运行这些操作。
如果使用Xcode,则可以选择“ SwiftTerm”项目,然后使用Command-U运行测试套件。
GitHub问题有一系列所需的功能和增强功能
从长远来看,我还想添加一个TVOS Uiview,这是Linux的SwiftGTK前端。
24位颜色

午夜指挥官

固体UTF-8支持,出色的渲染: 

支持现代应用发出的超链接:

iOS支持:

六层支持:


其他有用的文件:
测试套件: