2010-07-31 4 views
8

나는 내 아이폰 앱 중 하나에 일반 원칙으로 agvtool을 사용하고 있으며 최근에 버전 변수를 확인할 수있는 이유를 발견했습니다 (도움말 콘텐츠를 Documents 디렉토리에 다시 복사 할 수있게되었습니다. 오래된 경우). MyApp_vers.c에 정의 된 MyAppVersionNumber 변수는 빌드 중에 자동 생성됩니다. .o 파일로 생성되고 연결된 앱 자체의 이전 버전 (?)에 표시됩니다. 지금까지 그렇게 좋았을 것 같습니다. ,

그래서 지금은 내가 이것을 사용 (나중에 시작하는 단지 NSLog 성명에서, 그것을 사용하려고)하는 데 필요한 .m 파일에 extern double MyAppVersionNumber을 선언했습니다, 나는 아이폰 시뮬레이터 빌드하려고 링크 오류가 발생합니다.

"_MyAppVersionNumber", referenced from: 
     _MyAppVersionNumber$non_lazy_ptr in HelpViewController.o 
    (maybe you meant: _MyAppVersionNumber$non_lazy_ptr) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

그래서 링크하려면 어떻게해야합니까?

나는 $ non_lazy_ptr와 agvtool에 대해 봤는데 아무 것도 얻지 못했고, $ non_lazy_ptr에 대해서는 몇 가지를 주었지만 주로 라이브러리에 적용했다. 실제로는 그렇지 않다. 그리고 지금까지는 변수를 사용하는 것에 대해 자세히 이야기하는 agvtool에 대한 페이지를 아직 보지 않았습니다. 제가 읽은 변수는 extern 변수를 선언하는 것입니다. .

누구나이 점에 익숙하고 도움이 될만한 사람이 있습니까?

감사합니다.

+0

흠 ... 더 인터넷 검색을하고, 다른 일을 시도, 나는이 발견되었습니다 : extern 문과 참조를 모두'main.m'에 넣으면 잘 동작합니다. 내보기 컨트롤러 클래스에서 그것을 사용하여, 작동하지 않습니다 ... (@ 인터페이스'및'@ 구현'에 의해 정의 된) 클래스를 통해 액세스 할 수있는 extern 변수가있는 데 문제가 있습니까? ''interface '안에 넣으려고했는데,''extern'이전에''error : expected specifier-qualifier-list ''와''.h''와'.m. $ non_lazy_ptr 링크 오류). 수업을 통해 어떻게 액세스합니까? – lindes

+0

참고 : 내 원래 문제를 해결할 수있는 방법을 찾았습니다. 도움말 뷰어에서 최신 콘텐츠를 확인해야합니다. 문서에 복사하지 마십시오 (읽기 전용이므로 필수는 아닙니다). 다른 이유로이 변수를 원할 경우를 대비하여 계속 진행중인 작업을 알면 좋을 것입니다. – lindes

+0

죄송합니다. 질문을 이해할 수 없어서 대답을 삭제했습니다. –

답변

1

agvtool이 PLIST의 CFBundleVersion 값을 갱신하기 때문에, 내가 함께 실행 시간에 버전 번호를 액세스 제안 :

NSDictionary *mainDictionary = [[NSBundle mainBundle] infoDictionary]; 
double myVersionNumber = [(NSString *)[infoDictionary objectForKey:@"CFBundleVersion"] doubleValue];