Upload
davidolesch
View
41
Download
0
Embed Size (px)
Citation preview
iOS UI Debuggingby David Olesch
December 2016 - Austin iPhone Developer Group Meetup
What is Debugging?December 2016 - Austin iPhone Developer Group Meetup
iOS UI Debugging?
December 2016 - Austin iPhone Developer Group Meetup
Debug by loggingIn Objective-C
object.someVariable = @"Hello World";NSLog(object.someVariable); // Logs "Hello World"
In Swi!object.someVariable = "Hello World"print(object.someVariable) // Logs "Hello World"
December 2016 - Austin iPhone Developer Group Meetup
lldb the real iOS app debugger(lldb) po object<NSObject: 0x7fe572d8df70; someVariable = "Hello World">
(lldb) po [object someVariable]Hello World
(lldb) p [object someVariable](NSString *) $0 = 0x000d9080 @"Hello World"
December 2016 - Austin iPhone Developer Group Meetup
Facebook Chisel
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
December 2016 - Austin iPhone Developer Group Meetup
R.I.P. pviews2014-2016
December 2016 - Austin iPhone Developer Group Meetup
Long Live pvc(lldb)pvc .
December 2016 - Austin iPhone Developer Group Meetup
Long Live pvc(lldb)pvc<UINavigationController 0x7fe57400fa00>, state: appeared, view: <UILayoutContainerView 0x7fe575013420> | <DOTriviaContainerViewController 0x7fe572f21c60>, state: appeared, view: <UIView 0x7fe572cd3ed0> | | <DOLevelCategoriesViewController 0x7fe572f74b50>, state: appeared, view: <UICollectionViewControllerWrapperView 0x7fe572f48380>
December 2016 - Austin iPhone Developer Group Meetup
Long Live pvc(lldb)pvc<UINavigationController 0x7fe57400fa00>, state: appeared, view: <UILayoutContainerView 0x7fe575013420> | <DOTriviaContainerViewController 0x7fe572f21c60>, state: appeared, view: <UIView 0x7fe572cd3ed0> | | <DOLevelCategoriesViewController 0x7fe572f74b50>, state: appeared, view: <UICollectionViewControllerWrapperView 0x7fe572f48380>
(lldb)po (int)[[0x7fe572f74b50 items] count]
December 2016 - Austin iPhone Developer Group Meetup
Long Live pvc(lldb)pvc<UINavigationController 0x7fe57400fa00>, state: appeared, view: <UILayoutContainerView 0x7fe575013420> | <DOTriviaContainerViewController 0x7fe572f21c60>, state: appeared, view: <UIView 0x7fe572cd3ed0> | | <DOLevelCategoriesViewController 0x7fe572f74b50>, state: appeared, view: <UICollectionViewControllerWrapperView 0x7fe572f48380>
(lldb)po (int)[[0x7fe572f74b50 items] count]13
December 2016 - Austin iPhone Developer Group Meetup
Long Live visualizeDecember 2016 - Austin iPhone Developer Group Meetup
Long Live show/hideDecember 2016 - Austin iPhone Developer Group Meetup
Long Live caflush(lldb)pvc .
December 2016 - Austin iPhone Developer Group Meetup
Long Live caflush(lldb)pvc<UINavigationController 0x7fe57400fa00>, state: appeared, view: <UILayoutContainerView 0x7fe575013420> | <DOTriviaContainerViewController 0x7fe572f21c60>, state: appeared, view: <UIView 0x7fe572cd3ed0> | | <DOLevelCategoriesViewController 0x7fe572f74b50>, state: appeared, view: <UICollectionViewControllerWrapperView 0x7fe572f48380>
December 2016 - Austin iPhone Developer Group Meetup
Long Live caflush(lldb)pvc<UINavigationController 0x7fe57400fa00>, state: appeared, view: <UILayoutContainerView 0x7fe575013420> | <DOTriviaContainerViewController 0x7fe572f21c60>, state: appeared, view: <UIView 0x7fe572cd3ed0> | | <DOLevelCategoriesViewController 0x7fe572f74b50>, state: appeared, view: <UICollectionViewControllerWrapperView 0x7fe572f48380>
(lldb) e id $vc = [UIViewController new](lldb) e (void)[$vc setTitle:@"Debug View Controller"](lldb) e (void)[0x7fe57400fa00 pushViewContoller:$vc animated:YES]
December 2016 - Austin iPhone Developer Group Meetup
Long Live caflush(lldb)pvc<UINavigationController 0x7fe57400fa00>, state: appeared, view: <UILayoutContainerView 0x7fe575013420> | <DOTriviaContainerViewController 0x7fe572f21c60>, state: appeared, view: <UIView 0x7fe572cd3ed0> | | <DOLevelCategoriesViewController 0x7fe572f74b50>, state: appeared, view: <UICollectionViewControllerWrapperView 0x7fe572f48380>
(lldb) e id $vc = [UIViewController new](lldb) e (void)[$vc setTitle:@"Debug View Controller"](lldb) e (void)[0x7fe57400fa00 pushViewContoller:$vc animated:YES]
(lldb) caflush
December 2016 - Austin iPhone Developer Group Meetup
Long Live wivarDecember 2016 - Austin iPhone Developer Group Meetup
Long Live presponder(lldb) presponder button .
December 2016 - Austin iPhone Developer Group Meetup
Long Live presponder(lldb) presponder button<UIButton: 0x7ff91275b4c0; frame = (12 144; 170 44); opaque = NO; autoresize = RM+BM; tag = 3; layer = <CALayer: 0x7ff912427680>> | <UIView: 0x7ff9124f5650; frame = (0 0; 200 200); gestureRecognizers = <NSArray: 0x7ff914846c20>; layer = <CALayer: 0x7ff914935e40>> | | <UICollectionViewCell: 0x7ff914932660; frame = (60 0; 200 200); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x7ff914935030>> | | | <UICollectionView: 0x7ff912897400; frame = (0 189.333; 320 200); clipsToBounds = YES; opaque = NO; autoresize = W+H> | | | | <DOLevelCategoryCell: 0x7ff9124ecf00; baseClass = UICollectionViewCell; frame = (0 44; 320 568)> | | | | | <UICollectionView: 0x7ff912871000; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO> | | | | | | <UICollectionViewControllerWrapperView: 0x7ff912726610; frame = (0 0; 320 568); autoresize = W+H> | | | | | | | <DOLevelCategoriesViewController: 0x7ff9125a0fe0> | | | | | | | | <UIView: 0x7ff91259a380; frame = (0 0; 320 568); opaque = NO; autoresize = RM+BM> | | | | | | | | | <UIView: 0x7ff9125a9050; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ff9125aee60>> | | | | | | | | | | <DOTriviaContainerViewController: 0x7ff912428fb0> | | | | | | | | | | | <UIViewControllerWrapperView: 0x7ff914841cb0; frame = (0 0; 320 568); autoresize = W+H> | | | | | | | | | | | | <UINavigationTransitionView: 0x7ff912752be0; frame = (0 0; 320 568); clipsToBounds = YES> | | | | | | | | | | | | | <UILayoutContainerView: 0x7ff91248f590; frame = (0 0; 320 568); autoresize = W+H> | | | | | | | | | | | | | | <UINavigationController: 0x7ff912841c00> | | | | | | | | | | | | | | | <UIWindow: 0x7ff9124596e0; frame = (0 0; 320 568)> | | | | | | | | | | | | | | | | <UIApplication: 0x7ff912504a70> | | | | | | | | | | | | | | | | | <DOAppDelegate: 0x7ff912506a40>
December 2016 - Austin iPhone Developer Group Meetup
+ (int)adjustableParameter { return 5;}
December 2016 - Austin iPhone Developer Group Meetup
Long Live thread return
December 2016 - Austin iPhone Developer Group Meetup
iOS UI Debuggingby David Olesch
December 2016 - Austin iPhone Developer Group Meetup