2010년 4월 30일 금요일

AIR2 NativeProcess 사용을 위한 패키징

AIR2에는 외부파일을 실행하거나 통신이 가능한데
SDK가 베타라서 그런지 해당 기능이 동작하지 않는다.

해결방법은 adt로 한번더 패키징
adt -package -target native myApp.dmg myApp.air
 
myApp.dmg 로 설치, myApp.air는 못쓰는거
끝. 

Mac 환경변수 설정(터미널)

터미널로 쉘 실행해야 하는데 해당 쉘까지 매번 이동하는 불필요한 노동을
bashrc 파일을 수정해서 편하게 작업 할 수 있다.

터미널 실행
cd /etc
vi bashrc

아래 내용입력

#AIR2 SDK
export SDKBIN=/Applications/Adobe\ Flash\ Builder\ 4\ Plug-in/sdks/4.0.0\ Beta2/bin
PATH=$SDKBIN:$PATH

export PATH

2010년 4월 26일 월요일

objective-c 에서 Json framework 사용시 등록 실패 원인(invalid binary)

아이폰 어플등록을 하는데 아래와 같은 오류가 발생했다!
The binary you uploaded was invalid. The signature was invalid, or it was not signed with an Apple submission certificate

아~ 인증서 문제구나 하면서 인증서 관련 부분을 처음부터 다시 훑었는데...
  
objective-c 용 json 프레임웍이 원인 이었다.임베드 되어있는 파일들을 외부링크로 뺐을뿐인데

http://code.google.com/p/json-framework/wiki/InstallationInstructions#Option_2%3a_Use_the_iPhone_Custom_SDK

위 문서 아래 부분에
Option 2 needs to include a note about Distribution builds. My app submission was delayed by over a week due to the "invalid binary" error when uploading to iTunes Connect. After a few emails back and forth with Apple's engineering team, including sending them my Xcode project, they were able to isolate the source. I needed to include the following in the Code Signing Resource Rules Path:
$(SDKROOT)/ResourceRules.plist
If this information were included here, I could have saved a week of frustration. Thanks

$(SDKROOT)/ResourceRules.plist 이거만 Code Signing Resource Rules Path에 넣어주면
해결이 되었다...
자세히 보고 써야 하는데
설마 저런 이슈가 있을줄야 애꿎은 인증서랑 Xcode 만 못살게 굴었네 
누군가 도움이 되시길 

[링크] iphone App 외부실행과, 통신 방법

http://iphonedevelopertips.com/cocoa/launching-other-apps-within-an-iphone-application.html
한글 번역은 여기
http://alones.kr/1324

2010년 4월 16일 금요일

[자료] c,c++ main함수 정리

main 함수의 인수


void(or int) main(int argc, char *argv[], char *env[]) { }

인수는 뒤에서부터 생략이 가능하다.

argc
운영체제가 이 프로그램을 실행했을때 전달되는 인수의 갯수이다.
함수를 호출하여 인수를 전달하는 것처럼 프로그램을 실행할 때 인수를 전달받을 수 있다.
(도스에서 파일 카피, 이동과 같은 명령 시행시 처럼)
첫번째 인수는 실행파일명으로 고정되어 있는데 이것도 인수에 포함하므로
인수의 갯수는 무조건 1보다 크며 넘겨받는 인수보다도 1 크다. 이 값은 인수가 제대로 전달되었는지 체크하는 경우에 사용된다.

argv
프로그램으로 전달된 실제 인수의 값이다. 이 값은 명령프롬프트창에서 문자를 치건 숫자를치건 무조건 문자열로 넘겨진다.
argv는 이중 포인터로서 문자열 배열을 가리키는 포인터 이다.
argv[0] 은 파일의 절대경로를 넘겨받고, 1부터 넘겨받는 인수가 저장된다.

env
운영체제의 환경변수를 넘겨받는다.
-------------------------------------------------------------------------------------------

윈도우에서는 사용되지않지만 도스모드에서는 파일 실행시 인수를 주는 경우가 발생합니다.
예를들면 파일을 복사하는 copy 의 경우

"copy 원본파일 복사될파일"
copy abc.txt def.txt

같은 식으로 실행파일 뒤에 인수가 들어가지요?
main함수의 인수들은 이것을 전달해주는 인수입니다.
명령프롬프트창에서 실행한 내용을 프로그램으로 전달해주어 프로그램의 동작을 편리하게 해주는 기능을 합니다.

