Cocoapods’da Podfile Güncellenmeme Durumu

iOS Development yapıyorsanız muhtemelen siz de Cocoapods1 kullanmışsınızdır. Bu aracı kısaca anlatmak gerekirse; birden fazla mock-up ya da framework’ü GitHub üzerinden XCode projenize enregre edebiliyorsunuz. Bunu sadece bir tane Podfile adı verilen bir dosyaya ilgili framework’ün ismini ve varsa versiyonunu yazdıktan sonra terminal üzerinden bir command çalıştırarak yapabiliyorsunuz. Her şey çok basit gözüküyor ama benim gibi cocoapods’u uzun süreden sonra tekrar kullanmak isteyince sistem yanıt vermezse ne yapacağınızı şaşırıyorsanız işte orada sıkıntı var demektir.

iOS Development yapıyorsanız muhtemelen siz de Cocoapods1 kullanmışsınızdır. Bu aracı kısaca anlatmak gerekirse; birden fazla mock-up ya da framework’ü GitHub üzerinden XCode projenize enregre edebiliyorsunuz. Bunu sadece bir tane Podfile adı verilen bir dosyaya ilgili framework’ün ismini ve varsa versiyonunu yazdıktan sonra terminal üzerinden bir command çalıştırarak yapabiliyorsunuz. Her şey çok basit gözüküyor ama benim gibi cocoapods’u uzun süreden sonra tekrar kullanmak isteyince sistem yanıt vermezse ne yapacağınızı şaşırıyorsanız işte orada sıkıntı var demektir.

Hata: “# Pod install” komutunu yazıyoruz ama tepki alamıyoruz.

İşte bu büyük bir hata. Komutu yazıyorsunuz ama arada 15dk geçse de ne sistem güncelleniyor ne de “Analysing dependencies” yazısı gidiyor.

Çözüm:

1- Cocoapods’un tekrar yüklenmesi gerekli
Bunun için $ pod setup yazmanızın yeterli olması gerek. Yazarken de sonuna --verbose eklersek en azından ne işlem yaptığını görebiliriz. Bendeki durumda dikkatimi çeken şey eski sürüm cocoapods yüklü olması (0.37.1) durumuydu.

Updating spec repo master

$ /usr/bin/git pull –ff-only

uyarısından sonra ekranın ilerlememesi durumu yani.

2- Cocoapods’un güncellenmesi
Bunun için önce eski dosyaları bir kaldırıyoruz $ rm -rf ~/.cocoapods; pod setup komutu bizim için eski dosyaları kaldıracak ve yeni dosyaları yükleme için indirmemizi sağlayacak.

Kurulum için $ gem install cocoapods komutunu kullanıyoruz ama o da ne, bize bir uyarı geliyor (uyarı gelmiyorsa zaten yürüyün gidin, setup kodu yazarsanız iş biter) uyarı geliyorsa, devam edelim.

Fetching: cocoapods-core-0.38.2.gem (100%)

ERROR: While executing gem … (Gem::FilePermissionError)

You don’t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

Bu uyarıyı alıyorsanız bilin ki Mac bilgisayarda yüklü olan Ruby sürümünüz güncel değil ve cocoapods ise yeni güncel Ruby’i istiyor. Ama user hakkınız olmadığı için bunu yapamıyorsunuz. Pek tavsiye edilmeyen ama istinasız herkesin kullandığı bir komuta başvuruyoruz burada: sudo

Bu bir best practice değildir!! uyarısını verdikten sonra geçici admin hakkı veren yeni komutumuzla deneme yapıyoruz: $ sudo gem install cocoapods

İşte istediğimiz güncelleme oluyor.

3- Pods’un yüklenmesi
Bu işlemden sonra yapacak bir şey yok. Projemizin folder’ına gidip usulca $ pod install yazıyoruz ve bize tane tane yüklemelerimizi yapıyor.

Bu sorunu yaşadığınızda farklı bir yöntemle mi çözdünüz, yoksa benim gibi sudo tarzı komutları kullanmak zorunda kaldınız mı?


  1. https://cocoapods.org 

Mobili yakalamak / IsMobileDevice / 51 Degrees

Daha önce bahsettiğim mobil uygulama çilesini bilenler bilir (bilmeyenler için; Android Üzerine). Bu uygulama tabii ki her ne kadar küfretmek istesem de edemediğim bir sorunla karşı karşıya kaldı geçenlerde. Güvenli kontrol ve download istatistiği sağladığımız için belirli bir download sayfasından verilen izinli dosyaların, mobil cihazlarda indirilememesi. Ben de yeter artık diyerek, mobil gelen cihazlara direk dosyayı link olarak atamaya karar verdim ve bu sorunun daha üstesinden gelecektim ki – ayrıca bu karara 6 saatlik iş gücü sonrasında ulaştım – bir sorunla karşılaştım. .Net Bowser Request.Browser.IsMobileDevice özelliği, tabletleri yakalamıyor!!!

