Web sayfasından iPhone uygulaması açmak

Selam arkadaşlar,

Ne zamandır yazamıyorum, malum ülkenin gündemi aşırı yoğun. Haliyle insanların dikkati de başka yönlere çekiliyor ister istemez. Bu sebeple iki yazı arasına bayağı bir süre geçti kusura bakmayın.

Bir web sayfasından nasıl iPhone uygulamasının açıldığını gösteren örnek bir kod paylaşmak istiyorum bu yazıda sizlerle.


<script language="javascript">

$(document).ready(function () {

var time = (new Date()).getTime();

var url = "your_app://functionality?someparam";
 window.location = url;

setTimeout(function () {

now = (new Date()).getTime()

console.log( "opened time:" + time);
 console.log( "now: " + now);

if ( now - time < 2500 ){
 //if the interval is bigger than 2500 ms, user probably opened the app
 window.location = "download_link";
 }
 }, 2000); //will wait for 2seconds before going to itunes
 });

</script>

Burada çok basit bir şekilde url scheme belirtmiş bir uygulamanın web siteden açılma denemesini görüyorsunuz. Burada önemli bir nokta, uygulama açılmazsa download_link adresine yapılan yönlendirme. Bu yönlendirmede zamanın önemi var çünkü her hangi bir kontrol yapmadığınız takdirde, uygulamanız açılsa bile indirme adresine yönlendirme oluyor. Bu yüzden zaman kontrolüne dikkat etmekte fayda var.

Mobil tarayıcıdan uygulamasının açılmasını isteyen arkadaşların işine yaraması dileğiyle,

Herkese iyi çalışmalar

IOS – tablo yapılarına “daha çok göster” alanı eklenmesi

Herkese merhaba,

Başlıktan da gördüğünüz gibi bu aralar boş vakitlerimde ; ) IOS development takılıyorum. Geçenlerde de bir tableview kasıyordum ki, zor bir problemle karşılaştım : sayfalama. Bir şekilde çözmeyi başarınca, bunu diğer arkadaşlarla da paylaşayım, hem bana da sonradan hatırlatma olur diye sizler için not düşüyorum.

İlk olarak bu fazladan eklenecek table view cell için bir xib dosyası hazırlıyorsunuz. Bu dosyaya artık button mu eklersiniz label mı yapıştırırsınız orası sizin bileceğiniz iş. Hücrenize fonksiyonalite de ekleyecekseniz, UITableViewCell den türemiş bir subclass da yazmanızı öneririm.

Hazırladığınız görselin identifierını bir kenara not edin ve ondan sonra tableview u handle edeceğiniz sınıfın uygulama dosyasına gelin. Burada bildiğiniz gibi tablonuzda kaç satırınız var ve bu satırlar için hangi hücreleri kullanacaksınızı belirlediğiniz iki metodunuz var. İşte bu metodlarda bazı değişiklikler yapacağız.

İlk olarak eleman sayımızı belirlediğimiz metodumuzu aşağıdakine benzer şekilde güncelleyebiliriz :


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

if ( isJsonData == YES ){

return [postData count] + 1;

}

else {

//TODO we will put a loading sign here afterwards

return 1;

}

}

Burada gördüğünüz gibi elimizdeki eleman sayısından bir fazla yer aldık. E bunu da demin hazırladığımız xib dosyasındaki cell ile kullanacağız. O kısımda da şöyle bir hareket yapıyoruz :


- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

...

if ( isJsonData == YES ) { //normal operation

...

}

else {

UITableViewCell* cellLoadMore = [tableView dequeueReusableCellWithIdentifier:loadMoreIdentifier];

if ( cellLoadMore == nil ) {

NSArray* nib = [ [ NSBundle mainBundle ] loadNibNamed:@"loadMoreCell" owner:self options:nil ];

cellLoadMore = [ nib objectAtIndex:0 ];

}

return cellLoadMore;

}

...

}

İşte bu şekilde artık tablomuzun sonunda daha fazla satır getirmemiz için bağıran bir table cellimiz oldu. Table cell için özel olarak bir xib dosyası hazırladık, üzerine de bunu kenar koşul oluştuğu anda kullandık.

Bu doldurma tuşuna basınca ne olacağını da bir sonraki seferde konuşuruz artık.

İyi çalışmalar

Mobil Uygulamalar ve Titanium Gerçeği

