Ünite 4: Mobil Programlama

Giriş

Son yıllarda mobil pazardaki rekabet arttıkça, bu pazardaki cihazlar yeni teknolojilerle donatılmakta, diğer yandan, cihazların yetenekleri arttıkça, bu yeteneklerin verimli bir şekilde kullanılabilmesinin sağlanması da işletim sistemine düşmektedir.

Mobil cihaz tipleri sadece akıllı telefonlar ve tabletlerle sınırlı olmamakta; akıllı kitaplar, televizyonlar, kameralar, saatler, kulaklıklar vb. giyilebilir cihazlarla ve daha pek çok teknolojik aletlerle hayatımızın içerisinde yer almaktadır.

Mobil cihazların donanım kabiliyetlerinin artmasıyla, ilgili donanımların özelliklerini kullanıcıyla buluşturan uygulamaların geliştirilmesi gündeme gelmektedir.

Yazılım geliştiriciler farklı mobil işletim sistemleri için kendine has mobil uygulama geliştirme platformlarını kullanarak fikirlerini uygulamaya dökmektedirler.

Mobil Uygulama Geliştirme Nedenleri

Mobil cihazlar için tasarlanmış ve kodlanmış yazılımlara mobil uygulama denir.

Mobil cihaz denildiğinde ilk olarak akıllara cep telefonu gelmektedir.

Kullanıcılar beğendikleri ve yararlı gördükleri uygulamaları aktif bir şekilde kullanarak, mobil cihazlarında muhafaza etmektedirler.

Mobil uygulama ile istendiği takdirde kullanıcılara mobil uygulama sayesinde ulaşılabilmekte, kampanya, duyuru vb. durumlardan haberdar olunabilmesi sağlanabilmektedir.

Mobil cihazların artmasıyla İnternetin mobile taşınması, web sitelerinin mobil cihazlarda kullanımının zorluğu kavramını beraberinde getirmiştir.

Mobil cihazlara uyarlanan web sayfasının kademeli olarak ekran boyutlarına küçültülüp büyütülebildiği tasarımlara responsive tasarım ismi verilmektedir.

Responsive tasarıma sahip olan web sayfalarına mobil cihaz kullanılarak girildiğinde menüler şekil değiştirip, genellikle üstten açılacak şekilde kullanımı kolay bir sürüme dönüşmektedir.

Mevcut ve potansiyel müşterilere ulaşmak isteyen firmalar, işlerini mobil uygulamalarla destekleyerek daha güçlü tanıtımlar yapmakta ve kurumsal iletişimlerini güçlendirmektedirler.

Arama motorları responsive tasarıma sahip olan siteleri ciddi şekilde desteklemektedir.

Mobil Uygulama Geliştirme Geçmişi ve Geleceği

Mobil uygulamanın çalışacağı platforma göre tasarım ve kodlama yapılmakta ve bu aşamada kullanılan yazılımın dili de değişkenlik göstermektedir.

Mobil işletim sistemleri içerisinde ilk üç sırayı Android, iOS, Windows Phone almış durumdadır.

Önceki dönemlerde programlama dilleriyle kodlama yapan geliştiricilerden, tek cihazdan veya tek markadan olan donanımlardan anlayarak yazılım geliştirmeleri beklenirken, günümüzde mobil cihazlar ve internet teknolojileri gelişmesine paralel olarak gerek kaynak gerekse platform zenginlikleri artmıştır.

Düşük Seviyeli Programlama Dili, komut kümesinde hiç soyutlama imkânı vermeyen ya da kısıtlı miktarda soyutlama sağlayan programlama dili anlamına gelmektedir.

Yakın zamanda, yazılım geliştiriciler için, daha fazla kullanıcıya ulaşmak maksadıyla Symbian gibi çeşitli platformlar geliştirilerek, bu tür sistemlerle uygun her türlü donanım üzerinde daha zengin uygulamalar oluşturulmaya çalışıldı.

API (Uygulama Programlama Arayüzü), bir yazılımın başka bir yazılımda tanımlanmış fonksiyonlarını kullanabilmesi için oluşturulmuş bir tanım bütünüdür.

