教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

虽然苹果在iOS 18推出了整合行事历与提醒事项的功能,让iPhone行事历可以显示、确认提醒事项的内容,但如果你因为种种任何原因没有升级到iOS 18,但是又想要让iPhone行事历可以和提醒事项做整合的话,有什么好用的技巧吗?

今天这篇就要教大家如把 iPhone 提醒事项同步到行事历里面,而且开启日历就自动完成,不需要手动设置。

iPhone 行事历自动同步提醒事项教程

这里我们会一步一步带大家完成 iPhone 开启行事历就自动同步提醒事项的步骤。

第一步:建立名称相同的提醒事项列表与行事历

因为等一下我们需要借助第三方App写脚本来同步iPhone行事历与提醒事项,而这个脚本在执行同步的规则就是找到「日历名称」与「提醒列表名称」相同的来进行同步。

你可以使用提醒事项App里面默认的这个「提醒事项」列表,也可以自行建立一个。 为了之后说明的时候好辨识,我新增一个叫做「待办事项」的提醒事项列表。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

再来,新增一个叫做「待办事项」的行事历。 如果你有好几个不同的提醒事项列表要同步的话,就在继续新增多个行事历。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

日历的名称记得要和刚才设置好的待办事项列表名称相同。

总之记住一个原则,要同步的「提醒事项列表名称」与「日历名称」一定要一样才会进行同步。

第二步:制作 Scriptable 同步脚本

要达到 iPhone 开启行事历就自动同步提醒事项,必须要藉由第三方 App 写脚本来帮我们完成这件事,所以下载《Scriptable》这个 App。

 Scriptable 下载:https://apps.apple.com/cn/app/scriptable/id1405459188

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

新增一个 Scriptable 脚本,并且把以下内容复制过去,Scriptable 上面的名称也可以改成一个比较好辨识的名字,之后就可以完成并退出 Scriptable。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧
var dur_month = 1

const startDate = new Date()
startDate.setMonth(startDate.getMonth() - dur_month)
console.log(`日曆的開始時間 ${startDate.toLocaleDateString()}`)

const endDate = new Date()
endDate.setMonth(endDate.getMonth() + dur_month)
console.log(`日曆的結束時間 ${endDate.toLocaleDateString()}`)


const reminders = await Reminder.allDueBetween(startDate, endDate)
console.log(`獲取 ${reminders.length} 條提醒事項`)

var calendar = await Calendar.forEvents()

//獲取日曆名和對應的日曆
var m_dict = {}
for(cal of calendar)
{
   m_dict[cal.title] = cal
   //console.log(`日曆:${cal.title}`)
}

const events = await CalendarEvent.between(startDate, endDate, calendar)
console.log(`獲取 ${events.length} 條日曆`)

var reminders_id_set = new Set(reminders.map(e=>e.identifier))
//刪除日曆里提醒事項刪除的事項
events_created = events.filter(e=>e.notes != null && e.notes.includes("[Reminder]"))
for(let event of events_created){
      //console.warn(event.notes)
      let reg = /([Reminder])s([A-Z0-9-]*)/
      let r = event.notes.match(reg)
      //if(r) console.log(r[2])
      if(!reminders_id_set.has(r[2]))
      {
        event.remove()
      }
}

