24
"リマインダー"の繰り返しを 自由に設定する Cocoa勉強会 #64 / 2014-02-08 / 木村渡 Powered by Rabbit 2.1.1 and COZMIXNG

リマインダーの繰り返しを自由に設定する (EventKit)

Embed Size (px)

DESCRIPTION

Cocoa勉強会(関東) 64回 2014-02-08 EventKitを利用して、リマインダーアプリからは指定できない「繰り返し」を設定する。

Citation preview

Page 1: リマインダーの繰り返しを自由に設定する (EventKit)

"リマインダー"の繰り返しを自由に設定する

Cocoa勉強会#64/2014-02-08/木村渡

Powered by Rabbit 2.1.1 and COZMIXNG

Page 2: リマインダーの繰り返しを自由に設定する (EventKit)

リマインダー

http://support.apple.com/kb/HT4970?viewlocale=ja_JP

Page 3: リマインダーの繰り返しを自由に設定する (EventKit)

リマインダー

iOS/OS Xの標準アプリ

指定の期日にアラーム/通知

iCloudやiTunes経由で同期できる

これでタスク管理をしようとすると「むきー!」となるので注意

Page 4: リマインダーの繰り返しを自由に設定する (EventKit)

背景

iOS7になってからリマインダーを使いはじめた。

「3週間ごとの繰り返し」を設定したいモノができた。既定の繰り返しからしか選べない?

Page 5: リマインダーの繰り返しを自由に設定する (EventKit)

背景

Page 6: リマインダーの繰り返しを自由に設定する (EventKit)

EventKit

第55回の発表参照。

カレンダーとリマインダーへのアクセスを提供するフレームワーク。Calendar and Reminders Programming Guide (Mac Developer Library)邦訳カレンダーとリマインダーのプログラミングガイド

Page 7: リマインダーの繰り返しを自由に設定する (EventKit)

EKRecurrenceRule

EKRecurrenceFrequency

interval

Days of the Week

どうみても、いろんな繰り返しが指定できそう。

Page 8: リマインダーの繰り返しを自由に設定する (EventKit)

EKRecurrenceRule

ドキュメントを見た感じではさまざまな設定が可能。

実際に試して、確認する必要がある。

現在利用可能なもの以外の繰り返しの指定を受け入れるか。

リマインダーアプリがその繰り返しで動作するか。

Page 9: リマインダーの繰り返しを自由に設定する (EventKit)

EventKit超概要(リマインダー)

このような階層になっている。

EKEventStore - リマインダーor イベント

EKCalendar - "ビジネス"、"買い物"などの種類。

EKReminder - 個々のリマインダー

Page 10: リマインダーの繰り返しを自由に設定する (EventKit)

RubyCocoa+irbで試してみる

% irb1.8 -rosx/cocoa --simple-prompt>> include OSX>> require_framework 'EventKit'

※デモはirbでなくpryです。

Page 11: リマインダーの繰り返しを自由に設定する (EventKit)

ストアとカレンダーを取得

>> store = EKEventStore.alloc. initWithAccessToEntityTypes( EKEntityTypeReminder)>> calendars = store.calendarsForEntityType( EKEntityTypeReminder)>> calendar = calendars.find {|cal| cal.title == "テストだよ!"}

Page 12: リマインダーの繰り返しを自由に設定する (EventKit)

新規のリマインダーを作成

>> reminder = EKReminder. reminderWithEventStore(store)>> reminder.title = "3週間ごとに実⾏する!>> reminder.calendar = calendar

Page 13: リマインダーの繰り返しを自由に設定する (EventKit)

リマインダー期限を設定

>> due_date = NSDateComponents.alloc.init>> due_date.year = 2014; due_date.month = 2; due_date.day = 8>> due_date.hour = 18; due_date.minute = 30>> reminder.dueDateComponents = due_date

NSDateでいいじゃん…

Page 14: リマインダーの繰り返しを自由に設定する (EventKit)

3週間ごとの繰り返しを作成

>> rule = EKRecurrenceRule.alloc. initRecurrenceWithFrequency_interval_\ end(EKRecurrenceFrequencyWeekly, 3, nil)>> reminder.addRecurrenceRule(rule)

Page 15: リマインダーの繰り返しを自由に設定する (EventKit)

保存する

>> result, err = store.saveReminder_\ commit_error(reminder, true)=> [true, nil]

Page 16: リマインダーの繰り返しを自由に設定する (EventKit)

アプリで確認。

Page 17: リマインダーの繰り返しを自由に設定する (EventKit)

3週間ごとになっているかを確認

完了させて次の繰り返しへ。

Page 18: リマインダーの繰り返しを自由に設定する (EventKit)

3週間ごとになっているかを確認

もう一度。

3週間ごとになってる!

Page 19: リマインダーの繰り返しを自由に設定する (EventKit)

いろんな設定を試してみる

EKRecurrenceRuleの長ーいイニシャライザ。array渡す。

initRecurrenceWithFrequency: interval: daysOfTheWeek:daysOfTheMonth: monthsOfTheYear:weeksOfTheYear: daysOfTheYear: setPositions:end:

Page 20: リマインダーの繰り返しを自由に設定する (EventKit)

月2回(15日,月末)

frequency: EKRecurrenceFrequencyMonthly

daysOfTheMonth: [15, -1]

Page 21: リマインダーの繰り返しを自由に設定する (EventKit)

毎月第1、第3水曜日

frequency: EKRecurrenceFrequencyMonthly

daysOfTheWeek: EKRecurrenceDayOfWeek.dayOfWeek_weekNumber(4, 1),..

Page 22: リマインダーの繰り返しを自由に設定する (EventKit)

まとめとか感想とか

プログラムからはかなり自由に繰り返しを設定できる。

ただしアプリの表示は「カスタムの繰り返しパターン」に。

Page 23: リマインダーの繰り返しを自由に設定する (EventKit)

まとめとか感想とか

RubyCocoa便利ですよ!(宣伝)

10.5 Leopard以降のOS Xに標準インストール済み。

irb/pryで対話的に試行錯誤できる。コンパイル不要。

ruby 2.0や2.1への対応作業中…

Page 24: リマインダーの繰り返しを自由に設定する (EventKit)

Powered by Rabbit 2.1.1 and COZMIXNG