升级至iOS 17后Flutter中add_2_calendar插件无法添加日历事件求助
iOS 17下Flutter add_2_calendar插件添加日历事件失效问题
问题背景
升级iOS 17后,Flutter应用里用add_2_calendar插件添加日历事件的功能彻底失效,终端只输出错误信息:XPC connection was invalidated。
当前配置与尝试的操作
- 原有Info.plist配置:
<key>NSCalendarsUsageDescription</key> <string>$(PRODUCT_NAME) 使用您的日历</string> <key>NSContactsUsageDescription</key> <string>$(PRODUCT_NAME) 使用您的日历</string>
- 尝试添加iOS 17替代旧权限的描述,但问题未解决:
<key>NSCalendarsWriteOnlyAccessUsageDescription</key> <string>添加赛事到日历</string>
Flutter代码示例
final Event calendarEvent = Event( title: '$homeTeamName vs $awayTeamName', description: '$leagueName ($round)\nReferee: $referee', location: stadium, startDate: matchTimestamp, endDate: matchTimestamp.add(const Duration(hours: 2)), iosParams: const IOSParams( reminder: Duration(hours: 1), url: 'https://hadjimamas.github.io/', ), androidParams: const AndroidParams(emailInvites: []), ); // 省略部分代码 InkWell( onTap: () { Add2Calendar.addEvent2Cal(calendarEvent); }, // 省略其他UI属性 )
解决办法
1. 升级插件到最新版本
旧版add_2_calendar未适配iOS 17的日历权限逻辑,直接更新到最新稳定版(至少v1.1.0及以上),新版本已修复iOS 17兼容性问题。
2. 修正权限描述配置
iOS 17对日历权限做了细分,需同时保留读写权限和仅写权限的描述,内容要准确对应用途:
<key>NSCalendarsUsageDescription</key> <string>需要访问日历以添加赛事提醒</string> <key>NSCalendarsWriteOnlyAccessUsageDescription</key> <string>需要写入权限以添加赛事到您的日历</string>
如果未用到通讯录功能,删除NSContactsUsageDescription,避免权限申请混淆用户。
3. 捕获插件调用的错误信息
addEvent2Cal方法返回Future<bool>,添加错误捕获可明确失败原因,同时给用户友好提示:
InkWell( onTap: () async { try { bool success = await Add2Calendar.addEvent2Cal(calendarEvent); if (!success) { // 提示用户检查日历权限 } } catch (e) { print('添加日历事件失败:$e'); // 给用户显示错误提示 } }, )
4. 检查Xcode项目配置
打开Xcode项目,进入Info标签页确认权限描述无拼写错误;查看Signing & Capabilities,确保无权限相关配置缺失。
内容的提问来源于stack exchange,提问作者Andreas Hadjimamas
相关产品推荐
相关产品推荐

