QuickBlox

QuickBlox uygulamalarınızın mesajlaşma modülünü yöneteceğiniz bir backend servis, Bir anlamda kendi whatsup’ını yapmayı düşüneneler konunun arka planı ile ile ilgilenmesine hiç gerek yok. Quickbox sizin için herşeyi yapıyor. Farklı paketler için ücretlendirme yapan Quickbox starterlar için ücretsiz bir pakette sunuyor.

Bu muhteşem servis ile ilgili tüm detaylara, https://quickblox.com/ adresinden ulaşabiliriz.

 

Amazon Cagnito Sync

 

Amazon Cognito, Twitter’ın Fabric paketi ile birlikte de sunulan aslında AWS(Amazon Web Service) ailesine ait bir hizmettir. Cognito ile Mobil kullanıcılara ait datalar cihaz bağımsız olarak direkt kullanıcının acoount’u ile ilişkili olarak AWS CloudLarında saklanır ve aynı kullanıcının farklı cihazları ile senkronizasyonu developer’e neredeyse ek hiç bir yük getirmeden sağlar. Örneğin bir oyunda kullanıcının kalmış olduğu level ve kullnıcıya iat diğer datalar cloud üzerinde saklanır ve kullanıcı farklı cihaza geçtiğinde oyuna kaldığı level’dan devam edebilir. Bu işlem için uygulama geliştiricinin back end’de neredeyse hiç kod yazmasına gerek kalmaz.

Cognito Startup ve geliştiriciler 1 yıllık limitli sürümü ücretsiz olarak sağlamaktadır.

Daha detaylı bilgiyi ve Cognitoyu anlatan animasyonu bu adresten ulaşabilirsiniz.

 

 

 

AppStore Onaylama zamanı

AppStore uygulama yükleyen heyecanlı yazılım geliştiricilerin en çok sorduğu sorulardan biri de, uygulamalarının AppStore market raflarında ne zaman yerini alacağıdır.

Uygulamaların binary kodlarının iTunes Connect’e yüklendikten ilgili uygulama Waiting For Review durumuna geçer, Bu durumdaki uygulamalar AppMarket’in kuralları çerçevesinde bir takım testlerden geçer. Eğer uygulamalar bu testlerden başarı ile geçerse markette yüklenir ve satış işlemi başlar. Bu onay süreci Apple’daki yoğunluğa ve uygulamanızın karmaşıklığına göre 2-14 gün arasında değişebilir. Genellikle 5 günde onay işlemi tamamlanır.

AvarageAppStore

Uygulama onaylarının takibi amacı ile Shiny Development tarafından yürütülen Average App Store Review Times projesi ile onay sürelerinin günlük ortalaması takip edilebilir. Hatta isterseniz kendi uygulamanız ile ilgli süreyi girerek siz de katkıda bulunabilirsiniz.

http://appreviewtimes.com

Substring in Objective-C

Substring ile ilgili 3 kullanım mevcut;

substringFromIndex: Verilen index sonrası kalan string dizisini çevirir.

NSLog([@"1234567890" substringFromIndex:4]);

Sonuç: 567890

substringToIndex: Verilen index’e kadar olan string dizisini çevirir.

NSLog([@"1234567890" substringToIndex:6]);

Sonuç: 123456

substringWithRange: verilen index aralığındaki string ifadeyi çevirir.

NSLog([@"1234567890" substringWithRange:NSMakeRange(3, 5)]);

Sonuç: 45678

iOS Klavye gizleme

iOS projelerinde projenize eklediğiniz metin giriş alanlarına kullanıcı giriş yaptığı taktirde iOS’un sanal klavyesi otomatik olarak açılıyor. Ancak giriş işlemi tamamlandıktan sonra klavyenin kaybolması manuel yapılması gereken bir işlem. Klavyeyi ekrandan kaybetmeyi iki şekilde yapabiliriz.

1- Return Key:

