앱에서 현재 위치 정보 받아오는 법 !
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
'📱 App Development Study > iOS🍎' 카테고리의 다른 글
[Udemy iOS & Swift Bootcamp] Navigation Controller Stack (0) | 2023.06.17 |
---|---|
Apple Property Lists Document (0) | 2023.05.17 |
[Udemy iOS & Swift Bootcamp] extension (0) | 2023.05.14 |
[Udemy iOS & Swift Bootcamp] Internal and External Parameter Names (0) | 2023.05.13 |
[Udemy iOS & Swift Bootcamp] Computed Property(연산 프로퍼티) (0) | 2023.05.07 |