iOS 11에서 위치 서비스가 작동하지 않음
저는 방금 iOS 11 SDK로 앱을 다시 만들었습니다.blue banner
그것은 지금 항상 나타나고 있습니다.저는 "훌륭해요, 효과가 있었어요"라고 생각했지만, 위치 서비스가 이제 전혀 작동하지 않는다는 것을 발견했습니다.
iOS 10에서 작동하던 애플리케이션 - 누가 들은 것이 있습니까?
애플이 또 다른 개인 정보 보호 기능을 추가한 것으로 보입니다.이제 사용자는 우리의 데이터를 무시할 수 있습니다.requestAlwaysAuthorization
로 다운그레이드합니다.requestWhenInUseAuthorization
즉, 개발자로서 우리는 이제 두 가지 설명을 모두 제공해야 합니다.Info.plist
새 키를 추가했습니다.NSLocationAlwaysAndWhenInUseUsageDescription
/*
* Either the NSLocationAlwaysAndWhenInUseUsageDescription key or both the
* NSLocationAlwaysUsageDescription and NSLocationWhenInUseUsageDescription
* keys must be specified in your Info.plist; otherwise, this method will do
* nothing, as your app will be assumed not to support Always authorization.
*/
그러나 위치 서비스가 여전히 작동하지 않는 이 새 키를 사용했을 때 추가로 검색한 결과 이 보석이 모든 추가 디버깅 정보와 섞여 있는 것을 발견했습니다.
이 앱은 사용 설명 없이 개인 정보 보호 관련 데이터에 액세스하려고 시도했습니다.앱의 Info.plist는 NSLocation을 모두 포함해야 합니다.항상 그리고사용 중인 경우사용설명 및 NS 위치앱이 이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값이 포함된 InUseUsageDescription 키를 사용하는 경우
그것은 제가 업데이트에서 발견한 코멘트와 직접적으로 모순됩니다.CLLocationManager.h
제가 레이더를 만들었습니다.
좋은 소식입니다. 디버깅 콘솔의 조언을 따르면, 즉, 새 키를 모두 추가합니다.NSLocationAlwaysAndWhenInUseUsageDescription
그리고 오래된 열쇠 중 하나.NSLocationWhenInUseUsageDescription
위치 서비스가 다시 작동하기 시작합니다.
이 문제를 해결하는 단계를 추가하려면 다음과 같이 하십시오.
2가지 방법:
쉬운 방법: Info.plist 파일을 선택하고 속성을 추가합니다. 속성은 LOCATION 대신 Privacy로 시작합니다. 따라서 이러한 변수의 정확한 이름은 "Privacy - Location..."로 시작합니다.여기에 각 항목을 추가하고 사용자가 경고에서 이를 어떻게 볼 수 있는지 설명합니다.
어려운/재미있는/프로그램적인 방법 (나는 이 방법이 더 좋습니다):
앱의 Info.plist를 마우스 오른쪽 버튼으로 클릭하고 "소스 코드 보기"를 선택하면 XML로 모두 표시됩니다.
다른 ...... 형식을 따르고 다음과 같이 속성을 추가합니다.
<key>NSLocationAlwaysUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app uses your Microphone to allow Voice over IP communication with the Program Admin system</string>
저장한 다음 info.plist 파일을 마우스 오른쪽 단추로 클릭하고 Property list를 선택합니다. 그러면 파일이 기본 보기로 다시 표시됩니다.
편집:
다른 멤버가 코드를 요청했는데, 여기 있습니다.
당신에게.H 파일, 추가:
@property (strong, nonatomic) CLLocationManager *LocationManager;
.M 파일에서 ViewDidAppear() 함수 아래에 다음을 추가합니다.
_LocationManager = [[CLLocationManager alloc] init];
[_LocationManager setDelegate:self];
_LocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_LocationManager.pausesLocationUpdatesAutomatically = NO;
[_LocationManager requestAlwaysAuthorization];
_LocationManager.headingFilter = 5;
_LocationManager.distanceFilter = 0;
[_LocationManager startUpdatingLocation];
[_LocationManager startUpdatingHeading];
이것이 저에게 잘 작동하는 것이고, 코드가 당신에게도 잘 작동하기를 바랍니다.
안부 전해요
하이더
iOS11에서 작업하는 것은 Info.plist가 최소한 NSLocation이 필요하다는 것을 발견했습니다.항상 그리고Info.plist에서 사용 중인 경우:
앱이 다국어일 때 문자열의 현지화된 버전에는 이 게시물에 언급된 세 개의 키가 모두 필요합니다.requestAlwaysAuthorization()
그리고.locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)
자동으로 실패합니다.
예를 들어 독일어 번역을 보여주는 사진:
이것이 당신이 발을 헛디딜 때 시간을 절약해 주기를 바랍니다.
Swift 4.0.3에서 작업
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Will you allow this app to always know your location?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>
다음 단계를 수행합니다.
"항상 권한 부여"가 필요한 앱에서 동일한 문제가 발생하여 다음 단계를 수행하여 문제를 해결했습니다.
1.더하다 NSLocationWhenInUseUsageDescription
에 대한 열쇠.Info.plist
2.더하다 NSLocationAlwaysAndWhenInUseUsageDescription
Info.plist
3.더하다 NSLocationAlwaysUsageDescription
Info.plist
(< iOS 11 지원)
4. requestWhenInUseAuthorization()
requestAlwaysAuthorization(
)
요청을 실행할 수 없습니다.요청 전 항상 권한 부여()사용 시권한 부여().해당 권한 수준으로 에스컬레이션해야 합니다.이러한 변경을 수행한 후 위치 업데이트가 다시 제대로 작동하기 시작했습니다.
자세한 내용은 여기에서 확인할 수 있습니다.
Swift 5가 설치된 iOS 12.2에서 테스트됨
1단계. plist 파일에 다음 개인 정보 보호 권한을 추가해야 합니다.
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Application requires user’s location for better user experience.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Application requires user’s location for better user experience.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Application requires user’s location for better user experience.</string>
2단계. 현재 위치를 확인하려면 다음과 같은 신속 코드가 있어야 합니다.
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
// MARK: Variables declearations
@IBOutlet weak var mapView: MKMapView!
var locationManager: CLLocationManager!
// MARK: View Controller life cycle methods
override func viewDidLoad() {
super.viewDidLoad()
//TODO: Make user you must add following three privacy permissions in plist
//NSLocationWhenInUseUsageDescription
//NSLocationAlwaysAndWhenInUseUsageDescription
//NSLocationAlwaysUsageDescription
getCurrentLocation()
}
func getCurrentLocation()
{
if (CLLocationManager.locationServicesEnabled())
{
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
}
}
// MARK: Location Manager Delegate methods
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
let locationsObj = locations.last! as CLLocation
print("Current location lat-long is = \(locationsObj.coordinate.latitude) \(locationsObj.coordinate.longitude)")
showOnMap(location: locationsObj)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Get Location failed")
}
func showOnMap(location: CLLocation )
{
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
mapView.setRegion(region, animated: true)
}
}
후회하는 것보다 안전한 것이 낫습니다.iOS 11에서: 아래를 추가하면 당신은 좋습니다.
<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>
스위프트: 3 나는 같은 문제에 직면했습니다.저는 해결책을 찾는 것에 완전히 실패했습니다.여기 제가 문제를 해결한 방법이 있습니다.
step-1 : Project file > Capabilities > 백그라운드 모드 > Location Update 선택
2단계 : NS 위치 추가사용 중인 경우사용설명, NS 위치항상 그리고Info.plist에 대한 사용 중인 경우 설명 키
3단계:
manager.pausesLocationUpdatesAutomatically = false
manager.allowsBackgroundLocationUpdates = true
언급URL : https://stackoverflow.com/questions/44424092/location-services-not-working-in-ios-11
'IT' 카테고리의 다른 글
인덱스의 데이터 프레임과 팬더의 데이터 (0) | 2023.09.10 |
---|---|
AWS ECR에 대한 도커 푸시가 즉시 중단되고 시간 초과됨 (0) | 2023.09.05 |
mysql에 비해 npm mariasql의 이점 (0) | 2023.09.05 |
MySQL에 대한 SQL LEFT-JOIN 2개 필드 (0) | 2023.09.05 |
Python 스크립트를 사용하여 가상 환경 활성화 (0) | 2023.09.05 |