diff --git a/.gitignore b/.gitignore index 6f23421..dab57e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .DS_Store /.vscode/ -/.swiftpm/ +/.swiftpm/* +!/.swiftpm/configuration/ +!/.swiftpm/configuration/mirrors.json /.swiftpm/xcode/xcuserdata/ /.swiftpm/xcode/package.xcworkspace/xcuserdata/ /.build diff --git a/.swiftpm/configuration/mirrors.json b/.swiftpm/configuration/mirrors.json new file mode 100644 index 0000000..6024e8b --- /dev/null +++ b/.swiftpm/configuration/mirrors.json @@ -0,0 +1,13 @@ +{ + "object" : [ + { + "mirror" : "https://github.com/lynnswap/MachOKit.git", + "original" : "https://github.com/MxIris-Reverse-Engineering/MachOKit" + }, + { + "mirror" : "https://github.com/lynnswap/MachOKit.git", + "original" : "https://github.com/MxIris-Reverse-Engineering/MachOKit.git" + } + ], + "version" : 1 +} diff --git a/Package.resolved b/Package.resolved index 224af7d..cc80741 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "8ae34573614918b10b079595077189c359f4bf848247a6103a86e9de2b453a7c", + "originHash" : "afe6393989064d60f345d3b63e7668e4541bfdcee8911add15f52d9c8bb39673", "pins" : [ { "identity" : "associatedobject", @@ -42,8 +42,7 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/MxIris-Reverse-Engineering/MachOKit.git", "state" : { - "revision" : "fec9503cdf3d595ef8cf4abac1602e299a8c3be4", - "version" : "0.52.101" + "revision" : "e0e0b30187ae74f2088d932845c8ddac2c79f36c" } }, { diff --git a/Package.swift b/Package.swift index 4359553..ffcd26d 100644 --- a/Package.swift +++ b/Package.swift @@ -33,7 +33,7 @@ let package = Package( ), .package( url: "https://github.com/MxIris-Reverse-Engineering/MachOKit.git", - from: "0.51.101" + revision: "e0e0b30187ae74f2088d932845c8ddac2c79f36c" ), .package( url: "https://github.com/lynnswap/MachOObjCSection.git", diff --git a/Sources/PrivateHeaderKitRawDumpCore/PrivateHeaderKitRawDumpMain.swift b/Sources/PrivateHeaderKitRawDumpCore/PrivateHeaderKitRawDumpMain.swift index 42852cf..62bc999 100644 --- a/Sources/PrivateHeaderKitRawDumpCore/PrivateHeaderKitRawDumpMain.swift +++ b/Sources/PrivateHeaderKitRawDumpCore/PrivateHeaderKitRawDumpMain.swift @@ -1,6 +1,6 @@ import Foundation import Dispatch -import MachOKit +@_spi(Support) import MachOKit @_spi(Diagnostics) import MachOObjCSection import MachOSwiftSection import ObjCDump @@ -442,6 +442,7 @@ private func dumpImage( return } profileLogDuration(enabled: options.profile, imagePath: imagePath, name: "loadMachO", since: loadStart) + try machO.validateFileBackedChainedFixups() if options.verbose { print("Dumping: \(placement.identity.url.path)") @@ -486,6 +487,11 @@ private func defaultSwiftInterfaceBuilderFactory( enum RawMachO { case file(MachOFile) case loaded(MachOImage) + + func validateFileBackedChainedFixups() throws { + guard case .file(let file) = self else { return } + try file.validateChainedFixups() + } } enum RawMachOLoadError: Error, Equatable, CustomStringConvertible, Sendable { diff --git a/Tests/PrivateHeaderKitHelperProtocolTests/PrivateHeaderKitHelperProtocolTests.swift b/Tests/PrivateHeaderKitHelperProtocolTests/PrivateHeaderKitHelperProtocolTests.swift index 1a40f73..46fb84c 100644 --- a/Tests/PrivateHeaderKitHelperProtocolTests/PrivateHeaderKitHelperProtocolTests.swift +++ b/Tests/PrivateHeaderKitHelperProtocolTests/PrivateHeaderKitHelperProtocolTests.swift @@ -142,7 +142,7 @@ struct PrivateHeaderKitHelperProtocolTests { #expect(report.omittedDiagnosticCount == UInt.max) } - @Test func resolvedGraphPinsObjectiveCReaderForkExactly() throws { + @Test func resolvedGraphPinsReaderForksExactly() throws { let packageRoot = URL(fileURLWithPath: #filePath) .deletingLastPathComponent() .deletingLastPathComponent() @@ -176,6 +176,41 @@ struct PrivateHeaderKitHelperProtocolTests { == "a7e5982ed7de5dab5dec76036682ea55825b77a8" ) #expect(swiftSectionState["version"] == nil) + + let machOKitPin = try #require( + pins.first { $0["identity"] as? String == "machokit" } + ) + let machOKitState = try #require( + machOKitPin["state"] as? [String: Any] + ) + #expect( + machOKitPin["location"] as? String + == "https://github.com/MxIris-Reverse-Engineering/MachOKit.git" + ) + #expect( + machOKitState["revision"] as? String + == "e0e0b30187ae74f2088d932845c8ddac2c79f36c" + ) + #expect(machOKitState["version"] == nil) + + let mirrorData = try Data( + contentsOf: packageRoot + .appendingPathComponent(".swiftpm/configuration/mirrors.json") + ) + let mirrorDocument = try #require( + JSONSerialization.jsonObject(with: mirrorData) as? [String: Any] + ) + let mirrors = try #require( + mirrorDocument["object"] as? [[String: String]] + ) + let expectedMirror = "https://github.com/lynnswap/MachOKit.git" + #expect(Set(mirrors.compactMap { $0["mirror"] }) == [expectedMirror]) + #expect( + Set(mirrors.compactMap { $0["original"] }) == [ + "https://github.com/MxIris-Reverse-Engineering/MachOKit", + "https://github.com/MxIris-Reverse-Engineering/MachOKit.git", + ] + ) } @Test func inventoryNormalizesImagePathMembershipAndRoundTrips() throws {