2015-07-26 5 views
4

Я хочу настроить игровое поле для загрузки состояния батареи моего macbook.Извлеките состояние батареи моего MacBook с помощью Swift

Я уже пробовал следующее:

import Cocoa 
import IOKit 
import Foundation 

var blob = IOPSCopyPowerSourcesInfo() 

В настоящее время я получаю сообщение об ошибке, как показано ниже

Использование неразрешенного идентификатора 'IOPSCopyPowerSourcesInfo'

ответ

10

Это не работает на игровой площадке, но она работает в реальном приложении.

Я не смог получить доступ к заголовочному файлу IOPowerSources.h с помощью Swift и import IOKit, хотя: мне пришлось сделать мост к Objective-C.

Вот мое решение:

  1. Добавить IOKit.framework в свой проект (нажмите + в Linked Frameworks and Libraries)

  2. Создайте новый пустой файл .m, независимо от его имени. Затем Xcode спросит, должен ли он сделать «мостовой заголовок». Скажи да.

  3. Игнорировать файл .m. В новом YOURAPPNAME-Bridging-Header.h файл, который Xcode только что создали, добавьте строку #import <IOKit/ps/IOPowerSources.h>(и не добавлять import IOKit в вашем Swift файл)

  4. Теперь вы можете получить доступ к большинству из IOPowerSources функций.

Пример:

func getBatteryStatus() -> String { 
    let timeRemaining: CFTimeInterval = IOPSGetTimeRemainingEstimate() 
    if timeRemaining == -2.0 { 
     return "Plugged" 
    } else if timeRemaining == -1.0 { 
     return "Recently unplugged" 
    } else { 
     let minutes = timeRemaining/60 
     return "Time remaining: \(minutes) minutes" 
    } 
} 

let batteryStatus = getBatteryStatus() 
print(batteryStatus) 

Примечание: Я не мог получить доступ к константы, как kIOPSTimeRemainingUnlimited и kIOPSTimeRemainingUnknown поэтому я использовал их исходных значений (-2.0 и -1.0), но было бы лучше найти эти константы, если они все еще существуют где-то.

Другой пример с IOPSCopyPowerSourcesInfo:

let blob = IOPSCopyPowerSourcesInfo() 
let list = IOPSCopyPowerSourcesList(blob.takeRetainedValue()) 
print(list.takeRetainedValue()) 

Результат:

(
{
"Батарея обеспечивает время, оставшееся" = 1;
BatteryHealth = Хорошо;
Ток = 0 ;
«Текущая мощность» = 98;
DesignCycleCount = 1000;
«Серийный номер оборудования» = 1X234567XX8XX;
"Is Charged" = 1;
«Is Charging» = 0;
«присутствует» = 1;
«Максимальная вместимость» = 100;
Название = "InternalBattery-0";
«Состояние источника питания» = «Мощность переменного тока»;
«Время пуста» = 0;
«Время полной зарядки» = 0;
«Тип транспорта» = Внутренний;
Тип = Внутренняя батарея;
}
)

+0

Спасибо за это! Я сделаю это и вернусь. –