📱 App Development Study/iOS🍎

[Udemy iOS & Swift Bootcamp] 현재 위치 정보 사용하기

ibelieveinme 2023. 5. 15. 23:44
728x90

앱에서 현재 위치 정보 받아오는 법 !


1. CoreLocation 클래스 import 해주기

2. CLLocationManager를 선언하기

3. requestWhenInUseAuthorization()으로 현재 위치정보 접근권한 받아오기

import CoreLocation

let locationManager = CLLocationManager()

locationManager.requestWhenInUseAuthorization()

 

위 세줄 추가함!

 

4. Property 정보 추가해주기

앱의 기본설정을 담당하는 Info.plist 파일에 Property 를 추가해주어야 한다. (.plist는 property list의 줄임말이고 property list 파일의 확장자다)

Privacy - Location When In Use Usage Description 

 

Value에는 위치 정보를 사용하는 이유 적어주기

We need your location to get the curretn weather for where you are.

그럼 요렇게 왜 권한이 필요한지 설명이 함께 뜬다. Apple store 심사제출할 때 많이 reject 당하는 사유이므로 꼭 넣어주자.

 

5. CLLocationManagerDelegate 구현하기

CLLocationManager의 requestLocation() 함수를 호출하면 위치값을 가져올 수 있다.

이 위치값을 우리가 원하는대로 커스터마이징하려면 extension으로 함수를 재정의해주고 delegate로 CLLocationManager를 우리 클래스(WeatherViewController)가 관리하자.

import UIKit
import CoreLocation//CLLocationManager 사용하기 위해 import

class WeatherViewController: UIViewController {

    @IBOutlet weak var conditionImageView: UIImageView!
    @IBOutlet weak var temperatureLabel: UILabel!
    @IBOutlet weak var cityLabel: UILabel!
    @IBOutlet weak var searchTextField: UITextField!
    
    var weatherManager = WeatherManager()
    let locationManager = CLLocationManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        //locationManager의 delegate 사용하기
        locationManager.delegate = self
        //권한 요청
        locationManager.requestWhenInUseAuthorization()
        //현재 위치를 한번만 요청
        locationManager.requestLocation()
        
        weatherManager.delegate = self
        searchTextField.delegate = self
    }
    @IBAction func locationPressed(_ sender: UIButton) {
        locationManager.requestLocation()
    }
    
}

먼저 WeatherViewController 클래스에 CLLocationManger를 선언해주고 해당 클래스를 delegate 로 추가해준다.

이렇게 하면 CLLocationManager의 delegate(대리자)가 WeatehrVIewController가 되기때문에 CLLocationManager의 일을 대신할 수 있다.

extension WeatherViewController: CLLocationManagerDelegate{
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.last {
            let lat = location.coordinate.latitude
            let lon = location.coordinate.longitude // api 와 변수명을 맞추기 위해 lat, lon 사용
            print(lat)
            print(lon)
        }
        print("Got location data")
    }
    
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error)
    }
}

CLLocationManager의 requestLocation() 함수를 호출해서 나오는 위치값을 우리가 원하는대로 커스터마이징하기 위해 extension을 선언한 부분이다.

CLLocationManager의 requestLocation() 함수를 호출하면 locationManager함수 2가지를 호출한다. didUpdateLocations와 didFailWithError. 둘중하나라도 구현을 안해주면 에러가 나므로  error 함수도 재정의해줄 것 !

 

* Apple 공식 문서 참고

https://developer.apple.com/documentation/corelocation/cllocationmanager

 

CLLocationManager | Apple Developer Documentation

The object that you use to start and stop the delivery of location-related events to your app.

developer.apple.com

 

728x90