📜 ⬆️ ⬇️

Creating a tweak on the example of the Phone application. Yes, it will be a plus!

Hello!

Prehistory


After the release of iOS 7, some users started complaining about problems with the Phone app. The problem is that when dialing the international number +375 (code) xxx-xx-xx you cannot dial '+'. If you hold '0', then instead of plus you get a combination of three fingers '0+'. The problem is most likely local, since, apart from the users from Belarus, no one else expressed his discontent.

For various reasons, I haven’t been updated to iOS 7 for a long time, but having been updated I was unpleasantly surprised. The problem remained, despite the release of several minor updates. After reading the forums, I found the following solutions to this problem:
  1. use 8 when dialing
  2. use 00
  3. hold '0', press the delete button until a plus appears

The first option is quite a workable. I didn’t manage to make a second call, most likely my operator doesn’t support this format. The third works, but for this you need skill and a second hand, and it's cold outside.
')
And then I decided to fix this little misunderstanding with tweak.

Go!


On Habré, there was already an article about creating tweaks using theos , so we’ll skip creating the project and setting up theos and go straight to the interesting.

So, since we are going to change something in the Phone application, it would be nice to find out what it is inside. I had an application on my device in /var/stash/Applications.BTFCTa/MobilePhone.app . Let's use the class-dump utility and get a list of class prototypes.

 ➜ class-dump -H -o MobilePhone MobilePhone.app 

