2010-07-20 6 views
5

Mac app을 작성하려고하는데, 경우에 따라 오류 코드가 반환됩니다. 이것은 Intel 번들입니다. (이것은 Carbon C++ 프로젝트입니다. 그러나 이것은 아마도 부적절한 것입니다.)Mac app에서 리턴 코드

C++에서 수행하는 표준 방법은 값을 반환하는 main 함수를 사용하는 것입니다. 그래서 그 부분이 올바른 것이라고 생각합니다. . (나는 또한 명시 적으로 exit(42)라고 부름을 시도했다)

질문 : 나는이 값을 어떻게 얻습니까?

터미널에서 open myapp으로 앱을 시작하면 항상 다른 숫자를 반환하더라도 반환 값은 항상 0입니다. (echo $?을 사용하여 체크)

오픈 명령의 반환 값입니까? 내 앱의 반환 값이 어딘가에서 삼켜지고 있습니까?

execve (앱 사용 방법)을 사용하는 다른 프로그램에서 실행하면 항상 0 리턴 코드가 표시됩니다.

앱에서 반환 코드를 검색 할 수 있습니까?

사이드 노트 : 프로그램이 번들로 있어야합니다.

답변

2

나는 당신이 아마 이런 번들로 드릴 다운 즉, 직접 응용 프로그램 바이너리를 실행할 필요가 있다고 생각 :

$ /Applications/Address\ Book.app/Contents/MacOS/Address\ Book

+0

나는 그것을하고있다. 도움이되지 않습니다. – darklon

+1

'your.app'을 열고'your.app/Contents/MacOS/yourApp'를 실행하는 것과는 다른 점이 있습니다. 전자는 앱의 반환 코드를 제공하지 않지만 후자는 반환 코드를 제공합니다. 그것이 바로 바울이 쓴 것입니다. – Yuji

+0

나는 그것을 이해하고 좋은 생각이었다. 실제로 execve() 만 execve()에서 작동하는 것으로 보이지만 반환 코드가 도착하지 않는 것 같습니다. exit()를 사용하여 프로세스를 기다릴 때 0이 반환되고 exit()로 반환되지 않습니다. 나는 또한 터미널과 함께 그것을 시험해 보았다. 그리고 나는 0도 거기에서 얻는다. – darklon

1

당신은 아마 할 수 없어, 당신의 반환 메인 A NSApplicationMain() 객체로 . 프로그램의 끝은 사용자가 "종료"버튼을 클릭 할 때 결정됩니다.

그러나 원하는대로하려면 applicationWillTerminate 방법을 사용할 수 있습니다.

+0

NSApplicationMain 개체를 만들지 않고 문제가 이미 발생합니다. 거의 아무것도하지 않는 앱의 반환 값은 이미 사라진 것처럼 보입니다. exit (value)를 호출해도 명시 적으로 문제가 해결되지 않습니다. – darklon

+0

또한 applicationWillTerminate에서 반환 코드를 지정하는 방법이없는 것처럼 보입니다 (있는 경우 0 반환 값의 출처를 설명 할 수 있음). applicationWillTerminate 또는 코드의 다른 곳에서 exit()를 호출해도 아무런 차이가 없어야합니다. 아이디어를 주셔서 감사합니다. – darklon

+0

Btw. NSApplicationMain은 실제로 클래스가 아닌 함수입니다. 그리고 거기에 잡아 당김이 있습니다. 결코 돌아 오지 않습니다. 그러나 이것은 여기서 문제가되지 않습니다. – darklon

관련 문제