Çalışacağı cihaz yapısına ve ekran boyutlarına göre tasarlanarak platformun kabul ettiği yazılım dili ile kodlanan bir mobil uygulama, aynı zamanda diğer işletim sistemine ait cihazlarda da çalışması isteniyorsa, o cihazların kabul ettiği ekran boyutlarında tekrar tasarımları yapılır ve bu platformlarda çalışacak olan yazılım diliyle kodlaması yapılır.

Geliştirilecek uygulamanın, geniş bir kitle tarafından kullanılması için, hemen hemen her platform ve cihaza uyumlu olacak şekilde yazılması gerekliliği, mobil uygulamanın türleri kavramını ortaya atmaktadır.

Dünyanın değişen mobil kimliğini detaylı şekilde ortaya koyan şirketlerin raporlarından biri olan Ericsson Mobility Report, Ericsson’un dünyadaki 100 mobil operatörden elde ettiği verilere dayanarak önümüzdeki 5 yıl içinde tamamen mobil bir dünyada yaşayacağımızı öngörmektedir.

Ericsson‘un öngörülerine göre 2020’de, bugünkü akıllı telefon sayısının 2 katına çıkacağı ve gerçek büyümenin Asya Pasifik, Ortadoğu ve Afrika ülkelerinden geleceği belirtilmektedir.

Çeşitli panellerde, konferanslarda ve etkinliklerde üzerinde konuşmalar ve tartışmalar yapılan, aslında çok da yeni olmayan “Nesnelerin İnterneti (Internet of Things; kısaca IoT)” kavramı oldukça gündemdedir.

Internet of Things temel haliyle, nesnelerin internet üzerinde veri alışverişi yapabilmesi ve bu sayede internete bağlı olan diğer tüm cihazlarla iletişim kurarak nesneler ekosistemi içerisinde yaşayabilmesi olarak tanımlanabilir.

Bir cihaz İnternete bağlandığında, dünyadaki İnternete bağlı tüm cihazlarla aynı ağa bağlanmış ve bu ağdaki tüm cihazlarla iletişim kurabilir hâle gelmiş demektir.

Mobil Uygulama Türleri

Çoklu Platform (Cross Platform) yazılımları, birden fazla işletim sisteminde dağıtımı olan yazılımlardır.

Tek bir tıkla birden fazla platforma uygulama yayımlamak, hem yazılımcılara hem de firmalara önemli derecede kolaylık sağlamaktadır.

Özellikle pazar savaşlarının da yaşandığı ve tüm bireysel geliştirici ve kurumların insanlara en iyi hizmeti her alanda sunma istekleriyle birlikte mobil uygulamaların önemi giderek artmaktadır.

Mobil uygulamaların türlerini aşağıdaki gibi sıralamak mümkündür:

  • Yerel (Native) Uygulamalar
  • Web Tabanlı Uygulamalar
  • Melez (Hybrid) Uygulamalar

Yerel (Native) Uygulamalar

Belli bir platforma özel, genellikle platform sağlayıcının belirtmiş veya üretmiş olduğu “Yazılım Geliştirme Kiti (SDK)” araçları ve programlama dili yardımıyla geliştirilmiş uygulamalardır.

Yazılım Geliştirme Kiti (Software Development Kit-SDK) Belli bir yazılım paketi, yazılım çatısı, donanım platformu, bilgisayar sistemi, oyun konsolu, işletim sistemi veya bunlara benzer bir platform için uygulama üretmeyi sağlayan yazılım geliştirme araçlarından oluşan yazılımdır.

Yerel uygulamalar pratikte ikiye ayrılmaktadır.

  • Platform Tabanlı Yerel Uygulamalar
  • Çoklu Platform Yerel Uygulamalar

Platform Tabanlı Yerel Uygulamalar

Platforma ait işletim sistemlerini üretenlerin sunduğu uygulama geliştirme ortamları ve dillerinin kullanılmasıyla yazılan uygulamalardır.

Çoklu Platform Yerel Uygulamalar

Bu kategoride yazılan uygulamalar tek bir geliştirme ortamı ve tek bir programlama dili kullanarak çeşitli platformlara aynı anda çıktı üreten uygulamalardır.

