12 Eylül 2012 Çarşamba

Objective C ve iPhone'da Uygulama Geliştirme #2


Objective C diline giriş yapmak ve iPhone'daki temel konseptleri öğrenmek isteyen geliştiriciler ve bilgisayar mühendisliği öğrencilerini hedefleyen kitabımızı geçen ay sizlere duyurmuştuk. Özellikle mobil analiz konusuna iki ayrı bölüm ayırmasıyla piyasadaki benzerlerinden ayrılan Objective C ve iPhone'da Uygulama geliştirme adlı kitabımız online alışveriş sitelerinden ve D&R mağazalarından satın alınabiliyor. (Hepsiburada.com üzerinden almak için tıklayınız)

Kitap içinde oldukça pratik bir dille anlatılan iPhone'da uygulama geliştirme bölümünde bahsedilen lokasyon destekli To-Do uygulamasına dair kodları bu adreste bulabilirsiniz. Kitapla ilgili her türlü sorunuzu veya geri bildirimlerinizi bana iletebilirsiniz.

Twitter : com90

Not : Kitabın tanıtımına verdikleri destek için iPhoneTurkey.biz'e teşekkür ederiz.

23 Ağustos 2012 Perşembe

Objective C ve iPhone'da Uygulama Geliştirme

Birkaç aydır babamla üzerinde çalıştığımız Objective C ve iPhone'da Uygulama Geliştirme adlı kitabımız nihayet tamamlandı ve Nirvana Yayınları tarafından basıldı. Seçkin kitapçılarda ve internet alışveriş sitelerinde bulabileceğiniz kitabımızda iPhone programlamaya yeni başlayanları ve Objective C dilini öğrenmek isteyenleri hedefledik.

Kitabın ilk bölümü Objective C dilini öğretmeyi hedefliyor. Teorik konulara ağırlık verdiğimiz bu bölüm daha önce yayınlanan C ile Programlama kitabındakine benzer şekilde Objective C dilinin temel özelliklerini okuyucuya anlatmayı hedefliyor. Özellikle üniversitelerin programlama bölümlerinde okuyan öğrencilere Objective C'nin yanında programlamanın temellerini de anlattığımız bu bölüm iPhone ve Mac OS platformlarında uygulama geliştirmek isteyenlere de sağlam bir altyapı oluşturmayı hedefliyor. Bu bölümde değindiğimiz konular;

  • Nesneye Yönelik Programlama
  • Objective C dilinde veri tipleri
  • Fonksiyonlar
  • Dinamik bağlama id veritipi
  • Bellek sınıfları


İkinci bölüm ise tamamen iPhone programlamaya ayrılmış bir bölüm. Benim hazırladığım bu bölümde basit bir ToDo uygulaması üzerinden iPhone uygulamalarında yer alan bütün temel özellikleri okuyucularla paylaşıyoruz. Bu bölümde değindiğimiz bazı konular;

  • Bir iPhone uygulamasının anatomisi
  • Veritabanı işlemleri
  • Lokasyon bulma ve haritada gösterme
  • Mobil analiz ve önemi
  • Mobil reklam ve mobil reklam platformları
Kitabı D&R, Remzi Kitapevi gibi büyük mağazalarda bulabileceğiniz gibi aşağıdaki online mağazalardan da alabilirsiniz;


30 Temmuz 2012 Pazartesi

Countly iPhone SDK Kurulumu


Daha önceki yazılarımızda açık kaynak kodlu bir Türk mobil analitik projesi olan Countly'den bahsetmiştik. Şimdi Countly'nin iPhone uygulamaları için hazırladığı SDK'nın uygulamalara nasıl entegre edileceğine bakacağız.
Countly SDK CoreTelephony kütüphanesine de ihtiyaç duymaktadır. Eğer projemizde bu kütüphane mevcut değilse kütüphaneyi projeye dahil edelim.. Dosyaları ekledikten sonra yapmamız gereken AppDelegate dosyası içinde - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
metodu içerisinden aşağıdaki kodu çağırmak olacaktır. appKey yerine uygulama için yaratılan anahtarı girmeniz gereklidir.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
    [[Countly sharedInstance] start:@"appKey"];
}
Bu koddan sonra analiz bilgileri sunucuya gönderilmeye başlanacaktır. Burada unutmamanız gereken Countly.m dosyası içerisinde kendi sunucu adresinizi tanımlamaktır. 