Bu yöntemde klavyenin sağ alt kısmında buluan return key’e basıldığı taktirde klavye kaybolacaktır. Bu İşlemi aktif hale getirmek için, giriş kontrolünüzün(örn. textfield) Did End On Exit event’inin resignFirstResponder methodunu çağırması gerekiyor. Böylece bulunduğunuz nesne üzerinde return butonuna tıklandığında klavye ortadan kalkıyor olacak.

Bir örnek üzerinde gösterecek olursak;

#import <UIKit/UIKit.h>
@interface hideKeyboardViewController : UIViewController {
    UITextField  *textField;
}

@property (strong, nonatomic) IBOutlet UITextField *textField;
@end
#import "hideKeyboardViewController.h"
@implementation hideKeyboardViewController
@synthesize textField;
@end

2- Background tıklama

Background’a tıklayarak da bu işlemi yapmamız mümkün ancak bunun için. TouchDown eventin’de giriş nesnemizin resignFirstResponder methodunu çağırmamız gerekiyor.


					

Android AlertDialog

Android uygulamalarında kullanıcıya mesaj vermek istediğimizde android.app.AlertDialog sınıfını kullanırız.

AlertDialog msg = new AlertDialog.Builder(this).create();
 msg.setMessage("Mesaj içeriği");
 msg.show();

Eğer Başlık atamak istersek, setTitle ikon atamak istersek setIcon methodlarını kullanabiliriz.

msg.setTitle("Başlık");

Alert’imize bir buton ekleyip buna işlev vermek istediğimizde;

msg.setButton("Tıkla", new OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
//Çalışacak kod
}
});
AlertDialog ile ilgili daha fazla bilgi almak için;
(bkz: http://developer.android.com/reference/android/app/AlertDialog.Builder.html)

Bunun dışında ekranda bir süre göründükten sonra otomatik olarak kaybolan bir mesaj box ihtiyacımız varsa Toast işimize yarayacaktır.
(bkz: http://developer.android.com/reference/android/widget/Toast.html)


UITextField

iOS tabanlı projelerde kullanıcıdan veri almak istediğimizde UITextField nesnesini kullanırız.

        txt = [[UITextField alloc] initWithFrame:CGRectMake(5,40, 310, 30)]; //Text nesnesini ekrandaki yerinide belirterek tanımlıyoruz
        txt.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1] ; //RGB olarak arkaplan rengi atıyoruz
        txt.borderStyle = UIButtonTypeInfoLight; //Textfield için iOS tarafından hazır sunulan formatlardan birini seçmemiz daha görselliği artıracaktır
        txt.clearButtonMode = UIButtonTypeRoundedRect; //Clearbutton text nesnelerinizde giriş yaptığınızda sağ tarafta beliren ve tüm girişi silmenize yarayan bir özelliktir.
        txt.placeholder = @"<cevabınızı giriniz>"; //alana giriş yapılmadan önce içerisinde yazılacak yazıyı belirtir, ilk karakter girişi ile birlikte otomatik olarak kaybolur
        [self addSubview:txt];

UINavigationController Kullanımı

Projemizde kullanacağımız tüm viewleri içine alacak üst bir sınıf niteliğinde Navigation Control iOS uygulamarında sıkça karşımızda çıkmaktadır.

Kabaca NavigationControler’ın ASP.NET’deki master page’lere benzer bir yapı olduğunu söyleyebiliriz. UINavigationController sayesinde farklı viewler arasında geçişler çok daha kolaylıkla yapılacağı gibi master olarak ihtiyacımız olan bazı özellikleri de bize otomatik olarak sunmaktadır.

Projemize Navigation Controler tanımını appdelegate dosyaları içerisinde yapıyor olacağız.

Öncelikle appdelegate.h dosyamıza navigationControler sınıfından bir nesne tanımlayalım.

@property(nonatomic,retain)UINavigationController *navigation;

appdelagate.m dosyamızda ise @synthesize tanımından sonra önce nesnemizi oluşturuyoruz. sonrasında ise self.window.rootViewController‘a oluşturduğumuz nesnemizi bağlıyoruz.  Standart olarak sunulan ve aşağıda pasif hale getirdiğim standart yapıda rootviewControler’a direkt olarak controler bağlanmış. Biz araya bir navigation kontrol ekleyip root’a bunu göstermiş olduk. Dikkat etmemiz gereken diğer bir nokta navigation’u oluştururken bağlantısını kopardığımız viewcontroler’ımızı initWithRootViewController ile navigation’a bağlamış olmamız.

    //self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    //self.window.rootViewController = self.viewController;
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    navigation=[[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navigation;

Şimdi projemize ikinci bir view ekleyelim. ve birinci view'den bunu açalım. Projemize

Web View Nesnesi

Uygulamamızın içerisinde bir web sayfası göstermek istiyorsak yada daha kullanışlı şekli ile ifade edeyim, ben x-code ile falan uğraşamam. Kullanıcı Apple-Storeden uygulamamı indirsin ancak benim uygulama sadece web uygulamı gösteren basit bir browser olsun diyorsanız kullanacağınız bir nesene. Kullanımı da gayet basit.

    UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320 , 400)];
    [self.view addSubview:web];    
    NSString *str = @"http://www.gencsiviller.net";
    NSURL *url = [NSURL URLWithString:str];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];   
    [web loadRequest:req];

