![Page 1: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/1.jpg)
HopperThe disassembler
(Not the great flight/hotel booking app)
![Page 2: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/2.jpg)
! Hi
Felix Lapalme @lap_felix
iOS Developer @ Transit
![Page 3: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/3.jpg)
• What is Hopper ? (With a machine code 101)
• What useful things can it do ?
• What less useful (but fun) things can it do ?
Overview
![Page 4: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/4.jpg)
"
Compiled Languages 101
Code (Swift / Objective-C)
Compiler (LLVM)
Executable/Machine code (ARM, Intel x86)
![Page 5: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/5.jpg)
We need Hopper to inspect this
part"Compiled Languages 101
Code (Swift / Objective-C)
Compiler (LLVM)
Executable/Machine code (ARM, Intel x86)
![Page 6: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/6.jpg)
A Simple Program
![Page 7: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/7.jpg)
… when opened with a text/hex editor
![Page 8: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/8.jpg)
![Page 9: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/9.jpg)
Anatomy of a CPU instruction(Add Immediate Instruction on MIPS32)
100000001000100000000101011110The processor reads this:
![Page 10: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/10.jpg)
Anatomy of a CPU instruction(Add Immediate Instruction on MIPS32)
OP Code Address 1 Address 2 Immediate value001000 00001 00010 0000000101011110
In assembly:addi $r1, $r2, 350
In English:Add 350 to $r2 and put it in $r1
![Page 11: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/11.jpg)
![Page 12: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/12.jpg)
In Hopper
ASM Mode
![Page 13: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/13.jpg)
![Page 14: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/14.jpg)
In Hopper
Control Flow Graph
![Page 15: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/15.jpg)
In Hopper
Control Flow Graph
![Page 16: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/16.jpg)
In Hopper
Control Flow Graph
![Page 17: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/17.jpg)
In Hopper
Pseudo Code
![Page 18: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/18.jpg)
In Hopper
Hexadecimal Mode
![Page 19: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/19.jpg)
Felix, this is cool but how is this useful ?
![Page 20: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/20.jpg)
Legit every day uses for Hopper
• Do I need to check for changes before calling [some UIKit object setter]
• Is it really worth it to use -[UIStackView initWithArrangedSubviews] ?
• How does UIViewController calculate the frame of its initial view ?
•
(A non exhaustive list)
• How is UIKit disabling touch interactions during View Controller transitions ?
![Page 21: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/21.jpg)
How is UIKit disabling touch interactions during View Controller transitions ?• From breakpoints, I see [UIPresentationController runTransitionForCurrentState] is called
![Page 22: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/22.jpg)
How is UIKit disabling touch interactions during View Controller transitions ?• From breakpoints, I see [UIPresentationController runTransitionForCurrentState] is called • I look at that method in Hopper
![Page 23: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/23.jpg)
![Page 24: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/24.jpg)
![Page 25: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/25.jpg)
![Page 26: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/26.jpg)
Not very legit uses for Hopper(Demo)
![Page 27: Hopper - CocoaHeads€¦ · Legit every day uses for Hopper • Do I need to check for changes before calling [some UIKit object setter] • Is it really worth it to use -[UIStackView](https://reader034.vdocuments.net/reader034/viewer/2022043000/5f776acca72d5c550b6cf4cf/html5/thumbnails/27.jpg)
Thank you!