본문 바로가기

프로그래밍/iOS243

Advance Localization in ios apps Localization in ios is usually done using this way. But the main problem with this approach is that to view the application in other language the language has to be changes from the settings of the ios device. In this post i will present an approach in which you can set the language of the application from within the application. but before starting lets understand the current localization proce.. 2012. 2. 17.
로컬라이징 현재 iPhone을 개발하시는 분들은 대부분 해외 시장을 염두에 두고 개발을 하고 계시리라 생각합니다. 결국, 한국어와 영어를 동시에 지원해야하는 과제가 생기겠죠. iPhone의 로컬라이징에 대한 정보가 많이 없어서 간략하게 정리해볼까 합니다. 1. xib 로컬라이징 xib는 아시다시피 Interface Builder로 만든 UI 인스턴스 입니다. xcode에서 로컬라이징할 xib를 선택한후 Get Info를 합니다. General Tab에서 Make Localization을 클릭하면 기본적으로 English가 만들어집니다. Korean을 추가하려면 Add Localization을 클릭하여 Korean을 입력하면 생성이 됩니다. 이 순간부터 독립적인 UI가 생기므로 개발이 완료된 후 이 작업을 하시는 것.. 2012. 2. 17.
문자열 지역화 @implementation Language static NSBundle *bundle = nil; +(void)initialize { NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; NSArray* languages = [defs objectForKey:@"AppleLanguages"]; NSString *current = [[languages objectAtIndex:0] retain]; [self setLanguage:current]; } /* example calls: [Language setLanguage:@"it"]; [Language setLanguage:@"de"]; */ +(void)setLanguage:(NSString *).. 2012. 2. 17.
Localizing iPhone Apps – Internationalization By localizing an iPhone app, we display cultural information in the user’s specified locale, but what about the text, like the application name and displaying visible information in user’s preferred language. In this tutorial, I will show you how we can use resource files to display visible text in user’s language. Localizing iPhone Apps – Part 1 Localizing iPhone Apps – Custom Formatter Localiz.. 2012. 2. 17.
NSDate / NSDateFormatter date //NSDateFormatter 를 생성한다. NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; //데이트 형식을 지정한다. [inputFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"]; //inputFormatter 에 지정한 형식대로 NSDate 가 생성된다. NSDate *formatterDate = [inputFormatter dateFromString:@"1999-07-11 at 10:30"]; //위에 까지가 날짜 생성 //NSDateFormatter 를 생성한다. NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; //.. 2012. 2. 15.
맵뷰(MapView) 5장 - 한점과 나의 거리는?? (getDistanceFrom:) 결과물입니다. ===================================================================================== .h에서 거리를 위한 변수하나를 잡아줍니다. @interface testLocationViewController : UIViewController { CLLocationManager *locationManager; CLLocation *startPoint; MKMapView *myMapView; NSMutableArray *arrayLatitude; NSMutableArray *arrayLongitude; NSMutableArray *distance; } @property (nonatomic, retain) CLLocationManager.. 2012. 2. 9.
맵뷰(MapView) 4장 - 원하는 위치를 표시(Pin Annotation)하자!! MapKit에서 핀을 꼽는데 필요한 정보는 latitude/longitude가 필요하고, 핀을 터치했을때 팝업될 메시지로 Title/SubTilte을 필요로 합니다. Pin을 꼽기 원하는 위치의 좌표를 NSArray로 잡아줍니다. 여기서는 랜덤으로 좌표를 구해서 10개정도 찍어보려합니다. 우선 좌표를 구해야 겠죠? 제가 핀을 꼽으려는 위치는 경기도 일산에 위치한 호수공원 주위입니다. 네이버 지도나 구글맵을 이용하시면 됩니다. 방법은 비슷합니다. 저는 네이버 지도를 이용했습니다. 으헝... 정사각형을 그리려고 했는데 망했네요 ;ㅅ; 저 빨간 네모 안에 좌표를 구해줄꺼에요. 모서리를 중심으로 잡습니다. 구글맵에는 '지도 중앙으로 설정' 옵션이 있는데 네이버꺼는 없네요. 야메로 해줍시다. 모서리를 우클릭해서 .. 2012. 2. 9.
맵뷰(MapView) 3장 - CLLocation을 이용해 MapView에 현재위치 표시하기 2장에 이어 .m 마저 해봅시다. - (id) init { self = [super init]; if (self != nil) { myMapView = [[MKMapView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)]; [myMapView setShowsUserLocation:YES]; [myMapView setMapType:MKMapTypeStandard]; [self.view insertSubview:myMapView atIndex:0]; } return self; } - (id) init {} 초기화 함수입니다. 이안에 코딩할예정입니다. init나 ViewDidLoad, viewDidAppear중 어디에 코딩을 할지는 어플리케이션의 용도에 따.. 2012. 2. 9.
맵뷰(MapView) 2장 - Frameworks추가 이제 프레임워크를 추가합니다. 추가할 프레임 워크는 CoreLocation과 MapKit 입니다. 코어로케이션은 현재의 위치를 계속 추적하고, 맵킷은 지도를 화면에 띄우는 역활을 합니다. 추가한후에 ViewController.h으로 갑니다. #import #import #import @interface testLocationViewController : UIViewController { CLLocationManager *locationManager; CLLocation *startPoint; MKMapView *myMapView; } @property (nonatomic, retain) CLLocationManager *locationManager; @property (nonatomic, retain) .. 2012. 2. 9.
맵뷰(MapView) 1장 - ViewController 추가 MapView를 이용해 할수있는걸 다 해보려고 하는데 어디까지 갈지 모르겠네요. 새 프로젝트를 Window Based Application으로 합니다. 관례상 인스턴스 변수와 메서드의 이름은 소문자로 시작합니다. 만약 여러 단어로 되어 있다면 새로운 각 단어의 첫 글자는 대문자로 표기해야 합니다. (예: newFriendName) 또한 클래스 이름은 대문자로 시작합니다!! 쭉 진행하다 보니까 소문자로 만들었더라고요. 관례라는건 보편적으로 사용되는 것이니까 저처럼 실수하지 마시고 따라주세요(TestLocation) 늅늅!! 이렇게 만들면 아무런 템플릿도 적용안된 순수코드가 됩니다. (프로젝트명을 testLocation만들었습니다.) 어플이 시작되면 main함수에서 testLocationAppDelegate.. 2012. 2. 9.
탭바(UITabBarController) 3장 - 탭바 아이템 1. 탭바에 들어갈 이미지와 각탭의 이름을 설정해줍니다. 이미지 형식은 알파값으로만 구성되어있는 .png를 사용하시면 됩니다. 이미지의 사이즈는 탭의 갯수가 유동적일수 있으나 최대 5개까지만 보여지고 6개이상이되면 ...으로 묶여버립니다. 물론 6개이상의 탭을 구성한다고 하더라도 각탭의 모든 아이콘은 확인할수 있습니다. 하지만 디자인적으로 화면에 보여지는 최대숫자인 5개에 맞춰서 유연하게 사용할수 있도록 50 X 30 사이즈로 만들어 줍니다. (여기서 사용된 이미지를 첨부해뒀습니다) 어플리케이션 폴더로 찾아들어가셔서 폴더를 하나 추가한뒤에 폴더명을 바꾸시고(Images로 바꿨습니다), 이미지파일들을 넣어주세요. 그후에 이름을 변경하신 폴더를 (저는 "Images"폴더가 되겠지요) Xcode왼쪽에 있는 G.. 2012. 2. 9.
탭바(UITabBarController) 2장 - 최상위뷰 구현 탭바는 최상위뷰에 여러 탭이 붙어있는 멀티뷰 형식입니다. 따라서 처음에는 최상위뷰를 먼저 구현해줘야합니다. Xcode를 켠뒤 "Create a new Xcode project" - "Window-based Application"을 선택합니다. 제일 어렵다는 프로젝트명은 대충 만들어주세요. 바로 파일을 추가해줍니다. 탭을 터치할때마다 보여지게될 뷰입니다. "UIViewController subclass"를 선택해주세요. 밑에 With XIB for user interface 선택은 해주셔도 안해주셔도 상관업습니다. 클래스명은 1장에서 봤던 템플릿과 비슷하게 "FirstViewController"로 정했습니다. 중요한거 아니니 취향대로 정해주세요. 우리는 2개짜리를 먼저 만들어볼께요. 한번더 똑같이 추가해주.. 2012. 2. 9.
탭바(UITabBarController) 1장 - Template 살펴보기 탭바(UITabBarController)는 유틸리티 계열의 어플리케이션에서 사용빈도가 꽤 높은 편입니다. 이럴것을 예상한것인지 사용빈도를 보고 추가해준것인지 템플릿으로 지원을 하고 있습니다. UITabBarcontroller는 NSArray타입으로 viewControllers 프로퍼티를 가지며 탭바를 소유하고있습니다. 템플릿의 IB를 확인하시는 것으로 IB를 사용해서 탭바를 구성을 하는것에 대한 대부분의 정보가 담겨있기때문에 IB로 탭바를 구현하는 부분은 건너뜁니다. 우선 템플릿부터 살펴보죠. Xcode를 켠뒤 Create a new Xcode project를 선택합니다. 템플릿으로 들어갔더니 "Tab Bar Application"이 보입니다. 선택해주세요. 편하신대로 이름을 만들어주세요. 저는 "Tab.. 2012. 2. 9.
[Hpple Parser] HTML Parser 2장 - 파싱하기 파싱하려는 사이트는 기상청(http://www.kma.go.kr/index.jsp)입니다. 날씨가 아닌 국외 지진목록(http://www.kma.go.kr/weather/earthquake/internationallist.jsp)을 파싱해보겠습니다. ================================================================================ 뷰컨트롤러를 추가합니다. ParserHppleAppDelegate.h 로 갑니다. #import "FirstViewController.h" =============================================================================== 만들어준 FirstViewContr.. 2012. 2. 9.
[Hpple Parser] HTML Parser 1장 - Hpple 추가하기 안녕하세요. 오랜만에 글을 쓰는거 같습니다. 이번에 해볼것은 파싱인데요, Hpple를 이용해서 파싱해보려고 합니다. 파싱해서 자료를 가져온뒤, 테이블뷰와 맵뷰에 뿌려줄꺼에요. 아마 시간이 많이 걸리겠지요.......... 하여튼 시작합니다. ============================================================================ 기존에 해오던데로 IB없이 합니다. 새 프로젝트를 만들어 줍니다. 윈도우-베이스 형식으로 만들어 주세요. 프로젝트명은 알아서 정해주세요. 첨부해드린 압축파일을 푸시면 7개의 파일이 보입니다. 이걸 폴더채 프로젝트폴더 내에 Classes 폴더에 복사해주세요. /ParserHpple/Classes/Hpple가 되겠습니다. 그런뒤에 엑스.. 2012. 2. 9.
UIPickerView 여러 열 사용하기 아래와 같은 모양을 가지는 PickerView 를 만들어 보겠습니다. 버스의 출발 시간을 나타내는 PickerView 입니다. 왼쪽의 시를 선택하면 오른쪽의 분이 자동적으로 바뀝니다. 우선 ViewBased 로 시작하여 xxxxxxx~ViewController.xib 파일을 열고 PickerView 를 배치합니다. xxxxxxxAppDeleate.h 헤더파일에 UIPickerView 객체를 선언합니다. dataSource 와 delegate 를 File's onwer 에 연결시키고 (PickerView에서 오른쪽버튼 클릭 하면 나옴) 만들어둔 객체변수 picker 도 File's Owner 에 연결합니다. 소스코드.... PickerViewTestViewController.m #import "Picker.. 2012. 2. 7.
수동으로 UI 컨트롤에 이벤트 전달 UI 컨트롤에 등록된 이벤트 핸들러가 정상적으로 호출되는지 테스트를 하거나, 그와 동일한 효과를 로직에서 처리해야할 경우 수동으로 컨트롤에 이벤트를 발생시킬 수 있다. sendActionsForControlEvents: 메시지를 사용하여, 대상이 되는 컨트롤의 인스턴스에 이벤트 종류를 지정하여 전달한다 . UIButton *btn = (UIButton*)[self.view viewWithTag:1001]; [btn sendActionsForControlEvents:UIControlEventTouchUpInside]; Control 에 전달할 수 있는 이벤트 종류는 다음과 같다. enum { UIControlEventTouchDown = 1 2012. 2. 7.
[iPhone] 로깅 프레임웍 cocoalumberjack 아이폰에서 사용할 수 있는 Log4j 같은 로깅 프레임웍을 찾아 구글링을 하다, cocoalumberjack 이라는 프레임웍을 찾게 되었다. 사용법도 log4j 와 유사하면서, 설정하기 쉽고, NSLog 보다 빠른속도와 커스텀 로거를 작성할 수 있는 유연성도 제공한다. 실제로 사용해보고, 유용성에 대해서는 추후 포스팅 해야겠다. 아래 주소에서 프레임웍 소스를 다운받자. (svn 으로 체크아웃하자) http://code.google.com/p/cocoalumberjack/ Lumberjack( 이름이 머 이래 -_-;;) 의 사용법은 다음과 같다 1 소스를 아이폰 프로젝트에 복사한다 (logging이라는 폴더를 만들고, lumberjack 폴더를 통째로 복사했다) 2 프레임웍 사용을 위한 설정을 한다. 사.. 2012. 2. 7.
애플리케이션 응답성 향상을 위해 동시성 사용하기 1. 애플이케이션에서의 응답성 아이폰, 아이패드를 포함한 모든 애플리케이션의 사용자 인터페이스에 있어서 응답성은 중요한 요소중에 하나이다. 많은 시간을 소비하는 태스크를 사용자 인터페이스가 동작하는 쓰레드에서 수행하면, 해당 태스크가 종료하기 까지 사용자는 어떠한 인터렉션도 행할 수가 없기 때문이다. 트위터의 글목록을 가져와서 보여주는 앱을 생각해보자. 최신글 목록과 사용자 프로필 이미지를 가져오는 동안, 버벅이 되며 먹통이 되면 누가 이 앱을 사용하겠는가? 이 포스팅에서는 Cocoa Touch에서 지원하는 동시성 향상을 방법에 대해서 알아보겠다. MacOsX와 iOS에서 지원하는 사용자 인터렉션 응답성을 향상시키기 위한 다음과 같은 동시성 방법들이 있다. NSThread / NSObject가 지원하는 .. 2012. 2. 7.
애플 푸시 서비스 이 포스팅에서는 애플 푸시 서비스를 사용하는 방법에 대해서 알아보자. 작년 겨울 앱공모전을 준비하면서 "분실물 다나와" 라는 앱을 개발했다. 서울 분실물 센터에 수거되어 있는 분실물 목록을 조회할 수 있고, 등록된 분실물과 유사한 분신물 목록을 사용자 아이폰으로 알리는 앱이었다. 이때 유사 분실물 발견유무를 푸시 기능을 통해 구현하였다. 당시에 푸시와 관련된 자료가 별로 없어서(내가 못찾았겠지만...) 애플 개발자 가이드 문서를 참고하여 구현하였다. 그 때 정리한 내용을 올려본다. (사진 캡처를 안해서 이해가 잘 안될 수도....-_-;; ) 1. Push Service 란? 서버에서 아이폰 애플리케이션으로 데이터를 역으로 전송할 수 있는 서비스이다. Remote Notification을 등록하고 수신하.. 2012. 2. 7.
푸시 메시지 포맷 Provider와 APNS 간에 SSL(Secure Socket Layer)를 통해 통신을 하며, 서로 간에 올바른 통신을 위한 몇 가지 요구사항이 존재한다. 다음은 Local, Remote Notification Programming Guide 문서에서 일부 발췌한 내용이다. 자세한 내용은 실제 문서를 참고하자. 1. Provider가 APNS와 통신하기 위한 요구사항 〮 Provider는 Apple Push Notification Service와 바이너리 인터페이스를 사용해 통신함 〮 TCP Socket을 사용하며, 안전한 통신채널을 위해 TLS(또는 SSL)을 사용함 〮 APNS와의 잦은 연결과 종료는 DOS 공격으로 오인받을 수 있음 〮 에러가 발생하면 APNS는 해당연결을 종료함 〮 서버에 접속.. 2012. 2. 7.
NSNotification Cocoa 와 Cocoa Touch 프레임웍의 이벤트 통지 메커니즘인 NSNotification 에 대해서 간략하게 알아보자. 1. NSNotification 이란? 다수의 객체들 사이에서 이벤트가 발생했음을 알리는 방식으로, 한 객체와 다른객체 간에 의존관계를 중계하는 클래스에 집중화시켜서 서로 간에 결합도를 느슨하게 할 수 있다. NSNotificationCenter, NSNotification, Observer 로 구성된다. NSNotificationCenter는 객체들 사이에 이벤트 전달을 중계하는 역할을 하며, Observer는 이벤트가 발생하기를 기다리는 대상을 나타낸다. Observer 가 기다리는 이벤트에 대한 정보와 부가적인 데이터를 전달하기 위한 객체가 Notification 이다. O.. 2012. 2. 7.
아이폰 Document 폴더의 파일,폴더 리스트 보기 BOOL flag = NO; //파일 매니져 생성 NSFileManager* fileManager = [NSFileManager defaultManager]; // Document 디렉토리 불러옴 NSString* rootDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; // 디렉토리 열거자 생성 NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:rootDir]; NSString *path; // nextObject 이용 파일이름을 불러옴 while( (path = [enumerator nextObject]) != nil ){ // fileExistsAtPath.. 2012. 2. 7.
페이스북 담벼락과 연동되는 아이폰 앱 만들기 페이스북과 연동되는 아이폰 앱 만들기 출처 페이지 링크 https://developers.facebook.com/docs/guides/mobile/ 삽질하다 겨우 담벼락에 글올리기 성공해서 정리해본다. 가장먼저 자신의 앱을 facebook 에등록해야한다.. 다음 링크로 들어간다. https://developers.facebook.com/ 물론 facebook 아이디가 있어야 한다 로그인 한 뒤에 위 메뉴에서 앱으로 들어간다 https://developers.facebook.com/apps 이곳으로 들어와서 우측 상단에 보면 새 앱 만들기 링크가 있다 클릭한다. 클릭하면 다이얼로그가 하나 뜨는데 여기에 자신의 앱 이름을 입력하고 지역을 선택하고 I agree to the Facebook Terms. 에 체.. 2012. 2. 7.