Bu yazımda iPhone/iPad uygulamalarında plist'lerin yeterli gelmediğidurumlarda kalıcı veri depolamak için kullanılabilecek iki yöntemdenbiri olan SQLite veritabanından bahsedeceğim. Diğer yöntem Core DataFramework'u kullanmak. Core Data da aslında arkaplanda SQLite kullanıyorancak sizi doğrudan tablo ve sütunlara uğraştırmıyor. Siz verilerinizitanımlayacak modeller oluşturuyor ve tüm işlemleri bu modellerikullanarak sınıf ve nesneler aracılığıyla yapıyorsunuz. Bu yüzden Appledoğrudan SQLite kullanmak yerine Core Data kullanmayı tavsiye ediyor.Hakkında yazılması gereken çok fazla şey olduğu için bu blogta ele alırmıyım henüz bilemiyorum ancak Core Data'nın iOS üzerinde uygulama geliştiren herkesin bilmesi gereken bir framework olduğunu düşünüyorum.Core Data hakkında detaylı bilgi almak istiyorsanız burayı okumanızı tavsiye ederim.
SQLite, masaüstü ve web uygulamaları yazarken kullandığınız MySQL veMSSQL'e benzer şekilde kullanılıyor. Tabi ki SQLite söz konusu olduğundadiğer ikisinde olduğu gibi ayarlar yapabileceğiniz bir veritabanısunucusundan bahsetmek söz konusu değil ancak tablo yaratmak, tablolarasatır eklemek, silmek, değiştirmek gibi işlemleri aynı diğerlerindeyaptığınız gibi yapıyorsunuz. Ancak SQLite mobil cihazlar içintasarlanmış bir veritabanı olduğu için çok daha limitli.Kullanabileceğiniz veri tipleri ve sorgulama yaparken kullanabileceğinizkomutlar biraz daha sınırlı. Bununla birlikte yine ihtiyaç duyacağınızher şeyi yapmanız sağlayacak kadar işlevselliğe, hatta daha fazlasınasahip.
|
Bu yazımda iOS uygulamaları içerisinden nasıl E-Mail gönderilebileceğini ve telefon numarası aranabileceğini ayrı ayrı anlatacağım. E-Mail'ler ile birlikte ek dosyaların nasıl gönderilebileceğini de örnek üzerinde göstereceğim. Bu iki alakasız işlemi aynı yazıda anlatıyor olmamın sebebi her iki işlemin de fazla detayı olmayan şeyler olması ve her biri için ayrı yazı yazmanın saçma olacağını düşünüyor olmam.
|
Bu yazımda iPhone uygulamaları için en basit kalıcı veri depolama yöntemlerinden biri olan ve bu yüzden de sıkça kullanılan Property List'lerden (daha yaygın olan adlarıyla plist) bahsedeceğim. Kullanımlarının çok kolay olması plist'leri, SQLite ve CoreData gibi daha gelişmiş ve karmaşık veri depolama yöntemleri için fazla basit ve küçük olan verileri saklamak için kullanabileceğiniz oldukça verimli bir veri depolama şekli haline getirmekte. Özellikle iPhone uygulaması geliştirmeye yeni başlayanlar ya da basit uygulamalar geliştirenler sadece plist'leri kullanarak bile kalıcı veri depolama ihtiyaçlarını tamamen giderebilirler.
|
Şu ana kadar yazdığım yazılarda iPhone/iPad uygulamaları için arayüz tasarımı yaparken kullanılan temel bileşenler ve ekranlar arasında navigasyon konusunda gerekli olan temel bilgileri verdim. Bundan sonrasında örnek uygulamadan çok belli başlı işlemleri yapan kod parçaları göstereceğim. Bu yazıda göstereceklerim dosya yönetimi ile ilgili. Daha spesifik olmak gerekirse, iPhone SDK içerisindeki metodları kullanarak Application Bundle içerisindeki bir dosyayı üzerinde değişiklik yapabileceğiniz bir yere nasıl kopyalarsınız, dosya ve klasör nasıl yaratır, taşır, yeniden adlandırır ya da silersiniz, yarattığınız veya kopyaladığınız dosyalara nasıl erişirsiniz bunları anlatacağım.
Yazdığınız iPhone uygulamasını cihaza veya simülatöre yüklendiğinizde iOS uygulamanız için sadece o uygulamanın erişebileceği özel bir alan yaratıyor. Bu alan içerisinde uygulamanızın kendisini ve uygulamayla birlikte verdiğiniz dosyaları içeren "Application Bundle" konuluyor. Daha sonra uygulamanız çalışırken bu bundle içerisinden istediği verileri okuyabiliyor ancak değişiklik yapamıyor (Aslında yapmanın yolu var ancak kesinlikle tavsiye edilmiyor). Uygulamanın üzerinde değişiklik yapacağı dosyaları koymanız için iOS tarafından önceden tanımlanmış bazı klasörler var. Bunlardan en önemli 2 tanesi Documents ve Library klasörleri.
|
Bu yazımda iPhone uygulamalarında en sık kullanılan navigasyon tipi olan UINavigationController ile derinlikli navigasyonun nasıl yapıldığını anlatacağım. Bu tür navigasyon genellikle çok sayıda ekrana sahip olan uygulamalarda kullanılmakta. Birbirinden bağımsız modüllerden oluşan veher bir modülünde çok sayıda ekran olan uygulamalarda ise hem Tab Barhem de Navigation Bar içeren bir yapı görmek de mümkün ancak bu pekyaygın bir kullanım değil. Burada tek başına Navigation Bar kullanarak 2ekranlı bir uygulama nasıl yapılır onu anlatacağım. Bu yazıyı okumadan önce Tab Bar Controller'dan bahseden önceki yazımı okumanızı tavsiye ederim çünkü oradakine benzer işlemler yapacağımız için burada her şeyi çok detaylı anlatmayacağım.
|
Önceki yazılarımda çok ekranlı iPhone uygulamaları yazmanın 3 farklı yolu olduğunu söylemiştim:
- UIScrollView kullanarak tek ekranda birden fazla sayfa göstermek
- UITabBarController kullanarak tab'lı menü yapısı kurmak
- UINavigationController kullanarak tab'sız, derinlikli menü yapısı kurmak.
Bunlardan ilkinin nasıl yapılacağını daha önce ele almıştım. Bugünkü yazımda da ikinci yöntemi ele alacağım. Tab'lıarayüzler tipik olarak az sayıda, birbirinden bağımsız işlevselliğesahip ekranları olan uygulamalarda kullanılmakta. iPhone uygulamalarında kullanılmaları çok kolay çünkü iOS işletim sistemi tabdeğiştirdiğinizde ekrana o tab ile ilgili olan ekranın getirilmesi içinyapılması gereken her şeyi sizin yerinize yapıyor. Şimdi bu tip arayüzesahip bir uygulamanın nasıl yapıldığını basit bir örnek üzerindegöstereceğim.
|
Daha önceki bir yazımda ScrollView bileşeninin nasıl kullanıldığını anlatmış ve gelecekteki bir yazımda bu bileşen yardımıyla iOS ana ekranındaki (home screen) sayfalama işlevseliğinin aynısının nasıl yapılacağını anlatacağımı söylemiştim. Bu yazımda ele alacağım konu tam olarak bu. Her zamanki gibi örnek bir iphone uygulaması yazacağım ancak daha önceki yazımda yazılan şeylerin artık bilindiğini varsayıp orada anlatmış olduğum şeyleri tekrar etmeyeceğim. Örnek uygulamanın her biri basit bir UILabel bileşeni içeren toplam 3 sayfası olacak. Ancak bu sayfalar farklı ViewController'lar tarafından kontrol edilen farklı ekranlarda olmayacak. Tek bir ViewController tarafından kontrol edilen, tek bir ekranda olacak. ScrollView yardımıyla bu tek ekran sanki 3 sayfaymış gibi gösterilecek. Kullanıcıya kaçıncı sayfada olduğu, UIPageControl nesnesinin arayüze koyduğu dairelerle (aynı home screen'de olduğu gibi) gösterilecek.
|
iPhone/iPad uygulamalarında yaygın olarak kullanılan bileşenlerle ilgili yazılarıma devam ediyorum. Bu yazıda bahsedeceğim bileşen UIWebView. Bu bileşen adından da anlayabileceğiniz gibi bir web tarayıcısı. Safari gibi bir tarayıcıdan tek eksiği navigasyon ve benzeri işlevleri yapabilmek için tuşlara değil, Objective-C kodu aracılığıyla kullanılabilen metod ve özelliklere sahip olması. Bu yazımda göstereceğim örnek uygulamada geri git, ileri git, sayfayı yenile gibi tuşlar ve sitenin gösterileceği bir alandan ibaret olan basit bir web tarayıcısı. Bu örneği takip ederken UIWebView ile bir tarayıcının yerine getirmesi gereken temel işlevleri kod içerisinden nasıl yapılabileceğini öğreneceksiniz.
|
Bu yazımda, iPhone/iPad uygulamaları yazarken daha önceden bahsettiğim bileşenlerden sonra en çok kullanılan bileşen olan UIScrollView'in (Türkçesine kayar panel diyeceğim) nasıl kullanıldığını bir örnek üzerinde açıklayacağım. Temel amacı ekrana sığmayan herhangi bir şeyin kullanıcı tarafından swipe/pitch hareketleri yardımıyla görülüp kullanabilmesini sağlamak olan bu bileşenin piyasada bulabileceğiniz iPhone ve iPad uygulamalarının çoğunda kullanıldığından emin olabilirsiniz. Burada vereceğim örnekte ekrana sığmayan bir resmin ScrollView yardımıyla nasıl gösterilebileceğini ve ScrollView içeriğinin doğrudan kullanıcı müdahelesi olmadan kod içerisinden nasıl kontrol edilebileceğini anlatacağım. Anlatacaklarım basit gibi görünebilir, ancak yazmaya kalkacağınız uygulamaların %90'ında bundan fazlasını bilmeniz gerekmeyecek. Daha sonraki yazılarımdan birinde ScrollView kullanarak nasıl iPhone ve iPad'in ana ekranında olduğu gibi sayfalama yapılabileceğini de göstereceğim. Ancak o yazıyı anlayabilmeniz için önce burada anlatacaklarımı anlamış olmanız gerekiyor.
|
Bu yazımda iPhone OS (iOS) ve Android işletim sistemleri arasında, her iki platforma da oldukça uzun süredir uygulama geliştiren birinin gözüyle kısa bir karşılaştırma yapacağım. Yapacağım karşılaştırma normal kullanıcıları değil, bu işletim sistemlerine uygulama geliştiren ya da geliştirmeyi düşünen insanların işine yarayacak bir karşılaştırma olacak, çünkü işletim sisteminin kendinden çok, yazılım geliştirirken kullanılan araçlar, SDK'lar ve tamamlanmış olan yazılımın store'a çıkarılma süreçlerinden bahsedeceğim. Eğer bu platformlardan herhangi birini öğrenmeye başlamak istiyorsanız o zaman mutlaka okumanızı tavsiye ederim.
|
Uzun zamandan beri gözüm yüksek çözünürlüklü ve IPS panelli monitörlerdeydi. Yurt dışında NEC ve DELL gibi markaların 2560x1440 gibi yüksek çözünürlüğe sahip çok başarılı monitöreri olmasına karşılık, Türkiye pazarında benzer çözünürlükte alınabilecek wide-gamut olmayan tek monitör Apple 27" Cinema Display. (Wide-gamut olanları Üçgen Yazılım'dan alabilirsiniz. Oldukça güvenilir olan bu firmada başka hiçbir yerde bulamayacağınız IPS panelli 16:10 monitörler de mevcut.)
Senelerdir Windows kullanıcısı olmama rağmen işim gereği son yıllarda oldukça sık OSX kullanmaktayım bu yüzden tek başına monitör almak yerine 27" iMac almayı da düşünmedim değil ancak;
- taşıdığı vasat donanıma rağmen çok yüksek bir fiyata sahip olması (Yaklaşık 5000TL)
- dar bir kasada tüm bilgisayar bileşenlerini barındırdığı (ısınan CPU ve GPU dahil) için arıza yapma olasılığının yüksek olması ve internette hakkında çok şikayet yazılmış olması
- gelecekte donanımını güncellemenin mümkün olmaması ve ekran ile diğer bileşenler aynı kasada olduğu için donanım eskidiğinde ekranın da çöpe gidecek olması
gibi nedenlerden dolayı vazgeçtim ve mecburen oldukça kazık bir fiyata satılan 27" Cinema Display'i aldım. Ancak iş tek başına monitörü almakla bitmiyor.
Bu monitörün de en büyük sorunu Mini Display Port dışında görüntü alma amaçlı hiçbir girişe sahip olmaması. Sanırım bunu monitörün PC'lerde kullanılamayıp sadece Macbook veya Mac Mini'ler ile birlikte kullanılabilmesini sağlamak için yapmışlar. Amaçlarına ulaşmış olduklarını söyleyebilirim çünkü NVIDIA'nın hiçbir ekran kartında Mini Display Port yok ve sadece bir kaç tanesinde Display Port var. ATI/AMD'nin kartlarında ise genellikle normal Display Port bulunmakla birlikte, sadece en son çıkan HD6XXX serisindeki kartlarından bazılarında Mini Display Port var. Yani eğer NVIDIA marka bir kart kullanıyorsanız bu monitörü bilgisayarınıza doğrudan takmanızın bir yolu yok.
|
iPhone/iPad uygulamalarında, her bir hücresi derin bir menü sistemi ve onlarca bileşen içeren tablolar görebileceğiniz gibi, 2-3 bileşen içeren hücrelerden oluşan basit tablolar da görebilirsiniz. Aslında uygulamaların geneline bakarsanız, bahsettiğim ikinci türden tabloların çok daha sık kullanıldığını görürsünüz. Kompleks hücre tasarımlarını genellikle Interface Builder ile ayrı bir .xib dosyasında yapmak mantıklıyken, basit hücreler için ayrı dosya oluşturup projei karıştırmaya gerek yoktur. Bu yazıda tablo hücrelerinin içeriğinin isteğe göre nasıl değiştirilebileceğini göstereceğim. Örnek olarak ise her satırında bir tuş ve tuşa basıldığında görünür halden görünmez hale geçen bir tik ikonu içeren bir tablo oluşturacağım.
|
|
iPhone programlama ile ilgili olan bu ikinci yazımda, iPhone uygulamaları geliştirirken en çok kullanılan bileşenlerden biri olan UITableView bileşeninin, yani tabloların nasıl kullanılacağını göstereceğim. Önce bir liste göstermekten başka bir şey yapmayan etkileşimsiz bir tabloyu çalışır hale getirip, sonrasında bu tablonun sırasıyla satırlarına basıldığında bir mesaj gösteren, satırları silinebilen ve satırlarının yerleri değiştirilebilen hale nasıl getirilebileceğini adım adım göstereceğim.
|
Bu yazımda çok basit bir iPhone uygulamasının nasıl yazılacağını anlatacağım. Göstereceğim örnek uygulamanın yapacağı tek şey aynı daha önce yazdığım Android ile ilgili yazıda olduğu gibi, ekranda bir tuş gösterip, tuşa basıldığında kullanıcıya bir mesaj göstermek. Dolayısı ile bu yazının, Android için yazdığım öteki yazının iPhone versiyonu olduğunu söyleyebilirim. Ancak burada anlatmam gereken daha fazla şey olacak çünkü her ne kadar iOS Android'den çok daha iyi ve programcı dostu bir işletim sistemi olsa da, daha önce Mac OSX için yazılım geliştirmemiş olan kişilere tamamen Fransız gelecek bir ortam. Bunun iki temel sebebi var. Biri iPhone uygulamaları geliştirirken Windows veya Linux kullanıcılarının tamamen yabancıolduğu Objective-C dilini kullanmak zorunda olmak. Diğeri de yazılım geliştirme ortamı olarak Visual Studio ve Eclipse'ten çok farklı bir şekilde çalışan XCode IDE'sinin kullanılması.
Göstereğim uygulamanın kendi bir pek işe yarar bir şey yapmıyor belki ancak iOS ortamına giriş yapmak için yeterli olduğunu düşünüyorum. Bu yazımda objective-c dilini anlatmak gibi bir amacım yok, ancak yine de yeri geldiğinde çok kullanılan bazı yapıların ne anlama geldiği hakkında kısa açıklamalar yapacağım. Bu yazıyı okuduktan sonra aşağıdaki soruların cevaplarını almış olacaksınız.
- iPhone uygulamaları geliştirmek için hangi yazılım ve donanıma ihtiyaç vardır?
- XCode ile bir iPhone projesi nasıl oluşturulur?
- Bir iPhone projesi hangi klasör ve dosyaları içerir ve bunların işlevi nedir?
- Interface Builder kullanılarak nasıl arayüz tasarlanır?
- Arayüz ile kod arasında nasıl bağlantı kurulur?
- Tuşa basmak gibi basit olaylar nasıl karşılanır?
- Kullanıcıya bir mesaj en kolay nasıl gösterilir?
- iPhone simülatörü nasıl kullanılır?
-
Bu cevaplar, iPhone programlama ile ilgili Türkçe bilginin neredeyse hiç olmadığı bu zamanda iPhone uygulamaları geliştirmeye başlangıç yapmak için yeterli olacaktır. Eğer vakit bulabilirsem gelecekte farklı arayüz bileşenlerinin nasıl kullanıldıklarını, cihaz içerisine nasıl kalıcı veriler tutulacağını ve ivme sensörü, GPS, pusula gibi donanımların nasıl kullanılacağını örnekler ile gösteren yazılar yazmayı planlıyorum.
|
Son 2 aydır yüksek lisans derslerine ek olarak, 2 ay önce başlayan ve benim de bir parçası olduğum TÜBİTAK tarafından desteklenen yüz tanıma konulu bir proje üzerinde yoğun olarak çalıştığım için burayla yine fazla ilgilenemedim. Projenin ilk aşaması olan resimlerdeki yüzlerin yerinin tespit edilmesi üzerine yaptığımız çalışmalardan esinlenerek Android'deki yüz bulma sınıfına bir göz atayım dedim ve basit bir uygulama yazdım. Bu yazımda da Android SDK ile birlikte gelen yüz bulma sınıfının bir resim üzerinde nasıl kullanılacağını aşağıdaki resimde çıktısını gördüğünüz bu uygulama üzerinde göstereceğim. (Test resmini TÜBİTAK projesinde de kullandığım Caltech face database adlı yüz veritabanından aldım.)
|
|