Phonegap ile ilgili daha önce bir giriş yazısı yayımlamıştım. O yazımda mobil uygulama geliştirme çatılarının birden fazla mobil platformda iyi sonuçlar verebileceğini ve denemeye değer olduğunu yazmıştım. Açıkçası Phonegap i değil ama Titanium u gerçek bir uygulama ile denedim ve izlenimlerimi sizlerle paylaşmak zorundayım.

  1. Titanium Javascript ile kendi kütüphanelerini kullandırarak size yazılım geliştirtiyor. Bunu da hem Android in hem de IOS un karışık çatılarını ezberlemeyelim diye yapıyorlar. Burada dikkat edilmesi gereken bir nokta var ki, Android i de IOS u da böyle güzel ve kullanışlı yapan şey bu karmaşık yazılım çatıları. Yani demek istediğim şey şu ki, bu adamlar keyfiyetten bu çatıları karmaşık hale getirmiyorlar, gereksinimleri karşıladıkları zaman uygulama çatısı kendiliğinden karmaşık bir hale gelmiş oluyor. Ama Titanium burada ne yapıyor, bu adamların özenerek ürettikleri bu karmaşık çatıları, tek bir çatı altına almaya çalışıyorlar, yani denkleme bir problem daha katıyorlar, ve çözümü iyice karmaşıklaştırıyorlar yada tam aksine basitleştirmek için sistemleri budamak zorunda kalıyorlar.
  2. Bu mobil çatı aynı zamanda Java ve Objective-C öğrenmek zorunda kalmayalım diye hazırlanıyor. Diğer yandan burada bizim Javascript kullanmamız gerekiyor. Bu dili bir çok web geliştiricisinin bildiğini düşününce gerçekten mantıklı bir sonuç değil mi? İşte kazın ayağı öyle değil ne yazık ki: Bir çok web geliştiricisi Javascript i sadece basit Jquery metodlarını çağırabilmek için kullanır, yani esasında kullandıkları şey web metodları olan bir C dilidir. Diğer yandan her ne kadar ciddiye alınmasa da Javascript çok ciddi bir dildir. Hatta ana akım olmayı başarmış en yakın Lisp özellikli dildir. Bu da ne demek, öyle herkes Javascript bilmiyor demek(şahsen ben adeta bilmiyorum). Bayağı bir özelliği var demek (ki kötü özellikleri de var ve adeta bunları öğrenmemek gerek, hatta sırf bunun üzerine yazılmış kitaplar bile var.). Dolayısıyla amatör bir şekilde tüm uygulamayı Javascript te yazarsan işlerin çığrından çıkma ihtimali yüksektir. Önce function scope nedir, global namespace nedir bilmek gerekir.
  3. Bu adamlar bu kadar güzel özelliği beleşe veriyorlar biliyor musunuz? E peki nasıl para kazanıyor bu amcalar? Şimdilerde marketplace uygulaması başlattılar. İlk maddede bahsettiğim budanmış sisteme bu sefer o budanan nesneleri satıyorlar. E peki daha önce ne yapıyorlardı? Sonuçta ortada ne olduğu belli olmayan bir uygulama çatısı mevcut. Kullanmak istiyorsan nasıl çalıştığını bilmek zorundasın, e dökümantasyon da olmadığına göre gelip bu amcalardan eğitim alacaksın ve sertifikanla beraber yazılım geliştirmeye devam edeceksin. Yani sonuç, dökümantasyona güvenme! Çünkü adamlar bilerek ve isteyerek çok az dökümantasyon yayınlıyorlar, projeye baslamana yetecek kadar ama biterecek kadar değil!
  4. Hata varsa ne yapacaksınız? Sonuçta bu Titaniumu yazan amcalar da insan ve onlar da hata yapabiliyorlar. Tamam kabul ediyorum google ve apple daki elemanlar da insan onlar da hata yapabilirler. Ama burada dikkat edilmesi gereken elemanların böyle bir durumda tepki hızları olacaktır. Forumlardan siz de görebilirsiniz, bir hata herhangi bir uygulama çatısında kesin olarak belirlendikten ne kadar süre sonra çözülmüş. Titanium forumlarında ise bir ıssızlık, bir umursamama kol geziyor. Projenizde güvendiğiniz çatının hatası yüzünden müşteriye geç kalınca ne demeyi düşünüyorsunuz?
  5. Diğer yandan bu adamlar bu işi bırakırlarsa ne olacak? Bu projeye bundan sonra kim bakacak? Google ve Apple ın daha uzun süreler buralarda olacağı kesin(batacaklarsa veya bırakacaklarsa da çok önceden kokusu çıkar ve siz önleminizi alabilirsiniz) ama ya yarın Apple Titanium u satın alırsa ne yapacaksınız? Siz müşterilerinize destek vermeye devam edeceksiniz ama adamlar çatıya gerekli değişiklikleri yapmayabilirler. Misal Facebook satın aldığı start-up şirketleri kapatıp, elemanlarına şirket bünyesinde görev veriyor. Titanium a da bu olursa ne olacak? Mesela yanlış bilmiyorsam PhoneGap i Adobe satın aldı. Ee ne olacak şimdi? Onlara ne söyleceksiniz bu durumda? Kullandığınız uygulama geliştirme çatısının piyasa desteğinin bittiğini mi söyleceksiniz? Bu projenin kendi evanjelist programcıları var mı? Lisp gibi yıllarca kendi kendini devam ettirebilecek mi?
Sonuç olarak tabii ki ortak bir çatı fikri her zaman mantıklı geliyor, ama teknoloji ve fikir dünyası böyle yürümüyor. Eğer bu adamların taktiği işe yarıyor olsaydı şu anda herkes en fazla C++ ile işini halledebiliyor olacaktı. Monarşi de dünyanın tek yönetim sistemi falan olurdu heralde : ). Böylelikle diyebiliriz ki, Titanium gibi projeler şimdilik daha orta ve küçük ölçekli projelerde tercih edilmeliler, daha ciddi işlerde teknolojinin kendi çatısı kullanılmalı.
Herkese iyi çalışmalar, iyi kodlamalar.