Хотя я нахожусь в конце своего собственного календарного проекта и не использую iCal, возможно, это поможет.
Мой собственный опыт показывает, что я не смог найти какую-либо библиотеку, и я с нуля закодировал свой собственный бэкэнд.
Что касается внешнего интерфейса, я бы настоятельно рекомендовал вам использовать FullCalendar, это удивительный календарь, с которым вы можете делать. Все, что вам нужно, это сконцентрироваться на бэкэнде.
Для базы данных я бы пошел по пути, когда в событии будет только 1 строка базы данных, и если это событие изменяется, если оно повторяется, вы вносите изменения в существующее событие и создаете новое событие с изменением.
Для серверной логики в сочетании с fullcalendar он дает вам окно для работы. В этом окне я бы работал, когда происходит событие, и затем показывал, повторяется ли событие, а затем работает, когда оно должно быть показано в календаре. Это может быть немного сложным, но вы можете сделать это.
Я прилагаю фотографии того, что я сделал, к сожалению, этот проект не с открытым исходным кодом.
Добавить повторяющееся событие
Календарь с повторяющимися событиями
Изменить периодическое событие
Просмотр списка повесток дня
Приветствия