Battery indicator has been added to OSnine.

When running OSnine on my iPad, it's almost always displayed in full screen. To maintain the atmosphere, the app written in Swift is designed not to display things like the time or battery level that iPadOS itself shows at the top of the screen.

🇯🇵 日本語 / ja

OSnine を iPad 上で動かしている時は基本的にフルスクリーン。そして雰囲気を保つために、Swift で書いたアプリ側では iPadOS 自体が画面上部に表示する時刻だとかバッテリーだとかは表示しないように作っている。

Battery level.

The date and time were originally displayed on the menu bar of OSnine, so there was no particular issue about it. However, after spending hours working on OSnine runnning on iPad, it's not uncommon to find that the battery level of the iPad has significantly decreased. And there was no way to check the battery level on OSnine so far.

🇯🇵 日本語 / ja

日付や時刻は元々 OSnine のメニューバーに表示されるようにしていたから特に問題はなかった。ただ iPad の OSnine 上で何時間も作業に没頭していると、気がつくと iPad のバッテリーがだいぶ減っていることがよくある。そしてそんなバッテリー残量を OSnine 上で確認する術が今までなかった。

With Swift and iPadOS SDK.

There are apps that display battery levels and such, so I was wondering if there should be a way for apps to retrieve device battery levels from the iPadOS SDK, so I searched for it and found that. What I just have to do is to monitor this. Then, I can easily pass the battery remaining notified by the app to the OSnine side, and surprisingly, it was implemented smoothly.

🇯🇵 日本語 / ja

バッテリー残量とか表示するようなアプリもあるし、iPadOS の SDK の中にアプリ側からデバイスのバッテリー残量を取得するようなのがあるんじゃないかなーって探してみたらやっぱりあった。こいつを監視してやればいい。で、アプリ側に通知されたバッテリー残量を OSnine 側に渡してやればいいでしょう、ってことで意外とサクっと実装できた。

The following is an excerpt of actual code.

🇯🇵 日本語 / ja

以下は実際のコードを一部抜粋。

override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelDidChange(_:)), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(batteryStateDidChange(_:)), name: UIDevice.batteryStateDidChangeNotification, object: nil)
}

@objc func batteryLevelDidChange(_ notification: Notification) {
var batteryLevel: Float { UIDevice.current.batteryLevel }
// Send value to OSnine
}

@objc func batteryStateDidChange(_ notification: Notification) {
var batteryState: UIDevice.BatteryState { UIDevice.current.batteryState }
switch batteryState {
case .unplugged, .unknown:
// Send value to OSnine
case .charging:
// Send value to OSnine
case .full:
// Send value to OSnine
@unknown default:
}
}

Pixel art and now.

I feel like it took more time to draw icons like battery level and charging in pixel art rather than researching or implementing them. Well, actually, I was working on this implementation in between writing book review articles I had written before. Especially when I write articles for book reviews, I often work for long hours on OSnine, so it was inconvenient that I couldn't quickly see the battery level.

🇯🇵 日本語 / ja

どちらかというと調べたり実装するより、バッテリー残量とか充電中のアイコンをドット絵で描く方が時間かかった気がする。

さて、実はこの実装は以前に書いた書評の記事の合間にやっていた。書評の記事を書いていると、特にずーっと OSnine 上で長時間作業していることが多くて、バッテリー残量がすぐにわからないのが不便だったから。


I've been updating OSnine in various ways recently, but OSnine isn't open to the public after all. I was able to write an article about the story of this article because there was a case with Swift, but even if I write about changes in the logic part written in JavaScript, it's not really...

Well, if something that seems like I could write about occurs, I'm going to write about it.

🇯🇵 日本語 / ja

他にも最近またいろいろと OSnine のアップデートをしているんだけど、所詮公開していない OSnine。今回の件については Swift の事例があったから記事にできたけど、JavaScript で書いているロジック部分の変更とか記事にしたところでなぁ・・・。

まあ書けそうなネタがあったら書いていきます。