8

我一直在使用agvtool我的一个 iPhone 应用程序的一般原则,并且最近找到了我希望能够检查版本变量的原因(以便我可以将帮助内容重新复制到 Documents 目录中,如果它出来了日期)。MyAppVersionNumber在 MyApp_vers.c 中定义的变量是在构建期间自动生成的。它在 .o 文件中生成,并显示在链接应用程序本身的(以前的版本?)中。到目前为止一切都很好,看起来。

所以现在我已经在需要使用它extern double MyAppVersionNumber.m文件中声明了一个(稍后尝试使用它,只是在一个NSLog开始的声明中),我尝试为 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 的页面,它实际上详细讨论了关于使用变量的任何细节——我读过的那些只是随便说要声明一个外部变量,我已经完成了.

任何熟悉这一点和/或能够提供任何帮助的人?

谢谢!

4

1 回答 1

1

由于 agvtool 更新您的 plist 的 CFBundleVersion 值,我建议在运行时访问版本号:

NSDictionary *mainDictionary = [[NSBundle mainBundle] infoDictionary];
double myVersionNumber = [(NSString *)[infoDictionary objectForKey:@"CFBundleVersion"] doubleValue];
于 2011-03-15T06:16:27.120 回答