As it turned out they are not so little.
Header list
ABNewPersonViewControllerDelegate-Protocol.h
ABPeoplePickerNavigationControllerDelegate-Protocol.h
ABPeoplePickerNavigationControllerPrivateMemberCellDelegate-Protocol.h
ABUnknownPersonViewControllerDelegate-Protocol.h
AVCaptureFileOutputRecordingDelegate-Protocol.h
AudioDeviceController.h
CDStructures.h
CNFRegWizardControllerDelegate-Protocol.h
CommunicationDisplayViewController.h
ConferenceManagementTable.h
DialerController.h
DialerLCDFieldDelegate-Protocol.h
DialerLCDFieldProtocol-Protocol.h
DialerViewDelegate-Protocol.h
IDSIDQueryControllerDelegate-Protocol.h
InCallBottomButton.h
InCallController.h
InCallLCDField.h
InCallLCDView.h
MPDetailSliderDelegate-Protocol.h
MobilePhoneApplication.h
NSArray-MPRecentsExtensions.h
NSDate-DayComparison.h
NSDictionary-PHVoicemailAudioController.h
NSDictionary-VoicemailAudioRouting.h
NSError-VoicemailExtras.h
NSIndexSet-MPRecentsExtensions.h
NSObject-Protocol.h
PHAbstractDialerView.h
PHAddressBookController.h
PHAudioPlayer.h
PHAudioPlayerDataSource-Protocol.h
PHAudioPlayerDelegate-Protocol.h
PHAudioPlayerVoicemailDataSource.h
PHAudioRecorder.h
PHAudioRecorderDelegate-Protocol.h
PHConferenceParticipantCell.h
PHConferenceParticipantCellProtocol-Protocol.h
PHEmergencyDialerButton.h
PHEmergencyDialerViewController.h
PHEmergencyHandsetDialerLCDView.h
PHEmergencyHandsetDialerView.h
PHF FavoritesCell.h
PHF FavoritesContactPhotoView.h
PHF FavoritesEntry.h
PHF LOVE.Manager.h
PHF LavidViewController.h
PHHandsetDialerLCDView.h
PHHandsetDialerNameLabelView.h
PHHandsetDialerView.h
PHInCallNumberPadButton.h
PHInCallRingView.h
PHInfoButtonMaskView.h
PHRecentCall.h
PHRecentMultiCall.h
PHRecentsCell.h
PHRecentsManager.h
PHRecentsPersonFaceTimeHeaderSummaryView.h
PHRecentsPersonFaceTimeHeaderView.h
PHRecentsPersonHeaderSummaryView-Protocol.h
PHRecentsPersonHeaderView.h
PHRecentsPersonPhoneHeaderSummaryView.h
PHRecentsPersonPhoneHeaderView.h
PHRecentsToggleButton.h
PHRecentsViewController.h
PHStarkActionSheetTableViewCell.h
PHStarkActionSheetViewController.h
PHStarkDialerLCDView.h
PHStarkDialerView.h
PHStarkDialerViewController.h
PHStarkF-00-00TableViewCell.h
PHStarkF FavoritesViewController.h
PHStarkGenericTableViewCell.h
PHStarkGenericTableViewController.h
PHStarkGenericViewController.h
PHStarkHardwareControlsBroadcaster.h
PHStarkHardwareMenuTableViewCell.h
PHStarkInCallDialerLCDView.h
PHStarkInCallDialerView.h
PHStarkInCallKeypadViewController.h
PHStarkInCallViewController.h
PHStarkLozengeLabel.h
PHStarkMainMenuContainerViewController.h
PHStarkManager.h
PHStarkNoContentBannerView.h
PHStarkPlayPauseButton.h
PHStarkRecentsTableViewCell.h
PHStarkRecentsViewController.h
PHStarkRootContainerViewController.h
PHStarkTelephonyStateMonitor.h
PHStarkTelephonyStateMonitorDelegate-Protocol.h
PHStarkVoicemailManager.h
PHStarkVoicemailPlayerViewController.h
PHStarkVoicemailTableViewCell.h
PHStarkVoicemailViewController.h
PHStaticDialerPad.h
PHTextCycleLabel.h
PHVoicemailAudioController.h
PHVoicemailBlockedListViewController.h
PHVoicemailCell.h
PHVoicemailCellConfigurationDelegate-Protocol.h
PHVoicemailCellDelegate-Protocol.h
PHVoicemailFolderCell.h
PHVoicemailGreetingCell.h
PHVoicemailGreetingViewController.h
PHVoicemailGreetingViewControllerDelegate-Protocol.h
PHVoicemailInboxListViewController.h
PHVoicemailListMaskView.h
PHVoicemailListMaskViewDelegate-Protocol.h
PHVoicemailListViewController.h
PHVoicemailListViewControllerConcrete-Protocol.h
PHVoicemailNavigationController.h
PHVoicemailNoContentViewController.h
PHVoicemailSetupViewController.h
PHVoicemailSlider.h
PHVoicemailTrashListViewController.h
PHVoicemailUnavailableCell.h
PhoneApplication.h
PhoneBadgeable-Protocol.h
PhoneBaseViewController-Protocol.h
PhoneContentView.h
PhoneDesktopView.h
PhoneNavigationController.h
PhoneRootView.h
PhoneRootViewController.h
PhoneTabBarController.h
PhoneTabViewController-Protocol.h
PhoneViewController.h
RadiosPreferencesDelegate-Protocol.h
SixSquareButton.h
SixSquareView.h
TPDialerKeypadDelegate-Protocol.h
TPSetPINViewControllerDelegate-Protocol.h
TPStarkInCallViewControllerDelegate-Protocol.h
TPSuperBottomBarDelegateProtocol-Protocol.h
UIActionSheetDelegate-Protocol.h
UIApplicationDelegate-Protocol.h
UIFont-MobilePhoneAdditions.h
UIFont-UIFont_InCallLCDView.h
UIGestureRecognizerDelegate-Protocol.h
UIImage-MobilePhoneAdditions.h
UINavigationControllerDelegate-Protocol.h
UIScrollViewDelegate-Protocol.h
UITabBarControllerDelegate-Protocol.h
UITableView-PHStarkExtensions.h
UITableViewCell-VoicemailCellAdditions.h
UITableViewDataSource-Protocol.h
UITableViewDelegate-Protocol.h
UIViewController-Testing.h
VMVoicemail-MobilePhone.h
VideoConferenceController.h

