Le me @ WWDC 15 – First-time at WWDC tips

It’s been a while after I’ve been in San Francisco at WWDC15. It’s been a great week full of sessions, labs, experience. I want to share some of them. Especially, If you are first-time-attendees like me 🙂 , might be need any kind of information. 

thumb_IMG_4876_1024

You’ll get your badge (the entrance card) the day before WWDC begins from Moscone Center, so it should be a Sunday. Apple also gives the WWDC jacket, it really helps to survive in SF weather conditions :D. Normally, Apple Company Store which is at the Infinite Loop isn’t open on Sundays. But Apple gently does a favour to WWDC attendees and opens the doors of store. You can find Apple t-shirts, mugs, pens, sweats and electronic stuffs in there. But if you can not go that far, don’t worry, there will probably be a little store at the event hall. Read More »

Sending SMS programmatically on IOS!

Mobil uygulamalarımız artık, sadece iphone değil, ipad, ipod touch gibi diğer cihazlarda çalışıyor. Programsal olarak SMS göndermeden önce, uygulamanın yüklü olduğu device’ın SMS göndermek için uygun olup olmadığını (Sim kartı takılı vs.) anlamaya ihtiyacımızı var.
SMS gönderip gönderemeyeceğini anlamak için IOS Core Framework’lerinden CoreTelephony framework’ünü kullanmak gerekli.
Bu Framework’ü Xcode’da Projemize eklemek için;
Proje’nin Target’ı seçilir, ve Build Phases’den Link Binary With Libraries kısmına gelinir.

adding framework to project in XCode.

Burada bulanan framework’ler, projenin kullandığı frameworklerdir. IOS projelerinde UIKit, Foundation ve CoreGraphics framework’leri baz olarak proje oluşurken ekli gelir.

Yeni bir framework eklemek için ‘+’ tuşuna basarak, framework seçilir. CoreTelephony framework’ü Developer SDK’sı ile gelen bir framework, bu nedenle CoreTelephony yazıp aratırsanız, IOS klasörünün altında gelecektir.

Kullandığınız SDK altındaki diğer frameworkleri incelemek için;
örneğin burada iphoneOS ve 5.1 sdk’da bulunan frameworklere dosya sisteminde aşağıdakine benzer bir yolla erişebilirsiniz.
—– Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1sdk/System/Library altındaki Frameworks ya da Private Frameworks klasörleri altında bulabilirsiniz.

Konumuza geri dönersek 😉 Eklediğiniz framework’ü projenin altında görebilirsiniz. Genelde framework’ler dizin olarak “Frameworks” klasörünün altında yer alır.
Sürükleyip, bu klasörün altına alabilirsiniz.

Eklediğimiz bu framework’teki CTTelephonyNetworkInfo ve CTCarrier sınıflarına ihtiyacımız var bu nedenle, bu sınıfları eklemeden önce, framework’teki referanslarını import etmeliyiz.

#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

Device’da herhangi bir sim kartının katılı olup olmadığını ya da bir operatör bilgisinin alınıp alınamadığını, aşağıdakine benzer bir method yazarak anlayabilirsiniz. Burada mobileNetworkCode‘un nil yada boş olup olmadığına bakarak, SMS gönderip gönderilmeyeceği anlaşılabilir.

- (BOOL) canDeviceSendSMS{
CTTelephonyNetworkInfo *networkInfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];

if(nil!=[carrier mobileNetworkCode]){
return YES;
}else{
return NO;
}
}

Bu kontrolleri yaptıktan sonra, SMS gönderme ekranını açıp ve esas işi yapan MessageUI framework’ünü de aynı şekilde, Xcode üzerinden proje target’ına eklemeniz ve, kullanırken aşağıdaki şekilde, import etmeniz gerekiyor.

#import <MessageUI/MessageUI.h>

if([MFMessageComposeViewController canSendText]){
MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];

controller.body = "First SMS Body";
controller.recipients = [NSArray arrayWithObjects @"02123456789", nil];

controller.messageComposeDelegate = self;
[self openSMSSendingModalView:controller];
}else{
[self showSMSSendingErrorMessage];
}

//METHODS FOR PUSHING And DISMISSING MESSAGE UI WINDOW
-(void) openSMSSendingModalView:(MFMessageComposeViewController*) composeView{
[[[UIApplication sharedApplication] delegate] window] presentModalViewController:composeView animated:YES];
}

-(void) dismissSMSSendingModalView{
[[[UIApplication sharedApplication] delegate] window] dismissModalViewControllerAnimated:YES];
}

-(void) showSMSSendingErrorMessage{
//HANDLE SMS sending error to fill here.
}

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
switch (result){
case MessageComposeResultCancelled:
DLog(@"Result:SMS cancelled");
//DO SOMETHING ABOUT IT!
break;
case MessageComposeResultSent:
DLog(@"Result:SMS sent");
break;
case MessageComposeResultFailed:
DLog(@"Result:SMS failed");
//DO SOMETHING ABOUT IT!
break;
default:
DLog(@"Result:SMS not sent");
//DO SOMETHING ABOUT IT!
break;
}
[self dismissSMSSendingModalView];
}
///***************/////

Yukarıda [[[UIApplication sharedApplication] delegate] window] kodu ile uygulamamızın window’una erişerek, Mesaj göndermeye yarayacak controller’ımızı yani MFMessageComposeViewController class’ının bir objesini presentModalViewController ile ekranların gösterim stack’inin en üst sırasına koyuyoruz.

@interface SMSSender : NSObject
{
......
......
}

SMS gönderme işlemimizin sonucu alabilmemiz için, MFMessageComposeViewControllerDelegate’i olmamız, ve bu protocol’ü (java’da interface olarak tabir edebiliriz) sınıfımıza eklememiz (örneğin aşağıdaki şekilde) ve yukarıdaki gibi – (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {} methodu ile bu işleminin sonuçlarına göre aksiyon almamız gerekiyor. SMS gönderme işlemi tamamlandıktan sonra bu method otomatik olarak tetikleniyor ve MessageComposeResult tipinde sonuçlar döndürüyor.

MessageUI ile ilgili daha detaylı bilgi almak için buradan devam edebilirsiniz! 🙂

Kolay Gelsin!