Skip to content

Commit edf3a73

Browse files
authored
Merge pull request #13 from p-x9/feature/ui-tree-accept-pointer
Enhanced 'ui tree' command to accept pointer values instead of property
2 parents 26c769d + 08ffb9d commit edf3a73

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ optional arguments:
5454
--window WINDOW
5555
Specify the target window (default: None)
5656
--view VIEW
57-
Specify the target view (default: None)
57+
Specify the target view (property or address) (default: None)
5858
--vc VC
59-
Specify the target viewController (default: None)
59+
Specify the target viewController (property or address) (default: None)
6060
--layer LAYER
61-
Specify the target CALayer (default: None)
61+
Specify the target CALayer (property or address) (default: None)
6262
```
6363
6464
#### Example

src/ui.py

+23-7
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def parse_args(args: list[str]) -> argparse.Namespace:
3636
tree_command.add_argument("--with-address", action="store_true", help="Print address of ui")
3737

3838
tree_command.add_argument("--window", type=str, help="Specify the target window")
39-
tree_command.add_argument("--view", type=str, help="Specify the target view")
40-
tree_command.add_argument("--vc", type=str, help="Specify the target viewController")
41-
tree_command.add_argument("--layer", type=str, help="Specify the target CALayer")
39+
tree_command.add_argument("--view", type=str, help="Specify the target view (property or address)")
40+
tree_command.add_argument("--vc", type=str, help="Specify the target viewController (property or address)")
41+
tree_command.add_argument("--layer", type=str, help="Specify the target CALayer (property or address)")
4242

4343
return parser.parse_args(args)
4444

@@ -78,14 +78,16 @@ def tree(args: argparse.Namespace, debugger: lldb.SBDebugger, result: lldb.SBCom
7878
typealias NSUIApplication = NSApplication
7979
"""
8080

81+
resolve_adress(args)
82+
8183
script += util.read_script_file('swift/tree.swift')
82-
if args.window:
84+
if args.window is not None:
8385
script += f"\n windowHierarchy({args.window}, mode: \"{mode}\", depth: {depth}, address: {with_address})"
84-
elif args.view:
86+
elif args.view is not None:
8587
script += f"\n viewHierarchy({args.view}, mode: \"{mode}\", depth: {depth}, address: {with_address})"
86-
elif args.vc:
88+
elif args.vc is not None:
8789
script += f"\n viewControllerHierarchy({args.vc}, mode: \"{mode}\", depth: {depth}, address: {with_address})"
88-
elif args.layer:
90+
elif args.layer is not None:
8991
script += f"\n layerHierarchy({args.layer}, mode: \"{mode}\", depth: {depth}, address: {with_address})"
9092
else:
9193
script += f"\n windowHierarchy(NSUIApplication.shared.keyWindow, mode: \"{mode}\", depth: {depth}, address: {with_address})"
@@ -94,3 +96,17 @@ def tree(args: argparse.Namespace, debugger: lldb.SBDebugger, result: lldb.SBCom
9496
debugger,
9597
script
9698
)
99+
100+
101+
def resolve_adress(args: argparse.Namespace):
102+
try:
103+
if args.window is not None:
104+
args.window = f"Unmanaged<NSUIWindow>.fromOpaque(.init(bitPattern: {args.window})!).takeUnretainedValue()"
105+
elif args.view is not None:
106+
args.view = f"Unmanaged<NSUIView>.fromOpaque(.init(bitPattern: {args.view})!).takeUnretainedValue()"
107+
elif args.vc is not None:
108+
args.vc = f"Unmanaged<NSUIViewController>.fromOpaque(.init(bitPattern: {args.vc})!).takeUnretainedValue()"
109+
elif args.layer is not None:
110+
args.layer = f"Unmanaged<CALayer>.fromOpaque(.init(bitPattern: {args.layer})!).takeUnretainedValue()"
111+
except ValueError:
112+
pass

0 commit comments

Comments
 (0)