逆向分析Preferences.app中安装证书的函数

当IOS安装证书时,会进入Preferences.app弹出以上View。

我尝试根据书中160页的步骤,逆向出Install按钮的UI函数。
下面是我的过程以及遇到的问题。

首先,

cy# [[UIApp keyWindow]recursiveDescription]

得到视图结构

@"<UIWindow: 0x15e12b20; frame = (0 0; 768 1024); autoresize = H; gestureRecognizers = <NSArray: 0x15d12120>; layer = <UIWindowLayer: 0x15e15c20>>
   | <UILayoutContainerView: 0x15d62d10; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x15d62e20>>
   |    | <UIView: 0x15d58e80; frame = (0 0; 768 64); layer = <CALayer: 0x15d45be0>>
   |    | <UILayoutContainerView: 0x15d62e80; frame = (301 0; 723 768); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x15d65bc0>; layer = <CALayer: 0x15d62f00>>
   |    |    | <UINavigationTransitionView: 0x15d63610; frame = (0 0; 723 768); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x15d63720>>
   |    |    |    | <UIViewControllerWrapperView: 0x17016910; frame = (0 0; 723 768); autoresize = W+H; layer = <CALayer: 0x170168b0>>
   |    |    |    |    | <UIView: 0x17014ad0; frame = (0 0; 723 768); autoresize = W+H; layer = <CALayer: 0x17014b30>>
   |    |    |    |    |    | <UITableView: 0x162ed200; frame = (0 0; 723 768); autoresize = W+H; gestureRecognizers = <NSArray: 0x17014490>; layer = <CALayer: 0x170143f0>; contentOffset: {0, -64}>
   |    |    |    |    |    |    | <UITableViewWrapperView: 0x17014790; frame = (0 0; 723 768); autoresize = W+H; layer = <CALayer: 0x17014800>>
   |    |    |    |    |    |    | <UIImageView: 0x170169e0; frame = (0 700.5; 723 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x17016ba0>>
   |    |    |    |    |    |    | <UITableViewHeaderFooterView: 0x15f10950; frame = (0 35; 723 30); text = 'No profiles are currently...'; autoresize = W; layer = <CALayer: 0x15f28ac0>>
   |    |    |    |    |    |    |    | <_UITableViewHeaderFooterViewBackground: 0x15e72000; frame = (0 0; 695 30); autoresize = W+H; layer = <CALayer: 0x15f18660>>
   |    |    |    |    |    |    |    | <_UITableViewHeaderFooterContentView: 0x15f262b0; frame = (0 0; 695 30); layer = <CALayer: 0x15e72e20>>
   |    |    |    |    |    |    |    |    | <_UITableViewHeaderFooterViewLabel: 0x15ef2390; frame = (43 6.5; 212 17); text = 'No profiles are currently...'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ef8d60>>
   |    |    |    |    |    |    | <UIImageView: 0x17016130; frame = (719.5 555; 3.5 149); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x17016850>>
   |    |    | <UINavigationBar: 0x15d62f30; frame = (0 20; 723 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x15d633a0>; layer = <CALayer: 0x15d62ff0>>
   |    |    |    | <_UINavigationBarBackground: 0x15d63040; frame = (0 -20; 723 64); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x15d63170>>
   |    |    |    |    | <_UIBackdropView: 0x15e5d010; frame = (0 0; 723 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x15d679f0>>
   |    |    |    |    |    | <_UIBackdropEffectView: 0x15d683c0; frame = (0 0; 723 64); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x15d685c0>>
   |    |    |    |    |    | <UIView: 0x15d68eb0; frame = (0 0; 723 64); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x15d68a30>>
   |    |    |    |    | <UIImageView: 0x15d631c0; frame = (0 64; 723 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15d63240>>
   |    |    |    | <UINavigationItemButtonView: 0x15e6dbd0; frame = (8 6; 79 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f2a640>>
   |    |    |    |    | <UILabel: 0x15f1a590; frame = (19 5; 60 22); text = 'General'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f1a640>>
   |    |    |    | <UINavigationItemView: 0x17014c00; frame = (336.5 8; 50.5 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17014bc0>>
   |    |    |    |    | <UILabel: 0x17014c80; frame = (0 3; 50.5 22); text = 'Profile'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17014d30>>
   |    |    |    | <_UINavigationBarBackIndicatorView: 0x15d63490; frame = (8 12; 12.5 20.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d635a0>>
   |    | <UILayoutContainerView: 0x15d34850; frame = (0 0; 300 768); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x15e4aa60>; layer = <CALayer: 0x15e4c030>>
   |    |    | <UINavigationTransitionView: 0x15e57180; frame = (0 0; 300 768); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x15e58070>>
   |    |    |    | <UIViewControllerWrapperView: 0x15e82860; frame = (0 0; 300 768); autoresize = W+H; layer = <CALayer: 0x15e82950>>
   |    |    |    |    | <UIView: 0x15d6ce90; frame = (0 0; 300 768); autoresize = W+H; layer = <CALayer: 0x15d6cf20>>
   |    |    |    |    |    | <UITableView: 0x16acea00; frame = (0 0; 300 768); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e13e10>; layer = <CALayer: 0x15e599b0>; contentOffset: {0, -64}>
   |    |    |    |    |    |    | <UITableViewWrapperView: 0x15e5d6f0; frame = (0 0; 300 768); autoresize = W+H; layer = <CALayer: 0x15e54be0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e8f220; baseClass = UITableViewCell; frame = (0 756; 300 44); text = 'Reminders'; hidden = YES; autoresize = W; tag = 1; layer = <CALayer: 0x15e8f3e0>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e8f410; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8f680>; layer = <CALayer: 0x15e8f5e0>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e8f870; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8fa80>; layer = <CALayer: 0x15e8f8e0>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e8fad0; frame = (59 12; 83 21); text = 'Reminders'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8fb80>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e8fff0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e90070>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e90320; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e904a0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e8dd80; baseClass = UITableViewCell; frame = (0 712; 300 44); text = 'Notes'; hidden = YES; autoresize = W; tag = 1; layer = <CALayer: 0x15e8df40>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e8df70; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8e1e0>; layer = <CALayer: 0x15e8e140>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e8e3d0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8e5e0>; layer = <CALayer: 0x15e8e440>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e8e630; frame = (59 12; 46 21); text = 'Notes'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8e6e0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e8ece0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8ed60>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e8f010; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8f190>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e8d1a0; baseClass = UITableViewCell; frame = (0 668; 300 44); text = 'Mail, Contacts, Calendars'; autoresize = W; tag = 1; layer = <CALayer: 0x15e8d360>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e8d390; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8d600>; layer = <CALayer: 0x15e8d560>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e8d7f0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8da00>; layer = <CALayer: 0x15e8d860>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e8da50; frame = (59 12; 199 21); text = 'Mail, Contacts, Calendars'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8db00>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15d82ba0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d82c20>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e8dbd0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8dcf0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e8be90; baseClass = UITableViewCell; frame = (0 624; 300 44); text = 'iCloud'; autoresize = W; tag = 1; layer = <CALayer: 0x15e8c050>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e8c080; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8c2f0>; layer = <CALayer: 0x15e8c250>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e8c4e0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8c6f0>; layer = <CALayer: 0x15e8c550>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e8c740; frame = (59 12; 50 21); text = 'iCloud'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8c7f0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e8cc60; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8cce0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e8cf90; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8d110>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15ea33a0; frame = (0 0; 300 0.5); layer = <CALayer: 0x15ea3410>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e8ab80; baseClass = UITableViewCell; frame = (0 545; 300 44); text = 'Privacy'; autoresize = W; tag = 1; layer = <CALayer: 0x15e8ad40>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e8ad70; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8afe0>; layer = <CALayer: 0x15e8af40>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e8b1d0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8b3e0>; layer = <CALayer: 0x15e8b240>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e8b430; frame = (59 12; 57 21); text = 'Privacy'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8b4e0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e8b950; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8b9d0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e8bc80; frame = (0 43.5; 300 0.5); layer = <CALayer: 0x15e8be00>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e89870; baseClass = UITableViewCell; frame = (0 501; 300 44); text = 'Passcode'; autoresize = W; tag = 1; layer = <CALayer: 0x15e89a30>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e89a60; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e89cd0>; layer = <CALayer: 0x15e89c30>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e89ec0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8a0d0>; layer = <CALayer: 0x15e89f30>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e8a120; frame = (59 12; 76 21); text = 'Passcode'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8a1d0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e8a640; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8a6c0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e8a970; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8aaf0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e892a0; baseClass = UITableViewCell; frame = (0 457; 300 44); text = 'Sounds'; autoresize = W; tag = 1; layer = <CALayer: 0x15e50a40>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e89460; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e50af0>; layer = <CALayer: 0x15e50a70>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e82ee0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e838d0>; layer = <CALayer: 0x15e82f50>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e84360; frame = (59 12; 59 21); text = 'Sounds'; userInteractionEnabled = NO; layer = <CALayer: 0x15e83920>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e88070; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e880f0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e896b0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e897a0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e88f10; baseClass = UITableViewCell; frame = (0 413; 300 44); text = 'Wallpapers & Brightness'; autoresize = W; tag = 1; layer = <CALayer: 0x15e7df00>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e890d0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e82ca0>; layer = <CALayer: 0x15e82c70>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e568b0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e55e80>; layer = <CALayer: 0x15e84b30>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e512b0; frame = (59 12; 188 21); text = 'Wallpapers & Brightness'; userInteractionEnabled = NO; layer = <CALayer: 0x15e51360>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e4a620; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e14f10>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e82660; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e826d0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15d7f8e0; baseClass = UITableViewCell; frame = (0 290; 300 44); text = 'Do Not Disturb'; autoresize = W; tag = 2; layer = <CALayer: 0x15d7faa0>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15d7fad0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d7fd60>; layer = <CALayer: 0x15d7fca0>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15d7ff50; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d80160>; layer = <CALayer: 0x15d7ffc0>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15d801b0; frame = (59 12; 115 21); text = 'Do Not Disturb'; userInteractionEnabled = NO; layer = <CALayer: 0x15d80260>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15d80730; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d807b0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15d80a60; frame = (0 43.5; 300 0.5); layer = <CALayer: 0x15d80be0>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15d7e5d0; baseClass = UITableViewCell; frame = (0 246; 300 44); text = 'Control Center'; autoresize = W; tag = 1; layer = <CALayer: 0x15d7e790>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15d7e7c0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d7ea30>; layer = <CALayer: 0x15d7e990>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15d7ec20; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d7ee30>; layer = <CALayer: 0x15d7ec90>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15d7ee80; frame = (59 12; 113 21); text = 'Control Center'; userInteractionEnabled = NO; layer = <CALayer: 0x15d7ef30>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15d7f3a0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d7f420>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15d7f6d0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15d7f850>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15d7de50; baseClass = UITableViewCell; frame = (0 202; 300 44); text = 'Notification Center'; autoresize = W; tag = 2; layer = <CALayer: 0x15d42930>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15d7e010; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d429e0>; layer = <CALayer: 0x15d42960>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15d69510; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d6d1a0>; layer = <CALayer: 0x15d39930>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15d6d1e0; frame = (59 12; 144 21); text = 'Notification Center'; userInteractionEnabled = NO; layer = <CALayer: 0x15d6d290>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15d7d930; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d7d9b0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15d7e3c0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15d7e550>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15dabcb0; frame = (0 0; 300 0.5); layer = <CALayer: 0x15dabd20>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15d7dac0; baseClass = UITableViewCell; frame = (0 123; 300 44); text = 'Bluetooth'; autoresize = W; tag = 2; layer = <CALayer: 0x15d69380>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15d7dc80; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d67ad0>; layer = <CALayer: 0x15d67aa0>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15d39470; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d72a90>; layer = <CALayer: 0x15d34a60>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15d6de40; frame = (59 12; 75 21); text = 'Bluetooth'; userInteractionEnabled = NO; layer = <CALayer: 0x15d6def0>>
   |    |    |    |    |    |    |    |    |    |    | <UITableViewLabel: 0x15d7d440; frame = (262 12; 23 21); text = 'Off'; userInteractionEnabled = NO; layer = <CALayer: 0x15d7d4f0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e0de00; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e776d0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15d42100; frame = (0 43.5; 300 0.5); layer = <CALayer: 0x15d42170>>
   |    |    |    |    |    |    |    | <PSTableCell: 0x15e88320; baseClass = UITableViewCell; frame = (0 79; 300 44); text = 'WLAN'; autoresize = W; tag = 2; layer = <CALayer: 0x15e88640>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15e88810; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e88b10>; layer = <CALayer: 0x15e88a70>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e88d00; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d40e90>; layer = <CALayer: 0x15e5cfe0>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15d6d030; frame = (59 12; 49 21); text = 'WLAN'; userInteractionEnabled = NO; layer = <CALayer: 0x15d62c50>>
   |    |    |    |    |    |    |    |    |    |    | <UITableViewLabel: 0x15d6d530; frame = (210 12; 75 21); text = 'CU_vPH6'; userInteractionEnabled = NO; layer = <CALayer: 0x15d6cac0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e828d0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e5a670>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15d6dd00; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15d5b800>>
   |    |    |    |    |    |    |    | <PSSwitchTableCell: 0x15d7d000; baseClass = UITableViewCell; frame = (0 35; 300 44); text = 'Airplane Mode'; autoresize = W; tag = 6; layer = <CALayer: 0x15e82db0>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15d7d5a0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e82e20>; layer = <CALayer: 0x15d7d840>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15e83600; frame = (0 0; 234 43.5); gestureRecognizers = <NSArray: 0x15e83dc0>; layer = <CALayer: 0x15e83790>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15e83ed0; frame = (59 12; 112 21); text = 'Airplane Mode'; userInteractionEnabled = NO; layer = <CALayer: 0x15e83f80>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e86e10; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e86e90>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15e87f00; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e88040>>
   |    |    |    |    |    |    |    |    |    | <UISwitch: 0x15e849f0; frame = (234 6; 51 31); layer = <CALayer: 0x15e84b80>>
   |    |    |    |    |    |    |    |    |    |    | <_UISwitchInternalViewNeueStyle1: 0x15e84e50; frame = (0 0; 51 31); gestureRecognizers = <NSArray: 0x15e869c0>; layer = <CALayer: 0x15e84fc0>>
   |    |    |    |    |    |    |    |    |    |    |    | <UIView: 0x15e85340; frame = (15.5 0; 35.5 31); clipsToBounds = YES; layer = <CALayer: 0x15e853a0>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIView: 0x15e85190; frame = (-15.5 0; 51 31); layer = <CALayer: 0x15e851f0>>
   |    |    |    |    |    |    |    |    |    |    |    | <UIView: 0x15e852b0; frame = (0 0; 15.5 31); clipsToBounds = YES; layer = <CALayer: 0x15e85310>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIView: 0x15e85220; frame = (0 0; 51 31); layer = <CALayer: 0x15e85280>>
   |    |    |    |    |    |    |    |    |    |    |    | <UIView: 0x15e86620; frame = (0 0; 51 31); layer = <CALayer: 0x15e86680>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e86370; frame = (39 16; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0x15e86540>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e86570; frame = (12 16; 0 0); alpha = 0; userInteractionEnabled = NO; layer = <CALayer: 0x15e865f0>>
   |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15e85480; frame = (-13 -6; 57 43.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e861f0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15daa1b0; frame = (0 0; 300 0.5); layer = <CALayer: 0x15daa910>>
   |    |    |    |    |    |    |    | <PSBadgedTableCell: 0x15ea0a50; baseClass = UITableViewCell; frame = (0 369; 300 44); text = 'General'; autoresize = W; tag = 1; layer = <CALayer: 0x15ea0c20>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15ea0c50; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15ea0ee0>; layer = <CALayer: 0x15ea0e20>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UIView: 0x15da6bb0; frame = (0 -0.5; 300 44.5); layer = <CALayer: 0x15da6c10>>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15ea10d0; frame = (0 0; 300 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x15ea12e0>; layer = <CALayer: 0x15ea1140>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15ea1330; frame = (59 12; 60 21); text = 'General'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ea13e0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15da5760; frame = (260 11; 30 21); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15da57e0>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15da4e50; frame = (260 10; 30 21); text = '1'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15da5810>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15da6ac0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15da64e0>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15da70d0; frame = (59 43.5; 241 0.5); hidden = YES; layer = <CALayer: 0x15da7140>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15ea4190; frame = (0 0; 300 0.5); hidden = YES; layer = <CALayer: 0x15ea4200>>
   |    |    |    |    |    |    |    | <PSBadgedTableCell: 0x15d80cc0; baseClass = UITableViewCell; frame = (0 369; 300 44); text = 'General'; hidden = YES; autoresize = W; tag = 1; layer = <CALayer: 0x15d80fe0>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x15d811b0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d81400>; layer = <CALayer: 0x15d81380>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UIView: 0x15d81e60; frame = (0 -0.5; 300 44.5); layer = <CALayer: 0x15d81ec0>>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x15d815f0; frame = (0 0; 300 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x15d81800>; layer = <CALayer: 0x15d81660>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15d81850; frame = (59 12; 60 21); text = 'General'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d81900>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15d81db0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d81e30>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15d82100; frame = (59 43.5; 241 0.5); hidden = YES; layer = <CALayer: 0x15d82260>>
   |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x15ea46e0; frame = (0 0; 300 0.5); hidden = YES; layer = <CALayer: 0x15ea4750>>
   |    |    |    |    |    |    | <UIImageView: 0x15d991e0; frame = (0 764.5; 300 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x15d99610>>
   |    |    |    |    |    |    | <UIImageView: 0x15d998c0; frame = (294.5 2; 3.5 293); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x15d99990>>
   |    |    | <UINavigationBar: 0x15e50b60; frame = (0 20; 300 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x15e54c20>; layer = <CALayer: 0x15e50d80>>
   |    |    |    | <_UINavigationBarBackground: 0x15e51210; frame = (0 -20; 300 64); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x15e513b0>>
   |    |    |    |    | <_UIBackdropView: 0x15d6a6e0; frame = (0 0; 300 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x15d6a940>>
   |    |    |    |    |    | <_UIBackdropEffectView: 0x15e5e090; frame = (0 0; 300 64); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x15e5e190>>
   |    |    |    |    |    | <UIView: 0x15e5e1c0; frame = (0 0; 300 64); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x15e5e220>>
   |    |    |    |    | <UIImageView: 0x15d3e2a0; frame = (0 64; 300 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15d3edc0>>
   |    |    |    | <UINavigationItemView: 0x15d6cfb0; frame = (117.5 8; 65 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d6d100>>
   |    |    |    |    | <UILabel: 0x15d6d480; frame = (0 3; 65 22); text = 'Settings'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d6d600>>
   |    |    |    | <_UINavigationBarBackIndicatorView: 0x15e56a30; frame = (8 12; 12.5 20.5); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e56b30>>
   | <UIDimmingView: 0x15dfbef0; frame = (0 0; 768 1024); opaque = NO; autoresize = W+H; layer = <CALayer: 0x15dfbf70>>
   | <UIDropShadowView: 0x15dfbd10; frame = (84 242; 620 540); transform = [0, -1, 1, 0, 0, 0]; autoresize = LM+RM+TM+BM; layer = <CALayer: 0x15d93140>>
   |    | <UILayoutContainerView: 0x15f2cbb0; frame = (0 0; 540 620); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x15d92f50>; layer = <CALayer: 0x15f16830>>
   |    |    | <UINavigationTransitionView: 0x15d61e30; frame = (0 0; 540 620); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x15d917c0>>
   |    |    |    | <UIViewControllerWrapperView: 0x1700d170; frame = (0 0; 540 620); autoresize = W+H; layer = <CALayer: 0x1700d060>>
   |    |    |    |    | <UIView: 0x15d012e0; frame = (0 0; 540 620); autoresize = W+H; layer = <CALayer: 0x15d01340>>
   |    |    |    |    |    | <UITableView: 0x16371000; frame = (0 0; 540 620); autoresize = W+H; gestureRecognizers = <NSArray: 0x15db9a10>; layer = <CALayer: 0x15d025c0>; contentOffset: {0, -44}>
   |    |    |    |    |    |    | <UITableViewWrapperView: 0x15d02920; frame = (0 0; 540 620); autoresize = W+H; layer = <CALayer: 0x15d02990>>
   |    |    |    |    |    |    |    | <UITableViewCell: 0x1700c310; frame = (0 288; 540 44); text = 'More Details'; autoresize = W; tag = 1; layer = <CALayer: 0x1700c4a0>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x1700c4d0; frame = (28 0; 484 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x1700be90>; layer = <CALayer: 0x1700c6a0>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UIGroupTableViewCellBackground: 0x15f31550; frame = (0 0; 484 44); autoresize = W; layer = <CALayer: 0x15f31470>>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x1700c8e0; frame = (0 0; 451 43); gestureRecognizers = <NSArray: 0x1700caf0>; layer = <CALayer: 0x1700c950>>
   |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x1700cb40; frame = (15 0; 434 43); text = 'More Details'; userInteractionEnabled = NO; layer = <CALayer: 0x1700cbf0>>
   |    |    |    |    |    |    |    |    |    | <UIButton: 0x1700cd80; frame = (461 15; 8 12.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1700ce70>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1700cf20; frame = (0 0; 8 12.5); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1700cfa0>>
   |    |    |    |    |    |    |    | <MCDetailsDescriptionTableCell: 0x1700b0e0; baseClass = UITableViewCell; frame = (0 137; 540 151); autoresize = W; layer = <CALayer: 0x1700b270>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x1700b420; frame = (28 0; 484 151); autoresize = W+H; gestureRecognizers = <NSArray: 0x1700b350>; layer = <CALayer: 0x1700b2a0>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UIGroupTableViewCellBackground: 0x15f14f00; frame = (0 0; 484 151); autoresize = W; layer = <CALayer: 0x15f15740>>
   |    |    |    |    |    |    |    |    |    |    | <UIView: 0x15f31220; frame = (1 150.5; 482 0.5); hidden = YES; autoresize = W+TM; layer = <CALayer: 0x15f311d0>>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x1700b7b0; frame = (0 0; 484 150); gestureRecognizers = <NSArray: 0x1700ba50>; layer = <CALayer: 0x1700b820>>
   |    |    |    |    |    |    |    |    |    |    | <MCDetailsDescriptionView: 0x1700baa0; frame = (0 0; 320 151); opaque = NO; layer = <CALayer: 0x1700bb20>>
   |    |    |    |    |    |    |    | <MCDetailsHeaderCell: 0x17009120; baseClass = UITableViewCell; frame = (0 35; 540 102); autoresize = W; layer = <CALayer: 0x170090b0>>
   |    |    |    |    |    |    |    |    | <UITableViewCellScrollView: 0x170092b0; frame = (28 0; 484 102); autoresize = W+H; gestureRecognizers = <NSArray: 0x17009540>; layer = <CALayer: 0x17009480>; contentOffset: {0, 0}>
   |    |    |    |    |    |    |    |    |    | <UIGroupTableViewCellBackground: 0x1700d550; frame = (0 0; 484 102); autoresize = W; layer = <CALayer: 0x1700d4e0>>
   |    |    |    |    |    |    |    |    |    |    | <UIView: 0x1700d8b0; frame = (1 101.5; 482 0.5); hidden = YES; autoresize = W+TM; layer = <CALayer: 0x1700d820>>
   |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x17009730; frame = (0 0; 484 101); gestureRecognizers = <NSArray: 0x17009940>; layer = <CALayer: 0x170097a0>>
   |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1700a940; frame = (15 14; 78 78); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17009a30>>
   |    |    |    |    |    |    |    |    |    |    | <MCDetailsHeaderContentView: 0x17009a60; frame = (105 14; 367 78); opaque = NO; autoresizesSubviews = NO; layer = <CALayer: 0x17009af0>>
   |    |    |    |    |    |    |    |    |    |    |    | <MCActionButton: 0x15f29b00; baseClass = UIButton; frame = (293 53; 74 25); opaque = NO; layer = <CALayer: 0x15f2ca30>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15f17340; frame = (0 0; 74 25); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f173c0>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIButtonLabel: 0x15f2ed60; frame = (17 4; 40 17); text = 'Install'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ef3cf0>>
   |    |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15f17660; frame = (0 0; 367 22); text = 'Verify Settings'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f17710>>
   |    |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x15f30b30; frame = (0 22; 367 17); text = 'freemyapps.com'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f30be0>>
   |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1700aec0; frame = (0 58; 13 13); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1700adf0>>
   |    |    |    |    |    |    |    |    |    |    |    | <MCUIGradientLabel: 0x17009b90; frame = (16 56; 52.05 17.895); text = 'Verified'; opaque = NO; layer = <CALayer: 0x1700abc0>>
   |    |    |    |    |    |    | <UIImageView: 0x170137d0; frame = (0 616.5; 540 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x17013850>>
   |    |    |    |    |    |    | <UIImageView: 0x170139b0; frame = (536.5 250; 3.5 370); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x17013a80>>
   |    |    | <UINavigationBar: 0x15f2ebe0; frame = (0 0; 540 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x15d8b9d0>; layer = <CALayer: 0x15d92c50>>
   |    |    |    | <_UINavigationBarBackground: 0x15de7b80; frame = (0 0; 540 44); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x15d92bf0>>
   |    |    |    |    | <_UIBackdropView: 0x15d974e0; frame = (0 0; 540 44); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x15d97730>>
   |    |    |    |    |    | <_UIBackdropEffectView: 0x15d068d0; frame = (0 0; 540 44); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x15d06940>>
   |    |    |    |    |    | <UIView: 0x15d06970; frame = (0 0; 540 44); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x15d069d0>>
   |    |    |    |    | <UIImageView: 0x15f2eca0; frame = (0 44; 540 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15f143c0>>
   |    |    |    | <UINavigationButton: 0x15fc2210; frame = (16 8; 54 30); opaque = NO; layer = <CALayer: 0x15ebc160>>
   |    |    |    |    | <UIButtonLabel: 0x15fc1670; frame = (0 4; 54 21); text = 'Cancel'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15fc2340>>
   |    |    |    | <UINavigationItemView: 0x15d01410; frame = (219 8; 102 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d013d0>>
   |    |    |    |    | <UILabel: 0x15d01490; frame = (0 3; 102 22); text = 'Install Profile'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d01540>>
   |    |    |    | <_UINavigationBarBackIndicatorView: 0x15dc30d0; frame = (8 12; 12.5 20.5); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15dc3ed0>>"
cy#

在其中搜索“Install”,找到

   |    |    |    |    |    |    |    |    |    |    |    | <MCActionButton: 0x15f29b00; baseClass = UIButton; frame = (293 53; 74 25); opaque = NO; layer = <CALayer: 0x15f2ca30>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x15f17340; frame = (0 0; 74 25); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f173c0>>
   |    |    |    |    |    |    |    |    |    |    |    |    | <UIButtonLabel: 0x15f2ed60; frame = (17 4; 40 17); text = 'Install'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ef3cf0>>

先定位到

UIButtonLabel: 0x15f2ed60

cy# [#0x15f2ed60 setHidden:YES]
cy# [#0x15f2ed60 setHidden:NO]

验证,确定要找的UIButton,

MCActionButton: 0x15f29b00

cy# [#0x15f29b00 allTargets]
[NSSet setWithArray:@[#"<MCDetailsHeaderContentView: 0x17009a60; frame = (105 14; 367 78); opaque = NO; autoresizesSubviews = NO; layer = <CALayer: 0x17009af0>>"]]]
cy# [#0x15f29b00 allControlEvent]
Error: unrecognized selector allControlEvent sent to object 0x15f29b00
cy# [#0x15f29b00 allControlEvents]
64
cy# [#0x15f29b00 actionsForTarget:#0x17009a60 forControlEvent:64]
@["_actionButtonPressed:"]
cy#

可是我在dump出的头文件里都找不到

[MCDetailsHeaderContentView _actionButtonPressed:]

中的MCDetailsHeaderContentView,也没法像书中一样去找他的父类啊。思路断了。

最难的地方都走过来了,怎么卡在了最简单的地方呢?你是怎么找的,我怎么一找就找到了:

我用

0987dembp:Preferences.app d0987$ class-dump -S -s -H Preferences -o ./../headers/Preferences

dump出来只有137项,没有MCDetailsHeaderContentView.h文件啊!
为何会这样呢?

在MobilePhoneSettings.bundle里是吧。

书上写了怎么定位头文件的啊

我用书上的方法,
grep

grep -r MCDetailsHeaderContentView /System/Library
Binary file /System/Library/AccessibilityBundles/ManagedConfigurationUI.axbundle/ManagedConfigurationUI matches

只出来个这个东西,dump出来没有相应头文件。
后来又出来了几个

Ts-iPhone:~ root# grep -r MCDetailsHeaderContentView /System/Library
Binary file /System/Library/AccessibilityBundles/ManagedConfigurationUI.axbundle/ManagedConfigurationUI matches
Binary file /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64 matches
Binary file /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7s matches
grep: /System/Library/Caches/com.apple.dyld/enable-dylibs-to-override-cache: No such file or directory

我也想到了下面的文件夹

/System/Library/PreferenceBundles/ManagedConfigurationUI.bundle

里面没找到可执行文件啊。

没找到可执行文件的情况书上已经讲到过了,再仔细看看

找到了,根据第二版72页内容。


/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7s
中提取出ManagedConfigurationUI.bundle
dump出头文件。

再从ManagedConfigurationUI.bundle
里提取而执行文件。IDA打开,找到

[MCDetailsHeaderContentView _actionButtonPressed:]

函数

_text:30622158                 PUSH            {R4-R7,LR}
__text:3062215A                 ADD             R7, SP, #0xC
__text:3062215C                 STR.W           R8, [SP,#0xC+var_10]!
__text:30622160                 MOV             R5, R0
__text:30622162                 MOV             R0, R2
__text:30622164                 BLX             _objc_retain
__text:30622168                 MOV             R8, R0
__text:3062216A                 MOV             R0, #(_OBJC_IVAR_$_MCDetailsHeaderContentView._headerDelegate - 0x30622176) ; id _headerDelegate;
__text:30622172                 ADD             R0, PC  ; id _headerDelegate;
__text:30622174                 LDR             R4, [R0] ; id _headerDelegate;
__text:30622176                 LDR             R0, [R5,R4]
__text:30622178                 CMP             R0, #0
__text:3062217A                 BEQ             loc_30622210
__text:3062217C                 MOV             R1, #(_OBJC_IVAR_$_MCDetailsHeaderContentView._headerMode - 0x30622188) ; int _headerMode;
__text:30622184                 ADD             R1, PC  ; int _headerMode;
__text:30622186                 LDR             R1, [R1] ; int _headerMode;
__text:30622188                 LDR             R1, [R5,R1]
__text:3062218A                 CMP             R1, #4
__text:3062218C                 BNE             loc_306221BE
__text:3062218E                 MOV             R1, #(selRef_respondsToSelector_ - 0x306221A2)
__text:30622196                 MOV             R2, #(selRef_actionButtonPressed_ - 0x306221A4)
__text:3062219E                 ADD             R1, PC ; selRef_respondsToSelector_
__text:306221A0                 ADD             R2, PC ; selRef_actionButtonPressed_
__text:306221A2                 LDR             R1, [R1] ; "respondsToSelector:"
__text:306221A4                 LDR             R6, [R2] ; "actionButtonPressed:"
__text:306221A6                 MOV             R2, R6
__text:306221A8                 BLX             _objc_msgSend
__text:306221AC                 TST.W           R0, #0xFF
__text:306221B0                 BEQ             loc_30622210
__text:306221B2                 LDR             R0, [R5,R4]
__text:306221B4                 MOV             R1, R6
__text:306221B6                 MOV             R2, R5
__text:306221B8                 BLX             _objc_msgSend
__text:306221BC                 B               loc_30622210
__text:306221BE ; ---------------------------------------------------------------------------
__text:306221BE
__text:306221BE loc_306221BE                            ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+34j
__text:306221BE                 MOV             R1, #(_OBJC_IVAR_$_MCDetailsHeaderContentView._isNewPayload - 0x306221CA) ; char _isNewPayload;
__text:306221C6                 ADD             R1, PC  ; char _isNewPayload;
__text:306221C8                 LDR             R1, [R1] ; char _isNewPayload;
__text:306221CA                 LDRB            R1, [R5,R1]
__text:306221CC                 CBZ             R1, loc_306221E4
__text:306221CE                 MOV             R1, #(selRef_respondsToSelector_ - 0x306221E2)
__text:306221D6                 MOV             R2, #(selRef_installPayload - 0x306221E4)
__text:306221DE                 ADD             R1, PC ; selRef_respondsToSelector_
__text:306221E0                 ADD             R2, PC ; selRef_installPayload
__text:306221E2                 B               loc_306221F8
__text:306221E4 ; ---------------------------------------------------------------------------
__text:306221E4
__text:306221E4 loc_306221E4                            ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+74j
__text:306221E4                 MOV             R1, #(selRef_respondsToSelector_ - 0x306221F8)
__text:306221EC                 MOV             R2, #(selRef_removePayload - 0x306221FA)
__text:306221F4                 ADD             R1, PC ; selRef_respondsToSelector_
__text:306221F6                 ADD             R2, PC ; selRef_removePayload
__text:306221F8
__text:306221F8 loc_306221F8                            ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+8Aj
__text:306221F8                 LDR             R6, [R2]
__text:306221FA                 LDR             R1, [R1]
__text:306221FC                 MOV             R2, R6
__text:306221FE                 BLX             _objc_msgSend
__text:30622202                 TST.W           R0, #0xFF
__text:30622206                 BEQ             loc_30622210
__text:30622208                 LDR             R0, [R5,R4]
__text:3062220A                 MOV             R1, R6
__text:3062220C                 BLX             _objc_msgSend
__text:30622210
__text:30622210 loc_30622210                            ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+22j
__text:30622210                                         ; -[MCDetailsHeaderContentView _actionButtonPressed:]+58j ...
__text:30622210                 MOV             R0, R8
__text:30622212                 LDR.W           R8, [SP+0x10+var_10],#4
__text:30622216                 POP.W           {R4-R7,LR}
__text:3062221A                 B.W             j__objc_release
__text:3062221A ; End of function -[MCDetailsHeaderContentView _actionButtonPressed:]
__text:3062221A
__text:3062221A ; ---------------------------------------------------------------------------

之后再使用LLDB
image list -o -f

 [235] 0x02391000 /System/Library/PreferenceBundles/ManagedConfigurationUI.bundle/ManagedConfigurationUI(0x00000000329a7000)

我在函数入口下断点应该是

0x02391000 + 0x30622158 = 0x329b3158

效果如下:

(lldb) br s -a 0x329b3158
Breakpoint 2: where = ManagedConfigurationUI`<redacted>, address = 0x329b3158
(lldb) c
Process 396 resuming
Process 396 stopped
* thread #1: tid = 0x0766, 0x329b3158 ManagedConfigurationUI`<redacted>, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
    frame #0: 0x329b3158 ManagedConfigurationUI`<redacted>
ManagedConfigurationUI`<redacted>:
-> 0x329b3158:  push   {r4, r5, r6, r7, lr}
   0x329b315a:  add    r7, sp, #0xc
   0x329b315c:  str    r8, [sp, #-4]!
   0x329b3160:  mov    r5, r0

为何断点处无法像书上的例子一样显示出相对应的函数名字呢?

书上也是有的显示了有的没显示,你的LLDB输出看上去是正常的

什么书上?求分享

你真不知道什么书?

葵花宝典

知道了 :hugging:

:pray: