Tabbed Application 탬플릿 기반의 프로젝트를 생성하여 미리알림과 위치알림을 세팅하는 테스트 앱을 만들어본다.


mainStorayboard 에서 첫번째 탭 UI 는 텍스트필드, 버튼, 데이트피커 세개의 오브젝트를 만들고 컨트롤러와 연결한다.(시간알림사용UI)

두번째 탭 UI는 텍스트필드와 버튼 두개의 오브젝트를 만들고 컨트롤러와 연결한다.(위치알림사용UI)



AppDelegate.swift 파일에 아래와같이 eventKit 을 import 하고 eventStore 변수를 선언해준다.

import UIKit

import EventKit


@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {


    var window: UIWindow?

    var eventStore : EKEventStore?

.

.

.





FirstViewController.swift 파일의 소스코드


import UIKit

import EventKit


class FirstViewController: UIViewController {


    @IBOutlet weak var reminderText: UITextField!

    @IBOutlet weak var myDatePicker: UIDatePicker!

    

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    

    @IBAction func setReminder(sender: AnyObject) {

        

        if appDelegate.eventStore == nil {

            

            appDelegate.eventStore = EKEventStore()

            appDelegate.eventStore?.requestAccessToEntityType(EKEntityType.Reminder, completion: {(granted, error) in

                if !granted {

                    print("Access to store not grated")

                    print(error?.localizedDescription)

                } else {

                    print("Access grated")

                }

            })

        }

        if (appDelegate.eventStore != nil) {

            self.createReminder()

        }

    }

    

    func createReminder() {

        let reminder = EKReminder(eventStore: appDelegate.eventStore!)

        reminder.title = reminderText.text!

        reminder.calendar = appDelegate.eventStore!.defaultCalendarForNewReminders()

        let date = myDatePicker.date

        let alarm = EKAlarm(absoluteDate: date)

        

        reminder.addAlarm(alarm)

        

        do {

            try appDelegate.eventStore?.saveReminder(reminder, commit: true)

        } catch let error as NSError {

            print("Reminder failed with error \(error.localizedDescription)")

        }

    }

    

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

        reminderText.endEditing(true)

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }



}






SecondViewController.swift 의 소스코드


import UIKit

import EventKit

import CoreLocation


class SecondViewController: UIViewController, CLLocationManagerDelegate {


    @IBOutlet weak var locationText: UITextField!

    

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    

    //var appDelegate : AppDelegate?

    

    var locationManager : CLLocationManager = CLLocationManager()

    

    @IBAction func setLocationReminder(sender: AnyObject) {

        

        if appDelegate.eventStore == nil {

            appDelegate.eventStore = EKEventStore()

            appDelegate.eventStore?.requestAccessToEntityType(EKEntityType.Reminder, completion: {(granted: Bool, error: NSError?) in

                if !granted {

                    print("Access to store not grated")

                } else {

                    print("Access grated")

                }

            })

        }

        

        if (appDelegate.eventStore != nil) {

            locationManager.requestLocation()

        }

    }

    

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        

        let reminder = EKReminder(eventStore : appDelegate.eventStore!)

        reminder.title = locationText.text!

        reminder.calendar = appDelegate.eventStore!.defaultCalendarForNewReminders()

        let location = EKStructuredLocation(title: "Current Location")

        location.geoLocation = locations.last

        let alarm = EKAlarm()

        alarm.structuredLocation = location

        alarm.proximity = EKAlarmProximity.Leave

        reminder.addAlarm(alarm)

        

        do {

            try appDelegate.eventStore?.saveReminder(reminder, commit: true)

        } catch let error as NSError {

            print("Reminder failed with error \(error.localizedDescription)")

        }

    }

    

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {

        print("failed to get location: \(error.localizedDescription)")

    }

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

        locationManager.requestWhenInUseAuthorization()

        locationManager.delegate = self

        locationManager.distanceFilter = kCLDistanceFilterNone

        locationManager.desiredAccuracy = kCLLocationAccuracyBest

        

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }


}




info.plist 파일에 알림접근 권한에 대한 메시지 키-값 추가











위의 
코드는  "핵심만 골라 배우는 ios 9 프로그래밍 (닐스미스 지음/ 황반석 옮김)" 에 있는 예제를 참고하여 작성하였습니다.

+ Recent posts