1

私のOSXアプリでは、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の下で機能しますが、SnowLeopardでは機能しません。ドキュメントによると、10.5以降で利用可能です。

4

1 に答える 1

2

IOKitにもリンクしていますか?SystemConfiguration をリンク順序の前に移動してみてください。

そのシンボルは、Lion の IOKit フレームワークにも存在するようです。SystemConfiguration のシンボルが IOKit のシンボルの単なるエイリアスであるかどうかはわかりません。

とにかく、あなたのアプリは IOKit のアプリに依存していますが、これは望ましくありません。

で確認できる場合がありますnm -g -m ~/"Downloads/Get Connected.app/Contents/MacOS/Get Connected" | grep SCPref

于 2012-05-21T20:57:41.703 に答える