Bu platformların en büyük avantajı, bilinmesi gereken tek bir çatı yapısının, geliştirme ortamının ve programlama dilinin olmasıdır.

Yerel uygulamaların avantajları şu şekilde sıralanabilir:

  • En iyi kullanıcı deneyimi sunarlar, hızlı ve akıcıdırlar.
  • Cihaz özelliklerine en yüksek erişimi sağlarlar.
  • Uygulamalar çevrimdışı olarak çalışabilmektedir.
  • Yüksek performansa sahiptirler, performansı arttırmak için donanım kaynaklarını kullanırlar.
  • Uygulamalar, kullanıcılara daha iyi bir görünürlük sağlayan uygulama mağazaları aracılığı ile dağıtılmaktadır.

Dezavantajları ise şu şekilde sıralanabilir:

  • Daha fazla bütçeye ihtiyaç duyarlar.
  • Geliştirme süreçleri daha uzundur.
  • Uygulama güncellemeleri kullanıcı tarafından yüklendiği takdirde aktif olmaktadır.

Web Tabanlı Uygulamalar

Uygulama mağazalarından sadece ikon indirilmekte ve bu ikonlara tıklanarak açılan uygulamanın içerisinde bir web sitesi çalışmaktadır.

Bu uygulamaların en büyük avantajları, bilinen İnternet teknolojileriyle sunucu üzerinden yayın yapılması sayesinde istenilen zamanda müdahâle edilebilmesi ve her cihazda çalışabildiği için ayrı ayrı programlama gerekmemesidir.

Dezavantajları olarak ise aslında cihazda çalışan bir uygulama olmaması ve tarayıcı üzerinde çalıştığı için bazı deneyim, performans kayıplarının yaşanması, yerel uygulama gibi esnekliğin olmaması ve çevrimdışı çalışamaması olarak sıralanabilir.

Melez (Hybrid) Uygulamalar

Melez uygulamalar standart web teknolojilerini kullandıkları gibi, bazı firmaların geliştirdiği araçları kullanarak, o araçların belirlediği kurallara/yöntemlere göre ve sağladığı plug-in destekleriyle bir takım cihaz donanımlarına erişim olanağının sağlandığı uygulamalardır.

Plug-in: Kendi başına çalışabilen bir yapı için, genellikle çok özel bir alanda duyulan gereklilik üzerine geliştirilen, yapıya yeni özellikler ekleyen yazılımdır. Yerel uygulamaların avantajları şu şekilde sıralanabilir:

  • En iyi kullanıcı deneyimi sunarlar, hızlı ve akıcıdırlar.
  • Cihaz özelliklerine en yüksek erişimi sağlarlar.
  • Uygulamalar çevrimdışı olarak çalışabilmektedir.
  • Yüksek performansa sahiptirler, performansı arttırmak için donanım kaynaklarını kullanırlar.
  • Uygulamalar, kullanıcılara daha iyi bir görünürlük sağlayan uygulama mağazaları aracılığı ile dağıtılmaktadır.

Dezavantajları ise şu şekilde sıralanabilir:

  • Daha fazla bütçeye ihtiyaç duyarlar.
  • Geliştirme süreçleri daha uzundur.
  • Uygulama güncellemeleri kullanıcı tarafından yüklendiği takdirde aktif olmaktadır.

Yerel, web ve melez uygulamaların özellikleri ve karşılaştırması için bkz. s.96, Tablo 4.2

Bir mobil uygulama fikri için doğru aracı ve tekniği aşağıdaki kriterlerle belirlemek mümkündür:

  • Kararlılık,
  • Performans,
  • Görünüm ve etkileşim,
  • Anlaşılabilirlik ve kullanılabilirlik,
  • İleriye yönelik geliştirme ve bakım süreçleri,
  • Kullanılacak platform ve araçların eklenti desteği.

Mobil Uygulama Geliştirme Platformları

Mobil teknolojiler söz konusu olunca, arz ve talep dengesine bakıldığında, Android, iOS ve Windows Phone cihazlarında uygulama geliştirmenin ve bu teknolojiler üzerine yönelmenin giderek önem kazandığını görülmektedir.

