CardDAV Directory
CardDAV Directory is a non-standard extension to the CardDAV protocol, implemented by iOS devices and OS/X Addressbook.
The directory acts as a global read-only addressbook. Both clients don't actually allow you to simply browse them, and will always present just a searching interface.
The user experience is very similar to browsing an LDAP directory.
What's provided
SabreDAV does not provide default backends to create your directories, it provides just a simple interface which you must implement to make this work.
The interface Sabre\CardDAV\IDirectory
flags the CardDAV plugin to mark an
addressbook as a directory.
Furthermore, you must also specify the paths to all global CardDAV directories
in the Sabre\CardDAV\Plugin::$directories
property.
This last step is required, because iOS will request locations to CardDAV directories on the principal, so it must be globally known where these are.
To make sure the directory works everywhere, your node implementing
Sabre\CardDAV\IDirectory
must also implement Sabre\DAVACL\IACL
.
Client info
OS/X 10.6 Addressbook
The OS/X 10.6 client will not request the list of directories, but it rather assumes that there's one located at the /directory path on the root of the server.
So if you want to support this client as well, ensure that that's the exact location of the global addressbook. Because of this, this client will also not be able to support more than 1 directory.
OS/X 10.7 and 10.8
These clients do pick up on the directories property, but they will only support 1 directory at most still.
iOS 4, 5 and 6.
The CardDAV spec dictates that clients should not do things like a
Depth: 1
PROPFIND on the directory. iOS 4 & 5 do this though. When this
happens, simply don't return anything (empty array from getChildren()
) rather
than throwing an error.
Throwing an error will break iOS 4 and 5, but this does appear to be fixed in iOS6.