#ifndef COUNTLY_URL
//#error You should define your COUNTLY_URL as below...
#define COUNTLY_URL "http://www.benimsunucum.com.tr/analiz"
#endif

25 Temmuz 2012 Çarşamba

Countly Kurulum


Countly’yi çalıştırmak için Ubuntu işletim sistemi kullanan bir sunucu edinmenizi tavsiye ederiz. Dosyaları indirdikten sonra sunucuya kopyalayın (ya da wget komutuyla direk sunucuya indirin) ve sıkıştırılmış dosyaları açın. Daha sonra dosyaları açtığınız klasörün içinde yer alan bin alt klasörü içinde ./countly.install.sh dosyasını çalıştırmanız gerekecektir. Bu dosya kurulum için gerekli komutları içerir. Gerekli veritabanları ve uygulamalar yüklendikten sonra Countly’yi kullanmaya hazırsınız.

Countly otomatik olarak 80 portunu dinlemeye ayarlıdır. Eğer bu port üzerinde çalışan başka bir uygulama varsa (örn. Apache ya da bu porta ayarlı bir Tomcat) Countly çalışmakta sorun yaşayacaktır. Portu değiştirmek için kuruluma başlamadan önce bin klasörü içinde config klasörüne gidin ve nginx.server.conf dosyası içerisinde listen yazan satırı bulun. Bu satır Countly’nin çalışma portudur. Bu değeri dilediğiniz gibi değiştirebilirsiniz (seçeceğiniz portun kullanılmıyor olmasına dikkat edin).

Kurulum tamamlandıktan sonra http://sunucuadi:555/ adresine giderek Countly’i kullanmaya başlayabilirsiniz. Biz portu 555 olarak değiştirdiğimiz için bu port üzerinden bağlandık. Eğer 80 ve 8080 dışında bir port üzerinden bağlanıyorsanız ve sunucunuz üzerinde kurulu bir güvenlik duvarı (Firewall) varsa ilgili portu serbest bırakmayı unutmayınız.

Countly'nin kurulumu bundan ibaret. Bir sonraki yazımda Countly'i mobil cihazınızda nasıl çalıştıracağınızı anlatacağım.

23 Temmuz 2012 Pazartesi

Countly - Open Source Mobile Analytics


Eğer mobil uygulamalarınıza ait kullanım verilerini yabancı bir sunucuda tutmayı doğru bulmuyorsanız (örn. bir banka mobil uygulaması) kendinize ait bir mobil analiz platformuna ihtiyacınız var demektir. İşte bu noktada bir açık kaynak yazılım olan Countly’yi kullanabilirsiniz.



Bir Türk bir yazılım ekibi tarafından geliştirilen Countly, geçtiğimiz günlerde ilk versiyonunu web sitesinden duyurdu. Tamamen açık kaynak olan Countly, sunucu yazılımı ve mobil uygulamalara entegre edilmesi gereken SDK ile beraber sunulmaktadır. Şu an için Android ve iPhone platformlarını destekleyen Countly ‘yi http://www.count.ly adresinden indirebilirsiniz.

Sonraki yazılarda Countly'i Ubuntu yüklü bir sunucuda nasıl kuracağınızı anlatacağız.

19 Temmuz 2012 Perşembe

iOS 6 ve Apple'ın Instagram'ı


Şüphesiz Apple iOS 6 ile birçok yeni ve kullanışlı özellik duyurdu ancak aralarında çok öne çıkmayan bir özellik var ki Apple'ın sosyal ağ kurma işine ne kadar kafayı taktığını gösteriyor. Bilindiği gibi Apple daha önce Ping adında kişilerin müzik zevkleri üzerine bir sosyal ağ duyurmuş, ancak bu ağ beklenen ilgiyi görmemişti. Şimdi ise Apple - büyük ihtimalle insanların fotoğraf paylaşmasındaki artışı da görerek - fotoğraflar üzerinden bir sosyal ağ hedefliyor.

