[AIP] iOS에서 Singleton Pattern사용하기

다음은 Objective-C에서 싱글톤 패턴을 사용하는 방법입니다.
init하지 않고 sharedInstance로 객체를 반환받아서 사용하면 됩니다.

 

CLASSNAME.m 내용

CLASSNAME.h 내용

screen-capture-2

[UNIX] Package Manager

Homebrew는 OSX에 포함되지않은 UNIX툴입니다.

이를 통해서 LUA등을 설치가능합니다.

http://mxcl.github.com/homebrew/

 

https://github.com/mxcl/homebrew/wiki/installation

위에 주소에 접속하면, Installation 설명이 나옵니다.

 

Shell Prompt에

/usr/bin/ruby -e “$(curl -fsSL https://raw.github.com/gist/323731)”

입력해주면 설치가 됩니다.

 

 

Requirements

1 Not all brews have CPU or OS requirements, but you can assume you will have trouble if you don’t conform. Also, you can find PowerPC and Tiger branches from other users in the fork tree. See Interesting Branches.

2 Homebrew itself does not depend on Xcode and not all formulae require Xcode. Homebrew will still attempt to install formulae if Xcode is not installed; this is so people can create custom Homebrew installations, that e.g. only install binaries. The X11 components are automatically installed if you installed Xcode via the App Store. If you are not on Lion you will have to register with Apple Connect and then download Xcode. If you do install via the App Store, you will need to run the “Install Xcode” app that is placed in /Applications.

3 Homebrew itself does not depend on Java. However software that tries to build Java bindings (Subversion, Berkeley-DB, Cmake, etc.) require Apple’s “Java Developer Update”. The latest versions are “Update 10” for 10.5 and “Update 5” for 10.6.

iTunes Connect Holiday Shutdown Details

iTunes Connect Holiday Shutdown Details
Dec 20, 2011

 

애플심사가 미국시각으로 12월22일부터 29일까지 겨울방학이 시작됩니다!

이 기간동안에는 모든 앱의 승인과 업데이트가 불가능할거라는 .. 나름 희소식이 있습니다 ㅎㅎ

iOS개발자 여러분들은 이 기간동안 좀  쉬셔요~

iTunes Connect will be temporarily shut down December 22-29 for the winter holidays. During this time, access to iTunes Connect and the delivery of apps and updates will be unavailable. You should not schedule pricing changes that would take effect during the shutdown, as these changes will not be reflected in the App Store and the app will become unavailable for purchase. In addition, releases scheduled between these dates will not go live until after the shutdown.

 

[IAP] AVFoundation을 사용한 플레이어에서 Volume조정하기

MPMoviePlayer를 사용하는 경우엔 MPVolumeView를 사용하면 된다고 쳐도,
AVPlayer를 사용하는 경우는 이게 안될수 있습니다. AVPlayer에 volume속성이 있으나 사용하기엔 좋지않고..
그래서 다음과 같은 방법으로 일단 해결은 했습니다.

NSTimer객체를 생성한후, updateVolume함수를 정의해줍니다.
MPVolumeView는 AVFoundation의 AVPlayer에서는 작동하지않을수 있습니다. 그렇기 때문에 AVAsset을 사용해서, AudioMix를 제어해서
player의 playerItem의 AudioMix에 대입해주는 방식으로 해결했습니다.

iOS개발시 탈옥(JailBreak)여부 확인하는 방법

여러 방법들이 나와있지만, iOS 4.2이상부터는 public API가 사라지는 바람에
꽁수를 사용해서 체크하는 수밖에 없습니다.

일단 StackOverFlow에서 찾아낸 1번째 방법!

결론… 안됩니다..
탈옥을 해도.. Normal이 찍히더군요..

그래서 2번째 방법!!

요건 되네요~
탈옥을 하면서 원래는 접슥할수 없는 /Applications 폴더에 접근이 가능해지기 때문인것 같습니다.
Cydia가 설치되어있지 않으면.. 확인이 안되겠죠?? 하지만 탈옥하면 시디아앱은 모.. 필수니까요

일단 이렇게 탈옥여부를 확인해서 이를 토대로 로직을 태우려고 합니다.
뭔가 정상적이지 않은 방법같아서 찝찝하네요..;;
다른 방법 찾으면 또 포스팅하겠습니다.

[AIP-dev] QueryString으로 SNS 공유하기

안녕하세요 마린즈입니다.

오랜만에 포스팅하네요. ^^

이번에는 아주 간단하게 URL호출만으로 SNS(트위터,미투데이,요즘),카카오톡에 공유하는 방법에 대해 적어볼까합니다.
Webview를 이용해서 NSURL에 값을 넘겨서 공유하는 방법입니다. 실제로 Auth부분부터 전부다 구현하기에는 시간적으로나, 기술적으로나 문제가 될경우가 많이 있죠.

1. Twitter

작은따옴표를 쓸수 없는 문제로 ” 문자를 URLEncoding해서 %22 로 Appending해줍니다.
트위터의 경우는 “http://twitter.com/intent/tweet?” 뒤에 공유하고픈 String을 적어주면 간단하게 됩니다.
링크걸 URL도 자동으로 ShotenLink로 대체해줍니다.

2. Me2day

미투데이의 경우도 트위터와 유사(http://me2day.net/plugins/mobile_post/new? 뒤에 스트링전달)합니다만, 미투데이 고유의 링크거는 방법이 있습니다.
텍스트:”링크주소” 와 같이 입력해주면 해당 텍스트에 하이퍼링크가 걸립니다. 그래서 같이 넘겨줘야할 String형태도 저 방식으로 변경을 해야되며,
트위터처럼 링크주소를 별도로 줄수는 있겠지만, 미투데이의 문화가 그렇지 않기때문에 지양해야할 방법이긴하죠.
문제는 텍스트에 링크를 주고나면 그 뒤로는 추가로 텍스트를 입력할수 없다는 것입니다.

3. Yozm

요즘도 “http://m.yozm.daum.net/user/message/post?” 뒤에 String값을 전달하는 방식입니다.
prefix=”본문텍스트”&link=”URL주소” 이렇게 값을 넘기면 되죠. 간단합니다.

4. KakaoTalk

카카오톡의 경우, http://www.kakao.com/link/api 이곳에서 카카오에서 제공하는 SDK를 다운로드 받으실수 있습니다.
사용방법은 위에 적은것처럼 아주 간단합니다.

UIImageWriteToSavedPhotosAlbum – Error : ‘Data Unavailable’

iPhone Simulator 의 오동작이 발견되어, 기억용으로 포스팅합니다.

 

다음은 이미지객체를 아이폰의 사진첩으로 저장하는 Method입니다.

UIImageWriteToSavedPhotosAlbum([imageThumbView image], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

 

상단 @selector에서 에러를 처리하도록 정의되어있습니다만,

-(void)image:(UIImage*)image didFinishSavingWithError:(NSError*)localError contextInfo:(void*)contextInfo{

if(!localError){

NSLog(@"Image Written to Photo Album");

baseAlert = [[[UIAlertView alloc ] initWithTitle:nil message:@"이미지 저장중입니다" delegate:self cancelButtonTitle:nil otherButtonTitles:nil] autorelease];

[baseAlert show]; [self performSelector:@selector(performDismiss) withObject:nil afterDelay:0.5f];

}else{

NSLog(@"Error Writing to Albunm : %@", [localError localizedDescription]);

baseAlert = [[[UIAlertView alloc ] initWithTitle:nil message:[NSString stringWithFormat:@"%@",[localError localizedDescription]] delegate:self cancelButtonTitle:nil otherButtonTitles:nil] autorelease];

[baseAlert show]; [self performSelector:@selector(performDismiss) withObject:nil afterDelay:0.5f];

}

}

 

[localError localizedDescription] <– 이녀석이 가끔 “Data Unavailable” 이라고 에러를 뿜는 일이 있습니다.

해결방법은 간단합니다.

 

이 문제는 개발용 아이폰시뮬레이터에 사진첩에 이미지가 1장도 없을경우에 발생합니다.

사파리에서 웹사이트 접속하신후, 아무 이미지나 하나 저장하시면 해결됩니다.

 

이거때매.. 하루종일 컴파일만 하면서 갸우뚱하던걸 생각하면.. ㅠㅠ

[AIP-dev] 스크랩:UIImageView에 원격이미지 비동기 로드 및 캐쉬 기능 넣기

출처 : http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=95095

http://blog.naver.com/jiyh78?Redirect=Log&logNo=40117592091

http://cafe.naver.com/mcbugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=71846&

아이폰 개발시작한지 3~4개월 되어가면서 조금 감각을 익히기 시작했습니다. 

어플도 그동안 3개 만들어 올려보고요.  
물론 사운드, 그래픽을 고급스럽게 다뤄보지는 못했지만 기본 UI기반으로 개발할때도 워낙 이슈가 많다보니 학습과 개발을 병행하는게 정말 쉽지 않더군요…. 
각설하고요 ㅎㅎ
여기에 소개할 것은 UIImageView에 원격 이미지를 비동기로 로드할 수 있도록 하는 기능과 이미지 캐쉬 기능을 추가한 소스를 공개하려고 합니다.(소스 분석은 주석을 참고 ^^)
아이폰 어플 개발하면 UIImageView를 매우 많이 사용할 겁니다.  번들이미지의 경우야 어짜피 문제 없지만 원격이미지를 로드할때는  몇가지 이슈가 발생합니다.
1. 원격이미지를 매번 로드하는 것은 네트워크 부하를 일으키며 특히나 3G사용자들에게 치명적이 될 수 있다.
2. 테이블에 원격이미지를 붙이는 경우에 동기적으로 이미지 로드하는 경우 멈춤 현상을 일으킬 수 있다. 
3. 비동기적으로 이미지를 로드하더라도 한번에 로드할 수 있는 이미지를 제어하지 않으면 어플의 전체적인 퍼포먼스가 죽는다.
4. TableView에서 TableViewCell는 캐쉬처리되어 재사용된다. 그러므로 거기에 붙은 UIImageView도 재사용하게 되는데 스크롤을 빨리 넘기는 경우 기존에 로드 요청한 이미지가 하나의 UIImageView에 계속 적재되는 현상이 발생할 수 있다.
위 이슈에서 1, 2는 금방 이해갈 갈겁니다. 3번의 경우 1,2번의 처리가 잘되었다고 해도, 한 화면에 5개 이상의 이미지를 비동기적으로 로드한다는 것은 스레드를 5개 이상 생성해서 처리한다는 의미와 같습니다. 어플 하나에 스레드를 너무 돌리면 별로 좋지 못하기 때문에 동시에 로드할 수 있는 이미지를 제어해주어야 합니다. 1~2개 정도로요. 
4번 이슈의 경우 예전에 문씨님이 올려주신 [문씨의 강좌]멀티스레딩2<NSOperation>에 올린 글에 소개된 소스의 경우에 발생합니다. 저는 여기에 이미지 캐쉬기능만 넣어서 실제로 썼습니다. 하지만 TableView에서 문제가 발생했습니다. 분명 NSOperation을 이용한 이미지 로드는 2,3 문제를 해결해줍니다. 하지만 TableViewCell을 재사용되기 때문에 빠른 스크롤을 하는 경우 거기에 붙은 UIImageView 하나에  지속적으로 다른 이미지가 붙도록 요청이 되어 이미지가 광고롤링되는 현상마냥 보이는 경우가 발생합니다. 
1,2,3,4 번의 이슈를 모두 해결하고자 간단하게 클래스를 제작했습니다.
사용하는 방법은 너무도 간단합니다. 그저 UIImageView를 붙히고 (IB에서든 코드상이든) #import “UIImageView+AsyncAndCache.h”를  넣습니다. 그 다음 아래 UIImageView 카테고리 4개 함수중 하나를 쓰시면 됩니다.  UIImageView *imageView = [[UIImageView alloc]init]; 하신뒤 [imageView setImageURLString:@”이미지 원격 경로”]; 형태로 쓰시면 됩니다. 
UIImageView를 카테고리로 만들었으므로 기존 UIImageView 기능은 그대로 사용할 수 있겠고요.
UIImageView 카테고리 외에 내부적으로 2개의 클래스가 정의되어 있습니다. 이는 개발자가 직접 제어하지 않고 위 4개 이슈를 해결하기 위해 내부적으로 사용되는 클래스입니다. 소스 분석을 원하신다면 주석을 달아두었으니 참고하시면 되겠습니다.
아래는 header만 올려놓습니다. 구현부는 첨부파일을 참고하세요.

//

//  UIImageView+AsyncAndCache.h

//

//  Created by Yongho Ji on 10. 12. 3..

//  Copyright 2010 Wecon Communications. All rights reserved.

//

#import <UIKit/UIKit.h>

@class AsyncAndCacheImageOperator;

@class AsyncAndCacheImageOperatorManager;

//////////////////////////////////////////////////////////////

//

// UIImageView에 대한 카테고리 

// 이 카테고리는 테이블뷰에 적용된 Cell안에 UIImageView에서 활용하면 좋다.

// UIImageView의 주요 기능은 다음과 같다. 

//

// 1. 이미지 비동기 로드 

//   이미지를 비동기로 로드해서 화면에 이미지가 뜨는데 버벅거림을 없앤다.

// 2. 이미지 캐쉬기능 

//   이미 로드한 이미지는 cache 디렉토리에 캐쉬해서 나중에 반복 요청시 

//   로컬에 저장된 캐쉬 이미지를 로드해서 네트워크 부하를 없애준다.

// 3. 반복적인 이미지 요청에 대한 로드부하 최소화 

//    같은 UIImageView에 중복으로 로드 요청한다면 맨 마지막에 요청한 이미지가 적용되도록 한다.

//    그뿐 아니라 수십번 반복해서 요청하더라도 무조건 이미지 로드 요청하지 않고 되도록이면 

//   마지막 이미지를 로드요청하여 네트워크 부하를 줄여준다. 

// 

// 개선해야할 사항 

//

// 1. 캐쉬기능 강제삭제기능 

// 2. 지정된 시간이 지난 캐쉬 이미지 자동 삭제기능 

// 3. 캐쉬사용여부 결정기능  

// 

//////////////////////////////////////////////////////////////

@interface UIImageView (AsyncAndCache)

//String형태의 이미지 URL로 초기화

-(id)initWithURLString:(NSString*)url;

//NSURL 형태의 이미지 URL로 초기화 

-(id)initWithURL:(NSURL*)url;

//String형태의 이미지 URL로 셋팅 

-(void)setImageURLString:(NSString*)url;

//NSURL 형태의 이미지 URL로 셋팅 

-(void)setImageURL:(NSURL*)url;

//동시에 로드할 이미지 최대수 수 

+(void)setMaxAsyncCount:(NSUInteger)count;

@end

//////////////////////////////////////////////////////////////

//

// 한개의 ImageView에 대한 오퍼레이터이다.

// 비동기적으로 로드하는 것을 지원하며 더불어 캐쉬기능까지 지닌다.

// 개발자가 이 클래스를 직접 사용하지 않는다.

// 이 클래스는 AsyncAndCacheImageOperatorManager 클래스에서 동작/관리한다.

//

//////////////////////////////////////////////////////////////

@interface AsyncAndCacheImageOperator : NSObject

{

NSURL *_url; //로드할 이미지의 URL 정보 

UIImageView *_imageView; //이미지를 적용할 View

BOOL _canceled; //이미지 적용을 막는다. 즉 UIImageView 재사용시 나중에 로드되더라도 이게 YES이면 적용하지 못하도록 해서 사용자들로 하여금 잘못된 이미지가 로드되는 것을 방지 한다.

id _loadCompleteTarget; //이미지 로드가 완료되었을때 호출할 target

SEL _loadCompleteSelector; //이미지 로드를 완료했을때 호출할 selector

}

@property (readonly) UIImageView *imageView;

//초기화 함수 

– (id)initWithURL:(NSURL*)url imageView:(UIImageView*)imageView;

//스레드 적용 함수 

– (void)main;

//이미지 적용 취소

//main 메서드가 실행중일때 스레드자체는 중단시킬 수 없지만 imageView에 로드한 image를 적용하는 것은 방지시킨다.

– (void)cancel;

//이미지 로드 완료후 호출할 target/selector 적용 

– (void)setLoadCompleteWithTarget:(id)target selector:(SEL)selctor;

@end

//////////////////////////////////////////////////////////////

//

// ImageView정보를 담은 여러개의 오퍼레이터(AsyncAndCacheImageOperator클래스 객체)를 관리한다.

// 개발자가 이 클래스를 직접 사용하지 않는다.

// setMaxAsyncCount를 이용해 한번에 로드할 수 있는 이미지 갯수를 설정할 수 있다.

// 중요한 것은 동일한 UIImageView에 대해서 다른 이미지 로드 요청이 있는 경우 

// 맨 마지막에 요청한 이미지가 붙도록 하며, 같은 UIImageView가 이미지 로드 대기중인 경우에는 

// 이전 UIImageView에 대한 Operator를 삭제함으로써 부적절한 로드로 인한 네트워크 부하를 최소화 해준다.

//

//////////////////////////////////////////////////////////////

@interface AsyncAndCacheImageOperatorManager : NSObject

{

@private

NSUInteger _maxAsyncCount; //동시에 비동기적으로 로드할 이미지 갯수 

NSUInteger _currentAscynCount; //현재 비동기적으로 로드하고 있는 이미지 갯수 

NSMutableArray *_standByImageOperators; //대기중인 Image Operator들

NSMutableArray *_loadImageOperators; //로드중인 Image Operator들 

}

//한번에 로드할 수 있는 이미지 갯수(스레드 최대 갯수)

-(void)setMaxAsyncCount:(NSUInteger)count;

//오퍼레이터 추가 

-(void)addImageOperator:(AsyncAndCacheImageOperator*)imageOperator;

@end

제 소스는 많은 테스트는 거치지 못했습니다. 그러므로 여기 개발자 분들께서 필요하시다면 제 소스를 분석하고 수정하면서 개선해주셨으면 합니다.  
—————————-
수정사항 1
역시 소스가 공개되니 많은 분들이 테스트도 해주시고 좋네요. 만약 이미지 경로가 image.php?ggg=465.jpg로 되어 있다면 ?ggg=465.jpg 부분을 제대로 가져오지 못하는 버그가 있더군요. [_url path]로 되어 있는 부분을 [_url absoluteString]으로 하면 괜찮다고 합니다. 수정해서 쓰세요. 
수정사항 2
초기에 이미지가 붙어 있는데 주어진 이미지 경로에 이미지를 못불러오는 경우 image = nil이 되기 때문에 초기 이미지를 지우는 부분으로 이상하시다는 분도 계셨습니다. 이 부분은 아래처럼 처리하세요.

if (_canceled==NO) 
{
// 이 부분 추가
if (image)
_imageView.image = image;
}

if (_loadCompleteTarget!=nil) 
{
[_loadCompleteTarget performSelectorOnMainThread:_loadCompleteSelector withObject:self waitUntilDone:YES];
}

NSStringEncoding 인코딩 상수값에 대한 테이블

출처 : http://limechat.net/rubycocoa/wiki/?NSStringEncoding

NSStringEncoding 인코딩 상수값에 대한 테이블

1 NSASCIIStringEncoding Western (ASCII) US-ASCII
2 NSNEXTSTEPStringEncoding Western (NextStep) X-NEXTSTEP
3 NSJapaneseEUCStringEncoding Japanese (EUC) EUC-JP
4 NSUTF8StringEncoding Unicode (UTF-8) UTF-8
5 NSISOLatin1StringEncoding Western (ISO Latin 1) ISO-8859-1
6 NSSymbolStringEncoding Symbol (Mac OS) X-MAC-SYMBOL
7 NSNonLossyASCIIStringEncoding Non-lossy ASCII
8 NSShiftJISStringEncoding Japanese (Windows, DOS) CP932
9 NSISOLatin2StringEncoding Central European (ISO Latin 2) ISO-8859-2
10 NSUnicodeStringEncoding Unicode (UTF-16) UTF-16
11 NSWindowsCP1251StringEncoding Cyrillic (Windows) WINDOWS-1251
12 NSWindowsCP1252StringEncoding Western (Windows Latin 1) WINDOWS-1252
13 NSWindowsCP1253StringEncoding Greek (Windows) WINDOWS-1253
14 NSWindowsCP1254StringEncoding Turkish (Windows Latin 5) WINDOWS-1254
15 NSWindowsCP1250StringEncoding Central European (Windows Latin 2) WINDOWS-1250
21 NSISO2022JPStringEncoding Japanese (ISO 2022-JP) ISO-2022-JP
30 NSMacOSRomanStringEncoding Western (Mac OS Roman) MACINTOSH
-1677721344 Unicode (UTF-32LE) UTF-32LE
-1744830208 Unicode (UTF-32BE) UTF-32BE
-1811939072 Unicode (UTF-16LE) UTF-16LE
-1879047936 Unicode (UTF-16BE) UTF-16BE
-1946156800 Unicode (UTF-32) UTF-32
-2147480574 Western (EBCDIC Latin 1) IBM037
-2147481079 Traditional Chinese (Big 5-E)
-2147481080 Ukrainian (KOI8-U) KOI8-U
-2147481082 Traditional Chinese (Big 5 HKSCS) Big5-HKSCS
-2147481083 Simplified Chinese (HZ GB 2312) HZ-GB-2312
-2147481084 Western (Mac Mail) X-MAC-ROMAN-LATIN1
-2147481085 Traditional Chinese (Big 5) BIG5
-2147481086 Cyrillic (KOI8-R) KOI8-R
-2147481087 Japanese (Shift JIS) SHIFT_JIS
-2147481280 Korean (EUC) EUC-KR
-2147481295 Traditional Chinese (EUC) EUC-TW
-2147481296 Simplified Chinese (EUC) EUC-CN
-2147481536 Korean (ISO 2022-KR) ISO-2022-KR
-2147482062 Chinese (GB 18030) GB18030
-2147482063 Chinese (GBK) GBK
-2147482072 Japanese (Shift JIS X0213) Shift_JIS
-2147482360 Vietnamese (Windows) WINDOWS-1258
-2147482361 Baltic Rim (Windows) WINDOWS-1257
-2147482362 Arabic (Windows) WINDOWS-1256
-2147482363 Hebrew (Windows) WINDOWS-1255
-2147482589 Traditional Chinese (Windows DOS), CP950
-2147482590 Korean (Windows DOS), CP949
-2147482591 Simplified Chinese (Windows DOS), CP936
-2147482595 Thai (Windows DOS), CP874
-2147482596 Greek (DOS Greek 2) IBM869
-2147482597 Cyrillic (DOS) CP866
-2147482598 Nordic (DOS)
-2147482599 Arabic (DOS) cp864
-2147482600 Canadian French (DOS)
-2147482601 Hebrew (DOS) DOS-862
-2147482602 Icelandic (DOS) CP861
-2147482603 Portuguese (DOS)
-2147482604 Turkish (DOS) CP857
-2147482605 Cyrillic (DOS)
-2147482606 Central European (DOS Latin 2) CP852
-2147482607 Greek (DOS Greek 1)
-2147482608 Western (DOS Latin 1) CP850
-2147482618 Baltic Rim (DOS) CP775
-2147482619 Greek (DOS) CP737
-2147482624 Latin-US (DOS) CP437
-2147483120 Romanian (ISO Latin 10) ISO-8859-16
-2147483121 Western (ISO Latin 9) ISO-8859-15
-2147483122 Celtic (ISO Latin 8) ISO-8859-14
-2147483123 Baltic Rim (ISO Latin 7) ISO-8859-13
-2147483125 Thai (ISO 8859-11) ISO-8859-11
-2147483126 Nordic (ISO Latin 6) ISO-8859-10
-2147483127 Turkish (ISO Latin 5) ISO-8859-9
-2147483128 Hebrew (ISO 8859-8) ISO-8859-8
-2147483129 Greek (ISO 8859-7) ISO-8859-7
-2147483130 Arabic (ISO 8859-6) ISO-8859-6
-2147483131 Cyrillic (ISO 8859-5) ISO-8859-5
-2147483132 Central European (ISO Latin 4) ISO-8859-4
-2147483133 Western (ISO Latin 3) ISO-8859-3
-2147483412 Inuit (Mac OS)
-2147483496 Cyrillic (Mac OS Ukrainian) X-MAC-UKRAINIAN
-2147483508 Farsi (Mac OS) X-MAC-FARSI
-2147483607 Keyboard Symbols (Mac OS)
-2147483608 Gaelic (Mac OS)
-2147483609 Celtic (Mac OS)
-2147483610 Romanian (Mac OS) X-MAC-ROMANIAN
-2147483611 Icelandic (Mac OS) X-MAC-ICELANDIC
-2147483612 Croatian (Mac OS) X-MAC-CROATIAN
-2147483613 Turkish (Mac OS) X-MAC-TURKISH
-2147483614 Dingbats (Mac OS) X-MAC-DINGBATS
-2147483619 Central European (Mac OS) X-MAC-CENTRALEURROMAN
-2147483622 Tibetan (Mac OS) X-MAC-TIBETAN
-2147483623 Simplified Chinese (Mac OS) X-MAC-SIMP-CHINESE
-2147483627 Thai (Mac OS) X-MAC-THAI
-2147483637 Gujarati (Mac OS) X-MAC-GUJARATI
-2147483638 Gurmukhi (Mac OS) X-MAC-GURMUKHI
-2147483639 Devanagari (Mac OS) X-MAC-DEVANAGARI
-2147483641 Cyrillic (Mac OS) X-MAC-CYRILLIC
-2147483642 Greek (Mac OS) X-MAC-GREEK
-2147483643 Hebrew (Mac OS) X-MAC-HEBREW
-2147483644 Arabic (Mac OS) X-MAC-ARABIC
-2147483645 Korean (Mac OS) X-MAC-KOREAN
-2147483646 Traditional Chinese (Mac OS) X-MAC-TRAD-CHINESE
-2147483647 Japanese (Mac OS) X-MAC-JAPANESE