MacOS/iOS CalDAV & CardDAV bi-directional sync

, ,

I’ve checked the forums and can’t seem to confirm if this is possible or not.
I was able to get my contacts and cal to sync in Thunderbird but no matter what I try I can’t do the same in nextcloud AIO. What am I missing???
Has anyone else here been able to?

to sync with what? Nextcloud without AIO?

Normally with Nextcloud, you can sync contacts and calendar over carddav/caldav with software that supports these protocols. iOS devices are possible, Thunderbird works as well. I can do it with Nextcloud (not using AIO, but this should work as well).

I can sync NAIO cal & contacts to TB and MacOS/iOS. What I can’t do is get NAIO to sync the cal/contacts from MacOS/iOS to NAIO. I can in Thunderbird, but not NAIO.

CalDAV/CardDAV is designed as a server ↔ (multiple) client sync, where individual calendars and contact lists on the server always have a 1:1 relationship with their synced counterparts on client devices. You can sync multiple calendars or contact lists to one or several client devices, even from different servers, providers or accounts, but the clients do not perform any cross-sync between those calendars or contact lists.

Think of a CalDAV/CardDAV client as you would of an email client: you can read and manage emails from multiple accounts, and some clients even offer a unified inbox that displays the messages from all accounts in one place. However, on the server side the emails still remain in their respective accounts. For example, if you add both a Gmail and an M365 account to an email client, you can view messages from both accounts in one unified inbox. But the messages from one account are not synced into the other — meaning that if you log in to your Gmail account on the web, you will only see the messages from your Gmail account, not your M365 account. The same applies in reverse, when logging in to your M365 account.

Import them into your Nextcloud calendar/contacts and then only use the calendars and contact lists provided by your Nextcloud server on you client devices, instead of the ones provided by iCloud.

I just tried again on my devices to create a contact on an iOS device and it syncs back to my Nextcloud.
Question is, if you create a new entry in the contacts on your MacOS/iOS device, do you see any activity on the webserver logfile?
→ if yes this is good, since the device tries to sync something
→ if no, then something on the device is not configured properly, e.g. you have multiple address books and the new entry is just on a local one
(on the phone if you are in the contacts, you can go on “Lists” and it shows you different accounts)

1 Like

As I understand it, @nmincone wants to sync existing contact and calendar entries from their iOS/macOS devices to Nextcloud. I assume those entries are currently either in a local calendar/contact list or in an iCloud account.

@nmincone It might help if you could elaborate on this a bit further.

Also, as @tflidd said, keep in mind: when creating new contacts or calendar entries on your iPhone or Mac, you’ll need to make sure they’re added to the Nextcloud calendar or contact list. You may even want to set Nextcloud as the default for new entries. Otherwise, if you don’t select your Nextcloud calendar or contacts list explicitly, new entries will be added to the local calendar or iCloud by default and therefore won’t appear in Nextcloud.

@bb77 this is exactly what I’m trying to do, apologize if I was not completely clear. Since MacOS/iOS appear to support CalDAV/CardDAV syncing (bidirectionally) I’m not sure if NAIO needs to act as the DAV server source and then it’s best to use NAIO as that source or if you can get bidirectional syncing from any DAV source. I was looking for the flexibility to use either…

Well no, that’s not actually how it works. I mean, you can add different accounts from different servers/providers to your devices (like Nextcloud, iCloud, Google, etc.), and all those calendars and contact lists from the different providers/accounts will then appear in your iOS/macOS calendar and contacts apps. However, there’s no cross-account or cross-server sync happening.

If you create a new contact or calendar entry in one of the apps on your devices, you can choose which contact list or calendar you want to add it to. So if you create a new event and you choose your iCloud calendar, that event gets synced with iCloud; if you choose your Google calendar, it gets synced with Google; and if you choose your Nextcloud calendar, it gets synced with Nextcloud, etc.

The same applies to existing entries: they all show up together in the calendar and contacts apps on your devices, but server-side they remain with their respective providers in their respective accounts.

@bb77 that’s what I thought… So, now I’m wondering if hosting my own DAV server and having it sync with Mac/iOS and NC is the way to go or even possible, like self hosting Baikal and linking to each respectively.

If you’re hosting Nextcloud, you are already hosting your own DAV server. The difference compared to Baïkal is that Nextcloud also provides a nice web calendar app, while Baïkal is just the backend server your clients connect to.

But why? Why do these accounts need to be linked?

To address your question directly: no, I don’t think that’s possible with Baïkal either, because the principle I explained above stays the same.

That said, there are two things you can do, which might at least partially achieve what you’re aiming for:

  1. Subscribe to external calendars (read-only): This way, those calendars will be displayed in your Nextcloud calendar, https://docs.nextcloud.com/server/latest/user_manual/en/groupware/calendar.html#subscribe-to-a-calendar

  2. Use an external sync/migration tool like the ones recommended here: https://serverfault.com/questions/619651/how-to-sync-two-caldav-servers. But honestly, I’d only recommend this for a one-time operation, for example migrating the contents of one calendar account to another, rather than running it continuously. But even for a one-time migartion, it’s probably simpler and less error-prone to just export the calendar and import it into the other account. :wink:

I think this is the way to go. I have MSO 365 Cals in my iOS cal I need to be available for scheduling to avoid conflicts. So was hoping I could just get everything in one location and manage from there.