diff --git a/DLKit b/DLKit index 8619936e..018d2895 160000 --- a/DLKit +++ b/DLKit @@ -1 +1 @@ -Subproject commit 8619936ecb668618f95fe1507325ac6ee9710d5a +Subproject commit 018d2895322c4d619de4474f991dfa9405bbac38 diff --git a/HotReloading b/HotReloading index 59d1b91b..f3a78542 160000 --- a/HotReloading +++ b/HotReloading @@ -1 +1 @@ -Subproject commit 59d1b91bc70b8bc57c8f7753f65a36252eb4ea63 +Subproject commit f3a785427fe5b0da5f15157f19e03f69b19d4044 diff --git a/InjectionBundle/XprobeSwift-Bridging-Header.h b/InjectionBundle/XprobeSwift-Bridging-Header.h index 281dd40c..8c5fec21 100644 --- a/InjectionBundle/XprobeSwift-Bridging-Header.h +++ b/InjectionBundle/XprobeSwift-Bridging-Header.h @@ -5,6 +5,7 @@ #import "SimpleSocket.h" #import "UserDefaults.h" #import "InjectionClient.h" +#import "InjectionTouchEvents.h" #if SWIFT_PACKAGE #import "../XprobePlugin/Sources/Xprobe/include/Xprobe.h" #endif diff --git a/InjectionIII.xcodeproj/project.pbxproj b/InjectionIII.xcodeproj/project.pbxproj index 08431bb7..2d8ddf7f 100644 --- a/InjectionIII.xcodeproj/project.pbxproj +++ b/InjectionIII.xcodeproj/project.pbxproj @@ -20,10 +20,14 @@ BB1EBC4D258DE2A0001F2AA4 /* fishhook.c in Sources */ = {isa = PBXBuildFile; fileRef = BB1EBC4C258DE29D001F2AA4 /* fishhook.c */; }; BB1EBC4F258DE2AD001F2AA4 /* fishhook.h in Headers */ = {isa = PBXBuildFile; fileRef = BB1EBC4E258DE2AC001F2AA4 /* fishhook.h */; settings = {ATTRIBUTES = (Public, ); }; }; BB1EBC50258EA273001F2AA4 /* fishhook.h in Resources */ = {isa = PBXBuildFile; fileRef = BB1EBC4E258DE2AC001F2AA4 /* fishhook.h */; }; + BB321CE42FC2F6D6004AC0B4 /* LogManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB321CE32FC2F6D6004AC0B4 /* LogManager.swift */; }; + BB34AA6D2E2A6C8C007F5C12 /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB34AA6C2E2A6C88007F5C12 /* Generics.swift */; }; BB3756FF2BCC269400CE5D05 /* DLKitC.c in Sources */ = {isa = PBXBuildFile; fileRef = BBD0AB40262F2549003ED7B1 /* DLKitC.c */; }; BB3757042BCC26DD00CE5D05 /* trie_dlops.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB3757022BCC26DD00CE5D05 /* trie_dlops.mm */; }; BB3757052BCC26DD00CE5D05 /* trie_dladdr.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB3757032BCC26DD00CE5D05 /* trie_dladdr.mm */; }; BB3757072BCC385F00CE5D05 /* ProfileSwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB3757002BCC26AE00CE5D05 /* ProfileSwiftUI.swift */; }; + BB37AA552FC2EDFE006AA05B /* ControlServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB37AA542FC2EDFE006AA05B /* ControlServer.swift */; }; + BB37AA572FC2EE24006AA05B /* InjectionTouchEvents.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB37AA562FC2EE24006AA05B /* InjectionTouchEvents.mm */; }; BB39891D2D918AE90086A550 /* FrontendServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB39891B2D918AE90086A550 /* FrontendServer.swift */; }; BB39891E2D918AE90086A550 /* NextCompiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB39891C2D918AE90086A550 /* NextCompiler.swift */; }; BB3989212D918B640086A550 /* Popen in Frameworks */ = {isa = PBXBuildFile; productRef = BB3989202D918B640086A550 /* Popen */; }; @@ -31,8 +35,8 @@ BB39892E2D919BFE0086A550 /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB39892D2D919BFE0086A550 /* Common.swift */; }; BB39893E2D91BC8C0086A550 /* SimpleSocket.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB67DBB31FB0CDA8000EAC8A /* SimpleSocket.mm */; }; BB3989462D91BE500086A550 /* feedcommands in Resources */ = {isa = PBXBuildFile; fileRef = BB3989332D91BA8A0086A550 /* feedcommands */; }; - BB39894A2D91C0880086A550 /* swift-frontend.sh in Resources */ = {isa = PBXBuildFile; fileRef = BB3989492D91C0880086A550 /* swift-frontend.sh */; }; BB439B801FABA64300B4F50B /* SwiftEvalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB439B7F1FABA64300B4F50B /* SwiftEvalTests.swift */; }; + BB5291012ED8438F00070F80 /* SwiftRefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5291002ED8438F00070F80 /* SwiftRefs.swift */; }; BB56393C1FD5C25A002FFCEF /* SignerService.m in Sources */ = {isa = PBXBuildFile; fileRef = BB67DBB61FB0D0F2000EAC8A /* SignerService.m */; }; BB6306FE1FCD1A410021D30C /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = BB6306FD1FCD1A410021D30C /* Credits.rtf */; }; BB6446202545831400A83098 /* StringIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB64461F2545831200A83098 /* StringIndex.swift */; }; @@ -50,7 +54,7 @@ BB6C87FA2520D2C3005AFCFC /* xt_forwarding_trampoline_arm64.s in Sources */ = {isa = PBXBuildFile; fileRef = BB6C87F72520D2C3005AFCFC /* xt_forwarding_trampoline_arm64.s */; }; BB6C87FB2520D2C3005AFCFC /* xt_forwarding_trampoline_x64.s in Sources */ = {isa = PBXBuildFile; fileRef = BB6C87F82520D2C3005AFCFC /* xt_forwarding_trampoline_x64.s */; }; BB6C881F2520D799005AFCFC /* SwiftTrace.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB6C87C42520D0D1005AFCFC /* SwiftTrace.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BB746D602BACB62D0001685F /* SwiftKeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB746D5F2BACB62B0001685F /* SwiftKeyPath.swift */; }; + BB746D602BACB62D0001685F /* KeyPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB746D5F2BACB62B0001685F /* KeyPaths.swift */; }; BB7D7CAC2512F8F00069FE2C /* UpdateCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7D7CAB2512F8F00069FE2C /* UpdateCheck.swift */; }; BB80B3B526B573BE0055FAAE /* README_Chinese.md in Resources */ = {isa = PBXBuildFile; fileRef = BB80B3B426B573BE0055FAAE /* README_Chinese.md */; }; BB877CE42186EB6E0070EEC7 /* DDHotKeyCenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BB6306F51FCD16600021D30C /* DDHotKeyCenter.m */; }; @@ -78,6 +82,7 @@ BBC03BC02625F27C005C1A06 /* UnhidingEval.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC03BBF2625F27C005C1A06 /* UnhidingEval.swift */; }; BBC03BC12625F27C005C1A06 /* UnhidingEval.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC03BBF2625F27C005C1A06 /* UnhidingEval.swift */; }; BBC03BC726282358005C1A06 /* SwiftSweeper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC03BC626282358005C1A06 /* SwiftSweeper.swift */; }; + BBC3EE022F47EEB300FC785F /* swift-frontend.sh in Resources */ = {isa = PBXBuildFile; fileRef = BBC3EE012F47EEB300FC785F /* swift-frontend.sh */; }; BBCA02021FB0F10300E45F0F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBCA02011FB0F10300E45F0F /* AppDelegate.swift */; }; BBCA02041FB0F10300E45F0F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BBCA02031FB0F10300E45F0F /* Assets.xcassets */; }; BBCA02071FB0F10300E45F0F /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = BBCA02051FB0F10300E45F0F /* MainMenu.xib */; }; @@ -123,6 +128,13 @@ remoteGlobalIDString = BB3989322D91BA8A0086A550; remoteInfo = feedcommands; }; + BBC3EE042F4CBFB800FC785F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BB439B5D1FABA64300B4F50B /* Project object */; + proxyType = 1; + remoteGlobalIDString = BBCA02441FB1065D00E45F0F; + remoteInfo = InjectionBundle; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -192,18 +204,22 @@ BB1DEA9E1FD6A74900AF509F /* XprobePluginMenuController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XprobePluginMenuController.h; path = XprobePlugin/Sources/XprobeUI/include/XprobePluginMenuController.h; sourceTree = ""; }; BB1EBC4C258DE29D001F2AA4 /* fishhook.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fishhook.c; path = SwiftTraceGuts/fishhook.c; sourceTree = ""; }; BB1EBC4E258DE2AC001F2AA4 /* fishhook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fishhook.h; path = SwiftTraceGuts/include/fishhook.h; sourceTree = ""; }; + BB321CE32FC2F6D6004AC0B4 /* LogManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = LogManager.swift; path = InjectionNext/App/InjectionNext/LogManager.swift; sourceTree = SOURCE_ROOT; }; + BB34AA6C2E2A6C88007F5C12 /* Generics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Generics.swift; path = InjectionNext/InjectionLite/Sources/InjectionImpl/Generics.swift; sourceTree = SOURCE_ROOT; }; BB34C3FC244FAAB400D520A9 /* RMWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RMWindowController.xib; path = Remote/Classes/RMWindowController.xib; sourceTree = SOURCE_ROOT; }; BB34C3FE244FAD3C00D520A9 /* log.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = log.html; path = Remote/log.html; sourceTree = SOURCE_ROOT; }; BB34C400244FAE2F00D520A9 /* iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone.png; path = Remote/iphone.png; sourceTree = SOURCE_ROOT; }; BB3757002BCC26AE00CE5D05 /* ProfileSwiftUI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProfileSwiftUI.swift; path = ProfileSwiftUI/Sources/ProfileSwiftUI/ProfileSwiftUI.swift; sourceTree = SOURCE_ROOT; }; BB3757022BCC26DD00CE5D05 /* trie_dlops.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = trie_dlops.mm; path = DLKit/Sources/DLKitC/trie_dlops.mm; sourceTree = SOURCE_ROOT; }; BB3757032BCC26DD00CE5D05 /* trie_dladdr.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = trie_dladdr.mm; path = DLKit/Sources/DLKitC/trie_dladdr.mm; sourceTree = SOURCE_ROOT; }; + BB37AA542FC2EDFE006AA05B /* ControlServer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControlServer.swift; path = InjectionNext/App/InjectionNext/ControlServer.swift; sourceTree = SOURCE_ROOT; }; + BB37AA562FC2EE24006AA05B /* InjectionTouchEvents.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InjectionTouchEvents.mm; path = InjectionNext/Sources/InjectionNextC/InjectionTouchEvents.mm; sourceTree = SOURCE_ROOT; }; + BB37AA582FC2EEE5006AA05B /* InjectionTouchEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InjectionTouchEvents.h; path = InjectionNext/Sources/InjectionNextC/include/InjectionTouchEvents.h; sourceTree = SOURCE_ROOT; }; BB39891B2D918AE90086A550 /* FrontendServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FrontendServer.swift; path = InjectionNext/App/InjectionNext/FrontendServer.swift; sourceTree = SOURCE_ROOT; }; BB39891C2D918AE90086A550 /* NextCompiler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NextCompiler.swift; path = InjectionNext/App/InjectionNext/NextCompiler.swift; sourceTree = SOURCE_ROOT; }; BB3989252D918C140086A550 /* Defaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Defaults.swift; path = InjectionNext/App/InjectionNext/Defaults.swift; sourceTree = SOURCE_ROOT; }; BB39892D2D919BFE0086A550 /* Common.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Common.swift; path = InjectionNext/InjectionLite/Sources/InjectionImpl/Common.swift; sourceTree = SOURCE_ROOT; }; BB3989332D91BA8A0086A550 /* feedcommands */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = feedcommands; sourceTree = BUILT_PRODUCTS_DIR; }; - BB3989492D91C0880086A550 /* swift-frontend.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "swift-frontend.sh"; sourceTree = ""; }; BB439B681FABA64300B4F50B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; BB439B6A1FABA64300B4F50B /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = ""; }; BB439B6C1FABA64300B4F50B /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; @@ -223,6 +239,7 @@ BB4EC3FA244FA3C40079E244 /* RMWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RMWindowController.m; path = Remote/Sources/RemoteUI/RMWindowController.m; sourceTree = SOURCE_ROOT; }; BB4EC3FF244FA42A0079E244 /* RemoteCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RemoteCapture.h; path = Remote/Sources/RemoteCapture/include/RemoteCapture.h; sourceTree = SOURCE_ROOT; }; BB4EC400244FA4420079E244 /* RMWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RMWindowController.h; path = Remote/Sources/RemoteUI/include/RMWindowController.h; sourceTree = SOURCE_ROOT; }; + BB5291002ED8438F00070F80 /* SwiftRefs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftRefs.swift; path = SwiftTrace/SwiftRefs.swift; sourceTree = ""; }; BB53B647244FC2F800F006E3 /* RemoteHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RemoteHeaders.h; path = Remote/Sources/RemoteCapture/include/RemoteHeaders.h; sourceTree = SOURCE_ROOT; }; BB56393F1FD5D535002FFCEF /* Xprobe+Service.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "Xprobe+Service.mm"; path = "XprobePlugin/Sources/Xprobe/Xprobe+Service.mm"; sourceTree = ""; }; BB5639401FD5D535002FFCEF /* Xtrace.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = Xtrace.mm; path = XprobePlugin/Classes/Xtrace.mm; sourceTree = ""; }; @@ -262,7 +279,7 @@ BB6C87F62520D2C3005AFCFC /* SwiftTrace.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = SwiftTrace.mm; path = SwiftTraceGuts/SwiftTrace.mm; sourceTree = ""; }; BB6C87F72520D2C3005AFCFC /* xt_forwarding_trampoline_arm64.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; name = xt_forwarding_trampoline_arm64.s; path = SwiftTraceGuts/xt_forwarding_trampoline_arm64.s; sourceTree = ""; }; BB6C87F82520D2C3005AFCFC /* xt_forwarding_trampoline_x64.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; name = xt_forwarding_trampoline_x64.s; path = SwiftTraceGuts/xt_forwarding_trampoline_x64.s; sourceTree = ""; }; - BB746D5F2BACB62B0001685F /* SwiftKeyPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftKeyPath.swift; path = HotReloading/Sources/HotReloading/SwiftKeyPath.swift; sourceTree = SOURCE_ROOT; }; + BB746D5F2BACB62B0001685F /* KeyPaths.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = KeyPaths.swift; path = InjectionNext/InjectionLite/Sources/InjectionImpl/KeyPaths.swift; sourceTree = SOURCE_ROOT; }; BB79FC78245CC02200A4B4CB /* TimeLapseBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TimeLapseBuilder.swift; path = Remote/Sources/RemoteMovie/TimeLapseBuilder.swift; sourceTree = SOURCE_ROOT; }; BB7D7CAB2512F8F00069FE2C /* UpdateCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = UpdateCheck.swift; path = ../HotReloading/Sources/injectiond/UpdateCheck.swift; sourceTree = ""; }; BB80B3B426B573BE0055FAAE /* README_Chinese.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README_Chinese.md; sourceTree = ""; }; @@ -305,6 +322,7 @@ BBC03BBC2625F268005C1A06 /* Unhide.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Unhide.mm; path = HotReloading/Sources/HotReloadingGuts/Unhide.mm; sourceTree = SOURCE_ROOT; }; BBC03BBF2625F27C005C1A06 /* UnhidingEval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UnhidingEval.swift; path = HotReloading/Sources/HotReloading/UnhidingEval.swift; sourceTree = SOURCE_ROOT; }; BBC03BC626282358005C1A06 /* SwiftSweeper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftSweeper.swift; path = HotReloading/Sources/HotReloading/SwiftSweeper.swift; sourceTree = SOURCE_ROOT; }; + BBC3EE012F47EEB300FC785F /* swift-frontend.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "swift-frontend.sh"; path = "InjectionNext/App/InjectionNext/swift-frontend.sh"; sourceTree = SOURCE_ROOT; }; BBCA01FE1FB0F10300E45F0F /* InjectionIII.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = InjectionIII.app; sourceTree = BUILT_PRODUCTS_DIR; }; BBCA02011FB0F10300E45F0F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = ../HotReloading/Sources/injectiond/AppDelegate.swift; sourceTree = ""; }; BBCA02031FB0F10300E45F0F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -557,6 +575,7 @@ BB6C87E92520D151005AFCFC /* SwiftStack.swift */, BB6C87E62520D151005AFCFC /* SwiftStats.swift */, BB6C87E22520D150005AFCFC /* SwiftMeta.swift */, + BB5291002ED8438F00070F80 /* SwiftRefs.swift */, BB6C87E52520D151005AFCFC /* SwiftArgs.swift */, BB64461F2545831200A83098 /* StringIndex.swift */, BB1C3245254BFAFC001EDFCC /* EasyPointer.swift */, @@ -604,7 +623,8 @@ BBE490CE1FB2368A003D41BB /* FileWatcher.swift */, BB39891C2D918AE90086A550 /* NextCompiler.swift */, BB39891B2D918AE90086A550 /* FrontendServer.swift */, - BB3989492D91C0880086A550 /* swift-frontend.sh */, + BB37AA542FC2EDFE006AA05B /* ControlServer.swift */, + BB321CE32FC2F6D6004AC0B4 /* LogManager.swift */, BB39892D2D919BFE0086A550 /* Common.swift */, BB3989252D918C140086A550 /* Defaults.swift */, BBCA025A1FB1132700E45F0F /* Xcode.h */, @@ -622,6 +642,7 @@ BBCA02081FB0F10400E45F0F /* Info.plist */, BBCA02581FB112F500E45F0F /* App.icns */, BBCA020B1FB0F10400E45F0F /* InjectionIII.entitlements */, + BBC3EE012F47EEB300FC785F /* swift-frontend.sh */, BBA7BE0223473D660067124D /* build_bundles.sh */, BBFE27E92B148E7400E47E61 /* copy_bundle.sh */, BBDF943C2349277A00334E08 /* InjectionIII-Bridging-Header.h */, @@ -656,7 +677,6 @@ BB439B8A1FABA65D00B4F50B /* SwiftEval.swift */, BBC03BBF2625F27C005C1A06 /* UnhidingEval.swift */, BB9642A527E339BC00C61CB7 /* ObjcInjection.swift */, - BB746D5F2BACB62B0001685F /* SwiftKeyPath.swift */, BB109FAF1FAECD92008C5218 /* SwiftInjection.swift */, BBCB31C8281677C700081CB6 /* SwiftInterpose.swift */, BB9642A727E33C8F00C61CB7 /* DeviceInjection.swift */, @@ -666,6 +686,8 @@ BBC03BC626282358005C1A06 /* SwiftSweeper.swift */, BB18D2E7274E1746004BB4A5 /* DynamicCast.swift */, BB3757002BCC26AE00CE5D05 /* ProfileSwiftUI.swift */, + BB746D5F2BACB62B0001685F /* KeyPaths.swift */, + BB34AA6C2E2A6C88007F5C12 /* Generics.swift */, BBD0AB3D262F24E4003ED7B1 /* DLKit.swift */, BBD0AB43262F256B003ED7B1 /* DLKitC.h */, BBD0AB40262F2549003ED7B1 /* DLKitC.c */, @@ -673,6 +695,8 @@ BB3757022BCC26DD00CE5D05 /* trie_dlops.mm */, BBD0AB3F262F2549003ED7B1 /* fishhook.c */, BBC03BBC2625F268005C1A06 /* Unhide.mm */, + BB37AA582FC2EEE5006AA05B /* InjectionTouchEvents.h */, + BB37AA562FC2EE24006AA05B /* InjectionTouchEvents.mm */, BBB64FE41FD576AA0020BE47 /* XprobeSwift-Bridging-Header.h */, BD35949D21A6C5DE0020EB94 /* Vaccine.swift */, ); @@ -762,6 +786,7 @@ buildRules = ( ); dependencies = ( + BBC3EE052F4CBFB800FC785F /* PBXTargetDependency */, ); name = feedcommands; packageProductDependencies = ( @@ -841,6 +866,7 @@ BBCA02421FB1065D00E45F0F /* Frameworks */, BBCA02431FB1065D00E45F0F /* Resources */, BB6C88222520D799005AFCFC /* Embed Frameworks */, + BBC3EE062F4CC07900FC785F /* ShellScript */, ); buildRules = ( ); @@ -969,7 +995,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BB39894A2D91C0880086A550 /* swift-frontend.sh in Resources */, BB3989462D91BE500086A550 /* feedcommands in Resources */, BB1EBC50258EA273001F2AA4 /* fishhook.h in Resources */, BBFE27EA2B148E7400E47E61 /* copy_bundle.sh in Resources */, @@ -981,6 +1006,7 @@ BBE490DC1FB2C643003D41BB /* InjectionError.tif in Resources */, BBCA02591FB112F500E45F0F /* App.icns in Resources */, BBCA02601FB122C300E45F0F /* InjectionIdle.tif in Resources */, + BBC3EE022F47EEB300FC785F /* swift-frontend.sh in Resources */, BB6306FE1FCD1A410021D30C /* Credits.rtf in Resources */, BBCA02611FB122C300E45F0F /* InjectionOK.tif in Resources */, BBCA02041FB0F10300E45F0F /* Assets.xcassets in Resources */, @@ -1041,16 +1067,33 @@ shellScript = "if [ \"$ACTION\" == \"install\" ]; then exit 0; fi\nbuildNumber=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\")\nbuildNumber=$(($buildNumber + 1))\nchmod +w \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n"; showEnvVarsInLog = 0; }; + BBC3EE062F4CC07900FC785F /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "perl -e 'print \"#define COMMANDS_VERSION @{[1_000_000 + int(rand() * ((1 << 31)) - 1_000_000)]}\\n\"' >/tmp/InjectionNextSalt.h\n"; + }; BBCA02321FB0F86E00E45F0F /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - buildActionMask = 8; + buildActionMask = 12; files = ( ); inputPaths = ( ); outputPaths = ( ); - runOnlyForDeploymentPostprocessing = 1; + runOnlyForDeploymentPostprocessing = 0; shellPath = "/bin/sh -x"; shellScript = "InjectionIII/build_bundles.sh\n"; showEnvVarsInLog = 0; @@ -1103,6 +1146,7 @@ BBD0AB52263298D9003ED7B1 /* SwiftLifetime.swift in Sources */, BBB9E988279BEC190085E3B9 /* ObjCBridge.mm in Sources */, BB6C87EF2520D152005AFCFC /* SwiftStats.swift in Sources */, + BB5291012ED8438F00070F80 /* SwiftRefs.swift in Sources */, BB6C87F02520D152005AFCFC /* SwiftAspects.swift in Sources */, BB6C87F12520D152005AFCFC /* SwiftInterpose.swift in Sources */, BB6C87F22520D152005AFCFC /* SwiftStack.swift in Sources */, @@ -1126,11 +1170,13 @@ BBC03BBD2625F269005C1A06 /* Unhide.mm in Sources */, BB3989262D918C140086A550 /* Defaults.swift in Sources */, BBEB704C1FD28C6F00127711 /* XcodeHash.m in Sources */, + BB321CE42FC2F6D6004AC0B4 /* LogManager.swift in Sources */, BB39892E2D919BFE0086A550 /* Common.swift in Sources */, BBB9E98C279BEE3B0085E3B9 /* DeviceServer.swift in Sources */, BBCA02021FB0F10300E45F0F /* AppDelegate.swift in Sources */, BB7D7CAC2512F8F00069FE2C /* UpdateCheck.swift in Sources */, BBE490D01FB2368A003D41BB /* FileWatcher.swift in Sources */, + BB37AA552FC2EDFE006AA05B /* ControlServer.swift in Sources */, BBCA02561FB1099500E45F0F /* InjectionServer.swift in Sources */, BBC03BC02625F27C005C1A06 /* UnhidingEval.swift in Sources */, BBBFD2D01FCFEE300057D899 /* SwiftEval.swift in Sources */, @@ -1157,8 +1203,10 @@ BBC03BC12625F27C005C1A06 /* UnhidingEval.swift in Sources */, BBCA02501FB107AF00E45F0F /* SwiftEval.swift in Sources */, BD35949E21A6C5DE0020EB94 /* Vaccine.swift in Sources */, + BB34AA6D2E2A6C8C007F5C12 /* Generics.swift in Sources */, BBCA02511FB107AF00E45F0F /* SwiftInjection.swift in Sources */, - BB746D602BACB62D0001685F /* SwiftKeyPath.swift in Sources */, + BB37AA572FC2EE24006AA05B /* InjectionTouchEvents.mm in Sources */, + BB746D602BACB62D0001685F /* KeyPaths.swift in Sources */, BB9642A627E339BE00C61CB7 /* ObjcInjection.swift in Sources */, BB04337A28D31A350007577F /* StandaloneInjection.swift in Sources */, BB16654425ECD828001407AE /* ClientBoot.mm in Sources */, @@ -1189,6 +1237,11 @@ target = BB3989322D91BA8A0086A550 /* feedcommands */; targetProxy = BB3989442D91BE420086A550 /* PBXContainerItemProxy */; }; + BBC3EE052F4CBFB800FC785F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BBCA02441FB1065D00E45F0F /* InjectionBundle */; + targetProxy = BBC3EE042F4CBFB800FC785F /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1329,7 +1382,18 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; + ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; + ENABLE_INCOMING_NETWORK_CONNECTIONS = NO; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; + ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO; + ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO; + ENABLE_RESOURCE_ACCESS_CALENDARS = NO; + ENABLE_RESOURCE_ACCESS_CAMERA = NO; + ENABLE_RESOURCE_ACCESS_CONTACTS = NO; + ENABLE_RESOURCE_ACCESS_LOCATION = NO; + ENABLE_RESOURCE_ACCESS_PRINTING = NO; + ENABLE_RESOURCE_ACCESS_USB = NO; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1357,7 +1421,18 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CODE_SIGN_IDENTITY = "Developer ID Application"; CODE_SIGN_STYLE = Manual; + ENABLE_APP_SANDBOX = YES; ENABLE_HARDENED_RUNTIME = YES; + ENABLE_INCOMING_NETWORK_CONNECTIONS = NO; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; + ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO; + ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO; + ENABLE_RESOURCE_ACCESS_CALENDARS = NO; + ENABLE_RESOURCE_ACCESS_CAMERA = NO; + ENABLE_RESOURCE_ACCESS_CONTACTS = NO; + ENABLE_RESOURCE_ACCESS_LOCATION = NO; + ENABLE_RESOURCE_ACCESS_PRINTING = NO; + ENABLE_RESOURCE_ACCESS_USB = NO; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; @@ -1399,6 +1474,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; @@ -1470,6 +1546,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -1636,8 +1713,8 @@ ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = InjectionIII/Info.plist; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MARKETING_VERSION = 5.1.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 5.2.1; PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.InjectionIII; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1660,8 +1737,8 @@ ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = InjectionIII/Info.plist; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MARKETING_VERSION = 5.1.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 5.2.1; PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.InjectionIII; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1871,7 +1948,7 @@ repositoryURL = "https://github.com/johnno1962/Popen"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 2.1.7; + minimumVersion = 2.2.1; }; }; BB98653C2D92F67600C092FA /* XCRemoteSwiftPackageReference "Fortify" */ = { @@ -1879,7 +1956,7 @@ repositoryURL = "https://github.com/johnno1962/Fortify"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 2.1.12; + minimumVersion = 2.2.0; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/InjectionIII/Info.plist b/InjectionIII/Info.plist index 2bab880f..2ae362c9 100644 --- a/InjectionIII/Info.plist +++ b/InjectionIII/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 8233 + 8431 LSApplicationCategoryType public.app-category.developer-tools LSMinimumSystemVersion diff --git a/InjectionIII/InjectionIII-Bridging-Header.h b/InjectionIII/InjectionIII-Bridging-Header.h index 90eeb5d0..c113b4a6 100644 --- a/InjectionIII/InjectionIII-Bridging-Header.h +++ b/InjectionIII/InjectionIII-Bridging-Header.h @@ -14,6 +14,6 @@ #import "RMWindowController.h" #import "../XprobePlugin/Sources/XprobeUI/include/XprobePluginMenuController.h" #endif - +#import "/tmp/InjectionNextSalt.h" #import "DDHotKeyCenter.h" #import diff --git a/InjectionIII/build_bundles.sh b/InjectionIII/build_bundles.sh index 59a1c37d..7fd40dc9 100755 --- a/InjectionIII/build_bundles.sh +++ b/InjectionIII/build_bundles.sh @@ -6,7 +6,7 @@ # Created by John Holdsworth on 04/10/2019. # Copyright © 2019 John Holdsworth. All rights reserved. # -# $Id: //depot/ResidentEval/InjectionIII/build_bundles.sh#92 $ +# $Id: //depot/ResidentEval/InjectionIII/build_bundles.sh#100 $ # # Injection has to assume a fixed path for Xcode.app as it uses @@ -43,14 +43,14 @@ function build_bundle () { } #build_bundle macOS MacOSX macosx && -if [ "$(hostname)" != "Johns-MacBook-Air.local" ]; then +if [ "$CONFIGURATION" = "Release" ]; then build_bundle xrOS XRSimulator xrsimulator + build_bundle tvOS AppleTVSimulator appletvsimulator && build_bundle watchOS WatchSimulator watchsimulator build_bundle tvdevOS AppleTVOS appletvos build_bundle xrdevOS XROS xros fi build_bundle iOS iPhoneSimulator iphonesimulator && -build_bundle tvOS AppleTVSimulator appletvsimulator && # iphoneos on M1 mac (requires Sandbox switched off) build_bundle maciOS iPhoneOS iphoneos && @@ -67,6 +67,18 @@ for thing in Modules Resources Headers; do ln -sf Versions/Current/$thing $CODESIGNING_FOLDER_PATH/Contents/Resources/macOSInjection.bundle/Contents/Frameworks/SwiftTrace.framework done && +cp -f InjectionNext/App/InjectionNext/swift-frontend.sh $CODESIGNING_FOLDER_PATH/Contents/Resources && + +rsync -au \ + --exclude node_modules \ + --exclude .npm \ + --exclude 'npm-debug.log*' \ + --exclude .DS_Store \ + InjectionNext/mcp-server "$CODESIGNING_FOLDER_PATH/Contents/Resources" && +perl -pi.bak -e 's@InjectionNext@InjectionIII@g' \ + $CODESIGNING_FOLDER_PATH/Contents/Resources/{mcp-server/README.md,swift-frontend.sh} && +rm $CODESIGNING_FOLDER_PATH/Contents/Resources/{mcp-server/README.md,swift-frontend.sh}.bak && + # This seems to be a bug producing .swiftinterface files. perl -pi.bak -e 's/SwiftTrace.(Swift(Trace|Meta)|dyld_interpose_tuple|rebinding)/$1/g' $CODESIGNING_FOLDER_PATH/Contents/Resources/{macOSInjection.bundle/Contents,{i,maci,tv,xr}OSInjection.bundle}/Frameworks/SwiftTrace.framework/Modules/*/*.swiftinterface && perl -pi.bak -e 's@(import _Concurrency)@// $1@g' $CODESIGNING_FOLDER_PATH/Contents/Resources/{macOSInjection.bundle/Contents,{i,maci,tv,xr}OSInjection.bundle}/Frameworks/SwiftTrace.framework/Modules/*/*.swiftinterface && diff --git a/InjectionIII/swift-frontend.sh b/InjectionIII/swift-frontend.sh deleted file mode 100755 index 6d4ed0e4..00000000 --- a/InjectionIII/swift-frontend.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# swift-frontend.sh -# InjectionNext -# -# Created by John Holdsworth on 23/02/2025. -# Copyright © 2025 John Holdsworth. All rights reserved. - -FRONTEND="$0" -"$FRONTEND.save" "$@" && -if [ "-c" == "$2" ]; then "/Applications/InjectionIII.app/Contents/Resources/feedcommands" \ - "1.0" "$PWD" "$FRONTEND.save" "$@" >>/tmp/feedcommands.log 2>&1 & fi diff --git a/InjectionNext b/InjectionNext index 634878bb..ac2f9f65 160000 --- a/InjectionNext +++ b/InjectionNext @@ -1 +1 @@ -Subproject commit 634878bb8c10be33ce1b47317bbcb6b6fb73e402 +Subproject commit ac2f9f6533b29dee9dc8f5eaaa54b9188cdd3bb1 diff --git a/README.md b/README.md index 9ecc2ce1..8ebc95b6 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,17 @@ will if you use "Editor/Add Build Setting/Add User-Defined Setting" to add a value for `EMIT_FRONTEND_COMMAND_LINES` (set to "YES") to your project's `Debug` build settings, then InjectionIII can continue to work as before. +Versions 5.2.1+ of the app support an MCP server contained in the `Resources` +directory of the app bundle. Consult mcp-server/README.md for details. +Running the server is opt-in by setting the default `mcpServer` to true. + +### InjectionNext + +InjectionIII now has a start-over successor in the very similar +[InjectionNext](https://github.com/johnno1962/InjectionNext) project. +If you encounter a limitation of InjectionIII it's recommended giving +InjectionNext a try to see if the issue has been resolved there. + ### How to use it Setting up your projects to use injection is now as simple as downloading @@ -42,7 +53,8 @@ Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/macOSInjection.b ``` It's also important to add the options `-Xlinker` and `-interposable` (without double quotes and on separate lines) to the "Other Linker Flags" of targets in your project -(for the `Debug` configuration only) to enable "interposing" (see the explanation below). +to enable "interposing" (see the explanation below). This must be for the `Debug` +configuration only or you can experience problems with TestFlight. ![Icon](interposable.png) @@ -141,14 +153,6 @@ var body: some View { You can leave these modifications in your production code as, for a `Release` build they optimise out to a no-op. -#### Xcode 16 - -New in Xcode 16 is `SWIFT_ENABLE_OPAQUE_TYPE_ERASURE` build setting. -This setting is turned ON by default and you don't need to erase view -body explicitly. You'll still need to `@ObserveInjection` to force redraws. - -For more info, see [Xcode 16.2 release notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-16_2-release-notes). - ### Injection on an iOS, tvOS or visionOS device This can work but you will need to actually run one of the [github @@ -272,8 +276,8 @@ minimal implementation of standalone injection for reference. Just add this Swift package and you should be able to inject in the simulator. [InjectionNext](https://github.com/johnno1962/InjectionNext) is a -currently experimental version of Injection that should be faster and -more reliable for large projects. It integrates into a debugging flag of +new start-over version of Injection that should be faster and more +reliable for large projects. It integrates into a debugging flag of Xcode to find out how to recompile files to avoid parsing build logs and re-uses the client implementation of injection from `InjectionLite`. To use with external editors such as `Cursor`, InjectionNext can also @@ -330,6 +334,8 @@ store edge paths so they can be coloured (line 66 and 303) in "canviz-0.1/canviz It also includes [CodeMirror](http://codemirror.net/) JavaScript editor for the code to be evaluated using injection under an MIT license. +After 100 injections you'll be reminded you can sponsor this project on GitHub. + The fabulous app icon is thanks to Katya of [pixel-mixer.com](http://pixel-mixer.com/). -$Date: 2025/04/07 $ +$Date: 2026/05/25 $ diff --git a/SwiftRegex5 b/SwiftRegex5 index 60fde2e2..c8d5d849 160000 --- a/SwiftRegex5 +++ b/SwiftRegex5 @@ -1 +1 @@ -Subproject commit 60fde2e2e3b691abb35ba4b67e3f0adc82f6d1f5 +Subproject commit c8d5d849da2f79b955e41d32da372e3e894a890c diff --git a/SwiftTrace b/SwiftTrace index 589f3714..14800f58 160000 --- a/SwiftTrace +++ b/SwiftTrace @@ -1 +1 @@ -Subproject commit 589f37149d5b32cbdd44c70809df23b4f4fa0260 +Subproject commit 14800f5854f45e14afd24b93d19440c31cb13b7b