iOS 6'da gelen ve yazıya konu olan özellik iCloud'a koyduğunuz resimleri arkadaşlarınızla paylaşmanız. Apple'ın Photo Stream dediği bu sistemde çekilen resimler öncelikle iCloud hesabınıza atılıyor. Daha sonra resim klasörlerinizden herhangi birisine girip paylaşmak istediğiniz resmi seçiyorsunuz ve Photo Stream (Fotoğraf Yayını) seçeneğini seçiyorsunuz. Bu seçeneği seçtiğinizde öncelikle paylaşımlar için yeni bir albüm oluşturmanız isteniyor. Albümü oluştururken kimlerle paylaşacağınız ve albümün internet üzerinden herkese açık olup olmayacağı seçeneklerini belirtmeniz gerekiyor.



Albümü oluşturduktan sonra iOS 5 ile gelen Twitter paylaşım ekranına benzer bir ekranda mesajınızı yazıyorsunuz ve Gönder düğmesine basıyorsunuz. Bu aşamadan sonra paylaştığınız kişinin de Apple hesabı varsa telefonuna bir uyarı mesajı gidiyor ya da kişiye paylaşım linkini içeren bir eposta gönderiliyor.



Buraya kadar basit bir resim paylaşımı gibi görünen sistemdeki sosyallik ise resimlere göz atarken ortaya çıkıyor. Bir resme tıkladığınızda hemen aşağıda Bir yorum ekleyin ve Beğen seçenekleri göze çarpıyor. Burada arkadaşlarınızın resimleriyle ilgili yorumlar ekleyerek bir sosyal paylaşım gerçekleştirmeniz mümkün.



iOS 6 Beta 1 ile duyurulan Photo Stream'in özellikleri şimdilik bunlarla sınırlı. Ancak bu kadarı bile Instagram'daki temel sosyal etkileşimi birebir uyguladıklarını gösteriyor. Kimbilir belki sonraki versiyonlarda Find My Friend uygulamasıyla entegrasyon gibi özellikler görebiliriz.

Kaynaklar

http://www.iphoneturkey.biz/2012/06/ios-6-ile-gelen-yeni-ozellikler-inceleme-iv.html
http://www.apple.com/ios/ios6/

18 Temmuz 2012 Çarşamba

iOS 6 ve Kartlara Elveda


iOS 6 işletim sisteminin en dikkat çekici özelliği şüphesiz yeni gelen Passbook uygulaması. Bu sistemle Apple kullanıcıların  yanında taşıması gereken (ve çoğu zaman da taşımadıkları) kupon, bilet, indirim kartı gibi şeyleri tek bir uygulama altında topluyor. Burada hedeflenen iOS 6 ile tanıtılan Pass Kit SDK kullanılarak firmaların IT sistemlerini Apple'ın kurduğu sisteme entegre etmeleri. Bu entegrasyondan sonra oluşturulan biletlerin kullanıcıya eposta, web adresi ya da bir başka yöntemle ulaştırılması gerekiyor.

Kart taşımamanın yanında kullanıcıya sağlanan avantajlardan biri de Passbook uygulamasının dahili hatırlatma özelliği. Tıpkı Reminder uygulamasındaki gibi Passbook içerisinde yer alan biletler otomatik olarak lokasyon ve zaman hatırlatması içeriyor. Bu şekilde bir etkinlik ya da uçak biletinin kullanım tarihi yaklaştığında kullanıcı ana ekrana gelen bir hatırlatma mesajıyla uyarılıyor. Aynı zamanda eğer etkinlik yeri değişirse kullanıcı bu değişimle ilgili anında bilgi sahibi oluyor.

