CwlPreconditionTesting 2.2.1

CwlPreconditionTesting 2.2.1

Matt Gallagher 维护。



 
依赖
CwlCatchException~> 2.2.0
CwlMachBadInstructionHandler~> 2.2.0
CwlPosixPreconditionTesting~> 2.2.0
 

  • 作者:
  • Matt Gallagher

CwlPreconditionTesting

一个 Mach 异常处理器,用 Swift 和 Objective-C 编写,允许捕获和测试由 Swift 的 assertionFailure/preconditionFailure/fatalError 触发的 EXC_BAD_INSTRUCTION

注意:iOS 代码仅在模拟器上运行 仅限。它是用于逻辑测试的,由于 Mach 异常 API 在 iOS 上是私有的,因此不能部署到设备。

有关此代码的详细讨论,请参阅 Cocoa with Love 文章

Swift 的部分函数,第二部分:捕获预定义失败

要求

从 2.0.0-beta.1 版本开始,构建 CwlPreconditionTesting 需要 Swift 5 或更高版本和 Swift 包管理器,或 CocoaPods。

对于使用较旧版本的 Swift 或其他包管理器的需求,请使用版本 1.2.0 或更早版本。

添加到项目

Swift 包管理器

将以下内容添加到您的 "Package.swift" 文件中的 dependencies 数组中

 .package(url: "https://github.com/mattgallagher/CwlPreconditionTesting.git", from: Version("2.0.0"))

或者,通过将 https://github.com/mattgallagher/CwlPreconditionTesting.git,版本 2.0.0 或更高版本,添加到 Xcode 中任何项目的 Swift 包列表中。

CocoaPods

CocoaPods 是 Cocoa 项目的依赖项管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 CwlPreconditionTesting 集成到 Xcode 项目中,请在您的 Podfile 中指定它

pod 'CwlPreconditionTesting', '~> 2.0'

用法

在 macOS 和 iOS 上,您可以使用常规版本

import CwlPreconditionTesting

let e = catchBadInstruction {
	precondition(false, "THIS PRECONDITION FAILURE IS EXPECTED")
}

在 tvOS、Linux 和其他平台上,您可以使用 POSIX 版本

import CwlPosixPreconditionTesting

let e = catchBadInstruction {
	precondition(false, "THIS PRECONDITION FAILURE IS EXPECTED")
}

警告:此 POSIX 版本在连接 lldb 时不能使用,因为 lldb 的 Mach 异常处理器阻止了 SIGILL 的发生。您应该在 Xcode 中禁用测试的 "调试可执行文件" 设置。signal 处理程序的 POSIX 版本也是整个进程(而不是正确范围到 "catch" 发生的线程)。

感谢

由 @abbeycode、@dnkoutso、@jeffh 和 @ikesyo 等人贡献。特别感谢 @saagarjha 提供 ARM64 添加的帮助。