void(or int) main(int argc, char *argv[], char *env[])

여기서 인수는 뒤에서부터 지울수 있습니다.

main(argv[], char env[]) 이런식으로 할수는 없다는 말이지요

예를들어 copy.cpp를 컴파일하여 파일을 복사하는 프로그램인 copy.exe를 만들었다고 합시다.
그경우 실행시 copy abc.txt def.txt 같은 인수를 주어 실행하는데요

이때 argc 는 3
argv[0] 에는 파일경로인 copy.exe
argv[1] 에는 첫번째인수인 abc.txt
argv[2] 에는 두번째인수인 def.txt 의 값이 들어가게됩니다.

이렇게 넘겨받은 인수를 main함수내에서 이리저리 사용할수 있는것이지요

char filename[30];
strcpy(fimename,argv[2]); 라던가

int n;
n = argc;
같은식으로 프로그램 내부에서 사용할 수 있습니다.

env는 운영체제의 환경변수인데, 윈도우에서는 다른방법으로도 받는 방법이 많으므로 잘 사용되지는 않습니다.

2010년 4월 12일 월요일

Mac objectC 이미지 저장 방법

command line Tool 로 이미지 캡쳐기 만들던 중
결론을 내려준 코드 ... 2박3일 삽질한 원인 두가지

1. __NSAutoreleaseNoPool(): Object 0x100306530 of class NSCFString autoreleased with no pool in place - just leaking
해결 : NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool release];
2. CGDataProviderRelease(dataProvider);

-
(void)saveJPEGImage:(CGImageRef)imageRef path:(NSString *)path {
CFMutableDictionaryRef mSaveMetaAndOpts = CFDictionaryCreateMutable(nil, 0,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImageDestinationLossyCompressionQuality,
[NSNumber numberWithFloat:1.0]); // set the compression quality here
NSURL *outURL = [[NSURL alloc] initFileURLWithPath:path];
CGImageDestinationRef dr = CGImageDestinationCreateWithURL ((CFURLRef)outURL, (CFStringRef)@"public.jpeg" , 1, NULL);
CGImageDestinationAddImage(dr, imageRef, mSaveMetaAndOpts);
CGImageDestinationFinalize(dr);
}


-(void)savePNGImage:(CGImageRef)imageRef path:(NSString *)path {
NSURL *outURL = [[NSURL alloc] initFileURLWithPath:path];
CGImageDestinationRef dr = CGImageDestinationCreateWithURL ((CFURLRef)outURL, (CFStringRef)@"public.png" , 1, NULL);
CGImageDestinationAddImage(dr, imageRef, NULL);
CGImageDestinationFinalize(dr);
}

-(void)saveTIFFImage:(CGImageRef)imageRef path:(NSString *)path {
int compression = NSTIFFCompressionLZW; // non-lossy LZW compression
CFMutableDictionaryRef mSaveMetaAndOpts = CFDictionaryCreateMutable(nil, 0,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFMutableDictionaryRef tiffProfsMut = CFDictionaryCreateMutable(nil, 0,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(tiffProfsMut, kCGImagePropertyTIFFCompression, CFNumberCreate(NULL, kCFNumberIntType, &compression));
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyTIFFDictionary, tiffProfsMut);

NSURL *outURL = [[NSURL alloc] initFileURLWithPath:path];
CGImageDestinationRef dr = CGImageDestinationCreateWithURL ((CFURLRef)outURL, (CFStringRef)@"public.tiff" , 1, NULL);
CGImageDestinationAddImage(dr, imageRef, mSaveMetaAndOpts);
CGImageDestinationFinalize(dr);
}

2010년 4월 9일 금요일

[링크] objectc c++ 개발 가이드 문서

맥 공식 가이드 문서
http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html

pdf 문서
http://www.google.co.kr/url?sa=t&source=web&ct=res&cd=1&ved=0CBsQFjAA&url=http%3A%2F%2Fchachatelier.fr%2Fprogrammation%2Ffichiers%2Fcpp-objc-en.pdf&ei=D-q_S_-0IMyLkAW9ksW6BQ&usg=AFQjCNEDQG47H9HxuIJDSzfTPeiSYBmClQ&sig2=VbaELcK_OIHFBe8SNrN3hg

차이점 정리
http://yesarang.tistory.com/290