Uygulama geliştirirken bilgisayarınızın performansı canınızı sıkmasın istiyorsanız kesinlikle bir Mac bilgisayar sahip edinmelisiniz.Fiyatları çok pahalı olmamakla birlikte donanımı da pek fena olmayan Mac Mini'lerden bir tane edinilebilir. Mac sahibi olmak istemiyorsanız, Snow Leopard retail dvd'sini satın alıp önceki blog yazısında anlatmış olduğum adımları takip ederek Windows makinanıza sanal makina kurulumu yapabilirsiniz. Fakat sanal makina kurulumu zahmetli bir işlem ve geliştirme yaparken problem çıkartabiliyor.
iPhone, iPod veya iPad
Donanım gerektirmeyen uygulamalar için bunlardan birine sahip olmanız gerekmez, çünkü uygulama geliştirme ortamı size bir simulatör sağlıyor. Bu simulatörü kullanarak uygulamanızı sanal bir cihaz üzerinden çalıştırabiliyorsunuz.
Nesneye dayalı programlama bilgisi
iOS sdk tamamen nesneye dayalı programlanmıştır. Uygulama geliştirirken nesneye dayalı programlama prensipleri kullanılmaktadır. Eğer object oriented programming, class(sınıf), method, inheritance(kalıtım), polymorphism(çok-şekillilik) gibi kavramlara aşina değilseniz bu konu üzerine hazırlanmış dökümanları incelemenizi şiddetle tavsiye ederim.
iOS5 SDK
Xcode/SDK'yi developer.apple.com adresinden indirip kurabilirsiniz. İndirmek ücretsiz fakat eğer uygulamanızı gerçek bir cihazda denemek istiyorsanız developer programına yıllık $99 ödeyerek üye olmanız gerekmektedir. IOS, 4 farklı katmana ayrılabilir.Bu katmanlardan Core OS, donanıma en yakın katman olup güç yönetimi, dosya sistemi ve diğer donanıma yakın programlama gereken birimlerin olduğu katmandır. Core Services katmanı, networking, dosya erişimleri, SQLite gibi uygulamarın Core OS kullanılarak hazırlanmış servislerin bulunduğu katmandır.Media katmanı, OpenAL, OpenGL ES gibi görüntü ve ses üzerine hazırlanmış kütüphanelerin bulunduğu katmandır. Kullanıcıya en yakın katman olan Cocoa Touch katmanı ise kullanıcı ile iletişimi sağlayan görsel arabirimleri sağlayan sınıfların yer aldığı katmandır.
Geliştirme Ortamı Parçaları
-Xcode'u kurduğunuz da geliştirme ortamıyla beraber bir program daha kurulur.Instruments uygulamanın bir takım bellek ve performans analizi için kullanılmaktadır.
-Uygulama geliştirirken C'nin varyasyonu olan objective-C dili kullanılmaktadır.
-SDK bir çok framework sunmaktadır.Uygulama geliştirirken bu kütüphaneler kullanılmaktadır.
-MVC tasarım kalıbı geliştireceğiniz tüm uygulamalarda kullanacağınız tasarım kalıbıdır.
MVC Tasarım Kalıbı
MVC tasarım kalıbı nesneleri, model,view ve controller olarak 3 gruba ayırır.Model grubunda uygulamanızın ne olduğunu anlatan nesnelerin bulunduğu gruptur.Fakat bu nesneler, uygulamanızın nasıl göründüğüyle ilgili değil uygulamanızın arka plan da hangi verilere sahip olduğu ile ilgilidir.Örneğin bir araba yarışı uygulamanız olduğunu varsayalım.Modeliniz de arabanınızın hızı, rengi, markası, nerede olduğu,kaç kişilik olduğu,hasar bilgisi gibi arabanızın tanımını yapan veriler vardır.Bu verilerden hiç biri arabanızın nasıl göründüğü ya da arabanızın ekranda nerede durması gerektiğini anlatan veriler değildir.Controller grubu ise bu Model nesnelerinin nasıl görüntüleneceğini düzenler.Controller nesneleri, modeldeki verilerin view nesnelerinde yani kullanıcıya nasıl görüntüleneceğini kontrol eden gruptur.Controller nesnelerinin ekrandaki görüntüleri ise View nesneleridir.View nesneleri, kullanıcının görüntüleyeceği nesnelerdir.View nesneleri genellikle Apple'ın sağlamış olduğu slider,buton,label gibi arayüz nesneleridir.

