0

saber CalDAV サーバーを実行しており、クライアントとして Yosemite で iCal を使用しています。ここで、iCal で終日の定期的なイベントを作成し、Charles Proxy を使用して、iCal から送信されたリクエストの本文を確認します。正しいデータを送信するイベントの作成:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.10.1//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED:20160404T203206Z
UID:14C144D6-A872-4D24-91C0-783A9979BB9E
RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=1
DTEND;VALUE=DATE:20160409
TRANSP:TRANSPARENT
SUMMARY:Repeat
DTSTART;VALUE=DATE:20160404
DTSTAMP:20160404T203206Z
SEQUENCE:0
BEGIN:VALARM
X-WR-ALARMUID:A807798B-DE16-4E62-86E9-C204A2B80F76
UID:A807798B-DE16-4E62-86E9-C204A2B80F76
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACTION:NONE
END:VALARM
END:VEVENT
END:VCALENDAR

応答:

HTTP/1.1 201 Created
Date: Mon, 04 Apr 2016 20:32:19 GMT
Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1j PHP/5.6.3 mod_perl/2.0.8-dev Perl/v5.16.3
X-Powered-By: PHP/5.6.3
X-Sabre-Version: 3.0.8
Content-Length: 0
ETag: "55c6a353f278653fdd61387395c274df"
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

しかし、繰り返しイベントの 1 回の発生を変更し、その変更をこの発生にのみ適用することを選択した場合、iCal は古いカレンダー データを変更せずにサーバーに送り返します。すべてのオカレンスに変更を適用すると、正しいデータが送信されます。変更を将来のイベントにのみ適用することを選択した場合、古いイベントが正しく変更され、将来のイベント用に新しいイベントが作成されます。ただし、1 回のオカレンスに対する変更がサーバーに送信されることはありません。

これは終日のイベントでのみ発生します。時限イベントは問題なく機能しています。rrule を "count" で作成するか、"until" で作成するかは問題ではありません。

1 つのオカレンスを変更してカレンダーを iCal からエクスポートすると、正しいカレンダー データも取得されますが、このデータはサーバーに送信されません (別のイベント)。

BEGIN:VCALENDAR
METHOD:PUBLISH
VERSION:2.0
X-WR-CALNAME:XXX
X-WR-CALDESC:
X-APPLE-CALENDAR-COLOR:#FF9500
X-WR-TIMEZONE:Europe/Berlin
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED:20160405T063102Z
UID:68C23C1E-371C-4799-9139-04F0F8FE6F88
RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=4
DTEND;VALUE=DATE:20160409
TRANSP:TRANSPARENTSUMMARY:hhhhh
DTSTART;VALUE=DATE:20160404
DTSTAMP:20160405T063102Z
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
CREATED:20160405T063102Z
UID:68C23C1E-371C-4799-9139-04F0F8FE6F88
DTEND;VALUE=DATE:20160421
TRANSP:TRANSPARENT
SUMMARY:hhhhh
DTSTART;VALUE=DATE:20160418
DTSTAMP:20160405T063102Z
SEQUENCE:0
RECURRENCE-ID;VALUE=DATE:20160418
END:VEVENT
END:VCALENDAR

そこで、正しい recurrence-id を持つ vevent を最終的に見ることができます。

何か案は?他の誰かが同様の問題に遭遇しましたか? 何が原因なのかわかりません...

前もって感謝します!

4

1 に答える 1

0

わかりました、これはカレンダーのバグだったに違いありません。デバッグを有効にした後、次のエラーが見つかりました。

Apr  6 12:20:11 XXX.local CalendarAgent[229]: [com.apple.calendar.store.log.ICS] [CaliCalTranslator: Event 97323C3B-753D-46E5-830E-E182BEAA5E0D has invalid instance on date 2016-04-11 00:00:00 +0000.  Filtering]

カレンダーをバージョン 8.0 (2026) からバージョン 8.0 (2034.9) に更新したところ、すべてが期待どおりに機能するようになりました。

于 2016-04-06T13:16:15.033 に答える