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.


					

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.