在我的OS X应用程序中,我正在调用SystemConfiguration框架中的SCPreferencesCreateWithAuthorization:

AuthorizationRef auth;
AuthorizationCreate(NULL, NULL, kAuthorizationFlagDefaults, &auth);
SCPreferencesRef prefRef = SCPreferencesCreateWithAuthorization(kCFAllocatorDefault,CFSTR("Get Connected"), NULL, auth);


这在Lion上运行良好,但是当我在Snow Leopard中运行该应用程序时,调用该函数时会崩溃。奇怪的是,崩溃日志表明它认为该符号已在IOKit中找到

Dyld Error Message:
  Symbol not found: _SCPreferencesCreateWithAuthorization
  Referenced from: /Users/localadmin/Downloads/Get Connected.app/Contents/MacOS/Get Connected
  Expected in: /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit


我已经将SystemConfiguration.framework链接到Xcode中的目标,并在AppDelegate.h中导入了标头:

#import <SystemConfiguration/SystemConfiguration.h>


我究竟做错了什么?为什么它在Lion而不是Snow Leopard下起作用。文档说它在10.5及更高版本中可用。

最佳答案

您是否也在链接IOKit?尝试按链接顺序更早地移动SystemConfiguration。

看起来该符号也出现在Lion的IOKit框架中。我不确定SystemConfiguration中的符号是否只是IOKit中符号的别名。

无论如何,您的应用程序都依赖于IOKit中的应用程序,这是不可取的。

您也许可以使用nm -g -m ~/"Downloads/Get Connected.app/Contents/MacOS/Get Connected" | grep SCPref进行检查。

10-08 05:24