2011-02-25 2 views
10

GTKmm 응용 프로그램을 작성했으며 일부 OS X 향상 기능을 만들려고합니다. 응용 프로그램 지원/myApp 폴더에 구성 파일을 저장하고 싶습니다. 그러나이 폴더를 찾는 적절한 방법을 알 수 없습니다.C++에서 "~/Library/Application Support"를 찾으십니까?

필자는 myApp.app 경로를 가져 오기 위해 사용하고있는 핵심 기반 라이브러리를 살펴 보았지만 아무 것도 찾을 수 없었습니다.

답변

10

적절한 방법은/C++ C에서 할 수 있습니다 API가 더 이상 Apple에서 권장하지 않습니다. 그럼에도 불구하고 코드베이스에서 Objective-C를 완전히 피하려는 경우 작업이 완료됩니다.

+1

#include MAX_PATH 대신 PATH_MAX를 사용해야했습니다. – jhasse

+0

하지만이 API는 더 이상 사용되지 않는 것으로 간주됩니다. Mac App Store에 앱을 올릴 수 없습니다. 대신 Objective-C++ 랩퍼를 사용하십시오. –

+0

@AlexanderShishenko : 더 이상 사용되지 않는 API와 ** 비공개 ** API를 혼동하고 있습니까? AFAIK, Apple은 사용 중지 된 API (자체적으로)를 사용하기 때문에 앱을 거부하지 않지만 문서화되지 않은 API를 사용하면 거부 할 수 있습니다. http://stackoverflow.com/q/7909986/277952 – NSGod

2

여기에 사용하는 함수는 (또는 같은 페이지에 나열된 다른 함수)이며 NSApplicationSupportDirectory을 인수로 사용하는 것으로 보입니다. 이 사용

struct passwd *p = getpwuid(getuid()); /* defined in pwd.h, and requires sys/types.h */ 
char *home = p->pw_dir; 

, 당신은 다음의 장소에서이를 사용하여 경로를 구성 할 수 있습니다

OS-X에 포함 된 BSD 유닉스에서
+2

예,하지만 C++에서 사용하는 방법을 알아낼 수 없습니다. Cocoa.h 파일은 Obj-C로 작성되어 있으므로 C++ 응용 프로그램에 포함시킬 수 없습니다. –

+1

@baubie : API를 래핑하는 Objective C 파일을 작성할 수 있습니까? 함수에 해당하는 Carbon 인'FindFolder'가 있지만 레거시로 표시되어 있습니다 (http://developer.apple.com/legacy/mac/library/documentation/Carbon/Reference/Folder_Manager/folder_manager.pdf).) –

2

, 당신이 함께 프로그램을 실행하는 사용자의 홈 디렉토리를 얻을 수 있습니다

#include <CoreServices/CoreServices.h> 

FSRef ref; 
OSType folderType = kApplicationSupportFolderType; 
char path[PATH_MAX]; 

FSFindFolder(kUserDomain, folderType, kCreateFolder, &ref); 

FSRefMakePath(&ref, (UInt8*)&path, PATH_MAX); 

// You now have ~/Library/Application Support stored in 'path' 

은 물론, 그는 아주 오 ~

char *my_app_name = "WHATEVER"; 
char app_support[MAXPATHLEN]; /* defined in sys/param.h */ 
snprintf(app_support,MAXPATHLEN,"%s/Library/Application Support/%s", home, my_app_name); 
+5

애플은'~/Library/Application Support /'경로를 하드 코딩하지 말 것을 권고합니다. 한 가지는 최신 OS에서 응용 프로그램 샌드 박싱과 작동하지 않습니다. – Aeyoun

+0

@Aeyoun -이 경로를 얻으려면 _is_에 대한 링크가 있습니까? –

관련 문제