Update a roster in iPhone Calendar without duplicates

You put your roster, rota or class timetable in Calendar. Then it changed: a swapped shift, a cancelled trip, a moved lecture. The new .ics file arrived, and adding it on top of the old one leaves a mess. Here's how to swap one version for the other cleanly.

Why re-adding the file goes wrong

Adding an .ics file only ever adds events. Nothing on the iPhone compares it with the version you added last time, so:

The more often the schedule changes, the worse it gets. Crew, nurses, doctors and anyone on a rota that's published monthly and then amended runs into this.

Option 1: subscribe, if you're given a link

If your employer, rostering app or university gives you a calendar link (it often starts with webcal:// or ends in .ics), subscribe to it instead of importing a file. The calendar then updates itself: Settings › Calendar › Accounts › Add Account › Other › Add Subscribed Calendar. On iOS 18 and later, Calendar is under Settings › Apps.

Subscribed calendars are read-only, refresh on their own schedule (sometimes hours late) and can't hold your own notes or reminders. If you only get a file, or the feed isn't reliable, read on.

Option 2: give the schedule its own calendar and rebuild it

Free, and it works with any file:

  1. In Calendar, tap Calendars, then Add Calendar, and name it after the schedule, like "Roster".
  2. Always add the schedule's file to that calendar and nothing else.
  3. When a new version arrives, delete that calendar (Calendars › the ⓘ next to it › Delete Calendar), create it again, and add the new file.

The downside: everything in that calendar goes, including past months, reminders you set on shifts, and anything you added by hand. It also doesn't show you what actually changed.

Option 3: replace only what changed

I built ICS Import for this. Open the new version of the file and it recognises the schedule you imported before:

  1. Tap the new .ics file in Mail, Gmail, Outlook, WhatsApp or Files, tap Share, then ICS Import.
  2. ICS Import shows "New version of" your earlier import, with a count of new, changed, removed and unchanged events. Removed shifts are listed so you can check them first.
  3. Tap Update Calendar.
A new version of a roster: 1 new, 1 changed, 1 removed, 10 unchanged

Only new, changed and removed events are touched. Unchanged shifts stay exactly as they are, with your reminders and edits. Only the dates the new file covers are affected, so importing next month's roster never deletes this month's. If something looks wrong, Undo in the app removes everything an import added.

It reads the file on your phone, with no airline, hospital or school login and no account. Adding up to 3 events per import and Undo are free. Replacing a whole schedule is a one-time purchase, with no subscription.

Get ICS Import

Tips for rosters that change a lot

Still stuck?

Email mybosseatpoop@gmail.com with both versions of the file attached and I'll take a look.