Unable to retrieve CarrierName

2019-03-13 01:56发布

问题:

Using iPhone6, Xcode 8.1, running iOS 10.1.1, executing the following Swift code I keep getting

Unable to retrieve CarrierName

Error message appears before my first ViewController even loads. I searched for solutions to similar (but not same) CarrierName issues. Most of them recommend to import CoreTelephony. I Added the import of CoreTelephony but i still get the same error. Below is the code snippet that shows viewDidLoad followed by the console output. Any insights into this error?

//  ViewController.swift
//  MapLocator

import UIKit
import MapKit
import CoreLocation
import CoreTelephony


class ViewController: UIViewController, UISearchBarDelegate, MKMapViewDelegate,UINavigationControllerDelegate {
    var searchController:UISearchController!
    var annotation:MKAnnotation!
    var localSearchRequest1:MKLocalSearchRequest!
    var localSearchRequest2:MKLocalSearchRequest!
    var localSearch1:MKLocalSearch!
    var localSearch2:MKLocalSearch!
    var localSearchResponse1:MKLocalSearchResponse!
    var localSearchResponse2:MKLocalSearchResponse!
    var error:NSError!
    var pointAnnotation:MKPointAnnotation!
    var pinAnnotationView:MKPinAnnotationView!
    var placeMark1:MKPlacemark!
    var myRoute : MKRoute?
    var coord1 : CLLocationCoordinate2D!
    var coord2 : CLLocationCoordinate2D!
    //    var newPt : MKMapPoint!

    //    var lineArrayPtr = [MKMapPoint]()
    var lineArrayPtr:UnsafeMutablePointer<MKMapPoint>? = nil
    var pointIndex : Int = 0

    var lp1 : MKMapPoint!
    var lp2 : MKMapPoint!
    var lp3 : MKMapPoint!
    var lp4 : MKMapPoint!

    var searchButtonClicked = 0
    var buttonTouchCount : Double = 0
    let tapsPerMeter : Double = 2
    var pointsPerMeter : Double!
    var tapDistance : Double!

    //**************
    override func viewDidLoad() {
        super.viewDidLoad()
        mapView.delegate = self
        print("Entered viewDidLoad")

        let latitude_x: Double = 42.755139
        let longitude_x: Double = -71.584

        // Init the zoom level
        let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: latitude_x, longitude: longitude_x)
        //let span = MKCoordinateSpanMake(100, 80)
        let span = MKCoordinateSpanMake(0.01, 0.01)
        let region = MKCoordinateRegionMake(coordinate, span)
        self.mapView.setRegion(region, animated: true)
        print("mapView region set")

    }

********************* Console Output *********************** 2016-11-19 22:02:14.442048 MapLocator 3 Match[289:23903] [LogMessageLogging] 6.1 Unable to retrieve CarrierName. CTError: domain-2, code-5, errStr:((os/kern) failure)

Entered viewDidLoad

mapView region set

回答1:

Tray adding CoreTelephony to the AppDelegate maybe? You ViewController implementation is not accessing any CoreTelephony framework methods, thus your problem lies elsewhere.



回答2:

On my iOS device this happens because Settings->Privacy->Location Settings<(app name)->Allow Location Settings isn't set to either "Never" or "While Using the App". Once I set it - it works.



回答3:

As a solution to a different issue I did the following. Whether this fixes it or just suppresses the msg I don't know, as I was getting the msg but it was never crashing my app.

In Xcode

  • Click on your active scheme name right next to the Stop button
  • Click on Edit Scheme....
  • in Run (Debug) select the Arguments tab
  • in Environment Variables click +
  • add variable: OS_ACTIVITY_MODE = disable

credit here : https://stackoverflow.com/a/40160779



回答4:

Maybe this is a litle dumb but check that XCode Maps capabilities is active :) .



标签: ios xcode8.1