Teknik taraftan bakıldığında ise firmaların oluşturduğu dosya aslında birkaç resim ve içerikten oluşan SHA-1 imzalı bir dosya. Burada görsel içeriğin ve etkinlik bilgilerinin Apple'ın istediği formatta ve Passbook uygulamasının okuyabileceği şekilde hazırlanması ve güvenli bir sertifikayla imzalanması gerekiyor. Aslında bu noktada Apple'ın oluşturduğu platform Push Notification servisine oldukça benziyor. Uygulamasında Pass Kit kullanacak geliştiricilerin iOS Provisioning Portal içinden öncelikle bir Pass Type yaratmaları gerekiyor. Pass Type yaratıldıktan sonra Apple size bir gizli anahtar içeren bir sertifika veriyor ve oluşturduğunuz biletleri bu sertifikayla imzalamanızı istiyor. Bu noktadan sonra biletler cihazın Pass Store denilen bilet hafızasına yükleniyor ve -eğer varsa- iPhone uygulamanız tarafından tanınabiliyor. Bu şekilde örneğin bir havayolu şirketiyseniz iPhone uygulamanız cihazda yüklü biletleri görüp kullanıcıyı havaalanında yönlendirebiliyor.

Her ne kadar şu anda somut kullanımını göremesek de markaların bu platforma hızlıca entegre olmak isteyeceklerine kesin gözüyle bakıyorum. Sonuçta 300 milyon kişinin cebinde yer alan bir sisteme girmeye direnç göstermek epey şaşırtıcı bir iş kararı olacaktır :)

Kaynaklar

http://www.apple.com/ios/ios6/
https://developer.apple.com/library/prerelease/ios/#documentation/UserExperience/Conceptual/PassKit_PG/Introduction.html

13 Şubat 2012 Pazartesi

iPhone'da UISwipeGesture kullanımı












UISwipeGesture, iPhone uygulamalarında sıkça karşımıza çıkan parmağı ekran üzerinde ilerleterek sayfa çevirme hareketini kolaylıkla uygulamanıza eklemeye yardımcı olur.


UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleGestureLeft)];

    [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];

    [self.view addGestureRecognizer:recognizer];

    recognizer.delegate = self;

    [recognizer release];


Burada yapmanız gereken .h dosyanızda UIGestureRecognizerDelegate tanımlamasını yapmanızdır. Daha sonra init metodu içinde belirleyeceğiniz selector hareket algılandığı takdirde çağırılacak fonksiyona işaret eder. setDirection metodu ile hareketin yapıldığı yön seçilir. Burada sağ, sol, yukarı ve aşağı şeklinde dört hareket yönü mevcuttur.

Daha sonra hareketi algılamasını istediğiniz UIView objesine addGestureRecognizer metoduyla tanımlama yapmanız gerekmektedir. Örnekte ekranın tamamı hareketi beklemektedir.


- (void) handleGestureLeft{


// yapılacak işlemler

}


handleGestureLeft fonksiyonu hareket algılandığında çağırılacak ve içinde belirtilen işlemler yapılacaktır.



iPhone'da Uyarı Ekranı Çıkarmak












iPhone'da en sık kullanılan ekranlardan birisi de pop-up şeklinde karşımıza çıkan UIAlertView ekranıdır. Bu ekran genellikle kullanıcıya bir uyarı vermek ya da seçim yaptırmak amacıyla ekrana getirilir. En basit haliyle kullanıcıya bir mesaj verme amaçlı kullanımı şu şekildedir;


UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"Uyarı"

  message:@"Ben uyarıyım"

delegate:self 

cancelButtonTitle:@"Tamam" 

otherButtonTitles:nil]autorelease];


Burada kullanıcıya "Ben uyarıyım" yazılı bir mesaj gönderilecektir. Kullanıcı Tamam düğmesine bastığında da mesaj kendiliğinden kaybolacaktır.


Eğer kullanıcıdan Evet - Hayır gibi bir seçim yapması bekleniyorsa UIAlertView aşağıdaki gibi çağrılır;


UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Uyarı"

  message:@"İptal vela Devam" delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") otherButtonTitles:NSLocalizedString(@"Continue", @"Continue"),nil];

alert.delegate = self;

    alert.tag = 10;

[alert show];


Burada kullanıcının karşısına iki adet buton çıkacak ve kullanıcıdan bir komut beklenecektir. Komutun karşılığını alacak fonksiyon aşağıdaki şekildedir;


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    if(buttonIndex == 1 && alertView.tag == 10){

// tamam tıklandı

    } else if(buttonIndex == 0 && alertView.tag == 10) {

// iptal tıklandı

    }

}


