You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过EventKit访问EKReminder的标签与图片?接受私有API

通过EventKit获取提醒事项标签与图片的可行方案

官方EventKit框架没有公开接口直接获取提醒事项的标签和图片/附件,你测试的属性都是针对EKEvent(日历事件)的,而非EKReminder(提醒事项),所以返回nil是正常的。以下是基于私有API的可行方案:

一、获取提醒事项标签

EKReminder有私有属性tags,可通过KVC直接访问:

NSArray *tags = [reminder valueForKey:@"tags"];
NSLog(@"提醒事项标签:%@", tags);
  • 若编译报错,需关闭Xcode的私有API检测,或通过运行时动态获取属性。

二、获取提醒事项图片/附件

方法1:调用EKEventStore私有方法

通过运行时动态调用fetchAttachmentsForReminder:completion:方法获取附件:

SEL fetchAttachmentsSel = NSSelectorFromString(@"fetchAttachmentsForReminder:completion:");
if ([store respondsToSelector:fetchAttachmentsSel]) {
    IMP imp = [store methodForSelector:fetchAttachmentsSel];
    void (*fetchAttachmentsFunc)(id, SEL, EKReminder*, void(^)(NSArray*, NSError*)) = (void*)imp;
    
    fetchAttachmentsFunc(store, fetchAttachmentsSel, reminder, ^(NSArray *attachments, NSError *error) {
        if (!error) {
            for (id attachment in attachments) {
                // 获取附件本地路径
                NSURL *fileURL = [attachment valueForKey:@"url"];
                // 读取图片数据
                NSData *imageData = [NSData dataWithContentsOfURL:fileURL];
                NSLog(@"图片数据大小:%lu", (unsigned long)imageData.length);
            }
        }
    });
}

方法2:直接访问EKReminder私有属性

EKReminder的attachmentURLs属性可直接返回附件URL数组:

NSArray *attachmentURLs = [reminder valueForKey:@"attachmentURLs"];
for (NSURL *url in attachmentURLs) {
    NSData *imageData = [NSData dataWithContentsOfURL:url];
    // 处理图片数据
}

重要提示

  • 私有API无官方维护,iOS版本迭代可能导致接口失效,需针对不同系统版本适配。
  • 使用私有API的应用无法通过App Store审核,仅适用于企业内部应用或非上架工具。

内容的提问来源于stack exchange,提问作者Daij-Djan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:52:09