for (const reminder of reminders) {
  //reminder的標識符
  const targetNote = `[Reminder] ${reminder.identifier}`
  const [targetEvent] = events.filter(e => e.notes != null && e.notes.includes(targetNote))//過濾重復的reminder
  if(!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}`)
    const newEvent = new CalendarEvent()
    newEvent.notes = targetNote + "n" + reminder.notes//要加入備注
    updateEvent(newEvent, reminder)

  }
}


Script.complete()

function updateEvent(event, reminder) {
  event.title = `${reminder.title}`
  cal_name = reminder.calendar.title
  cal = m_dict[cal_name]
  event.calendar = cal
  //console.warn(event.calendar.title)
  //已完成事項
  if(reminder.isCompleted)
  {
    event.title = `${reminder.title}`
    event.isAllDay = true
     event.startDate = reminder.dueDate
    event.endDate=reminder.dueDate
//     var ending = new Date(reminder.completionDate)
//     ending.setHours(ending.getHours()+1)
//     event.endDate = ending
    
    var period = (reminder.dueDate-reminder.completionDate)/1000/3600/24
    period = period.toFixed(1)
    if(period < 0)
    {
      period = -period
      event.location = " 延期" + period + "天完成" 
    }
    else if (period == 0)
    {
      event.location = " 準時完成"
    }
    else
    {
       event.location = " 提前" + period + "天完成"
    }
  }
  //未完成事項
  else{
      const nowtime  = new Date()
      var period = (reminder.dueDate-nowtime)/1000/3600/24
      period = 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 = nowtime
           event.endDate = nowtime
          event.isAllDay = true    
        }
        //在同一天的保持原來的時間
        else
        {
          event.title = `${reminder.title}`
          event.isAllDay = false  
          event.startDate = reminder.dueDate
          var ending = new Date(reminder.dueDate)
          ending.setHours(ending.getHours()+1)
          event.endDate = ending
        }
         console.log(`【${reminder.title}】待辦順延${-period}天` )
      }
      else
      {
         event.title = `${reminder.title}`
         event.isAllDay = false
         event.location = "還剩" + period + "天" 
         event.startDate = reminder.dueDate
         var ending = new Date(reminder.dueDate)
         ending.setHours(ending.getHours()+1)
         event.endDate = ending
      }
    }
    if(!reminder.dueDateIncludesTime)
       event.isAllDay = true
  event.save()
}

第三步:设置自动化同步行事历与提醒事项

接着开启iPhone捷径App的自动化功能,新增一个自动化项目,我们要设置让行事历App开启的时候就执行Scriptable脚本把提醒事项同步过去。

选择「行事历 App」打开的时候执行这个自动化捷径脚本,并且勾选「立即执行」。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

新增一个空白的自动化操作,在动作的地方搜索 Scriptable。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

然后选择刚才我们新增的那个「行事历与提醒事项同步」的这个脚本。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

最后按下完成就可以了结束自动化同步的设置。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

第四步:开启 iPhone 行事历检视同步效果

接着你就可以开启 iPhone 行事历看看提醒事项的内容有没有被同步过来,第一次开启应该会遇到下面这个权限要求,都同意就好了,但因为刚刚还没给权限,所以同步不会成功。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

把 iPhone 行事历关掉再重新打开一次,应该就可以看到 iPhone 行事历和提醒事项的内容有正确同步了。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

而且如果已经完成的提醒事项内容,在行事历上面也会被勾起来,让你知道这条已经处理好了。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

建议多设置一个特定时间自动同步

如果你有设置 iPhone 行事历的 Widget 小工具在桌面的话,并且习惯看 Widget 小工具的话,我建议大家可以在设置一个每天特定时间自动同步的自动化条件。

因为上面教大家的方法只有在你开启行事历的时候会进行同步,但这样你一早起床想要直接从桌面 Widget 看看今天有什么行程的话,就得先点开一下行事历,让提醒事项同步过去行事历后,Widget 才会显示提醒事项的内容。

如果按照下面这样多设置一个特定时间自动同步的条件。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

让 iPhone 行事历和提醒事项在你平常会看行事历的时间之前完成同步,就可以直接在 widget 上看到每天最新的日历内容。

教大家一招开启 iPhone 行事历就自动同步、整合提醒事项的技巧

同场加映:可以设置行事历、备忘录与待办事项的App

另外,我们之前也介绍过一款App《Tiny Planner》,这是一款结合了行事历、备忘录以及待办事项的App,让你不用在各个App之间切换来切换去,就能够一口起完全掌握要做的事情,甚至通过备忘录来做纪录。

除了自己手动输入外,也可以和 iPhone 内的行事历同步,更多关于这款《Tiny Planner》的详细介绍可以看下面延伸阅读的链接。

iPhone 行事历 App 分享 Tiny Planner 备忘录 笔记 待办事项 整合

iPhone 行事历自动同步提醒事项:总结

以上就是今天要跟大家分享,让你可以在iPhone行事历开启的时候(或是在特定时间点)自动同步提醒事项的方法,这样就算没有升级到iOS 18也可以在iPhone行事历上面看到有哪些待办事项,甚至是已经完成的也会标示出来让你知道,同时也会显示在Widget小工具上,不需要开启行事历就能够掌握每天的行程以及待处理事项,相当方便。

(0)
CodeMasterXCodeMasterX

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注