Android

Klasik tanım olarak Android, Google ve Open Handset Alliance tarafından kodlanmış Linux İşletim Sistemi tabanlı, mobil cihazlar için geliştirilmiş açık kaynak kodlu bir işletim sistemidir.

Open Handset Alliance; mobil cihazlar için açık standartlara dayanarak bir araya gelen seksen dört firmanın oluşturduğu bir uluslararası birliktir.

Basit olarak Android şu kısımlardan oluşur:

  • Mobil cihazlar için ücretsiz, açık kaynak kodlu bir işletim sistemi.
  • Mobil uygulamalar oluşturmak için bir açık kaynak geliştirme platformu.
  • Android işletim sistemi ve bu işletim sistemi için oluşturulmuş yazılımlarla çalışan cihazlar.

Android detaylı olarak aşağıdaki gibi bağımsız ve gerekli bölümlerden oluşmaktadır:

  • Cihazın kapasitesini belirleyen ve yazılımlar için çerçeve oluşturan donanım tasarımı
  • Mobil cihazlar için optimize edilmiş, donanım, bellek yönetimi, akış kontrolü için düşük seviyeli bir arayüz sağlayan Linux işletim sistemi çekirdeği
  • Uygulama geliştirmek için açık kaynak kütüphaneler
  • Uygulamaları barındıran ve çalıştıran sanal makine
  • Sistem servislerinin uygulama katmanına aktarılmasını sağlayan uygulama çatısı
  • Önceden yüklenmiş ve temel cihaz uygulamaları veya kullanıcı tarafından yüklenen uygulamalar

Android sisteminin en alt katmanında “Linux Çekirdeği (Kernel)” kullanılır.

Linux çekirdeğinin doğrudan kaynak sağladığı yapılar olarak güvenlik, hafıza ve süreç kontrolü, dosyalama ve bağlantı için girdi/çıktı işlemleri, cihaz sürücüleri sayılabilir.

Android mimarisinin en önemli katmanlarından biri olan kütüphaneler katmanında C dili ile yazılmış yerel sistem kütüphaneleri (native libraries), internet tarayıcı motorlarının çalışması için Webkit, görüntüleme kontrolünü yapan yüzey yöneticisi (Surface Manager), grafik işlemleri için OpenGL, ses ve video işlemleri için medya çatısı (Media Framework), veri yapıları kontrolü ve düzenlemesi için SQLite gibi yapılar bulunmaktadır.

Android Çalışma Zamanı Katmanı’nın iki önemli bileşeni temel Java kütüphaneleri ve sanal makinedir. Uygulamalar sanal makine tarafından çalıştırılmaktadır.

Dalvik sanal makinesi, Android 2.2 sürümüyle birlikte tam zamanında derleme (Just-in-time compilation) yapmaktadır.

Dalvik Sanal Makinesi, Android işletim sisteminde uygulamaların yüklenmesi esnasında önbellekleme yapılmasına olanak sağlayan bir sanal makine kurgusudur.

Dalvik her ne kadar kısıtlı kaynaklarla çalışabilecek bir yapı olsa da bazı alanlarda iyileştirilmesi gereken, zamanın şartlarına göre tasarlanmış ve yavaş yavaş eskiyen bir çalışma zamanı sanal makinesidir.

Android Runtime (ART) kısaca “zamanın ötesinde derleme (Ahead-of-Time – AOT compilation)” olarak ifade edilen bir yapıyla bayt kod derlemesini, uygulama cihaza kurulurken yapmakta ve bayt kodu makine diline çevirmektedir.

Taşınabilir kod olarak bilinen Bayt kod (Bytecode), bir yorumlayıcı tarafından çalıştırılabilir ve aynı zamanda makine diline derlenebilir durumdaki komut setini ifade etmektedir.

Uygulama Çatısı (Application Framework) Katmanı, uygulamaların işletim sistemiyle etkileşimini sağlayacak olan sınıf ve servislerin bulunduğu katmandır.

