iOS, Android, Windows mobile development codes and tips

Kategoride Yazılmış iOS (iPhone,iPad)

iOS Bağlantı kontrolü ve Wifi / 3G bağlantı farkı

Uygulamamızın bağlantısı koptuğunda yada wifi üzerinden mi 3G üzerinden mi bağlandığını anlayabilmek için aşağıdaki kodları kullanmamız yeterli olacaktır. Bağlantı durumu değiştiğinde reachabilityChanged fonksiyonu çalışır.

AppDelegate.h


#import "Reachability.h"

@interface AppDelegate : UIResponder {

Reachability *reachability;
NetworkStatus reachStatus;

}

AppDelegate.m


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

reachability = [Reachability reachabilityForInternetConnection];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged)
name:kReachabilityChangedNotification
object:nil];
[reachability startNotifier];
[self reachabilityChanged];

//sürekli kontrolü kapatmak için kullanabilirsiniz.
//[reachability stopNotifier];

// Override point for customization after application launch.
return YES;

}

- (void) reachabilityChanged {

reachStatus = [reachability currentReachabilityStatus];

if(reachStatus == NotReachable)
{
//No internet
NSLog(@"No Internet");
}
else if (reachStatus == ReachableViaWiFi)
{
//WiFi
NSLog(@"Wifi");
}
else if (reachStatus == ReachableViaWWAN)
{
//3G
NSLog(@"3G");
}

}

Reachability class dosyalarını indirmek için:
https://github.com/tonymillion/Reachability

iOS Bağlanılan Wifi Ağ Adını Bulma

AppDelegate.h


+ (NSString *)currentWifiSSID {
// Simülatörde çalışmaz - Does not work on the simulator.
NSString *ssid = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info[@"SSID"]) {
ssid = info[@"SSID"];
}
}
return ssid;
}

AppDelegate.m


NSLog(@"Wifi: %@", [AppDelegate currentWifiSSID]);

iOS Documents Klasörüne Dosya Kopyalamak

Uygulamanız cihaz üzerinde çalıştığında yazma izni sadece /Documents klasöründe vardır. Bu nedenle .sqlite gibi yazma izni gerektiren dosyalarınızı bu klasörde çalıştırmanız gereklidir.
Fakat Xcode size dosyalarınızı koyabileceğiniz bir /Documents klasörü sunmaz. Uygulamanız, cihaza yüklendiğinde otomatik yaratılan bu klasöre bir dosya kopyalamak için aşağıdaki kodu kullanabilirsiniz.
Yüklemek istediğiniz dosya root(ana) dizinde xcode projenize eklenmiş olmalıdır.
İlgili kontrol kodlarını da ekleyerek bu işlemi sadece bir kez yapmalısınız, aksi halde uygulamanız her açıldığında dosyanın üzerine kopyalarsınız ve kullanıcıya veri kayıpları yaşatabilirsiniz.


NSFileManager *fmngr = [[NSFileManager alloc] init];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"history.sqlite" ofType:nil];
NSError *error;
if(![fmngr copyItemAtPath:filePath toPath:[NSString stringWithFormat:@"%@/Documents/history.sqlite", NSHomeDirectory()] error:&error]) {
// handle the error
NSLog(@"Dosya yaratılamadı: %@", [error description]);
}
[fmngr release];

iOS Sunucuya Veri Gönderme

Uygulamadan sunucumuzdaki bir php dosyasına veri göndermek için aşağıdaki kodu kullanabiliriz.
Örneğimizde cihazla ilgili bazı bilgileri gönderiyoruz.


#import "UIDeviceHardware.h"

- (void) postDataRequest {

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://www.sulubeyn.com./data.php?name=%@&sysver=%@&uuid=%@&v=1.0",
[[UIDevice currentDevice] name],
[[UIDevice currentDevice] systemVersion],
[[UIDevice currentDevice] uniqueIdentifier]
];
NSString *urlstrEscape = [urlstr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlstrEscape]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:3.0];

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest
delegate:self];
NSLog(@"%@", theConnection);
}

iOS İnternetten Resim Download

iOS programlamada herzaman işimize yarıyacak bir snippet’ı paylaşıyoruz.

-(void)SaveImageFromUrl
{

NSLog(@"Downloading...");

NSString *jpg_adi = [[NSUserDefaults standardUserDefaults] stringForKey:@"jpg_adi"];

NSString *urlAddress = [[NSString alloc] initWithFormat:@"http://www.sulubeyn.com/images/%@.jpg",jpg_adi];

UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlAddress]]];

[Photo setImage:image];

}

iOS Sdk da Kendi Function Kütüphanelerimizi Oluşturmak

Alışık olduğumuz programlama dillerinden objective C ye direk dalış yaptığımızda biraz afallar gibi oluyoruz. Ama php, c# , c++ ve benzeri dillere azda olsa aşina olanlar kendi kütüphanelerini yaratmak isteyeceklerdir.

Xcode ile yeni bir proje açıp yeni bir class ekliyoruz. Classımızın adı Function .h ve .m dosyalarını aşağıdaki gibi revize ediyoruz.

Function.h


#import <Foundation/Foundation.h>

@interface Functions : NSObject {
NSString *Alert_Message;
NSString *AlertBox_Title;

}
@property(nonatomic,copy) NSString *Alert_Message;
@property(nonatomic,copy) NSString *AlertBox_Title;

- (void)ShowSimpleAlertBox;
- (void)ShowOkCancelAlertBox;

@end

Function.m


#import "Function.h"

@implementation Functions

@synthesize Alert_Message;
@synthesize AlertBox_Title;

-(void) ShowOkCancelAlertBox
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:AlertBox_Title message:Alert_Message
delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
[alert show];
[alert release];
}

-(void) ShowSimpleAlertBox
{

UIAlertView *alert= [[UIAlertView alloc] initWithTitle:AlertBox_Title
message:Alert_Message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
[alert release];

}

@end

iOS SMS Gönderimi

Uygulamadan çıkmadan SMS gönderim ekranını telefon numarası ve mesaj hazır bir şekilde göstermek için aşağıdaki kodu kullanabilirsiniz.

- (void) SMSContact {

NSString *SMSnumber = @"05001234567";
NSString *SMStext = @"Hello Sulubeyn";

Class smsClass = (NSClassFromString(@"MFMessageComposeViewController"));
if (smsClass != nil && [MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
controller.body = SMStext;
controller.recipients = [NSArray arrayWithObject: SMSnumber];
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
[controller release];

} else {
//Cihaz SMS desteklemiyorsa uyarı çıkartalım.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Cihaz SMS desteklemiyor!"
delegate:self cancelButtonTitle:nil otherButtonTitles:@"Tamam", nil];
alert.tag = 1;
[alert show];
[alert release];

}

}

Kullanıcının yaptığı işlemi kontrol etmek için aşağıdaki kodu kullanmamız gerekiyor.

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {

switch (result)
{
case MessageComposeResultCancelled:

NSLog(@"Sonuç: sms iptal edildi");
break;
case MessageComposeResultSent:
NSLog(@"Sonuç: sms gönderildi");
break;
case MessageComposeResultFailed:
NSLog(@"Sonuç: sms başarısız");
break;
default:
NSLog(@"Sonuç: sms gönderilmedi");
break;
}

//Statusbar kapalıysa bile görünebilir, bunu engellemek için bu kodu eklemekte fayda var.
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

//Viewi kapatıyoruz
[self dismissModalViewControllerAnimated:YES];

}