Burada basılan düğmenin index'ine göre istenilen işlemi yapabilirsiniz. Eğer kodunuzda birden fazla UIAlertView kullanıyorsanız ve delegate olarak aynı ViewController seçiliyse kullanıcıdan gelen komutları karıştırmamak için UIAlertView'in tag değerini ayarlamanız gerekir. Örneğimizde UIAlertView tag 10 olarak belirlenmiştir. Delegate metodun içinde de tag değerinin 10 olup olmadığı kontrol edilerek buton aksiyonunun doğru UIAlertView'den geldiği anlaşılır.


iPhone'da Lokalizasyon












Yazdığınız programların telefonun diline göre değişmesini istiyorsanız iPhone'un lokalizasyon özelliğinden faydalanmanız gerekmektedir. Lokalizasyon özelliği sayesinde programın içindeki bütün metinler telefonda ayarlanmış ülkeye göre otomatik olarak değişmektedir. Kullanıcı telefon ayarını İngilizce'den Türkçe'ye çektiğinde Türkiye lokal dosyası okunacak ve metinler bu dosya içindeki değerlerle değişecektir.


xCode projenizde yeni dosya ekleme ekranından iOs altında Resource bölümüne gelin ve buradan Strings File dosya tipini seçin. Next seçeneğinden sonra dosyanıza Localizable adını verin. Bu sayede key - value tipinde bir metin dosyanız oluşacaktır. Örnek olarak;


"Search" = "Search";

"History" = "History";

"Dictionaries" = "Dictionaries";


Burada soldaki değer anahtar, sağdaki değer de o anahtara karşılık gelen değerdir. Şimdi bu dosyayı tıklayarak sağdaki menüden Localization seçeneğine gelelim ve + işaretini tıklayarak yeni bir dil için dosyayı çoklayalım. Görüldüğü gibi Localizable.string altında (English) ve (Turkish) olarak iki yeni dosya görünecektir. Bu şekilde dosyayı birden fazla bölge için çoklayabilirsiniz. Şimdi yukarıdaki değerler için Türkçe strings dosyasını güncelleyelim;


"Search" = "Arama";

"History" = "Geçmiş";

"Dictionaries" = "Sözlükler";


İlgili tercümeleri yaptıktan sonra kodun içinde NSString tipinde değer döndüren NSLocalizedString(@"Search", @"Search"); fonksiyonuyla gerekli atamaları yapabilirsiniz.


self.title = NSLocalizedString(@"Search", @"Search");


UserDefaults kullanarak değer saklamak












iPhone'da veri saklama yollarından biri de UserDefaults kullanmaktır.


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setValue:value forKey:key];

[defaults synchronize];


Bu şekilde uygulamanıza özel bir depolama alanında istediğiniz verileri saklayabilirsiniz. Burada vereceğiniz anahtara göre istediğiniz veri tipini saklayabilirsiniz. synchronize metodu ise değer atamasından sonra değerleri diske yazacaktır. Burada dikkat etmeniz gereken eğer o anahtara önceden atanmış bir değer varsa bu dikkate alınmayacak, synchronize metodu sonrasında en güncel değer saklanacaktır. Bu yüzden veri kayıpları için kendiniz kontrol yapmalısınız.


Saklanan bir değer çağırmak içinse;


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

return [defaults objectForKey:userKey];


metodu kullanılır. standardUserDefaults özel bir metoddur ve saklanan değerleri geri çağırmak için kullanılır. objectForKey metoduna değere karşılık gelen anahtarı girdiğinizde istediğiniz bilgiye kavuşmuş olursunuz.


Bazı değerler serializable özelliği taşımadığından NSUserDefaults ile kayıt edilemezler. Bu durumda sistem loglarında bu durum size belirtilecektir. Çözüm olarak NSKeyedArchiver kullanılabilir.


NSData *data = [NSKeyedArchiver archivedDataWithRootObject:userInfo];


Bu işlemden sonra NSData değeri yukarıdaki örnekteki gibi kayıt edilebilir. Bu şekilde kayıt edilmiş bir değeri çağırmak içinse 


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSData *userData = [defaults objectForKey:userKey];

return [NSKeyedUnarchiver unarchiveObjectWithData:userData];


fonksiyonu kullanılır.