Bu katman içerisindeki sınıf ve servisleri şu şekilde sıralamak mümkündür:

  • Aktivite Yöneticisi (Activity Manager): Aktivitelerin çalıştırılması, durdurulması gibi durumların yönetiminden sorumludur.
  • Pencere Yöneticisi (Window Manager): Tüm uygulamaların görüntülenen ekranlarının oluşturulması ve yönetilmesinden sorumludur.
  • İçerik Sağlayıcı (Content Provider): Uygulamalar arasında veri paylaşımı ve erişimi yapmaktan sorumludur.
  • Görüş Sistemi (View System): Kullanıcı arayüzü oluşturulmasından ve yönetilmesinden sorumlu olan servistir.
  • Paket Yöneticisi (Package Manager): Cihaz içerisinde kurulu uygulama, paketlerinden (apk dosyaları) sorumludur.
  • Telefon Yöneticisi (Telephony Manager): Uygulama içerisinde cihazla alakalı bir işleve aracılık eden, cihaz yönetiminden sorumlu olan servistir.
  • Lokasyon Yöneticisi (Location Manager): Uygulamaların cihaz içerisinde bulunan Lokasyon (Global Pozisyonlama) erişimini sağlar ve yönetir.
  • Kaynak Yöneticisi (Resource Manager): Uygulamalar içerisine dâhil edilen resim, dosya vb. kaynakların yönetiminden sorumlu olan servistir.
  • Bildirim Yöneticisi (Notification Manager): Cihaz üzerindeki bildirimlerden (bilgi mesajı) sorumlu olan servistir.

Uygulamalar (Applications) Katmanı Android işletim sistemi mimarisinde en üst katmandır.

Android uygulamalarının paketlenmesinden sonra artık kullanıcılara ulaşabilmesi için uygulama mağazası olan Google Play Store’a gönderilmesi gerekmektedir.

Geliştirici Google hesabıyla Google Play Store’a kayıt olarak, hazırladığı uygulamasının apk dosyasını Google Play Developer Consol üzerinden yapabilmekte ve bu konsol sayesinde hazırladığı uygulaması üzerindeki istatistiksel kullanım ve indirme bilgilerini görebilmekte, uygulama güncellemelerini de yapabilmektedir.

iOS

Apple firmasının mobil platformları için geliştirdiği mobil işletim sistemi olan iOS’da uygulama geliştirirken kullanılan en temel programlama dili Objective-C’dir.

Kararlı sürüm olarak 2007 yılından beri kullanılan Objective-C, yerini, güçlü ve kullanımı nispeten kolay Swift diline bırakacak duruma gelmiştir.

Bu hızlı ve verimli olan dil, gerçek zamanlı geri bildirim sağlamakta ve mevcut olan Objective-C koduna sorunsuz bir şekilde entegre edilebilmektedir.

Android’ de olduğu gibi beş katmandan oluşan iOS sistem mimarisi katmanlarını, Çekirdek İşletim Sistemi, Çekirdek Servisler, Medya, Cocoa Touch ve Uygulamalar katmanları olarak sıralamak mümkündür:

Çekirdek İşletim Sistemi (Core OS) Katmanı: İşletim sisteminin temelini oluşturan, donanıma en yakın katman olup alt seviye arayüzler, güvenlik çatıları, güç yönetimi, dosya sistemi ve diğer donanıma yakın programlama gereken birimlerin olduğu katman olarak bilinmektedir.

Çekirdek Servisler (Core Services) Katmanı: Uygulamalar için gerekli olan temel sistem servislerinin sunulduğu bölümdür.

Medya Katmanı: Cihazda ses, görüntü ve video işlemleri ile ilgili kütüphanelerin bulunduğu katmandır.

Cocoa Touch Katmanı: Bu katman, kullanıcıyla iletişime olanak veren görsel arabirimleri sağlayan sınıfların yer aldığı kısım olarak bilinmektedir.

Uygulamalar (Applications) Katmanı: Temel cihaz uygulamalarının işletim sistemi içerisinde gömülü olarak geldiği en üst katmandır.

Apple, uygulama geliştirme ortamı olarak sadece Mac OS X işletim sisteminde çalışan Xcode’u kullanmaktadır.