Site yüklenirken kullanıcıya gösterilecek bir loading yükleyelim. Bunun için UIActivityIndicatorView sınıfını kullanıyoruz.

    loadling = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(320/2, 480/2, 60, 60)]; 
    [self.view addSubview:loadling];

Web View’in webViewDidStartLoad ve webViewDidFinishLoad delegatelerini kullanalım.

- (void)webViewDidStartLoad:(UIWebView *)webView{
    [loadling startAnimating];
    NSLog(@"basladi");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
        [loadling stopAnimating];
    NSLog(@"bitti");
}

Kendi elimizdeki bir HTML kodunu webviewde göstermek istersek ;

    [web loadHTMLString:@"<html>..." baseURL:nil];

Eğer web sayfamızdaki herbir refresh’i yakalamak istiyorsak shouldStartLoadWithRequest delegatini kullanırız. Ancak sayfa içerisindeki javascript refreshlerini yakalayamayacaktır. Bu nedenle Ajax kullanılan sayfalar içinde kullanılması sağlıklı olmayacaktır.


					

Run Time Object Yaratma

XCode’de ekran tasarımlarını .xib dosyası üzerinde sürükle bırak yöntemi ile yapabiliyoruz. Ancak bazı durumlarda ekranda gösterilecek nesnenin rutime esnasında yaratılıp kullanılmasını gerektiren durumlar oluşabilir. Basit olarak run time anında bir nesneyi create edip nasıl kullanacağımıza gözatalım.

UIButon sınıfından yarattığımız bir buton nesnesini initwithframe ile ekranda görüntüleneceği yer bilgisini set ediyoruz.

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 50, 50)];

Buton ile ilgili diğer özellikleri set ediyoruz.

    btn.backgroundColor = [UIColor redColor];
    [btn setTitle:@"deneme" forState:nil];

View’in addsubview methodu ile nesnemizi view’e ekliyoruz.

    [self.view addSubview:btn];

Tanımladığımız nesnelerin event’larını da set etmemiz gerekecek. buton örneğimiz için TouchUpInside event’ını tanımlayacak olursak;

    [btn addTarget:self action:@selector(cagrilacakfonksiyon) forControlEvents:UIControlEventTouchUpInside];

TouchUpInside event’ı ile cagrilacakfonksiyon isimli bir fonksiyon çağıracağımızı set ettik. bu fonksiyonumuzu sayfamız içerisinde tanımladığımız vakit işlemi tamamlamış oluruz.

-(void)cagrilacakfonksiyon{
    //yapılacak işlemler
}

Eğer IPhone’nın standart dizaynına uygun bir buton oluşturmak istiyorsak initwithframe ile değilde buttonwithtype ile tanımlama yapmak ve sonrasında frame vermek daha doğru olacaktır.

 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [btn setTitle:@"deneme" forState:nil];