So, we are ready to start making our tweak.
Sure we know what hooks are and how to properly syntax them but now its time
too use them in practise
Lets load up Tweak.x in our IDE of choice and remove the existing code
in there as we wont need any of it.
As you will remember a hook looks like this
%hook randomClass
-(void)aRandomMethod {
%orig;
// our modified code here
}
%endThe
%origdoesn't always need to come after the method but in this guide for simplicity we shall use it
We now need to find a class to hook into and modify one of the methods
We can do this using Limneos's Headers This link will become very important as it is essentially our Wikipedia we can refer too at any time.
Our classes are stored in header files, each one of apples frameworks have
several header files, because there are thousands of classes we use this
site to sort through them.
One of the trickiest parts about Tweak Development is finding the right header and the right classes to accomplish the specific task
In this Example Tweak we will be creating a Tweak that provides haptic feedback
to the user, so lets go and try and find the right header that will contain a
class that we can use to create our tweak.
Lets break it down a bit, into a small chart so we can understand what we want our tweak to do.
I shall write our tweak breakdown in pseudocode this basically means it is
not real code but is easy to translate.
if(VolumeButtonIsPressed) {
PlayHapticFeedback
}
Now lets convert that pseudocode into something that looks more like obj-c
#import <ourHeaderThatControlsVolume.h>
%hook classThatControlsVolumeFromOurHeader
-(void)ourMethodThatHappensWhenVolumeButtonIsPressed {
%orig;
PlayHapticFeedback;
}
Please not the above code DOES NOT WORK it is just a simple breakdown so you understand a little better
When we get onto Limneos's Headers
We will see a few things, on the main homepage we will see a massive list of
frameworks. We will want to click on SpringBoard as that is the framework we
will be using during this example.
Now we are in the SpringBoard folder, this contains all the header files for
the SpringBoard.
We are going to want to search the list that is in front of us for Volume
SBVolumeControl.h
SBVolumeControlState.h
SBVolumeHUDDomain.h
SBVolumeHUDSettings.h
SBVolumeHUDViewController.h
SBVolumeHUDViewControllerDelegate.h
SBVolumeHardwareButton.h
SBVolumeHardwareButtonActions.h
SBVolumePressBandit.h
Note they are all stored in Alphabetical Order
Your next question is, well how do you what is the right one. Luckily of us
Apple names all of there headers in accordance to what they do.
Note most headers relating to the SpringBoard usually start with 'SB'
So using common sense, we want to find a header that contains the methods for
Volume Control.
Our best guess it is SBVolumeControl.h
We have now found our header so we can now learn a bit more about headers