Mobil dünyanın en gelişmiş 2 işletim sistemi; IPhone ve Android’in birbirlerine olan üstünlükleri konu edinen yazılarıma zaman zaman yer vereceğim. Bu yazımda, bu iki platformda uygulama geliştirme konusundaki bazı kısıtlamalardan ve üstünlüklerden bahsettim. Bu bilgileri bilmek; uygulama geliştirme öncesinde, hangi platformla hangi yetkinliklerde uygulamalar geliştirebileceğimizi bilmemiz açısından ciddi bir yarar sağlayacaktır.
Uygulama geliştirme öncesinde, özellikle IPhone için kısıtlamaları dile getiren bir yazı yazacaktım fakat google’dan aradığımda hazır yazılmış bir yazı buldum.Aşağıda IPhone için yazılanların büyük çoğunluğu bu makaleden alıntıdır. Bende iphone için olanların altına Android için olanları ekledim.
(siyah font IPhone, kırmızı yazılı olanlar Android için geçerlidir).
* SIM Kart’a Erişim.
Apple hiç bir şekilde geliştiricilerin cihaza takılı SIM karta erişimine izin vermiyor. Dolayısıyla hiç bir uygulama, bırakın kullanıcının telefon numarasını hangi operatörü kullandığını bile anlayamıyor. Benzer şekilde uygulamalar cihazın IMEI numarasına da erişemiyor. Apple bir tek SDK’da, UDID (Unique Data Item Description) şeklinde adlandırılan ve her cihaz için eşsiz (unique) olan numarayı almamıza izin veriyor.
Android’de böyle bir durum söz konusu değildir. SIM karta, operatöre, operatörün hangi ülkede olduğuna, sim karta ait uniqe numaraya, telefon numarasına ve IMEI numarasına erişebilirsiniz.
* Telefon, SMS ve Mail Uygulamalarına Erişim.
Apple geliştiricilerin Telefon, SMS ve Mail uygulamalarına erişime de izin vermiyor. Dolayısıyla geliştiriciler daha yetenekli bir SMS uygulaması yazamıyor. Eminim bir çok geliştiricinin aklından “Çalarken Reklam Dinlet” konseptinde olduğu gibi “iPhone’da Ararken Reklam İzlet” şeklinde bir telefon uygulaması geliştirmek geçmiştir. Maalesef SDK’nın kısıtlarından dolayı bu mümkün değildir.
Android’de böyle bir durum söz konusu değildir. SMS’lerin ve MMS’lerin tamamına, mail kutusuna ulaşabilir hatta backgrounda SMS gönderebilir, gelen/giden SMS’lerin içeriğine göre process başlatabilir ve dahasını yapabilirsiniz.
* Diğer Uygulamaların Verilerine Erişim.
Apple bir kaç istisna hariç uygulamanın kendisine ayrılan veri alanın haricindeki yerlere ulaşımına, özellikle diğer uygulamaların verilerine ve uygulamaların kendisine erişim izni veriyor. Sadece Fotoğraf Albumü (Photo Album), Rehber (Contact List) gibi kısıtlı sayıdaki noktalara erişim izni veriyor.
Photo Album, Contact List vs gibi core uygulamalara, uygulamalarımızla erişebiliriz. Android’de diğer uygulamaların verilene erişim, diğer uygulamanın kendi verilerine eşiminin kendisi tarafından izin verilip, verilmemesine bağlıdır. Yani bardağın öbür tarafından bakacak olursak; kendi uygulamamızı kullanarak elde ettiğimiz verileri, public hale getirip başka uygulamaların bu verilerden yararlanmasını sağlayabiliriz.
* Üçüncü Parti API Kullanımı.
Apple geliştiricilerin, başklarının geliştirdiği ve önceden derlediği API’leri, uygulamaları kullanmalarına veya çalıştırmalarına izin vermiyor. Üçüncü partilerin geliştirdiği uygulamaları kullanmanın tek yolu, ilgili uygulamanın kodunu kendi uygulamamız içine gömerek ve Apple’ın API’si ile derleyerek paketlemeden geçiyor.
Android tarafında böyle bir kısıt söz konusu değil. Java’da kullanılmak üzere hazırlanmış open source bir API’yi uygulamamda kullanmıştım. Herhangi bir “red” yemedim.
* Uygulamalarda Açık Kaynak API Kullanımı.
Apple, iPhone uygulamaları içerisinde yukarıdaki maddeye uygun olacak şekilde Açık Kaynak kütüphanelerine kullanımına bir yasak getirmiyor. Fakat kullanılan kütüphanenin kullanım sözleşmesi, iPhone SDK anlaşması ile çelişiyorsa bu durumda ilgili kütüphanenin kullanımını yasaklıyor.
Android tarafında, bir üst madde ile aynı durum söz konusu.
* Sistem Dosyalarına ve Ayarlarına Erişim.
Apple’ın iPhone uygulamalarının sistem dosyalarına ve ayarlarına erişime izin vermiyor. Örneğin uygulama içerisinden Wi-Fi kapatılıp açılamıyor ya da uygulamanın internete çıkış noktası (Wi-Fi veya EDGE) değiştirilemiyor.
Bir uygulamada Wi-fi gerekli ise, kullanıcı wi-fi settings menüsüne yönlendirilip, erişim sağlanması isteniyor. Yeni çıkan API’de (Android 2.1) kullanıcı onayı ile wifi direk kontrol edilebiliyor sanırım.
* Cellular Network (GPRS/EDGE/3G) Kullanımı.
Apple, VOIP uygulamalarının Operatör Ağları (EDGE/3G) üzerinden veri transferine izin vermiyor. Ayrıca uygulamaların sadece EDGE/3G üzerinden internete çıkmasını da kabul etmiyor. Bu yüzden geliştireceğiniz iPhone uygulamasının mutlaka Wi-Fi üzerinden de internete çıkabilir olması gerekiyor.
Android’de böyle bir saçmalık yok. Yukarıda IPhone için sayılan durumun da düzeltildiğine inanıyorum.
* APN Tanımı.
Apple, iPhone’da baz istasyonları üzerinden internete çıkış imkanı veren APN tanımının sadece bir tane olmasına izin veriyor. Ayrıca bu apn tanımı üzerinde detaylı bir konfigürasyon yapılamıyor. Bu tanımı da sadece kullanıcının değiştirmesine izin veriyor. Zaten kullanıcılar da bunu internet APN’i olarak kullanıyorlar. Dolayısıyla MMS gibi farklı APN tanımı isteyen uygulamalar çalışamıyor.
Benzer durum Android içinde geçerlidir.
* Video Streaming.
Apple’ın bu konuda kesin bir yasağı olmamasına rağmen SDK’sında video streaming ile ilgili bir API’nin bulunmamasından dolayı, geliştiricilerin video streaming uygulamaları geliştirmesi çok zor oluyor. Apple gayri resmi açıklamalarında bunun nedenini streaming’in cihazın pil ömrünü çok kısa sürede bitirmesi olarak açıklıyor. Fakat buna rağmen App Store’da sayılı firma tarafından geliştirilmiş “Live Video Streaming” uygulamaları da bulunuyor.
Android’de çok verimli olmasa da, video stream uygulaması yapılabiliyor.
* Human Interfance Guidelines ile Uyumluluk.
Apple, iPhone için geliştirilmiş uygulamaların Human Interface Guidelines ismini verdiği dokümana göre geliştirilmesini istiyor. Apple’ın burdaki amacı, iPhone kullanıcı alışkanlığını ve tecrübesini bir seviyeye kadar standart tutup, uygulamayı ilk defa kullanacak birinin zorlanmadan uygulamaya alışması. Uygulamalara App Store’a çıkmadan evvel Apple çalışanları tarafından bizzat test edilip kullanıldığı için Human Interface Guidelines’a aykırı uygulamalar her zaman olmasa da çoğunlukla yakalanıyor.
Android tarafından programlar, Android Markete yüklenirken bizzat test edilmiyorlar. Bu yüzden markete gönderdiğiniz uygulamanız, 10-15 içerisinde yayınlanabiliyor. Android tarafından sunulan benzer bir interface tavsiyeleri bulunuyor fakat bunlar kurallar bütünü şeklinde işlemiyor. Eğer kullanıcılar rahatsız olurlarsa, programınızı şikayet ediyorlar.
* Limited Utility.
Apple, SDK sözleşmesinde yer almasa da bazı uygulamaları gereksiz ya da saçma bularak “Limited Utility” başlağı altında kabul etmeyebiliyor. Bu yüzden geliştiricilerin “ama SDK sözleşmesinde böyle bir yasak yoktu” diyerekten Apple’a itiraz etme imkanları bulunmuyor.
Androidde karşılığı bulunmamaktadır.
* Duplicate Functionality.
Apple yine SDK anlaşmasında yer almamasına rağmen bazı uygulamaları, sırf kendi uygulamaları ile rekabet ediyor bahanesiyle “Duplicate Functionality” başlığı altında reddediyor.
Yukarıda bir geliştiricinin iPhone uygulaması geliştirirken karşısına çıkabilecek, SDK anlaşmasında yazılı olan veya olmayan kısıtlamaları tecrübelerimiz ışığında paylaşmaya çalıştım. Bu kısıtlamalara takılmak istemeyen geliştiriciler jailbreak’li cihazlar için istedikleri gibi uygulama geliştirebiliyorlar. Fakat bu uygulamalar App Store’da yer almıyor doğal olarak.
Karşılığı bulunmamaktadır.
* Thread Kullanımı
IPhone OS’da third party uygulamalar, thread kullanamıyor. (pil ömrü ve güvenlik sebeplerinden ötürü).
Android’de, thread kullanılabilir. Bildiğim kadarı ile, kullanılacak thread sayısında da bizi sınırlayan tek şey, kullanıcının hardware özellikleri
* Background işlemler
IPhone’da hiç bir şekilde background process yapamazsınız. (yine pil ömrü ve güvenlik sebeplerinden ötürü)
Android’de Background işlemleri yapabiliriz. Mesela kullanıcıya sormadan dolar fiyatındaki ciddi bir değişim durumunda kullanıcıyı uyarabiliriz. (aslında bu örneği borsa için vermek isterdim ama doviz sitemiz var)
* Uygulamaya Reklam almak
IPhone’da belli kısıtlamalar göz önünde bulundurularak reklam alınabiliyor. Mesela kullanıcılara, belli süre zorunlu olarak reklam izletmek ve reklamların herhangi bir ses sese sahip olmaları kesinlikle yasak. Bunların dışında, uygulamanın amacının reklam olduğunun anlaşılması durumunda da programımız büyük ihtimalle App store’da kabul edilmiyor.
Android’de bu mekanizmayı ilk etapta denetleyecek herhangi bir merci ve bu bahsi konu edinen herhangi bir döküman da bulunmuyor. Fakat daha sonra, kullanıcılardan herhangi bir şikayet gelmesi durumunda uygulama Android Marketten çıkartılabiliyor.
Hem Android hem de IPhone uygulamalarında, reklamlar genellikle üst tarafta banner şeklinde yada uygulamaların belli menülerinde text şeklinde, kullanıcıları sınırlamayacak şekilde yer alıyor.
Yukarıda yazılanlarda yakın zaman içerisinde özellikle IPhone tarafında API gelişmeleri olacak. Fakat şuan için bunlar geçerli olduğundan bunlar üzerinden yorum yaptım.
* Not 1: Androidde yazdığımız programların, yukarıda anlatılan özellikleri kullanacağını kullanıcıya bildiriliyor ve program install edilmeden önce telefon kullanıcısından 1 kereye mahsus izin alınıyor.
* Not 2: Android’in SDK’sı yapı olarak IPhone’dan daha geniş olduğundan yukarıdaki maddelerin sonucunda hep Android baskın geldi. Fakat uygulamaların geliştirilmesinden, kullanıcıların kullanımına varıncaya kadar, SDK’nın mimarilerinin dışında, arada çok daha fazla süreç yer almaktadır. Bunların bazılarında da elbetteki IPhone baskındır. Bu tarz dengelere ilerleyen yazılarda yer vereceğim.
Uygulama geliştirme öncesinde, özellikle IPhone için kısıtlamaları dile getiren bir yazı yazacaktım fakat google’dan aradığımda hazır yazılmış bir yazı buldum.Aşağıda IPhone için yazılanların büyük çoğunluğu bu makaleden alıntıdır. Bende iphone için olanların altına Android için olanları ekledim.
(siyah font IPhone, kırmızı yazılı olanlar Android için geçerlidir).
* SIM Kart’a Erişim.
Apple hiç bir şekilde geliştiricilerin cihaza takılı SIM karta erişimine izin vermiyor. Dolayısıyla hiç bir uygulama, bırakın kullanıcının telefon numarasını hangi operatörü kullandığını bile anlayamıyor. Benzer şekilde uygulamalar cihazın IMEI numarasına da erişemiyor. Apple bir tek SDK’da, UDID (Unique Data Item Description) şeklinde adlandırılan ve her cihaz için eşsiz (unique) olan numarayı almamıza izin veriyor.
Android’de böyle bir durum söz konusu değildir. SIM karta, operatöre, operatörün hangi ülkede olduğuna, sim karta ait uniqe numaraya, telefon numarasına ve IMEI numarasına erişebilirsiniz.
* Telefon, SMS ve Mail Uygulamalarına Erişim.
Apple geliştiricilerin Telefon, SMS ve Mail uygulamalarına erişime de izin vermiyor. Dolayısıyla geliştiriciler daha yetenekli bir SMS uygulaması yazamıyor. Eminim bir çok geliştiricinin aklından “Çalarken Reklam Dinlet” konseptinde olduğu gibi “iPhone’da Ararken Reklam İzlet” şeklinde bir telefon uygulaması geliştirmek geçmiştir. Maalesef SDK’nın kısıtlarından dolayı bu mümkün değildir.
Android’de böyle bir durum söz konusu değildir. SMS’lerin ve MMS’lerin tamamına, mail kutusuna ulaşabilir hatta backgrounda SMS gönderebilir, gelen/giden SMS’lerin içeriğine göre process başlatabilir ve dahasını yapabilirsiniz.
* Diğer Uygulamaların Verilerine Erişim.
Apple bir kaç istisna hariç uygulamanın kendisine ayrılan veri alanın haricindeki yerlere ulaşımına, özellikle diğer uygulamaların verilerine ve uygulamaların kendisine erişim izni veriyor. Sadece Fotoğraf Albumü (Photo Album), Rehber (Contact List) gibi kısıtlı sayıdaki noktalara erişim izni veriyor.
Photo Album, Contact List vs gibi core uygulamalara, uygulamalarımızla erişebiliriz. Android’de diğer uygulamaların verilene erişim, diğer uygulamanın kendi verilerine eşiminin kendisi tarafından izin verilip, verilmemesine bağlıdır. Yani bardağın öbür tarafından bakacak olursak; kendi uygulamamızı kullanarak elde ettiğimiz verileri, public hale getirip başka uygulamaların bu verilerden yararlanmasını sağlayabiliriz.
* Üçüncü Parti API Kullanımı.
Apple geliştiricilerin, başklarının geliştirdiği ve önceden derlediği API’leri, uygulamaları kullanmalarına veya çalıştırmalarına izin vermiyor. Üçüncü partilerin geliştirdiği uygulamaları kullanmanın tek yolu, ilgili uygulamanın kodunu kendi uygulamamız içine gömerek ve Apple’ın API’si ile derleyerek paketlemeden geçiyor.
Android tarafında böyle bir kısıt söz konusu değil. Java’da kullanılmak üzere hazırlanmış open source bir API’yi uygulamamda kullanmıştım. Herhangi bir “red” yemedim.
* Uygulamalarda Açık Kaynak API Kullanımı.
Apple, iPhone uygulamaları içerisinde yukarıdaki maddeye uygun olacak şekilde Açık Kaynak kütüphanelerine kullanımına bir yasak getirmiyor. Fakat kullanılan kütüphanenin kullanım sözleşmesi, iPhone SDK anlaşması ile çelişiyorsa bu durumda ilgili kütüphanenin kullanımını yasaklıyor.
Android tarafında, bir üst madde ile aynı durum söz konusu.
* Sistem Dosyalarına ve Ayarlarına Erişim.
Apple’ın iPhone uygulamalarının sistem dosyalarına ve ayarlarına erişime izin vermiyor. Örneğin uygulama içerisinden Wi-Fi kapatılıp açılamıyor ya da uygulamanın internete çıkış noktası (Wi-Fi veya EDGE) değiştirilemiyor.
Bir uygulamada Wi-fi gerekli ise, kullanıcı wi-fi settings menüsüne yönlendirilip, erişim sağlanması isteniyor. Yeni çıkan API’de (Android 2.1) kullanıcı onayı ile wifi direk kontrol edilebiliyor sanırım.
* Cellular Network (GPRS/EDGE/3G) Kullanımı.
Apple, VOIP uygulamalarının Operatör Ağları (EDGE/3G) üzerinden veri transferine izin vermiyor. Ayrıca uygulamaların sadece EDGE/3G üzerinden internete çıkmasını da kabul etmiyor. Bu yüzden geliştireceğiniz iPhone uygulamasının mutlaka Wi-Fi üzerinden de internete çıkabilir olması gerekiyor.
Android’de böyle bir saçmalık yok. Yukarıda IPhone için sayılan durumun da düzeltildiğine inanıyorum.
* APN Tanımı.
Apple, iPhone’da baz istasyonları üzerinden internete çıkış imkanı veren APN tanımının sadece bir tane olmasına izin veriyor. Ayrıca bu apn tanımı üzerinde detaylı bir konfigürasyon yapılamıyor. Bu tanımı da sadece kullanıcının değiştirmesine izin veriyor. Zaten kullanıcılar da bunu internet APN’i olarak kullanıyorlar. Dolayısıyla MMS gibi farklı APN tanımı isteyen uygulamalar çalışamıyor.
Benzer durum Android içinde geçerlidir.
* Video Streaming.
Apple’ın bu konuda kesin bir yasağı olmamasına rağmen SDK’sında video streaming ile ilgili bir API’nin bulunmamasından dolayı, geliştiricilerin video streaming uygulamaları geliştirmesi çok zor oluyor. Apple gayri resmi açıklamalarında bunun nedenini streaming’in cihazın pil ömrünü çok kısa sürede bitirmesi olarak açıklıyor. Fakat buna rağmen App Store’da sayılı firma tarafından geliştirilmiş “Live Video Streaming” uygulamaları da bulunuyor.
Android’de çok verimli olmasa da, video stream uygulaması yapılabiliyor.
* Human Interfance Guidelines ile Uyumluluk.
Apple, iPhone için geliştirilmiş uygulamaların Human Interface Guidelines ismini verdiği dokümana göre geliştirilmesini istiyor. Apple’ın burdaki amacı, iPhone kullanıcı alışkanlığını ve tecrübesini bir seviyeye kadar standart tutup, uygulamayı ilk defa kullanacak birinin zorlanmadan uygulamaya alışması. Uygulamalara App Store’a çıkmadan evvel Apple çalışanları tarafından bizzat test edilip kullanıldığı için Human Interface Guidelines’a aykırı uygulamalar her zaman olmasa da çoğunlukla yakalanıyor.
Android tarafından programlar, Android Markete yüklenirken bizzat test edilmiyorlar. Bu yüzden markete gönderdiğiniz uygulamanız, 10-15 içerisinde yayınlanabiliyor. Android tarafından sunulan benzer bir interface tavsiyeleri bulunuyor fakat bunlar kurallar bütünü şeklinde işlemiyor. Eğer kullanıcılar rahatsız olurlarsa, programınızı şikayet ediyorlar.
* Limited Utility.
Apple, SDK sözleşmesinde yer almasa da bazı uygulamaları gereksiz ya da saçma bularak “Limited Utility” başlağı altında kabul etmeyebiliyor. Bu yüzden geliştiricilerin “ama SDK sözleşmesinde böyle bir yasak yoktu” diyerekten Apple’a itiraz etme imkanları bulunmuyor.
Androidde karşılığı bulunmamaktadır.
* Duplicate Functionality.
Apple yine SDK anlaşmasında yer almamasına rağmen bazı uygulamaları, sırf kendi uygulamaları ile rekabet ediyor bahanesiyle “Duplicate Functionality” başlığı altında reddediyor.
Yukarıda bir geliştiricinin iPhone uygulaması geliştirirken karşısına çıkabilecek, SDK anlaşmasında yazılı olan veya olmayan kısıtlamaları tecrübelerimiz ışığında paylaşmaya çalıştım. Bu kısıtlamalara takılmak istemeyen geliştiriciler jailbreak’li cihazlar için istedikleri gibi uygulama geliştirebiliyorlar. Fakat bu uygulamalar App Store’da yer almıyor doğal olarak.
Karşılığı bulunmamaktadır.
* Thread Kullanımı
IPhone OS’da third party uygulamalar, thread kullanamıyor. (pil ömrü ve güvenlik sebeplerinden ötürü).
Android’de, thread kullanılabilir. Bildiğim kadarı ile, kullanılacak thread sayısında da bizi sınırlayan tek şey, kullanıcının hardware özellikleri
* Background işlemler
IPhone’da hiç bir şekilde background process yapamazsınız. (yine pil ömrü ve güvenlik sebeplerinden ötürü)
Android’de Background işlemleri yapabiliriz. Mesela kullanıcıya sormadan dolar fiyatındaki ciddi bir değişim durumunda kullanıcıyı uyarabiliriz. (aslında bu örneği borsa için vermek isterdim ama doviz sitemiz var)
* Uygulamaya Reklam almak
IPhone’da belli kısıtlamalar göz önünde bulundurularak reklam alınabiliyor. Mesela kullanıcılara, belli süre zorunlu olarak reklam izletmek ve reklamların herhangi bir ses sese sahip olmaları kesinlikle yasak. Bunların dışında, uygulamanın amacının reklam olduğunun anlaşılması durumunda da programımız büyük ihtimalle App store’da kabul edilmiyor.
Android’de bu mekanizmayı ilk etapta denetleyecek herhangi bir merci ve bu bahsi konu edinen herhangi bir döküman da bulunmuyor. Fakat daha sonra, kullanıcılardan herhangi bir şikayet gelmesi durumunda uygulama Android Marketten çıkartılabiliyor.
Hem Android hem de IPhone uygulamalarında, reklamlar genellikle üst tarafta banner şeklinde yada uygulamaların belli menülerinde text şeklinde, kullanıcıları sınırlamayacak şekilde yer alıyor.
Yukarıda yazılanlarda yakın zaman içerisinde özellikle IPhone tarafında API gelişmeleri olacak. Fakat şuan için bunlar geçerli olduğundan bunlar üzerinden yorum yaptım.
* Not 1: Androidde yazdığımız programların, yukarıda anlatılan özellikleri kullanacağını kullanıcıya bildiriliyor ve program install edilmeden önce telefon kullanıcısından 1 kereye mahsus izin alınıyor.
* Not 2: Android’in SDK’sı yapı olarak IPhone’dan daha geniş olduğundan yukarıdaki maddelerin sonucunda hep Android baskın geldi. Fakat uygulamaların geliştirilmesinden, kullanıcıların kullanımına varıncaya kadar, SDK’nın mimarilerinin dışında, arada çok daha fazla süreç yer almaktadır. Bunların bazılarında da elbetteki IPhone baskındır. Bu tarz dengelere ilerleyen yazılarda yer vereceğim.
Son düzenleme: