In KidsPlaner you build the school day yourself: a name, a start, an end, and a switch for lesson or break. Each child gets their own set of times, so two schools fit on one phone. apps.apple.com/app/apple-st... #iosapps #backtoschool
Thorsten Stark
@thostark.bsky.social
iOS Developer since 2009 – doing Swift, SwiftUI, Objc, macOS, UI/UX, CI/CD, git, automation and a bit more. Developer of @batteriesapp.bsky.social
A vertical bar on iPhone Duo has a fixed width, so a long text label has nowhere to grow. Items with an icon go to the vertical axis, text-only items stay horizontal. Set both a title and an image on every toolbar item and let the system pick. #iosdev #iphoneduo
Most days, opening Batteries At Home should tell you nothing. No device overdue, nothing due within a week, so the screen says exactly that instead of listing your devices. apps.apple.com/app/apple-st... #iosapps
On iPhone Duo an app gets vertical bars only when it rebuilds against the newest SDK and lets a navigation container own its bars. A bar built by hand from UIToolbar, UINavigationBar or UITabBar has its content ignored entirely. The system cannot tell those are bar items. #iosdev #iphoneduo
iPhone Duo moves navigation, toolbar and tab items into one vertical bar at the edge of the display. A screen that is worse off can opt out: toolbarVerticalBehavior(.disabled) in SwiftUI, preferredVerticalBarBehavior returning .disabled in UIKit. #iosdev #iphoneduo
The devices worth tracking are the ones where an empty battery costs you at a bad moment: the smoke detector at night, the thermostat in January. Batteries At Home starts you off with those, battery type and usual interval included. apps.apple.com/app/apple-st... #iosapps
An iOS widget runs in an extension, and that extension has a much tighter memory budget than an app. Decoding a full resolution photo in a timeline provider may get the process killed. No crash to see, just the placeholder. Downsample before you render. #iosdev #widgetkit
A first grader can read a timetable before they can read the words on it. In KidsPlaner every subject gets a colour and an icon, so the week grid shows the day as shapes your child already recognises. apps.apple.com/app/apple-st... #iosapps #backtoschool
A subject stores one colour, and the app has two appearances. Navy reads on white and disappears on a nearly black tile. So KidsPlaner never draws the stored hex. Every rendering asks for a legible version that resolves per appearance. Not live yet. #indiedev #swiftui #backtoschool
Two parents, one timetable, and until now each of them types it in separately. The next update shares a child's schedule with a second iCloud user, read only or with editing. Sharing is Pro, accepting an invitation is not. Not live yet. #backtoschool
The next update gives KidsPlaner a school year view in two modes: compact, the whole year from August to July on one screen, and detailed, with weekdays and event names. Not live yet. #backtoschool
When a battery is finally due, the device is back on the wall and you no longer remember what is inside it. In Batteries At Home every device can carry photos of its compartment and its label, in your own iCloud. apps.apple.com/app/apple-st... #iosapps
Zwei Kinder haben zwei Stundenpläne, und die fangen selten zur gleichen Zeit an. In KidsPlaner bekommt jedes Kind eigene Stunden, eigene Pausen und eigene Fächer. Auf dem Home-Screen liegt ein Widget pro Kind. apps.apple.com/app/apple-st... #iosapps #backtoschool
The small widget in Batteries At Home used to be a list of rows. It is a 2x2 grid now. Four devices fit, each one a ring: remaining lifetime as the arc, state as the color, the device icon in the middle. Every cell is its own Link, so a tap opens that device. #indiedev #widgetkit
You enter the school year once, and you should not have to enter it again on the iPad. KidsPlaner keeps it in your own iCloud, so every device and every widget shows the same day. apps.apple.com/app/apple-st... #iosapps #backtoschool
The Predicate macro in SwiftData is not a Swift closure. It is a query builder. Everything in it has to translate into a database query. Computed properties and helper methods do not exist down there, so you get a compile error or a fetch that fails. #iosdev #swiftdata
The person who has to read a school timetable is a child, and a week grid is easier to read than a list. KidsPlaner shows the whole week as a grid, each subject with its own color and icon. apps.apple.com/app/apple-st... #iosapps #backtoschool
In the shop you do not know which batteries you actually need at home. Batteries At Home builds that list: devices due in the next two weeks, minus what is in your drawer, plus what is missing from your stock. By type and count. apps.apple.com/app/apple-st... #iosapps
Der Stundenplan sagt dir nicht, wann keine Schule ist. In KidsPlaner trägst du Ferien und einzelne freie Tage pro Kind ein. An diesen Tagen zeigt der Heute-Screen schulfrei statt einer Stunde, die ausfällt. apps.apple.com/app/apple-st... #iosapps
You should not have to open an app to find out when the school day ends. KidsPlaner puts it on the home screen: the period that is running, how much is left of it, the whole day in the large widget. One widget per child. apps.apple.com/app/apple-st... #iosapps
Part 3 of my SwiftData and iCloud sync series is up: your empty state is now a loading state, your widget never hears about remote changes, and the CloudKit schema only ever grows. www.thorsten-stark.de/posts/2026-0... #swiftdata #cloudkit
Your widget can show a live countdown without spending a single timeline reload. Text(date, style: .timer) and ProgressView(timerInterval:) are updated by the system between reloads. Everything else needs a new timeline entry, from a budget you do not control. #iosdev #widgetkit
A new school year means a new timetable, and it is different for every child: other periods, other subjects, other days off. You enter it once in KidsPlaner, per child. After that it is on the home screen. apps.apple.com/app/apple-st... #iosapps