iPhone行事历如何同步提醒事项?用自动化脚本轻松实现
相信有不少人都会将临时代办事项记录在iPhone“提醒事项”App内,如果想要将iOS“提醒事项”自动同步到“行事历”内要怎么做?同步功能似乎需要依赖第三方App才能达成,那有没有免费又能快速解决的方案?
其实要让iOS提醒事项与行事历同步透过捷径自动化就能轻松实现,这篇就来分享搭配自动化Scripts脚本,实现每次透过iPhone提醒事项纪录生活琐碎的事情,都能自动同步到行事历内。
通常iOS内建“提醒事项”App,如果要将代办事项同步到行事历内,都要手动点选才能搬移加入,这种做法非常不人性化,反而比较推荐让行事历与提醒事项同步会更智能又省时,实现效果如下画面,当iPhone在提醒事项内增加后,就会立即同步到行事历内,省去要手动搬移的步骤,实现步骤可参考底下iPhone行事历如何同步提醒事项教学:
如何将iPhone行事历同步提醒事项教学
本篇教学不管是iPhone或iPad设备都能使用,系统需iOS14或iPadOS14或以上。
1.替iOS行事历与提醒事项建立相同列表
要实现iPhone行事历与提醒事项同步功能,要在两款App内都建立相同的列表名称,后续才能同步。
先打开“提醒事项”App,点选右下角“新增列表”,自订想同步的列表名。
接下来开启iOS内建“行事历”App,点选底下“行事历”会进入行事历列表清单,点选左下角“加入行事历”。
输入与“提醒事项”App相同的列表名称,按下右上角“完成”,后续想将重要事情纪录在同步的列表内即可。
2.建立Scripts同步脚本
为了能够实现iPhone内建行事历与提醒事项同步,我们需要利用“ScriptsApp”来运行自动化JavaScript脚本。
- ScriptableAppStore下载位置
下载并且打开“Scripts”App,点选右上角“+”新增按钮,会出现新的脚本页面,点击上方“UntitledScript”文字后,将名称改为“提醒事项同步行事历”。
并且将后面的iOS提醒事项同步行事历代码直接复制贴上,按下“Done”关闭。
iOS提醒事项同步行事历代码
脚本原作者:汀力
vardur_month=1conststartDate=newDate()startDate.setMonth(startDate.getMonth()-dur_month)console.log(`日历的开始时间${startDate.toLocaleDateString()}`)constendDate=newDate()endDate.setMonth(endDate.getMonth()+dur_month)console.log(`日历的结束时间${endDate.toLocaleDateString()}`)constreminders=awaitReminder.allDueBetween(startDate,endDate)console.log(`获取${reminders.length}条提醒事项`)varcalendar=awaitCalendar.forEvents()//获取日历名和对应的日历varm_dict={}for(calofcalendar){m_dict[cal.title]=cal//console.log(`日历:${cal.title}`)}constevents=awaitCalendarEvent.between(startDate,endDate,calendar)console.log(`获取${events.length}条日历`)varreminders_id_set=newSet(reminders.map(e=>e.identifier))//删除日历里提醒事项删除的事项events_created=events.filter(e=>e.notes!=null&&e.notes.includes("[Reminder]"))for(leteventofevents_created){//console.warn(event.notes)letreg=/(\[Reminder\])\s([A-Z0-9\-]*)/letr=event.notes.match(reg)//if(r)console.log(r[2])if(!reminders_id_set.has(r[2])){event.remove()}}for(constreminderofreminders){//reminder的标识符consttargetNote=`[Reminder]${reminder.identifier}`const[targetEvent]=events.filter(e=>e.notes!=null&&e.notes.includes(targetNote))//过滤重复的reminderif(!m_dict[reminder.calendar.title]){console.warn("找不到日历"+reminder.calendar.title)continue}if(targetEvent){//console.log(`找到已经创建的事项${reminder.title}`)updateEvent(targetEvent,reminder)}else{console.warn(`创建事项${reminder.title}到${reminder.calendar.title}`)constnewEvent=newCalendarEvent()newEvent.notes=targetNote+"\n"+reminder.notes//要加入备注updateEvent(newEvent,reminder)}}Script.complete()functionupdateEvent(event,reminder){event.title=`${reminder.title}`cal_name=reminder.calendar.titlecal=m_dict[cal_name]event.calendar=cal//console.warn(event.calendar.title)//已完成事项if(reminder.isCompleted){event.title=`✅${reminder.title}`event.isAllDay=trueevent.startDate=reminder.dueDateevent.endDate=reminder.dueDate//varending=newDate(reminder.completionDate)//ending.setHours(ending.getHours()+1)//event.endDate=endingvarperiod=(reminder.dueDate-reminder.completionDate)/1000/3600/24period=period.toFixed(1)if(period<0){period=-periodevent.location="延期"+period+"天完成"}elseif(period==0){event.location="准时完成"}else{event.location="提前"+period+"天完成"}}//未完成事项else{constnowtime=newDate()varperiod=(reminder.dueDate-nowtime)/1000/3600/24period=period.toFixed(1)//console.log(reminder.title+(period))if(period<0){//待办顺延event.location="延期"+(-period)+"天"//如果不是在同一天,设置为全天事项if(reminder.dueDate.getDate()!=nowtime.getDate()){event.title=`❌${reminder.title}`event.startDate=nowtimeevent.endDate=nowtimeevent.isAllDay=true}//在同一天的保持原来的时间else{event.title=`⭕️${reminder.title}`event.isAllDay=falseevent.startDate=reminder.dueDatevarending=newDate(reminder.dueDate)ending.setHours(ending.getHours()+1)event.endDate=ending}console.log(`【${reminder.title}】待办顺延${-period}天`)}else{event.title=`⭕️${reminder.title}`event.isAllDay=falseevent.location="还剩"+period+"天"event.startDate=reminder.dueDatevarending=newDate(reminder.dueDate)ending.setHours(ending.getHours()+1)event.endDate=ending}}if(!reminder.dueDateIncludesTime)event.isAllDay=trueevent.save()}会看见“提醒事项同步行事历”Scripts脚本后,就可以退回主画面。
3.建立捷径自动化
开启“捷径”App,点选“自动化”>“制作个人自动化操作”,选择“App”。
按下“App”按钮,搜索并且勾选“提醒事项”和“行事历”。
最后确定自动化操作是否设定为“已开启”,就可以按“下一步”。在动作编辑页面中,点选“加入动作”。
利用搜索找到“Scriptable”,并且从RunScript内选择刚创建的JavaScript自动化脚本。
最后点击“下一步”。
会进入自动化执行设定页面,将“执行前先询问”和“执行时通知”两项功能都关闭,最后点击“完成”。
4.排除自动化错误
以上步骤就能实现打开内建“行事历”或“提醒事项”App,就会立即自动同步,不过Sctiptable没有设定好权限,会导致执行脚本会出现“找不到日历错误”情况,会发现两个App之间没办法同步,底下告诉大家解决方法。(此步骤一定要做)
先打开iOS内建“设定”,找到“Scriptable”控制设定,将“行事历”和“提醒事项”关闭再次开启,偏好语言设定为“英文”。
都设定完成后,将iPhone重开机一次,打开“Scriptable”App执行“提醒事项同步行事历”脚本,观察Log如果没有跳出任何黄字错误,能够正常运行就代表已经成功。
5.实现行事历与提醒事项同步
以上全部都设定完成后,后续只要打开“行事历”或“提醒事项”其中一款App就会立即同步,只要纪录在“提醒事项”App的未完成的代办事项,就会立即同步到“行事历”App内,甚至会显示还剩多少时间。
要是完成的代办事项,在行事历内也会看间打勾状态,透过行事历也能清楚知道今天有哪些未完成的工作,不管是日常生活、工作或学业都很方便。
要是打开行事历App没有出现提醒事项的项目,检查“提醒事项”内是否有设定日期时间,或是将行事历App从后台关闭再次打开就可以,当然也可以建立好几组提醒事项列表,只要行事历有对应的名称两边就能够同步。
如何删除行事历内的提醒事项项目?
要是有些提醒事项已经完成,还是会一直显示在iOS行事历内要怎么删除?这部分要透过删除提醒事项的项目才能移除,操作方法如下:
打开“提醒事项”App的项目,按下右上角“•••”>“显示已完成的项目”。
列表就会显示已经完成的代办事项,往左滑动选择“删除”已经完成的事项,就能够将行事历已完成的项目也移除。
功能总结
透过这篇技巧后,就可以让iPhone行事历与提醒事项进行同步功能,而且免费又方便,只要有新增移除和编辑动作,一切透过提醒事项内操作就可以,行事历只是单纯显示。