iPhone行事曆如何同步提醒事項?用自動化腳本輕鬆實現

相信有不少人都會將臨時代辦事項記錄在 iPhone「提醒事項」App內,如果想要將 iOS「提醒事項」自動同步到「行事曆」內要怎麼做?同步功能似乎需要依賴第三方 App 才能達成,那有沒有免費又能快速解決的方案?

其實要讓 iOS 提醒事項與行事曆同步透過捷徑自動化就能輕鬆實現,這篇就來分享搭配自動化 Scripts 腳本,實現每次透過 iPhone 提醒事項紀錄生活瑣碎的事情,都能自動同步到行事曆內。

iPhone行事曆如何同步提醒事項?用自動化腳本輕鬆實現

 

通常 iOS 內建「提醒事項」App,如果要將代辦事項同步到行事曆內,都要手動點選才能搬移加入,這種做法非常不人性化,反而比較推薦讓行事曆與提醒事項同步會更智慧又省時,實現效果如下畫面,當 iPhone 在提醒事項內增加後,就會立即同步到行事曆內,省去要手動搬移的步驟,實現步驟可參考底下iPhone行事曆如何同步提醒事項教學:

iPhone行事曆如何同步提醒事項?用自動化腳本輕鬆實現

 

如何將 iPhone行事曆同步提醒事項教學

本篇教學不管是 iPhone 或 iPad 設備都能使用,系統需 iOS 14 或 iPadOS 14 或以上。

1. 替iOS行事曆與提醒事項建立相同列表

要實現 iPhone 行事曆與提醒事項同步功能,要在兩款 App 內都建立相同的列表名稱,後續才能同步。

先打開「提醒事項」App,點選右下角「新增列表」,自訂想同步的列表名。

如何將 iPhone行事曆同步提醒事項教學

接下來開啟 iOS 內建「行事曆」App,點選底下「行事曆」會進入行事曆列表清單,點選左下角「加入行事曆」。

如何將 iPhone行事曆同步提醒事項教學1

輸入與「提醒事項」App 相同的列表名稱,按下右上角「完成」,後續想將重要事情紀錄在同步的列表內即可。

如何將 iPhone行事曆同步提醒事項教學2

 

2. 建立 Scripts 同步腳本

為了能夠實現 iPhone 內建行事曆與提醒事項同步,我們需要利用「Scripts App」來運行自動化 JavaScript 腳本。

下載並且打開「Scripts」App,點選右上角「+」新增按鈕,會出現新的腳本頁面,點擊上方「Untitled Script」文字後,將名稱改為「提醒事項同步行事曆」。

建立 Scripts 同步腳本

並且將後面的iOS 提醒事項同步行事曆代碼直接複製貼上,按下「Done」關閉。

建立 Scripts 同步腳本1

iOS 提醒事項同步行事曆代碼

腳本原作者:汀力

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()
}

 

會看見「提醒事項同步行事曆」Scripts 腳本後,就可以退回主畫面。

建立 Scripts 同步腳本3

 

3. 建立捷徑自動化

開啟「捷徑」App ,點選「自動化」>「製作個人自動化操作」,選擇「App」。

建立捷徑自動化

按下「App」按鈕,搜尋並且勾選「提醒事項」和「行事曆」。

建立捷徑自動化1

最後確定自動化操作是否設定為「已開啟」,就可以按「下一步」。在動作編輯頁面中,點選「加入動作」。

建立捷徑自動化2

利用搜尋找到「Scriptable」,並且從 Run Script 內選擇剛創建的 JavaScript 自動化腳本。

建立捷徑自動化3

最後點擊「下一步」。

建立捷徑自動化4

會進入自動化執行設定頁面,將「執行前先詢問」和「執行時通知」兩項功能都關閉,最後點擊「完成」。

建立捷徑自動化5

 

4. 排除自動化錯誤

以上步驟就能實現打開內建「行事曆」或「提醒事項」App,就會立即自動同步,不過 Sctiptable 沒有設定好權限,會導致執行腳本會出現「找不到日曆錯誤」情況,會發現兩個 App 之間沒辦法同步,底下告訴大家解決方法。(此步驟一定要做)

排除自動化錯誤

先打開 iOS 內建「設定」,找到「Scriptable」控制設定,將「行事曆」和「提醒事項」關閉再次開啟,偏好語言設定為「英文」。

iphone calendar sync reminders 14b

都設定完成後,將 iPhone 重開機一次,打開「Scriptable」App 執行「提醒事項同步行事曆」腳本,觀察 Log 如果沒有跳出任何黃字錯誤,能夠正常運行就代表已經成功。

iphone calendar sync reminders 14a

 

5. 實現行事曆與提醒事項同步

以上全部都設定完成後,後續只要打開「行事曆」或「提醒事項」其中一款 App 就會立即同步,只要紀錄在「提醒事項」App 的未完成的代辦事項,就會立即同步到「行事曆」App 內,甚至會顯示還剩多少時間。

實現行事曆與提醒事項同步

要是完成的代辦事項,在行事曆內也會看間打勾狀態,透過行事曆也能清楚知道今天有哪些未完成的工作,不管是日常生活、工作或學業都很方便。

實現行事曆與提醒事項同步1

 

要是打開行事曆 App 沒有出現提醒事項的項目,檢查「提醒事項」內是否有設定日期時間,或是將行事曆 App 從後台關閉再次打開就可以,當然也可以建立好幾組提醒事項列表,只要行事曆有對應的名稱兩邊就能夠同步。

 

如何刪除行事曆內的提醒事項項目?

要是有些提醒事項已經完成,還是會一直顯示在 iOS 行事曆內要怎麼刪除?這部分要透過刪除提醒事項的項目才能移除,操作方法如下:

打開「提醒事項」App 的項目,按下右上角「•••」>「顯示已完成的項目」。

如何刪除行事曆內的提醒事項項目1

列表就會顯示已經完成的代辦事項,往左滑動選擇「刪除」已經完成的事項,就能夠將行事曆已完成的項目也移除。

如何刪除行事曆內的提醒事項項目2

 

功能總結

透過這篇技巧後,就可以讓 iPhone行事曆與提醒事項進行同步功能,而且免費又方便,只要有新增移除和編輯動作,一切透過提醒事項內操作就可以,行事曆只是單純顯示。

 

更多實用技巧:

喜歡這篇文章教學,後續想了解更多Apple資訊、iPhone、Mac、3C隱藏技巧,歡迎追蹤 瘋先生FB粉絲團瘋先生LINE@訂閱瘋先生Google新聞TelegramInstagram以及 訂閱YouTube頻道,將會有更多非常實用的技巧教學分享給大家。

返回頂端
Share to...