2017-12-18 22 views

答えて

4

https://github.com/lavoiesl/osx-cpu-temp/blob/master/smc.cを使用しています。何か他のものに

簡素化main():あなたはいくつかのことをしなければならない

double calculate() 
{ 
    SMCOpen(); 
    double temperature = SMCGetTemperature(SMC_KEY_CPU_TEMP); 
    SMCClose(); 
    temperature = convertToFahrenheit(temperature); 
    return temperature; 
} 

はにObjCラッパーを書く:

#import "SMCObjC.h" 
#import "smc.h" 
@implementation SMCObjC 

+(double)calculateTemp { 
    return calculate(); 
} 

@end 

はあなたスウィフトブリッジングヘッダにヘッダを追加します。

// 
// Use this file to import your target's public headers that you would like to expose to Swift. 
// 
#import "SMCObjC.h" 

アプリがサンドボックス化されている場合は、AppleSMCのセキュリティ免除を追加します。

<dict> 
    <key>com.apple.security.app-sandbox</key> 
    <true/> 
    <key>com.apple.security.files.user-selected.read-only</key> 
    <true/> 
    <key>com.apple.security.temporary-exception.sbpl</key> 
    <array> 
     <string>(allow iokit-open)</string> 
     <string>(allow iokit-set-properties (iokit-property &quot;AppleSMC&quot;))</string> 
     <string>(allow mach-lookup (global-name &quot;com.apple.AssetCacheLocatorService&quot;))</string> 
    </array> 
</dict> 
</plist> 

はスウィフトからそれを呼び出します。

https://www.dropbox.com/sh/lpe9bm08s2ynoob/AAA-N_br7aqRxJRks53FYK0fa?dl=0

+0

それは動作します:

import Cocoa class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() let temp = SMCObjC.calculateTemp() print("I got \(temp) in swift") } } 

ここに私のサンプルプロジェクトです!ありがとうございました –

関連する問題