2017-11-29 21 views
4

私はApple's sample appなどどこでも見ました。 しかし、電話でコードを実行しなくても場所をリクエストできる場所はどこにも見つかりません。以下のコードは「インターフェイスコントローラ」で使用すると「未定」のステータスを返します。私は自分のinfo.plistにプライバシーキー値が設定されていることを確認しました。ペアリングされた電話機のコードなしで、Appleウォッチでの場所をリクエストしてください

import Foundation 
import CoreLocation 

class LocationManager: NSObject, CLLocationManagerDelegate { 

    /// Location manager to request authorization and location updates. 
    let manager = CLLocationManager() 

    /// Flag indicating whether the manager is requesting the user's location. 
    var isRequestingLocation = false 

     var workoutLocation: CLLocation? 

    func requestLocation() { 

     guard !isRequestingLocation else { 
      manager.stopUpdatingLocation() 
      isRequestingLocation = false 
      return 
     } 

     let authorizationStatus = CLLocationManager.authorizationStatus() 

     switch authorizationStatus { 
     case .notDetermined: 
      isRequestingLocation = true 
      manager.requestWhenInUseAuthorization() 

     case .authorizedWhenInUse: 
      isRequestingLocation = true 
      manager.requestLocation() 

     case .denied: 
      print("Location Authorization Denied") 
     default: 
      print("Location AUthorization Status Unknown") 
     } 
    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     guard !locations.isEmpty else { return } 

     DispatchQueue.main.async { 
      let lastLocationCoordinate = locations.last!.coordinate 

      print("Lat = \(lastLocationCoordinate.latitude)") 

      print("Long = \(lastLocationCoordinate.longitude)") 

      self.isRequestingLocation = false 

     } 
    } 
} 

メインアプリケーションのInfo.plist

<key>NSLocationAlwaysUsageDescription</key> 
    <string>We will read your location while performing a workout to create a workout route</string> 
    <key>NSLocationUsageDescription</key> 
    <string>We will read your location while performing a workout to create a workout route</string> 
    <key>NSLocationWhenInUseUsageDescription</key> 
    <string>We will read your location while performing a workout to create a workout route</string> 

ウォッチ延長のInfo.plist

<key>NSLocationAlwaysUsageDescription</key> 
    <string>We will read your location while performing a workout to create a workout route</string> 
    <key>NSLocationUsageDescription</key> 
    <string>We will read your location while performing a workout to create a workout route</string> 
    <key>NSLocationWhenInUseUsageDescription</key> 
    <string>We will read your location while performing a workout to create a workout route</string> 

答えて

8

ユーザーのみが自分のiPhone上のその場所へのアクセス権を付与することができます。アップルウォッチではできません。ウォッチが接続されているiPhoneがロックされていない場合は、電話機に位置の使用許可を求めるプロンプトが表示されます。このためにiOSでコードを実行する必要はありません。 App Programming Guide for watchOS: Leveraging iOS Technologies

から

は、いくつかの技術のための許可が ユーザーのiPhoneに受け入れなければならないことに注意してください。ユーザーは、特定のシステム テクノロジ(コアの場所など)を使用するための許可を与える必要があります。これらの技術のうちの1つをWatchKit拡張機能の を使用すると、ユーザーのiPhoneの で適切なプロンプトが表示されます。 Apple Watchはまた、自分自身のプロンプトを表示し、 にiPhoneの許可要求を表示するように要求します。ユーザーのアクセス権が必要なテクノロジについての情報 については、「App Programming Guide for iOS」の「 ユーザープライバシーのサポート」を参照してください。

+0

私はまだ何かが不足していると思っています。私は 'whenInUseStatus'を時計で要求しますが、iPhone上でポップアップするプロンプトが表示されません。 iPhoneでコードを実行する必要はありませんか? – GarySabo

+0

iPhoneのターゲットだけでなく、ウォッチターゲットにも 'Info.plist'ファイルを正しく設定していますか?はい、ドキュメンテーションでも、プロンプトがiOSコードなしでiPhoneに表示されることが明示的に記載されています。 –

+0

私はかなり確信しています、私は私の質問に私のinfo.plist値を追加しました。 – GarySabo

関連する問題