iOS Simülatörü, yazılan uygulamanın hangi cihaz üzerinde nasıl çalışacağını ve uygulama deneyimini test etmek adına, Xcode içerisinden rahatlıkla çalıştırılabilmektedir.

iOS simülatörünün hızlı olmasının sebebi çekirdek mimari olarak Mac OS X ile iOS işletim sistemlerinin aynı temeller üzerine kurulmuş olmasıdır.

iOS Uygulama Mağazası olan AppStore, Apple’ın iOS işletim sistemli cihazlarla beraber sunduğu, kullanıcıların geliştiriciler tarafından hazırlanan uygulamalara kolayca erişmesini sağlayan çevrimiçi markettir.

Windows

Microsoft, mobil cihazlarla ilgili olarak mobil işletim sistemi olan Windows CE’yi piyasaya sürmüştür.

Microsoft, daha sonraları tasarımsal değişikliklere giderek Metro UI ismini verdiği arayüzü kullanan Windows Phone 7 ile piyasaya çıktı.

Microsoft tarafından geliştirilen Silverlight, animasyon, vektör, 3D, grafik ve görüntü oynatma imkanı sağlayan zengin internet uygulamaları geliştirme ortamıdır.

XNA, Xbox uygulamalarını Windows platformlarında çalıştırmak için Microsoft’un geliştirdiği bir çatıdır.

Microsoft’un son mobil işletim sistemi olan Windows Phone 8’de HTML5 ve yerel dil desteği ile C++ programlama diliyle geliştirilen bir uygulama, Java ve C# dillerinde olduğu gibi herhangi bir ara dile dönüştürülmeden çalışmaktadır.

Microsoft, Windows 10 ile gündeme gelen, tek platform çerçevesinde evrensel uygulama stratejisini benimseyerek, telefondan masaüstü bilgisayara, tabletten oyun konsollarına ve nesnelerin interneti cihazları gibi farklı platformlarda kendisini adapte ederek çalıştırabileceği bir işletim sistemi mantığıyla “Evrensel Windows Platformları (Universal Windows Platform-UWP)” uygulamalarına doğru gitmektedir.

UWP uygulamaları geliştirebilmek için öncelikle sistemde Microsoft’un Visual Studio 2015 kullanılması ve Windows 10 SDK kurulu olması gereklidir.

Visual Studio, tüm Microsoft platformlarında uygulama geliştirmeyi sağlamakta ve değişik birçok programlama dilini desteklemektedir.

Visual Studio 2015 sürümüyle birlikte Evrensel Windows Platformları (UWP) desteğiyle bir kez uygulama yazılmakta ve yazılan kod masaüstü bilgisayar, dizüstü bilgisayar, tablet, telefon, XBox oyun konsolu vb. cihazlarda Windows 10 üzerinde çalışabilmektedir.

Uygulama geliştirme dili olarak C#, C++, Visual Basic kullanılabilmekte, cihaza özel kod yazılmak istenildiğinde Windows Mobile Extension SDK uygulama geliştirme kitlerinin projeye dâhil edilmesi gerekmektedir.

Visual Studio 2015 ile birlikte gelen en önemli yeniliklerden biri ise Apache Cordova uyumudur.

Yeni bir Windows 10 uygulaması geliştirilmek istendiğinde uygulamanın farklı cihazlar üzerindeki önizlemeleri, farklı ekran kullanımları ve davranışlarının test edilmesi için simülatör bulunmaktadır.

Microsoft’un geliştirdiği bir sunucu sanallaştırma sistemi olan Hyper-V destekleniyorsa emülatör üzerinde uygulamalar test edilebilmektedir.

Windows 10’la beraber yazılan bütün uygulamalar ve .NET uygulamaları Windows Store tarafından yerel (native) olarak derlenecek ve bu şekilde kullanıcılara ulaşacak şekilde daha az kaynak tüketimiyle, daha hızlı çalışabilecek hâliyle saklanabilecektir.

.Net, Microsoft’un, programlama dilinden ve çalıştırılacak sistemden bağımsız olarak uygulama geliştirmeyi amaçlayan platformudur.