7 Replies
      Latest reply on Nov 6, 2015 3:12 AM by AlexanderDeplov
      AlexanderDeplov Level 1 Level 1 (0 points)

        I'm new to OS X development, but I have some experience on iOS.

         

        I want to get current location on OS X. I created super simple project, basicaly it's a blank project with core location code added. I use Swift language for development here.

         

        Here is AppDelegate file:

         

        import Cocoa
        import CoreLocation
        @NSApplicationMain
        class AppDelegate: NSObject, NSApplicationDelegate, CLLocationManagerDelegate {
            func applicationDidFinishLaunching(aNotification: NSNotification) {
           
                if CLLocationManager.authorizationStatus().rawValue == 1 || CLLocationManager.authorizationStatus().rawValue == 2 {
                    return
                }
                print(CLLocationManager.authorizationStatus().rawValue)// log: 0
           
                if CLLocationManager.locationServicesEnabled() {
                    let locationManager = CLLocationManager()
                    locationManager.delegate = self
               
                    locationManager.startUpdatingLocation()
                    print("ok") //log: ok
                }
                
            }
        
            func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) {
           
                print("\(newLocation) \(oldLocation)")
           
            }
        
            func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) {
                print(locations)
            }
        
            func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
           
                print(status)
           
            }
        
            func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
                print(error)
            }
        }
        

         

        As you can see, all is pretty obvious here.

         

        CLLocationManager.authorizationStatus is always returns me 0, (e.g. NotDetermined).

         

        I'm expecting to see some iOS like promt to a user, but I don't see it. And I don't recive any location update. No one of this delegate methods are called. I don't understand where I made a mistake, I read Location and Maps Programming Guide and I think I made all steps like in the docs.

         

        Hope somebody could help me with this.

        • Re: Location updates on OS X
          NotMyName Level 4 Level 4 (865 points)

          See "Requesting Permission to Use Location Services" in the CLLocationManager documentation for the process you're supposed to implement.

           

          You're just checking the authorization status and never actually calling the request for authorization.  As a result, authorization status is always going to be NotDetermined.

          • Re: Location updates on OS X
            AlexanderDeplov Level 1 Level 1 (0 points)

            I fixed my problem, but the "fix" is very doubtful.

             

            In my code I changed

            
            //To:
                    locationManager = CLLocationManager()
                    locationManager.delegate = self
               
                    if CLLocationManager.locationServicesEnabled() {
            //From here:
            //            locationManager = CLLocationManager()
            //            locationManager.delegate = self
               
                        locationManager.startUpdatingLocation()
                   
                        print("ok")
               
                    }
            
            
            

             

            And autorisation prompt started to show!

            I tried code on MBP and iMac, both didn't show the prompt untill this change. After the changes all fine.

            The strange thing is that if I return code back, like in the original post, all works fine now, prompt will be shown (tried on both Macs too).

             

            I'm not sure what it was. The only question I have left: I don't see my project at Security & Privacy in System Preferences. Is it ok for development?