Ошибка ссылки $ non_lazy_ptr с переменными версии agvtool? - PullRequest
8 голосов
/ 31 июля 2010

Я использовал agvtool для одного из своих приложений для iPhone по общему принципу и недавно нашел причину, по которой я хочу иметь возможность проверять переменную версии (чтобы я мог повторно скопировать справочный контент вКаталог документов, если он устарел).Переменная MyAppVersionNumber, определенная в MyApp_vers.c, автоматически генерируется во время сборки.Он генерируется в файле .o и отображается в (предыдущей версии?) Самого связанного приложения.Пока все хорошо, казалось бы.

Итак, теперь я объявил extern double MyAppVersionNumber в файле .m, где мне нужно это использовать (и позже попробую использовать его, просто в * 1007).* заявление, чтобы начать работу), и я пытаюсь построить для симулятора iPhone, и получаю ошибку ссылки:

  "_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, что я и сделал.

Кто-нибудь знаком с этим и / или иным образом может оказать любую помощь?

Спасибо!

1 Ответ

1 голос
/ 15 марта 2011

Поскольку agvtool обновляет значение CFBundleVersion вашего plist, я предлагаю обращаться к номеру версии во время выполнения с помощью:

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