рдкреНрд░рд┐рдп рд╣реИрдмрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдирдП рд╕рд╛рд▓ рдХреА рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!
рдЖрдЬ рдореИрдВ
рдерд┐рдпреЛрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдИрдУрдПрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд╡реАрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд
рдХрд░реВрдВрдЧрд╛ ред рдХреНрдпреЛрдВ? рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреНрд░рд╛рдЗрдВрдЧ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрдИ-рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рддрд╛ рд╣реИ:

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ рдФрд░ рдерд┐рдпреЛрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдирд╛
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдПрдХ рдЦрд╛рд▓реА рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧрд┐рдЧ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛)ред
рдЕрдЧрд▓рд╛, рдПрдирдЖрдИрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:
iHabrTweak git:(master) theos/bin/nic.pl NIC 2.0 - New Instance Creator ------------------------------ [1.] iphone/application [2.] iphone/library [3.] iphone/preference_bundle [4.] iphone/tool [5.] iphone/tweak Choose a Template (required): 5 Project Name (required): iHabrTweak Package Name [com.yourcompany.ihabrtweak]: com.silvansky.ihabr Author/Maintainer Name [Valentine Silvansky]: silvansky [iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: Instantiating iphone/tweak in ihabrtweak/... Done.
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ihabrtweak рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
iHabrTweak git:(master) тЬЧ cd ihabrtweak ihabrtweak git:(master) тЬЧ ls Makefile Tweak.xm control iHabrTweak.plist theos
рдЕрдм рд░рди рдмрдирд╛рдПрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВ: рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ! рд╣рдорд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдереЛрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдареАрдХ рд╣реИ, рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
export ARCHS=armv7 export TARGET=iphone:latest:4.3 export THEOS="`pwd`/theos" export SDKVERSION=6.0 export THEOS_DEVICE_IP=192.168.2.2
ARCHS
рд╣рдореЗрдВ
ARCHS
рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ armv7 рдХреЗ рд▓рд┐рдП рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ armv6 рдкрд░ рд╣рдо рдорд╛рд░ рдбрд╛рд▓реЗрдВрдЧреЗред
TARGET
рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо iOS рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо (рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ) SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 4.3 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХрддреНрд░ рдХрд░реЗрдВрдЧреЗред рд╢реЗрд╖ рддреАрди рд╕реНрд╡-рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред
ihabrtweak git:(master) тЬЧ make Making all for tweak iHabrTweak... Preprocessing Tweak.xm... Compiling Tweak.xm... Linking tweak iHabrTweak... Stripping iHabrTweak... Signing iHabrTweak... ihabrtweak git:(master) тЬЧ ls .theos/obj Tweak.xm.o iHabrTweak.dylib
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реА рдЕрджреНрднреБрдд рдЧрддрд┐рд╢реАрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬреЛ рдЕрдм рддрдХ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рдЯреНрд╡рд┐рд╕реНрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
ihabrtweak git:(master) тЬЧ make package Making all for tweak iHabrTweak... make[2]: Nothing to be done for `internal-library-compile'. Making stage for tweak iHabrTweak... dpkg-deb: building package `com.silvansky.ihabr' in `./com.silvansky.ihabr_0.0.1-1_iphoneos-arm.deb'. ihabrtweak git:(master) тЬЧ make package install Making all for tweak iHabrTweak... make[2]: Nothing to be done for `internal-library-compile'. Making stage for tweak iHabrTweak... dpkg-deb: building package `com.silvansky.ihabr' in `./com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb'. install.copyFile "./com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb" "com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb" root@192.168.2.2's password: com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb 100% 1454 1.4KB/s 00:00 install.exec "dpkg -i com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb" root@192.168.2.2's password: Selecting previously deselected package com.silvansky.ihabr. (Reading database ... 2516 files and directories currently installed.) Unpacking com.silvansky.ihabr (from com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb) ... Setting up com.silvansky.ihabr (0.0.1-2) ... install.exec "timeout 10s sbreload || ( ( respring || killall -9 SpringBoard ) && launchctl load /System/Library/LaunchDaemons/com.apple.SpringBoard.plist )" root@192.168.2.2's password: launchctl unload SpringBoard.plist waiting for kill(29) != 0...
рджрд░рдЕрд╕рд▓, рдЯреНрд╡реАрдХ рддреИрдпрд╛рд░ рд╣реИ! рдпрд╣ рд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдкрд░ рд░рд╛рдЬ рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдерд┐рдпреЛрд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЙрд╕рдХреА рдмрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Tweak.xm рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рд╣реИред
рдлрд┐рд▓рд╣рд╛рд▓, рдЗрд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдЯрд┐рдкреНрдкрдгреА рд╕реНрд╡рдпрдВ рдПрдХ рдЖрдВрд╢рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЕрдВрддрд┐рдо .mm рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИред рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдореИрдХреНрд░реЛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
% рд╣реБрдХ рдФрд░% рдЕрдВрдд
рдереЛрд╕ рдЯреНрд╡рд┐рдХреНрд╕ рд╣реБрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рд╡реЗ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рдмрд╕реЗ рдЕрдореАрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдЬреЛ рдПрдХ рдордирдорд╛рдирд╛ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
%hook SomeClass -(void)someMethod {
рдпрд╣рд╛рдБ рд╣рдо "SomeClass" рд╡рд░реНрдЧ рдХреЗ "someMethod" рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп (рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд) рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
% рдореВрд▓ рдФрд░% рдирдпрд╛
рдареАрдХ рд╣реИ, рд╣рдордиреЗ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореВрд▓ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП? рд╣рд╛рдБ, рдмрд╣реБрдд рд╕рд░рд▓ рднреА! рдЗрд╕рдХреЗ рд▓рд┐рдП% рдореВрд▓ рдореИрдХреНрд░реЛ рд╣реИред рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдореИрдХреНрд░реЛ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЙрд╕реА рддрд░рд╣ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рд╣рдорд╛рд░реЗ рд╣реБрдХ рдкрд░ рдЖрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдорд░реНрдЬреА рд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
%hook SomeClass - (id)initWithFrame:(CGRect)frame { id result = %orig;
рдпрджрд┐ рд╣реБрдХ рдХреЗ рдЕрдВрджрд░ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреА рд╣реИрдВ, рддреЛ рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП% рдирдП рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред % рдирдП рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
%hook SomeClass - (void)someOldMethod {
рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдкрдиреЗ рдирдП рддрд░реАрдХреЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдПрдХ рд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ: рдерд┐рдпреЛрд╕ рд╡рд░реНрдирд┐рдВрдЧреНрд╕ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдордиреЗ рдЕрдкрдиреА рдкрджреНрдзрддрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХреА рд╣реИ! рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдмрд╕ рдЗрд╕реЗ рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
@interface SomeClass(NewMethods) - (void)someNewMethod; @end;
% рд▓реЙрдЧ
% рд▓реЙрдЧ рдореИрдХреНрд░реЛ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рддрдереНрдп рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп рдореИрдХреНрд░реЛрдЬрд╝
рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдЦрдирд╛
рдереЛрд╕ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдореЗрдВ, рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╣реЗрдбрд░ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╡реЗ
theos/include
ред рдпрджрд┐ рд╡реЗ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:
cd theos git submodule init git submodule update
рд╡рд╣рд╛рдБ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдлрд╝реЛрд▓реНрдбрд░ рдкрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рд╣реЗрдбрд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк SBAwayView рдХреНрд▓рд╛рд╕ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдХрд╛ рдореБрдЦреНрдп рджреГрд╢реНрдп рд╣реИред рдЦреИрд░, рд╣рдо рдЗрд╕рдореЗрдВ рд╣реБрдХ рд▓рдЧрд╛рдПрдВрдЧреЗред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХреНрд╖рдг рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
#import <SpringBoard/SBAwayView.h> #import <UIKit/UIKit.h> %hook SBAwayView -(id)initWithFrame:(CGRect)frame { id result = %orig; if (result) { // here goes the code... } return result; } %end
рд╣рдо% рд▓реЙрдЧ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛-рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо рдирдП рд╡рд┐рдЪрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ! рдмрд╕ рдХрд╣рд╛рдБ рд╣реИ? рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рд╣рдо
UIImageView *_backgroundView
рд╡рд░реНрдЧ
UIImageView *_backgroundView
ivar
UIImageView *_backgroundView
рдкрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ
SBAwayView
рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рд╣рдо
-(CGRect)middleFrame;
рд╡рд┐рдзрд┐ рдкрд╛рддреЗ рд╣реИрдВ
-(CGRect)middleFrame;
ред рд▓реЗрдХрд┐рди рд╣рдо рдЖрдЗрд╡рд░ рдореВрд▓реНрдп рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдЧреВрдЧрд▓ред рдЖрдЗрдП MSHookIvar рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЦреЛрдЬреЗрдВ, рдЬреЛ рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛:
#import <SpringBoard/SBAwayView.h> #import <UIKit/UIKit.h> #import <substrate.h> %hook SBAwayView -(id)initWithFrame:(CGRect)frame { id result = %orig; if (result) { CGRect labelRect = [self middleFrame]; labelRect.origin.y = labelRect.origin.y + 20.f; labelRect.size.height = 50.f; UILabel *habrLabel = [[[UILabel alloc] initWithFrame:labelRect] autorelease]; habrLabel.text = @"Hello, Habr!"; habrLabel.textColor = [UIColor colorWithRed:155.f/255.f green:182.f/255.f blue:206.f/255.f alpha:1.f]; habrLabel.opaque = NO; habrLabel.textAlignment = UITextAlignmentCenter; habrLabel.font = [UIFont boldSystemFontOfSize:36]; habrLabel.backgroundColor = [UIColor clearColor]; UIImageView *backgroundView = MSHookIvar<UIImageView *>(self, "_backgroundView"); [backgroundView addSubview:habrLabel]; } return result; } %end
рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреГрд╖реНрдЯрд┐ рдХрд╛ рдЖрдирдВрдж рд▓реЗрддреЗ рд╣реИрдВ!

рдЕрдм рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рддрд╕реНрд╡реАрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВрдЧреЗ! рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: UILabel рдХреЗ рдмрдЬрд╛рдп, UIImageView рдмрдирд╛рдПрдВред рдФрд░ рдЪрд┐рддреНрд░ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ?
рдЫрд╡рд┐ рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб.рдРрдк рдмрдВрдбрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рдЪрд┐рддреНрд░ рдХреЛ рд╡рд╣рд╛рдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░реЗрдВрдЧреЗ: рд▓реЗрдЖрдЙрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдЗрд╕рдореЗрдВ DEBIAN рдлрд╝реЛрд▓реНрдбрд░, рдЬрд╣рд╛рдБ рд╣рдо рдореМрдЬреВрджрд╛ рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓ рд▓реЗ рдЬрд╛рдПрдБрдЧреЗ, DEBIAN рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЖрдЧреЗ рд╣рдо рд╕рд┐рд╕реНрдЯрдо / рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рдХреЛрд░рд╕реЗрд░реНрд╡рд┐рд╕ / рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЙрдпрд░-рдЯреИрдк рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдирд╛ рдЪрд┐рддреНрд░ рд▓рдЧрд╛рдПрдБрдЧреЗ:
SpringBoard.app git:(master) pwd /Users/silvansky/Projects/iHabrTweak/ihabrtweak/Layout/System/Library/CoreServices/SpringBoard.app SpringBoard.app git:(master) ls habr_logo_hat.png
рдЕрдм рдЖрдк рдЕрдВрддрд┐рдо рдирд╡рд╡рд░реНрд╖ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
#import <SpringBoard/SBAwayView.h> #import <UIKit/UIKit.h> #import <substrate.h> #define IMG_WIDTH 150.f #define IMG_HEIGHT 186.f %hook SBAwayView -(id)initWithFrame:(CGRect)frame { id result = %orig; if (result) { CGRect imageRect = [self middleFrame]; imageRect.origin.y = imageRect.origin.y + 20.f; imageRect.origin.x = (imageRect.size.width - IMG_WIDTH) / 2.f; imageRect.size.width = IMG_WIDTH; imageRect.size.height = IMG_HEIGHT; UIImageView *habrLogoView = [[[UIImageView alloc] initWithFrame:imageRect] autorelease]; habrLogoView.image = [UIImage imageNamed:@"habr_logo_hat"]; UIImageView *backgroundView = MSHookIvar<UIImageView *>(self, "_backgroundView"); [backgroundView addSubview:habrLogoView]; } return result; } %end
рдФрд░ - рд╣рдо рдкрд░рд┐рдгрд╛рдореА рд╕реБрдВрджрд░рддрд╛ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ:

рдкреВрд░реНрдг рд╕реНрд░реЛрдд, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣,
рдПрдХ рдЧреАрдереВрдм рдкрд░ рд▓реЗ рд▓реЛред
рдЖрдиреЗ рдХреЗ рд╕рд╛рде рд╕рднреА! рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рдЦреБрд╢реА рдФрд░ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ! =)