MVC grupları arasındaki iletişimi şekildeki gibi gösterebiliriz.Model ile view arasındaki kalın sarı çizgiler bu iki grup arasında geçiş yapamayacağınız anlamına gelir.Controller ile diğer gruplar arasındaki kesikli çizgiler ise bu yönde bir geçiş yapabileceğinizi gösterir.Gruplar arasındaki beyaz kesiksiz çizgi ise bu yönde geçiş izinli olarak gerçekleştirilebileceği anlamına gelir (Otoyolda ters yönde gitmek gibi).MVC'nin amacı kodlarımızın güzel bir şekilde gruplayarak yönetimini kolaylaştırmak olduğu için gruplar arasındaki bu iletişimler önemlidir.Controller grubundan Model grubuna doğru yönelmiş yeşil okun anlamı, Controller grubu Model hakkında her türlü bilgiye sahiptir.Kodlama olarak Model grubunun header dosyasının Controller grubuna import edildiği şeklinde düşünülebilir.Araba örneğinden yola çıkarak Controller "Araba ne kadar hasarlı?" sorusunu Model'e yöneltir, Model grubu bu soruya cevap verir. Bu cevabı kullanıcı arayüzüne gönderme işi ise Controller ile View arasındaki yönlü yeşil ok sayesinde olur. Controller aldığı cevabı outlet işaretçileri sayesinde View grubuna yani kullanıcı arayüzüne iletir.Outlet, controllerdan view grubuna işaretçi anlamına gelir. Model ile view arasındaki kalın sarı çizgiler bu iki grubun arasında doğrudan iletişim olamayacağı anlamına gelir.
View grubundaki nesneler bazı durumlarda controller grubuna mesaj gönderebilir.Bu mesaj gönderme işlemi controller grubunun yaptığı gibi header dosyasını(Public API) import etmekle değil de bir takım özel yollar ile yapılabilir.Dolayısıyla bu yöntemlerde view grubu kimin ile haberleştiği konusunda bilgi sahibi değildir, yani kör bir haberleşmedir.Birinci yöntemde view nesnesi bir olayı bekler,(butona tıklanması,sliderın sürüklenmesi) olay gerçekleşince controllerı uyarır.Bu target-action yönteminde view, kullanıcı arayüzünde meydana gelen değişiklik sonucunda sadece action mesajını target'a gönderir. Fakat bazı durumlarda view ile controller senkronize hareket etmek durumundadır. Controller nesnesi bazı olayları koordine etmelidir. Örneğin bir scroll barınız var ve scroll bar belli bir pozisyona geldiğinde ekrana bir şey yazmak istiyorsunuz.Bu durumda senkronizasyon için scroller o pozisyona geldiğinde controllerı uyaracak bir mesaja ihityacınız vardır. Bu yönteme "delegation" denir. Her view nesnesinin bir adet delegate nesnesi vardır ve bu iki nesne kendi aralarındaki "protocol" ile haberleşirler. View nesneleri ekranda gösterecekleri veriye sahip değillerdir. Çünkü bu nesneler, generic nesne olmak isterler. Bu nedenle, ekranda gösterecekleri veriyi yönetecek başka nesnelere ihtiyaç duyarlar. Data source protokol sayesinde view nesnesinde görüntülenecek veri sayısı(count) hesaplanabilir ve veriyi birebir seçerek(data at) ekranda görüntülenebilir.
Peki ya model grubundaki nesneler controller grubundaki nesnelere mesaj gönderebilir mi? Yine bazı durumlarda böle bir ihtiyaç oluşabilir. Notification&KVO sayesinde modelde herhangi bir değişiklik olduğunda controller bu değişiklikten haberdar edilebilir.