macOS Mojave 无法使用 Swift 4 找到 vardbDetachedSignatures

swiftmacOS

1个回答

写回答

顺婷

2025-06-19 07:35

+ 关注

macOS
macOS

macOS Mojave 无法使用 Swift 4 找到 /var/db/DetachedSignatures

自从发布了 macOS Mojave 操作系统后,一些开发者遇到了一个问题:无法在 Swift 4 中找到位于 /var/db/DetachedSignatures 路径下的文件。这个问题引起了一些困惑和不便,因为这个文件在之前的 macOS 版本中是可以正常访问的。本文将探讨这个问题的原因,并提供一些解决方案。

macOS Mojave 中,Apple 引入了一种新的安全功能,称为“系统完整性保护”(System Integrity Protection,简称 SIP)。这个功能的目的是保护操作系统的核心组件,防止恶意软件或用户对其进行修改。SIP 限制了对某些系统目录和文件的访问权限,包括 /var/db/DetachedSignatures 文件。

这个文件是用于存储已分离的签名(Detached Signatures)的,这些签名用于验证文件的完整性和真实性。在之前的 macOS 版本中,开发者可以通过 Swift 4 的某些 API 来访问这个文件,但在 macOS Mojave 中,由于 SIP 的限制,这个文件对于大多数应用程序来说是不可见的。

解决方案

虽然无法直接访问 /var/db/DetachedSignatures 文件,但是开发者仍然可以通过其他方式来验证文件的完整性和真实性。下面是几种解决方案:

1. 使用其他路径:开发者可以选择将文件存储在其他路径下,而不是 /var/db/DetachedSignatures。这样就可以绕过 SIP 的限制,并且可以在 Swift 4 中正常访问这些文件。

Swift

let fileURL = URL(fileURLWithPath: "/path/to/file")

let signature = try? Data(contentsOf: fileURL)

2. 使用其他方式进行文件验证:如果无法修改文件路径,开发者可以尝试使用其他方式来验证文件的完整性和真实性,例如使用文件的哈希值或数字证书。

Swift

import CommonCrypto

func calculateFileHash(filePath: String) -> String? {

let bufferSize = 1024 * 1024

do {

let file = try FileHandle(forReadingFrom: URL(fileURLWithPath: filePath))

defer { file.closeFile() }

let context = UnsafeMutablePointer<CC_SHA256_CTX>.allocate(capacity: 1)

defer { context.deallocate() }

CC_SHA256_Init(context)

while autoreleasepool(invoking: {

let data = file.readData(ofLength: bufferSize)

data.count > 0

}) {

data.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) in

_ = CC_SHA256_Update(context, bytes, numericCast(data.count))

}

}

var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))

CC_SHA256_Final(&digest, context)

let hash = digest.map { String(format: "%02hhx", $0) }.joined()

return hash

} catch {

print("Error calculating file hash: \(error.localizedDescription)")

return nil

}

}

let filePath = "/path/to/file"

if let fileHash = calculateFileHash(filePath: filePath) {

print("File hash: \(fileHash)")

}

macOS Mojave 中,由于系统完整性保护(SIP)的限制,无法直接使用 Swift 4 访问 /var/db/DetachedSignatures 文件。开发者可以通过将文件存储在其他路径下或使用其他方式进行文件验证来解决这个问题。通过这些解决方案,开发者可以继续确保文件的完整性和真实性,同时适应 macOS Mojave 带来的新安全功能。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号