Further logic of my actions was as follows. Once we have a problem when you press a button, then you need to look for something that is associated with it.

 ➜ ls | grep -i "key" PHStarkInCallKeypadViewController.h TPDialerKeypadDelegate-Protocol.h 

TPDialerKeypadDelegate-Protocol.h turned out to be quite interesting. In it, as you can see, describes the methods responsible for pressing the buttons.

 #import "NSObject.h" @protocol TPDialerKeypadDelegate <NSObject> @optional - (void)phonePad:(id)arg1 dialerCharacterButtonWasHeld:(unsigned int)arg2; - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2; - (void)phonePadDidEndSounds:(id)arg1; - (void)phonePadWillBeginSounds:(id)arg1; - (void)phonePad:(id)arg1 keyUp:(BOOL)arg2; - (void)phonePad:(id)arg1 keyDown:(BOOL)arg2; - (void)phonePadDeleteLastDigit:(id)arg1; - (void)phonePad:(id)arg1 appendString:(id)arg2; @end 

Well, since this is a protocol, then someone is implementing it!

 ➜ grep -l -r "TPDialerKeypadDelegate" . ./DialerController.h ./InCallController.h ./PHEmergencyDialerViewController.h ./PHHandsetDialerView.h ./TPDialerKeypadDelegate-Protocol.h 

Later on, using the scientific method, it was revealed that DialerController is the class we need, and phonePad:replaceLastDigitWithString: is the method we need. You can verify this by writing the following code:

 #import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { %log; %orig(arg1, arg2); } %end 

The log shows that the last parameter is what we need:

 <Warning>: -[<DialerController: 0x165e91e0> phonePad:<TPDialerNumberPad: 0x1677fc40; baseClass = UIControl; frame = (28 84; 264 296); opaque = NO; layer = <CALayer: 0x1677f1d0>> replaceLastDigitWithString:+] 