Sorun

Sorun belli, sisteme talepte bulunan bir cihazın mobil olup olmadığını anlamak için eklenen eklenti tabletleri yakalamıyor. Ayrıca bunun güncel olduğunu da pek sanmıyorum. Cihazın tabletde olsa neden mobil olarak algılanmasını istememin sebebi de, üzerinde o harika Android işletim sisteminin olması. Bu arada belirtmem gerekir ki; iOS aletlere hiç bir sorun yok, Android’in en güncel sürümlerinde de hiç bir sorun yok yani download yönlendirme sayfamızdan indirme yapabiliyorlar. Fakat Andorid’in eski sürümünü kullanan %35’lik bir kesim olunca ve bu arkadaşlar sürekli Play Store’a “dosyalar açılmıyor, ne kötü program” diye yazınca insan görmezden gelemiyor işte.

Çözüm 1

Baştan diyeyim bu sorunu çözmedi :D. (http://detectmobilebrowsers.com)’a girip oradan browser agent ile yakalarım ben ne olacak ki yaa dedim ben de. Demez olaydım, sonuçta Chrome tarayıcısı tablet ve desktop arayüzünde benzer agent info bilgisini kullandığı için bu ihtimal de bir çırpıda son buldu. Dedim ki media query koysam falan, gizlesem göstersem linkleri. O kadar da düşmedin sen dedim kendi kendime. Bunun üzerine araştırma yapınca bu tip dataların en güncel halinin (WURFL)[http://wurfl.sourceforge.net] denen açık kaynaklı bir DB’den geldiğini öğrendim. Fakat bunu nasıl implemente edebilirdim ki, ayrıca tek istediğim sadece IsMobileDevice yazıp, if koyup link göstermek yani gerek var mı bu karada eziyete? (YAGNI) 1

Esas Çözüm

İşte tam bu düşüncelerin arasında bir çözüm buldum 51degrees (http://51degrees.codeplex.com). Başta open source yazılan ve daha sonra paralı versiyonu da çıkan bir library. Ayrıca sadece .net için değil diğer diller için de çözümleri bulunmakta. Kurulumunu da NuGet üzerinden yapabildiğimiz için direk atladım diyebilirim. Bu arada yükleyeceğim sistem de kıçıkırık bir sistem değil, anlık responce timeların istatistiğini tuttuğumuz büyük bir ERP çözümü. Yine de seçenekleri bitince insan her yolu denemeye başlıyor.

NuGet üzerinden yükledikten sonra kendi configurasyon ayarı ve dll dosyası ile sisteme dahil olan bu çözüm üzerinde bir ayar yapmadım. Açıkcası Login yönlendirmesi ve gereksiz iki üç dosya vardı, bunları kaldırmaya ayar denemez bile. Sonuçta sistemi çalıştırdığımda her şey istediğim gibiydi. Tablette test edince yine Mobile olarak algılıyor ve her şey mükemmel çalışıyordu. Size tavsiyem bu ürünü eğer sitenizin mobil kısmını yapacaksanız kullanmanız. Zira açık lisanslı hali ile gayet güzel kullanılabiliyor.

Sadece bu özelliğe yaramayan 51degrees’in diğer özelliklerini ele alırsak;

  • ScreenWidth ve ScreenHeight değerlerini alabilmek.
  • Request.Browser.IsMobileDevice özelliğini genişlettiği için ekstra bir kod yazmamak.
  • Paralı versiyonunda IsTablet gibi bir değişkene sahip olmak,
  • Free hali ile haftada bir güncelleme geçirdiği ve bu da standart mobil cihazlar için yeterli bir güncelleme olduğundan pek de bir sorun teşkil etmemek,
  • Paralı versiyonu ile tarayıcınızın bir çok özelliğine erişmek; renkler, falan filan,
  • Paralı versiyonunda gelen kullanıcının Celluar mı yoksa Wi-Fi üzerinden geldiğini bulmak.

Açıkcası bana free versiyonu yettiği için pek de diğer özelliklerini araştırmadım. Eğer gerçekten hızlı ve sürekli güncellenen – bu arada WURFL DB’sine bağlayabiliyor ve oradan güncellenmesi sağlanabiliyor – bir sistem istiyorsanız ve Request.Browser.IsMobileDevice kodu sizi deli ediyorsa, bu tam da sizin aradığınız çözüm.

Size kafayı sıyırmadan iyi mobil kodlamalar…


  1. You aren’t gonna need it! prensibi.