Importera från iPhone-kalendern — ta med dig allt på en gång
Du ska inte behöva mata in 200 historiska events när du byter till FamilyBoard. Ett tryck importerar från iOS Calendar — och inga dubbletter blir av.

Det största motståndet mot att byta kalenderapp är inte att lära sig den nya — det är att flytta över allt det gamla. Mias jobbschema sex månader fram. Olles fotbollssäsong. Tandläkartiderna i augusti. Om du måste skriva in 200 events för hand kommer du inte att byta. Du kommer att stanna kvar i den app du redan tröttnat på.
Idag löser vi det. Importera från iPhone-kalendern finns nu i FamilyBoard på iOS.
Vad det är
Öppna Inställningar → Kalendersynk → Importera från iPhone-kalendern. Du får upp en lista med alla kalendrar din iPhone känner till — Apple iCloud, eventuellt Google via Apples kalenderbrygga, eventuellt jobbets Exchange. Markera de du vill läsa från (default: alla utom födelsedagar). Klicka Importera.
Inom några sekunder dyker dina events upp i FamilyBoard. Inte alla genom historien — vi tar 30 dagar bakåt och 365 framåt som standardfönster. Det räcker för att du ska känna att kalendern är "din" från första öppning, utan att vi sväljer fem år gamla födelsedagsmiddagar du för länge sen glömt.
Det viktigaste — det är idempotent
Klickar du importera två gånger får du inga dubbletter. Klickar du den tio gånger samma vecka — fortfarande inga dubbletter. Vi använder iCal-UID:en som varje event bär med sig som unik nyckel, prefixar med ek- så att vi vet att det kom från EventKit, och kollar på databasnivå om eventet redan finns.
Det här verkar trivialt men är faktiskt det mest värdefulla beslutet i hela funktionen. Det innebär att du kan köra importen igen efter en månad för att hämta nytt jobbschema utan att panik-radera först. Re-run skapar inga dubbletter. Punkt.
Hur det funkar tekniskt
På iOS-sidan använder vi EventKit:
EKEventStore.requestFullAccessToEventsber om behörighet. Behörigheten kvarstår tills du återkallar den i Inställningar → Sekretess → Kalendrar.predicateForEvents(withStart:end:calendars:)med fönstret 30 dagar bakåt + 365 fram, mot de kalendrar du valde.- För varje event: kolla om
events.ical_uid = 'ek-' || event.calendarItemIdentifierredan finns. Om ja — hoppa över. Om nej — skapa.
På servern (Supabase) finns en unique index på (family_id, ical_uid) så att samma event inte kan dubbleras även om två klienter försöker importera samtidigt. Race-conditions blir bara databasfel, inte krasch eller duplikat.
Och åt andra hållet?
Export — alltså FamilyBoard → iPhone-kalendern — har funnits ett bra tag. Det betyder att det här är två-vägs nu. Du kan importera ditt befintliga schema, fortsätta använda iPhone-kalendern parallellt om du vill, och allt nytt du lägger in i FamilyBoard skrivs tillbaka.
Två förbehåll på exportsidan: vi rekonstruerar RRULE-strängen för enkla återkommande events (varje vecka, varje måndag), men ovanliga mönster ("var fjärde tisdag förutom på röda dagar") platta ut till individuella events. Vi tror det är ett rimligt val — bättre att alla event syns än att en RRULE-tolkning skiljer sig mellan apparna och ger gap.
Trade-offs vi medvetet valde
30/365-fönstret är inte konfigurerbart i v1. Vi vill inte överraska användare med en flerminuters import första gången. Behöver du ett bredare fönster — säg åt oss, vi gör det till en setting.
Inga delade Apple-kalendrar i v1. Om någon i din familj har bjudit in dig till en Apple-kalender (typ "Vasaloppet 2026") så hamnar den inte automatiskt — vi importerar bara dina egna kalendrar för att undvika oväntade läckor mellan familjer.
Vi rör inte din iPhone-kalender. Importen är read-only från Apple-sidan. Vi läser, kopierar, lämnar originalet ifred. Du kan rensa ut FamilyBoard utan att rubba en enda rad i din iCloud-kalender.
Prova nu
Uppdatera FamilyBoard via TestFlight, öppna Inställningar → Kalendersynk → Importera från iPhone-kalendern. Bekräfta behörigheten, välj kalendrar, klicka. Trettio sekunder senare har du flyttat hem.
Det här är inte den glansigaste funktionen vi släppt i år — men det är den som tar bort den vanligaste ursäkten för att inte byta. Och det är värt en blogpost.