It would be nice now to find where the string itself is stored, to which our plus is added. To do this, look again at DialerController .
DialerController.h
 #import "PhoneViewController.h" #import "ABNewPersonViewControllerDelegate.h" #import "ABPeoplePickerNavigationControllerDelegate.h" #import "DialerViewDelegate.h" #import "TPDialerKeypadDelegate.h" #import "UIActionSheetDelegate.h" @class NSString, NSTimer, PHAbstractDialerView, UINavigationController; @interface DialerController : PhoneViewController <ABNewPersonViewControllerDelegate, ABPeoplePickerNavigationControllerDelegate, DialerViewDelegate, UIActionSheetDelegate, TPDialerKeypadDelegate> { PHAbstractDialerView *_dialerView; UINavigationController *_newContactNavigationController; NSTimer *_deleteTimer; NSTimer *_lookupTimer; NSString *_lastDialedNumberCache; NSString *_myPrefix; int _shouldUseMyPrefixAsHint; unsigned int _calledNumber:1; unsigned int _didDeleteRepeat:1; unsigned int _dtmfPlaying; int _dialerType; } + (id)defaultPNGName; + (id)tabBarIconName; + (id)tabBarIconImageSelected; + (id)tabBarIconImage; + (id)tabBarIconImageName; + (int)tabViewType; + (BOOL)launchFieldTestIfNeeded:(id)arg1; + (BOOL)shouldStringAutoDial:(id)arg1 givenLastChar:(BOOL)arg2; @property int dialerType; // @synthesize dialerType=_dialerType; @property(readonly) PHAbstractDialerView *dialerView; // @synthesize dialerView=_dialerView; - (void)_statusBarHeightChanged:(id)arg1; - (void)_handleSIMInsertionOrRemoval; - (void)performDeleteAction; - (void)performCallAction; - (void)_deleteButtonDown:(id)arg1; - (void)_deleteButtonClicked:(id)arg1; - (void)_stopDeleteTimer; - (void)_startDeleteTimer; - (void)_deleteRepeat; - (void)peoplePickerNavigationController:(id)arg1 insertEditorDidConfirm:(BOOL)arg2 forPerson:(void *)arg3; - (BOOL)peoplePickerNavigationController:(id)arg1 shouldShowInsertEditorForPerson:(void *)arg2 insertProperty:(int *)arg3 copyInsertValue:(id *)arg4 copyInsertLabel:(id *)arg5; - (BOOL)peoplePickerNavigationController:(id)arg1 shouldContinueAfterSelectingPerson:(void *)arg2 property:(int)arg3 identifier:(int)arg4; - (BOOL)peoplePickerNavigationController:(id)arg1 shouldContinueAfterSelectingPerson:(void *)arg2; - (void)peoplePickerNavigationControllerDidCancel:(id)arg1; - (void)newPersonViewController:(id)arg1 didCompleteWithNewPerson:(void *)arg2; - (void)actionSheet:(id)arg1 clickedButtonAtIndex:(int)arg2; - (void)_dismissNewContactView:(BOOL)arg1; - (void)actionSheet:(id)arg1 didDismissWithButtonIndex:(int)arg2; - (void)_addButtonClicked:(id)arg1; - (void)_addToExistingContact; - (void)_addToNewContact; - (id)_qualifyNumberIfNecessary:(id)arg1; - (void *)_newPersonWithValue:(id)arg1 forMultiValueProperty:(int)arg2; - (void)_hideNewContactView; - (void)_showNewContactView; - (void)_dialVoicemail; - (void)phonePad:(id)arg1 keyUp:(BOOL)arg2; - (void)phonePad:(id)arg1 keyDown:(BOOL)arg2; - (void)phonePadDidEndSounds:(id)arg1; - (id)_myPrefix; - (BOOL)_shouldUseMyPrefixAsHint; - (void)phonePadDeleteLastDigit:(id)arg1; - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2; - (void)_phonePad:(id)arg1 appendString:(id)arg2 suppressClearingDialedNumber:(BOOL)arg3; - (void)phonePad:(id)arg1 appendString:(id)arg2; - (void)phonePad:(id)arg1 dialerCharacterButtonWasHeld:(unsigned int)arg2; - (void)starkInCallViewControllerAppearedNotification:(id)arg1; - (void)_callButtonPressed:(id)arg1; - (void)_callButtonLongPress; - (void)_updateCallButtonEnabledState:(id)arg1; - (void)_updateLCDNameLabelWithOriginallyPastedString:(id)arg1; - (void)_updateLCDNameLabelWithAMatchingName:(BOOL)arg1; - (void)_updateCallButtonEnabledState:(id)arg1 updateNameNow:(BOOL)arg2; - (void)dialerView:(id)arg1 stringWasPasted:(id)arg2; - (void)dialerViewTextDidChange:(id)arg1; @property(retain) NSString *lastDialedNumber; - (void)_getPersonName:(id *)arg1 personLabel:(id *)arg2 personUID:(int *)arg3 forPhoneNumberString:(id)arg4; - (void)_updateName; - (void)_stopLookupTimer; - (BOOL)shouldSnapshot; - (void)prepareForSnapshot; - (void)_clearDisplayIfNecessary; - (void)dealloc; - (id)initWithDialerType:(int)arg1; - (void)applicationDidResume; - (void)viewDidDisappear:(BOOL)arg1; - (void)viewWillDisappear:(BOOL)arg1; - (void)viewDidAppear:(BOOL)arg1; - (void)viewWillAppear:(BOOL)arg1; - (BOOL)_isFirstLaunchFromDefaultPNGToDialer; - (BOOL)isShowingDoubleHeightStatusBar; - (void)unloadView; - (void)didReceiveMemoryWarning; - (void)dialerViewPhoneNumberWasTapped:(id)arg1; - (void)loadView; @end 


