¿Qué método de qué cabecera se llama al hacer una llamada telefónica en iOS?

Estoy desarrollando un tweak a través de la plantilla de logotypes de ios open dev, pero he estado buscando alnetworkingedor de todos los files de encabezado en los frameworks existentes y no encuentro el encabezado correcto que tiene el método que se llama después de que alguien hace una llamada telefónica. ¿Alguien sabe cuál es? Estoy tratando de hacer algo como "AskToCall", que está disponible en Cydia y que solicita un UIAlertView cuando se realiza una llamada telefónica, exactamente cuando se presiona el button verde.

¡Gracias!

1) Primero necesita vincular contra el marco privado CoreTelephony: en el Makefile del proyecto de sus logotypes asegúrese de include su nombre de proyecto_PRIVATE_FRAMEWORKS = CoreTelephony. Asegúrese también de que su file .Sist de MobileSubstrate filtre "com.apple.mobilephone"

2) La aplicación del teléfono en iPhone utiliza la function CTCallDialWithID de CoreTelephony para realizar llamadas. Simplemente puedes enganchar la function y hacer lo tuyo.

#import "substrate.h" // for MSHookFunction definition extern "C" void CTCallDialWithID(NSString *numberToDial); // function declaration static void (*original_CTCallDialWithID)(NSString *numberToDial); //define a function pointer on which you'll assign the original call later static void replaced_CTCallDialWithID(NSString *numberToDial){ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Verify New Call" message:[NSString stringWithFormat:@"Are you sure you want to call %@",numberToDial] delegate:YOUR_OBJECT cancelButtonTitle:@"No" otherButtonTitles:@"Yes,please",nil]; [alert show]; [alert release]; } 

En tu constructor:

 %ctor{ %init(); MSHookFunction((void *)CTCallDialWithID,(void *)replaced_CTCallDialWithID,(void **)&original_CTCallDialWithID); // Replace original function implementation with your replaced_ one. } 

Para realmente marcar el número con el time (por ejemplo, en el delegado de su vista de alerta) después de haber reemplazado la implementación de la function, use

 CTCallDial(NSString *number); 

porque CTCallDialWithID espera {…} parameters y no funcionará correctamente.

Tenga en count que este es un enganche global en Phone.app para CTCallDialWithID (funciona para todas las llamadas salientes, incluyendo tocar una llamada reciente para marcarla, o un favorito, etc.

Si simplemente necesita un gancho justo cuando presiona el button Llamar:

 %hook DialerController -(void)_callButtonPressed:(id)pressed{ UIView *dialerView=MSHookIvar<UIView *>(self,"_dialerView"); UILabel *lcd=MSHookIvar<UILabel *>(dialerView,"_lcd"); NSString *numberToBeDialed=[lcd text]; // do your thing with the number in here. } %end 

Noté que mencionaste que encontraste este método antes y no funcionó. Probablemente no funcionó para usted porque no está inyectando en MobilePhone.app.

Su file .plist en su proyecto de Theos debería ser similar a:

 Filter = { Bundles = ("com.apple.mobilephone");}; 

Para hacer eso, tendría que volcar los encabezados MobilePhone.app (Localizados en / Applications / MobilePhone.app) desde el sistema de files, un iPhone o los files ipsw desencryptions, entonces tendría que pasar por esos encabezados. Estás obligado a encontrar lo que buscas allí. Para volcar los encabezados, necesitaría class-dump class-dump-z o un class-dump class-dump-z (preferido) de este repository:

ininjas.com/repo/

Entonces tendría que instalar Mobile Terminal (desde Cydia) y ejecutar

class-dump-z -H /Applications/MobilePhone.app/MobilePhone -O / var / mobile / somefolder (Esto debería funcionar en un iPod touch 4 también)

Para get los encabezados en / var / mobile / somefolder

Entonces deberías poner todos los encabezados en / var / theos / include / MobilePhone (donde esté tu carpeta theos, en mi caso en mi dispositivo, por lo tanto / var / theos / include)

Después de eso tienes que agregar la línea

 #import <MobilePhone/MobilePhone.h> 

en tu tweak.xm

Bien, espero que entienda tu pregunta.

Simplemente quiere mostrar una window emergente de alerta que diga "Realmente hacer una llamada telefónica?" con el button Sí y No.

Así es como lo harías:

 // View Controller Header File (.h file) @interface MyViewController <UIAlertViewDelegate> { UIButton *callButton; } // View Controller Implementation File (.m file) -(void)viewDidLoad { ... [callButton addTarget:self selector:@selector(confirmCall) forControlEvent:UIControlTouchUpInside]; ... } -(void)confirmCall { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Confirm Call" message:@"Really make call?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil ]; [alert show]; [alert release]; } // UIAlertViewDelegate callback method -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // --------------------------------------------------------------------------- // Alert view button indexes starts from 0 (left most button) // and increments for the next button. // // In our case, "No" button would have index 0 because it is the first button // followed by the "Yes" button having an index 1 // // So what we're saying below is if user presses on the "Yes" button // for an alert that has the title "Confirm Call", then call that number // --------------------------------------------------------------------------- if([alertView.title isEqualToString:@"Confirm Call"] && buttonIndex == 1) { [self callNumber]; } } -(void)callNumber { NSString *rawNumber = [[NSString alloc] initWithString:@"+61 8 9123 4567"]; NSString *cleanedString = [[NSString alloc] initWithString:[[rawNumber componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789-+()"] invertedSet]] componentsJoinedByString:@""]]; NSString *escapedPhoneNumber = [[NSString alloc] initWithString:[cleanedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSString *properPhoneNumber = [[NSString alloc] initWithFormat:@"tel://%@",escapedPhoneNumber]; NSURL *telURL = [[NSURL alloc] initWithString:properPhoneNumber]; // prevent non phone iOS device from trying to making calls (iPod, iPad) if([[UIApplication shanetworkingApplication] canOpenURL:telURL]) { // make call now [[UIApplication shanetworkingApplication] openURL:telURL]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Device Cannot Call" message:@"This device cannot make phone calls. Would you like to send an email instead ?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; [alert show]; [alert release]; } [telURL release]; [properPhoneNumber release]; [escapedPhoneNumber release]; [cleanedString release]; [rawNumber release]; }