"Enter"a basıp içeriğe geçin

Kategori: ipucu

Objective-C Arkaplanda Ses Çalma – Audio Session

Uygulamanızda audio özellikleri kullanıyorsanız, yani bir servisten veya bir dosyadan ses oynatıyorsanız uygulamayı kapattığınızda arkaplanda sesin devam etmesini isteyebilirsiniz. Bunun için yapılması gereken işlem oldukça basit. Öncelikle uygulamanızın plist dosyasına  “UIBackgroundModes” nodu ekleyip karşısına “audio” yazmak lazım (Xcode bu yazdıklarınızı sürümüne göre başka kelimelerle otomatik olarak değiştiriyor, şaşırmayın). Sonra uygulamanızın AppDelegate.m dosyasındaki init veya applicationDidFinishLaunching fonksiyonlarından birine şu kodu yazıyorsunuz. -(id) init { [[AVAudioSession sharedInstance] setDelegate: self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; }

MySQL için strip_tags() fonksiyonu

PHP’de kullandığımız strip_tags() fonksiyonu parametre olarak aldığı metindeki tüm HTML taglarını ortadan kaldırıp sadece metin bilgisinin kalmasını sağlıyordu. Bu fonksiyona MySQL’de de ihtiyaç duyduğunuz oldu mu? Benim oldu. Buyrun burdan yakın efendim:  delimiter ;; CREATE  FUNCTION strip_tags2(str text) RETURNS text CHARSET utf8 BEGIN     DECLARE start, end INT DEFAULT 1;     LOOP         SET start = LOCATE(“”, str, start);         IF (!end) THEN SET end = start; END IF;         SET str = INSERT(str, start, end – start + 1, “”);     END LOOP; END  ;; delimiter ;

PHP ile MacOSx üzerinde mail gönderemiyorsanız

PHP ile MacOSx platformu üzerindeyken mail gönderemiyorsanız loglara bir göz atmalısınız. Eğer sendmail: fatal: chdir /Library/Server/Mail/Data/spool: No such file or directory gibi bir hata varsa çözüm gayet basit. Aşağıda yazılan ifadeleri sırasıyla çalıştırıp önce bu klasörü oluşturmalı, sonrasında mail gönderme sunucu yazılımı olan postfix’in bu klasörleri kullanabilmesi için gerekli ayarları yapmalısınız. sudo mkdir -p /Library/Server/Mail/Data/spool sudo /usr/sbin/postfix set-permissions sudo /usr/sbin/postfix start Hepsi bu kadar.. NOT: Eğer maillerinizi gmail üzerinden göndermek istiyorsanız şu yazıdaki ipuçlarını kullanabilirsiniz: http://www.zenddeveloper.com/how-to-send-smtp-mails-with-postfix-mac-os-x-10-8/

AFNetworking (AFXMLRequestOperation) Main Thread’i Engelliyor

Bir önceki yazıda bahsettiğim uygulamayı neredeyse bitirdim fakat bir problem nedeniyle AppStore’a gönderemedim. Uygulamada AFNetworking’in AFXMLRequestOperation classını kullanarak RSS datasını çekip, gelen xml’i parse edip ilgili mutable (sonradan öğe eklenebilen) dizilere doldurmayı ve bir table’ı bu dizideki elemanlarla  oluşturmayı hedefliyordum. İlgili viewController classıma xml parsing delegate metodlarını yazabilmek için <NSXMLParserDelegate> ibaresini ekledim ve gereken metodları yazdım. İşlem gayet düzgün çalıştı fakat veriler parse edildikten neredeyse 2-3 saniye sonra table güncelleniyordu.Halbuki [self.tableView reloadData] fonksiyonunu parsing işleminin bitiminde çalışan – (void)parserDidEndDocument:(NSXMLParser *)parser fonksiyonuna eklemiştim. Debug yapınca reloadData’nın sırası geldiği halde çalışmadığını, AFNetworking’in parse işleminden sonra başka rutinlerinin icra edildiğini, 1-2 saniye sonra…

AFNetwork Expected content type hatası

Geçen yıl başladığım bir uygulamayı tamamlamaya niyetlendim. Uygulamanın bir kısmında RSS okumam icab ediyordu. Bunun için AFXMLRequestOperation kullandım fakat sürekli olarak “Expected content type” hatası verip listelediği application/xml, text/xml tiplerinden biri olması gerektiğini bağırıp durdu. Google’da aratınca öğrendim ki AFNetwork kütüphanesinde AFXMLRequestOperation.m dosyası içerisinde hangi xml dosya tiplerini kabul ettiğine dair yukarıdaki listenin tutulduğu bir fonksiyon varmış: + (NSSet *)defaultAcceptableContentTypes { return [NSSet setWithObjects:@”application/xml”,@”application/rss+xml”, @”application/atom+xml”, @”text/xml”, nil]; } Bu kısma benim çalıştığım RSS dosyasının tipi olan application/rss+xml’i de eklediğimde sorunum çözülmüş oldu.

Objective-C’de Mail Gönderme Modal’ı Kullanmak

Bazı uygulamalarda gördüğümüz mail gönderme modalını hazırlamak çok basitmiş. Evvela projeye  MessageUI.framework framework’ünü eklemek gerekiyor.  Sonra mail modalını kullanacağımız ekranın OrnekViewController.h dosyasında aşağıdaki dosyaları yüklemek ve  ayrıca mail gönderme işlemleri ile ilgili delegate fonksiyonlarını da bu class’da kullanabilmek için MFMailComposeViewControllerDelegate ifadesini kullanmak gerekiyor. #import <UIKit/UIKit.h> #import <MessageUI/MessageUI.h> #import <MessageUI/MFMailComposeViewController.h> @interface OrnekViewController : UIViewController<MFMailComposeViewControllerDelegate>{ } @end Daha sonra OrnekViewController.m dosyasında şu iki fonksiyonu kullanmak yeterli.. – (IBAction)actionEmailComposer{ if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init]; mailViewController.mailComposeDelegate = self; [mailViewController setSubject:@”Mail Konusu”]; [mailViewController setMessageBody:@”mesaj” isHTML:NO]; [self presentViewController:mailViewController animated:YES completion:nil]; } else { NSLog(@”Mail gonderilemiyor”); } } -(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error{ [self…

Objective-C’de integer MutableArray’i oluşturmak

Bir iki haftadır QuickDialog kütüphanesi ile bir proje geliştirmeye çalışıyorum. Dökümantasyonu malesef çok açıklayıcı olmadığı için işin acemisi olarak biraz zorlanıyorum. QuickDialog’da “çoktan seçmeli” bir liste oluşturmak ve bir tuşa dokunulduğunda bu listedeki tüm elemanların seçili olmasını sağlamaya çalışıyordum. QRadioSection adındaki bu yapı selectedIndexes isimli bir NSMutableArray içerisinde seçili öğelerin indislerini tutuyor. Tüm elemanları seçili hale getirmek için bu MutableArray’a tüm indisleri yazmalı ve tabloyu reload fonksiyonu ile yenilemeliyiz. Buraya kadarını anladım fakat ne yaptımsa selectedIndexes’a tüm indisleri yerleştiremedim. Mesela şu yolu denedim; QRadioSection  *liste=[[self.root sections] objectAtIndex:0]; NSMutableArray *arr=[[NSMutableArray alloc] initWithObject:0,1,2,3,nil]; [liste setSelectedIndexes:arr]; Bu şekilde yazınca hata vermiyordu ama listede…

MKNetwork ile Array Post Etmek

MKNetwork’le array post etmek için iki gündür çabalıyorum. Google’da okuduklarım beni çözüme ulaştırmasa da çözüme giden yolu görmemi sağladı. Aslında çözüm çok ta basitmiş. MKNetwork’le post etmek istediğim verileri karşılayacak api PHP ile yazıldığından; bir array’in gitmesi için mesela şu şekilde olması gerekiyor; il_id[]=53&il_id[]=61&id_id=10 Bu; php’de il_id diye bir array oluşturup içine 53, 61,  10 verilerini yerleştirir. Problem şu; MKNetwork NSMutableDictionary tipinde bir parametre listesi alıyor. Yapısı gereği NSMutableDictionary objesine birden fazla aynı key’e sahip öğe ekleyemiyoruz. yani “il_id[]” keyini sadece bir kere kullanabiliyoruz. Ben de bunu aşmak için uğraş veriyordum. Google’da bulduğum şu sayfa sorunumu çözmedi ama çözümü bulmamı…

Hostgator Dedicated Sunucuya Git Kurmak

githubOfiste svn’i bırakıp git’e (Linus Torvalds’ın yazdığı bir versiyonlama sistemi) döndüğümüzden beri kişisel projelerimde de git kullanıyorum. Projelerimizi gitHub’un sunucularında depoluyoruz. Açık kodlu projeler için gitHub ücretsiz, özel projeler içinse aylık 7 dolardan başlayan fiyatları var. Listesi burada.

Yine ofiste tüm projelerimizi Amazon EC2 sunucularında host ediyoruz, bu sunucuları kendimiz açtığımız için içinde istediğimiz gibi at koşturabiliyor, git gibi ne lazımsa kurabiliyoruz. Kişisel projelerim için vaktiyle HostGator’u tercih etmiştim, şimdi taşınmaya vakit bulamadığım için çıkamıyorum, bir de WHM ve CPANEL’e yıllardır çok alıştım. Vazgeçmek istemiyorum.

Şu hususa açıklık getirelim: git sisteminde tuttuğumuz projelerimizi ekibimizdeki diğer geliştiriciler de indirip güncelleyebilsinler diye bir git sunucusunda tutuyoruz. Ayrıca projenin git’siz halini de ziyaretçilerin hizmetine sunmak üzere başka bir yerde web sunucusunda tutuyoruz. Tabi ki gerekli durumlarda bu iki sunucu sistem aynı makinede yer alabilir. Biz projeyi depolamak için gitHub’u, webe sunmak için Amazon’u tercih ediyoruz.

CocoaPods ile QuickDialog Kurulumu

Bir önceki yazıda bahsettiğim kütüphanelerden QuickDialog‘u web sitesindeki yönergeleri defaatle tekrarladığım halde başarılı bir şekilde projeme dahil edemedim. Sürekli “#import <QuickDialog/QuickDialog.h> file not found!” deyip durdu. Forumlarda da çare bulamadım. Ofisteki bir arkadaşımın “CocoaPods‘la kurmayı deneyelim” demesiyle kolları sıvadık. Aslında bir önceki yazıda CocoaPods’dan da bahsetmiştim ama oraya yazdığım üzere CocoaPods’un sadece bu kütüphanelerin son sürümlerini takip edebilmek için bir araç olduğunu düşünmüştüm. Meğer bu paketleri projemize dahil edebilmek için kullanılıyormuş CocoaPods. Önce CocoaPods’u kuralım. Web sitesinde de yazdığı üzere CocoaPods “ruby gem” adı verilen bir platform üzerinden kullanılabiliyor. Ruby gem’i kurmak için de makinemde zaten kurulu olan “macports” platformunu…