iPhone'da Animasyon












iPhone platformunun diğer platformlara göre en başarılı olduğu alanlardan birisi de animasyon yapma kolaylığıdır. UIView objeleri üzerindeki özellikler belirli zaman dilimleri verilerek istenildiği gibi değiştirilebilir. Bu sayede buton, resim gibi ekranda görüntülenen her türlü obje her türlü hareketi kolaylıkla yapabilmektedir.


Animasyon için aşağıdaki fonksiyon kullanılır;


[UIView beginAnimations:@"disappearSplashImageView" context:nil];

[UIView setAnimationDuration:5.5];

[UIView setAnimationDidStopSelector:@selector(animateOtherStuff:finished:context:)];

[splashImageView setAlpha:0.0];

[UIView commitAnimations];


Burada ilk satırda animasyona bir isim verilir. İkinci metod animasyonun süresini belirtir. AnimationDidStopSelector animasyon bittikten sonra çağırılacak metoddur ve animasyon bitişinde yapılacak işlemler burada belirtilir. Bundan sonra animasyona katılacak UIView nesneleri ve animasyon sonunda özelliklerinin ne olacağı tek tek belirtilir. Şekilde splashImageView nesnesi 5.5 saniye sonra gözden kaybolacaktır. commitAnimation metodu ise animasyonu başlatır.


- (void)animateOtherStuff:(NSString*) animationID finished:

(NSNumber*) finished context:(void*) context 

{

if ([animationID isEqualToString:@"disappearSplashImageView"]) {

[splashImageView release], splashImageView = nil;

}

}


animateOtherStuff metodu örneğimizde animasyon sonunda çağırılacak fonksiyon olarak belirtilmişti. Görüldüğü gibi animasyonId değişkeni splashImageView'ı yok edecek animasyona uyuyorsa splashImageView daha fazla kullanılmayacağından bellekten temizleme işlemleri çağırılmıştır. Burada istenildiği takdirde başka bir animasyon başlatılabilir.


iOS 4'ten itibaren kullanılan Block Animation sistemi ise yukarıdakine göre çok daha basittir.


    [UIView animateWithDuration:2.0

                     animations:^{ 

                         splashView.alpha = 0.0;

                     } 

                     completion:^(BOOL finished){

                         [splashView removeFromSuperview];

                     }];


Görüldüğü gibi block metodlar kullanılarak yapılan bu animasyonda süre animateWithDuration seçeneğinde belirtilir. animations bloğu içinde yapılacak animasyonlar tanımlanır. completion bloğu ise animasyon bittiğinde yapılacak işlemler için kullanılır.


Info.plist dosyası ve kullanımı












Her iPhone projesinde yer alan ProjeAdı-Info.plist dosyası uygulama ile ilgili önemli verilerin kayıt edildiği dosyadır. Bu dosya işletim sistemi tarafından okunarak uygulama ile ilgili arka planda çalışma desteği, ikon dosyası, açılış ekranı gibi bilgiler öğrenilir. 


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

<key>CFBundleDevelopmentRegion</key>

<string>en</string>

<key>CFBundleDisplayName</key>

<string>${PRODUCT_NAME}</string>

<key>CFBundleExecutable</key>

<string>${EXECUTABLE_NAME}</string>

<key>CFBundleIconFiles</key>

<array/>

</dict>


Bu dosyayı elle modifiye edebileceğiniz gibi dilerseniz kendi değerlerinizi de ekleyebilirsiniz. Örneğin uygulamanızda Facebook paylaşımı varsa Facebook'un size verdiği App Id değerini burada saklayabilirsiniz. Bunun için yapmanız gereken tek şey buraya bir satır eklemek ve Dictonary formatını bozmadan değeri girmenizdir.


<key>FacebookAppId</key>

<string>355424377819912</string>    


Dictionary dosyaları key - value mantığına göre çalışır. Bu dosyaya girdiğiniz değerleri kodun içinden çağırmak içinse


NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];


fonksiyonuyla dosyayı bir NSDictonary değişkenine atayabilirsiniz. Daha sonra da


NSString *facebookId = [infoDict objectForKey:@"FacebookAppId"];


komutuyla değere ulaşabilirsiniz.