Sadness, an obvious place where the text would be stored, is not visible. But let's look at the _dialerView variable and the PHAbstractDialerView class.
PHAbstractDialerView.h
 #import "UIView.h" #import "DialerLCDFieldDelegate.h" @class UIControl, UIView<DialerLCDFieldProtocol>, UIView<TPDialerKeypadProtocol>; @interface PHAbstractDialerView : UIView <DialerLCDFieldDelegate> { BOOL _inCallMode; UIView<DialerLCDFieldProtocol> *_lcdView; UIView<TPDialerKeypadProtocol> *_phonePadView; id <DialerViewDelegate> _delegate; UIControl *_addContactButton; UIControl *_callButton; UIControl *_deleteButton; } @property(retain, nonatomic) UIControl *deleteButton; // @synthesize deleteButton=_deleteButton; @property(retain, nonatomic) UIControl *callButton; // @synthesize callButton=_callButton; @property(retain, nonatomic) UIControl *addContactButton; // @synthesize addContactButton=_addContactButton; @property(nonatomic) id <DialerViewDelegate> delegate; // @synthesize delegate=_delegate; @property(retain, nonatomic) UIView<TPDialerKeypadProtocol> *phonePadView; // @synthesize phonePadView=_phonePadView; @property(retain, nonatomic) UIView<DialerLCDFieldProtocol> *lcdView; // @synthesize lcdView=_lcdView; @property(nonatomic) BOOL inCallMode; // @synthesize inCallMode=_inCallMode; - (void)dialerField:(id)arg1 stringWasPasted:(id)arg2; - (void)dialerLCDFieldTextDidChange:(id)arg1; - (void)dealloc; @end 


It has a UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
view UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
 UIView *_lcdView,    DialerLCDFieldProtocol . 
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
 UIView *_lcdView,    DialerLCDFieldProtocol . 
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
 UIView *_lcdView,    DialerLCDFieldProtocol . 
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
 UIView *_lcdView,    DialerLCDFieldProtocol . 
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.
UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.

UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.

UIView *_lcdView, DialerLCDFieldProtocol .
DialerLCDFieldProtocol-Protocol.h #import "NSObject.h" @protocol DialerLCDFieldProtocol <NSObject> - (void)setDelegate:(id)arg1; - (void)setHighlighted:(BOOL)arg1; - (BOOL)highlighted; - (void)setInCallMode:(BOOL)arg1; - (BOOL)inCallMode; - (void)deleteCharacter; - (void)setText:(id)arg1 needsFormat:(BOOL)arg2; - (id)text; @optional - (void)setText:(id)arg1 needsFormat:(BOOL)arg2 name:(id)arg3 label:(id)arg4; - (void)setName:(id)arg1 numberLabel:(id)arg2; @end

setText:needsFormat: text . !

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); NSLog(@"text: %@", currentText); objc_msgSend(lcdView, @selector(setText:needsFormat:), @"+375123456789", YES); } %end
'0' , :

<Warning>: text: (0 )


, . .

#import <substrate.h> %hook DialerController - (void)phonePad:(id)arg1 replaceLastDigitWithString:(id)arg2 { id dialerView = MSHookIvar<id>(self, "_dialerView"); id lcdView = MSHookIvar<id>(dialerView, "_lcdView"); NSString *currentText; currentText = objc_msgSend(lcdView, @selector(text)); currentText = [currentText stringByReplacingOccurrencesOfString:@"(" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@")" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@"-" withString:@""]; currentText = [currentText stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([arg2 isEqualToString:@"+"] && currentText.length && [currentText characterAtIndex:currentText.length - 1] == '0') { currentText = [currentText stringByReplacingCharactersInRange:NSMakeRange(currentText.length - 1, 1) withString:@"+"]; objc_msgSend(lcdView, @selector(setText:needsFormat:), currentText, YES); } else { %orig(arg1, arg2); } } %end
, , , ()- .


github .

, http://gennick.ru/cydia/ . Plus4Belarus.

iPhone 4 iPhone 5 c 7.0.4.

Source: https://habr.com/ru/post/209990/


All Articles