İÇİNDEKİLER VII İÇİNDEKİLER 1 GİRİŞ 1 Bu Kitap Kimler İçin? 1 Temel Kavramlar 5 ios İşletim Sistemi 5 ios Kısaltması Nereden Geliyor? 6 ios İşletim Sisteminin Katmanları 7 1. Çekirdek İşletim Sistemi Katmanı (Core OS) 7 Security Framework 7 Accelerate Framework 8 External Accessory Framework 8 LibSystem Kütüphanesi 8 2. Çekirdek Hizmetler Katmanı (Core Services) 8 3. Medya Hizmetleri Katmanı (Media Services) 12 ios Yazılım Geliştirme Kiti Araçları 17 1. Xcode Entegre Geliştirme Ortamı (Xcode IDE) 17 2. ios Simulator 18 3. Interface Builder 18 4. Instruments 19 5. Apple LLVM Derleyicisi 20 2 IOS İŞLETİM SİSTEMİ 21 ios İşletim Sisteminin Tarihçesi 21 ios Kullanan Cihazlar ve Farkları 22 ios İşletim Sisteminin Sürümleri 25 iphone OS 1.0 25 iphone OS 2.0 25 iphone OS 3.0 25 ios 4 ve Multitaskıng Kavramı 25 Multitasking 26 ios 5 ve Getirdiği Yenilikler 26 ios 6 ve Getirdiği Yenilikler 27 ios 7 ve Getirdiği Yenilikler 27 ios 8 SDK ve Getirdiği Yenilikler 27 Bundan Sonrası 28
VIII SWIFT VE OBJECTIVE-C İLE UYGULAMALI ios SDK 3 GELİŞTİRME ORTAMLARININ KURULUMU 29 ios SDK ve Geliştirme Ortamlarının İndirilmesi 29 Mac OS X AppStore Uygulaması 29 Aracılığıyla Xcode un Son Stabil Sürümünü İndirmek 29 ios SDK ve Geliştirme Ortamlarının Kurulumu 30 İlk Objective C Programımız 32 Apple Firmasının Geliştiriciler İçin Kullanıma Sunduğu http://developer.apple.com Sitesine Kaydolmak 37 ios Developer Program a Yıllık $99 Karşılığında Üye Olmak 38 4 OBJECTIVE-C PROGRAMLAMA DİLİNE GİRİŞ 41 Giriş 41 Objective-C Dilinin Tarihçesi 41 Objective-C Dilinin Özellikleri 43 Objective-C = (ANSI C + SmallTalk) 43 Objective-C Programlama Ortamının Bileşenleri 44 Objective-C Diliyle C Tabanlı Diğer Programlama Dillerinin Karşılaştırılması 45 C ve Objective-C 45 Objective-C ile C Progmlama Diline Yapılan Eklentiler 46 Yeni Ön İşlemci (Preprocessor) Direktifleri 46 Sade Eklentiler 47 SmallTalk Söz Dizimi 48 Mesaj Kavramı 48 Runtime 49 Karakter Katarlarının Ele Alınış Biçimi ve NSString Sınıfı 50 NSLog 50 Yeni Anahtar Kelimeler 53 #import 53 id 54 BOOL Veri Tipi 55 nil 56 SEL 57 Özel Nümerik Veri Tipleri 57 NSInteger 58 NSUInteger 58 CGFloat 58 Objective-C Anahtar Kelimeleri 59
İÇİNDEKİLER IX Sınıf, Nesne, Kategori ve Protokol Tanımlarken Kullanılan Direktifler 59 Encapsulation (Sarmalama) için Kullanılan Anahtar Kelimeler 60 Protokol (Protocol) Tanımına Özel Anahtar Kelimeler 62 Kategori (Category) Tanımına Özel Anahtar Kelimeler 62 Dille İlgili Diğer Anahtar Kelimeler 62 Metot ve Fonksiyon Kavramları Üzerine 64 Üye Değişkeni Kavramı Üzerine 64 Objective-C Uygulamalarının Genel Yapısı 65 Sınıf ve Nesne Kavramı 76 Özet 77 Bundan Sonrası 78 5 OBJECTIVE-C DİLİNDE NESNE, SINIF, METOT VE KALITIM KAVRAMLARI 79 Nesne(Object) Kavramı 79 Sınıf (Class) Kavramı 82 Sınıf ve Nesne Arasındaki İlişki 83 Örnek Bir Sınıf Tasarımı ve Bu Sınıftan Oluşturulan Nesnelerin Kullanımı 86 Arayüz ve İmplementasyon Dosyaları 89 Arayüz (Interface) Dosyasının Yapısı 89 @interface Anahtar Kelimesi 89 NSObject Sınıfı ve Kök (Root) Sınıflar 90 Üye Değişkenler 92 Objective-C de Metotlar (Fonksiyonlar) 93 Sınıf Metotları ve Nesne (Instance) Metotları 94 Objective-C Sınıflarında Bulunan Metotların Genel Sözdizimi 96 1- Hiç Parametre Almayan Metotlar 96 2- Tek Parametre Alan Metotlar 97 3- Birden Fazla Parametre Alan Metotlar 98 Uygulama (Implementatıon) Dosyasının Yapısı 100 self Anahtar Kelimesi 105 alloc Metodu 106 Kendi Değer Atayıcı Metotlarımızı Tasarlamak (Designated Initializers) 108 Kalıtım Kavramı 110 Ogrenci Sınıfının Arayüz Dosyası (Ogrenci.h) 112 Ogrenci Sınıfının Uygulama (Implementation) Dosyası (Ogrenci.m) 114 Personel Sınıfının Arayüz Dosyası (Personel.h) 117
X SWIFT VE OBJECTIVE-C İLE UYGULAMALI ios SDK Personel Sınıfının Uygulama (Implementation) Dosyası (Personel.m) 118 Uygulama Dosyası (main.m) 120 Metot Geçersiz Kılma (Overrıde) İşlemi 125 Metotların Aşırı Yüklenmesi 126 Bundan Sonrası 126 6 HAFIZA YÖNETİMİ VE BİLMEMİZ GEREKEN DİĞER ÖNEMLİ KAVRAMLAR 127 Primitif Değişkenler ile Nesne Değişkenlerin Bellekteki Görünümü 127 Hafıza Yönetimi Yöntemleri 131 Hafızanın Elle Yönetilmesi (Manual Memory Management) ve Referans Sayma 132 (Reference Counting) Yöntemi 132 Referans Sayma Yöntemi 133 Ownership (Sahiplik) Kavramı 135 Elverişli Metotlar (Convenience Methods) 136 Bir Metottan Nesne Döndürmek 137 AutoRelease Mesajı 140 İleride Otomatik Olarak Silinecek Nesneler 141 Havuzu (Autorelease Pool) 141 @autoreleasepool Direktifi 141 İç İçe Havuzlar (Nested Autorelease Pools) 142 Havuz Tanımlamadan autorelease Çağırmak 142 Retain Mesajı ve RetainCount Kavramı 142 Retain Mesajı 142 RetainCount 143 Nesneleri Kopyalamak 145 copy Metodunun Kullanımı 148 MutableCopy Metodu 151 Elle Hafıza Yönetiminde Dikkat Edilmesi 152 Gereken Önemli Noktalar 152 Dengesiz Retain Release Çağrıları 152 Retain Döngüsü 153 Garbage Collection (Çöp Toplayıcı) 153 Memory Leak (Hafıza Sızıntısı) Kavramı 155 Automatic Reference Counting (Otomatik Referans Sayma) 156 Bundan Sonrası 161
İÇİNDEKİLER XI 7 SWIFT PROGRAMLAMA DİLİ 163 Swıft Programlama Dili nin Özellikleri 164 Swift Programlama Dili İçin Minimum Gereksinimler 165 İlk Swift Projemiz 165 Değişken Tanımlama 168 Temel Veri Tipleri 169 Sabit Değişkenler 170 Program Akışı 171 Konsola Yazdırma 171 Tip Metotları veya Bilinen Adıyla Sınıf Metotları (Type Methods) 174 Metotların Dönüş Tipleri 175 Tip Metotlarının Çağrılması 176 Bundan Sonrası 176 8 SWIFT PROGRAMLAMA DILI, KONTROL YAPILARI, DÖNGÜLER, DIZILER VE VERI YAPILARI (KOLLEKSIYONLAR) 177 Kontrol Yapıları 177 If Yapısı 177 If-else yapısı 178 else-if yapısı 178 switch-case Deyimi 179 switch-case ile Belirli Değer 180 Aralıklarına Göre Aksiyon Almak 180 Aralık Operatörü (Range Operator) 180 Tam Kapalı Aralık Operatörü - Closed Range Operator (... ) 180 Yarı Kapalı Aralık Operatörü - Half Closed Range Operator (..< ) 180 Döngüler 182 For Döngüleri 183 For.. in.. Yapısı 183 Geleneksel For Döngü Yapısı 185 While Döngüsü 185 Diziler 186 Diziye Eleman Ekleme 187 Araya Eleman Ekleme 187 Dizi Elemanlarına Erişim 188 Diziden Eleman Çıkarma 188
XII SWIFT VE OBJECTIVE-C İLE UYGULAMALI ios SDK Diziden Belirli Bir İndisteki Elemanı Çıkarma 189 Dizi Elemanlarına For Döngüsüyle Erişim 189 Dizilerin Tipini Belirlemek 190 Diziye Boş Değer Atamak (Diziyi İlk Kullanıma Hazırlamak) 191 Sözlük Yapısı (Dictionary) 191 Sözlüklerin Tanımlanması 192 Sözlüğe Eleman Eklenmesi 192 Belirli Bir Anahtar Değerine Sahip Elemana Erişim 192 Sözlüklere Tanımlama Esnasında Değer Atama 193 Sözlükten Belirli Bir Elemanın Çıkarılması 193 Sözlükteki Belirli Bir Elemanın Değerinin Güncellenmesi 194 Sözlükteki Elemanlara Döngüler 194 Yardımıyla Ulaşmak 194 Bundan Sonrası 194 9 IOS PROGRAMLAMA TEMELLERI VE XCODE GELIŞTIRME ORTAMI YAPILARI 195 Giriş 195 XCode ile Objective-C Tabanlı ios Projesi Örneği 196 Adım 1: Projenin Oluşturulması 196 XCode Geliştirme Ortamının Ana Bileşenleri 200 Adım 2: Projenin Arayüzünün Tasarlanması 205 Adım 3: Projenin Arayüz Bileşenlerinin Proje Koduna Bağlanması 216 MVC (Model View Controller) Mimarisi 216 Model Katmanı 216 View(Görüntü Katmanı) 217 Controller Katmanı 217 Tasarladığımız Ekran için Controller Sınıfının Oluşturulması 218 IBOutlet Kavramı 223 TextFıeld(UITextFıeld) Bileşenleri için Bağlantı Oluşturulması 224 Label (UILabel) Bileşeni için Bağlantı Oluşturulması 227 Adım 4: Projenin Kodlanması 231 Tasarladığımız Ekran için Model Sınıfının Oluşturulması 231 Adım 5: Projenin Derlenip Çalıştırılması ve Gerekiyorsa Debug (hata ayıklama) Sürecine Alınması 236 Bundan Sonrası 236
İÇİNDEKİLER XIII 10 SWIFT OBEB OKEK UYGULAMASI YAPILARI 239 Giriş 239 XCode ile Swift Tabanlı ios Projesi Örneği 239 Adım 1: Projenin Oluşturulması 240 Adım 2: Projenin Arayüzünün Tasarlanması 240 Adım 3: Projenin Arayüz Bileşenlerinin Proje Koduna Bağlanması 241 Adım 4: Projenin Kodlanması 245 Adım 5: Projenin Derlenip Çalıştırılması ve Gerekiyorsa Debug (hata ayıklama) Sürecine Alınması 250 Swift Programlama Dilinde Optional(Seçime Bağlı) Değişken Kavramı 250 İsteğe Bağlı Değişkenler Hakkında Kurallar 252 Neden IBOutlet Değişkenlerinin Sonunda! İşareti Var? 253 Bundan Sonrası 253 11 EKRANLAR ARASI GEÇİŞ YAPILARI 255 Giriş 255 XCode ile Swift Tabanlı ios Projesi Örneği 255 Delegasyon Kavramı 270 Bundan Sonrası 274 12 TEMEL DOSYA IŞLEMLERI VE UITABLEVIEW KONTROLÜ ILE TEKRARLI VERILERIN GÖSTERILMESI YAPILARI 275 Giriş 275 Bölümde Geliştireceğimiz Uygulama Hakkında Bilgi 277 Uygulamanın İçindeki Dosyalar 279 Uygulamanın Arayüzünün Tasarlanması 280 Arayüz Bileşenlerinin Controller Sınıflarıyla Bağlanması 287 Film Sınıfının Modellenmesi 288 Filmler.plist Dosyasının Oluşturulması ve İçeriği 289 Plist Dosyasına Okuma ve Yazma 292 Controller Sınıflarını İçerikleri 294 Bundan Sonrası 304 13 SQLITE İLE VERİTABANI İŞLEMLERİ 305 Giriş 305 SQLite Veritabanı Hakkında Bilgi 306 Fimler.db İsimli SQLite Veritabanının Oluşturulması 307
XIV SWIFT VE OBJECTIVE-C İLE UYGULAMALI ios SDK Film Tablosuna Başlangıç Verisinin Yüklenmesi 310 Filmler.db isimli SQLite Veritabanı Dosyasının Projeye Eklenmesi 312 Filmler.db isimli SQLite Dosyasına Erişim için Gerekli Hazırlıklar 313 Adım 1: SQLite C Kütüphanesinin Projeye Eklenmesi 313 Adım 2: SQLiteDB isimli Swift Kütüphanesinin Projeye Dahil Edilmesi 314 Adım 3: Swift ile C de Yazılmış Ana Kütüphanenin Bağlanması ve Swift Kodu İçerisinde Objective-C Kütüphanesinin Çağrılması 315 Swıft İçerisinden Veritabanına Erişim 317 filmlerilistele Metodu 319 filmlerilistele Metodunun FilmListesiVC.swift İçinde Kullanımı 320 filmekle metodu 321 filmekle Metodunun FilmEkleVC.swift İçinde Kullanımı 321 filmsil metodu 322 filmsil Metodunun FilmDetayVC.swift İçinde Kullanımı 323 Film.swift Dosyasında Yapılan Güncelleme 324 Uygulamanın Çalışması 324 Filmler.db İsimli Veritabanı Dosyasının Uygulama İçerisindeki Yeri 325 Bundan Sonrası 326 14 SWIFT İLE VİDEO OYNATMAK VE IPAD İÇİN UYGULAMA GELİŞTİRMEK 327 Giriş 327 İlk Uygulama: UIWebView Bileşeni İçerisinde Video Oynatma 329 İkinci Uygulama: MediaPlayer.framework Kullanarak Video Oynatma 334 Bundan Sonrası 340 15 SWIFT ILE SES OYNATMAK VE OTOMATIK KONUMLANDIRMA (AUTO LAYOUT) ÖZELLIĞI 341 Giriş 341 Ses Uygulaması 341 Bundan Sonrası 353