Mon projet s'exécute uniquement en simulateur mais ne fonctionne pas dans l'appareil, pourquoi?

Je crée une polyligne dans la carte. et créer avec succès une polyligne en mode carte. Mon problème est, Ce code fonctionne seulement simulateur. ne fonctionne pas sur l'appareil. J'ai essayé de nombreuses fois, mais ne fonctionne pas sur l'appareil.

Générer l'IPA et installer dans mon appareil et planter mon application. Pourquoi? et simplement courir en simulateur, pourquoi?

Je suis ce lien

Pourquoi cela se passe-t-il? S'il vous plaît, aidez Thankyou

mon code

-(void) centerMapForCoordinateArray:(CLLocationCoordinate2D *)routes andCount:(int)count{ MKCoordinateRegion region; CLLocationDegrees maxLat = -90; CLLocationDegrees maxLon = -180; CLLocationDegrees minLat = 90; CLLocationDegrees minLon = 180; for(int idx = 0; idx <count; idx++) { CLLocationCoordinate2D currentLocation = routes[idx]; if(currentLocation.latitude > maxLat) maxLat = currentLocation.latitude; if(currentLocation.latitude < minLat) minLat = currentLocation.latitude; if(currentLocation.longitude > maxLon) maxLon = currentLocation.longitude; if(currentLocation.longitude < minLon) minLon = currentLocation.longitude; } region.center.latitude = (maxLat + minLat) / 2; region.center.longitude = (maxLon + minLon) / 2; region.span.latitudeDelta = maxLat - minLat; region.span.longitudeDelta = maxLon - minLon; [self.mapView setRegion:region animated:YES]; } - (MKPolyline *)polylineWithEncodedSsortingng:(NSSsortingng *)encodedSsortingng { const char *bytes = [encodedSsortingng UTF8Ssortingng]; NSUInteger length = [encodedSsortingng lengthOfBytesUsingEncoding:NSUTF8SsortingngEncoding]; NSUInteger idx = 0; NSUInteger count = length / 4; CLLocationCoordinate2D *coords = calloc(count, sizeof(CLLocationCoordinate2D)); NSUInteger coordIdx = 0; float latitude = 0; float longitude = 0; while (idx < length) { char byte = 0; int res = 0; char shift = 0; do { byte = bytes[idx++] - 63; res |= (byte & 0x1F) << shift; shift += 5; } while (byte >= 0x20); float deltaLat = ((res & 1) ? ~(res >> 1) : (res >> 1)); latitude += deltaLat; shift = 0; res = 0; do { byte = bytes[idx++] - 0x3F; res |= (byte & 0x1F) << shift; shift += 5; } while (byte >= 0x20); float deltaLon = ((res & 1) ? ~(res >> 1) : (res >> 1)); longitude += deltaLon; float finalLat = latitude * 1E-5; float finalLon = longitude * 1E-5; CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(finalLat, finalLon); coords[coordIdx++] = coord; if (coordIdx == count) { NSUInteger newCount = count + 10; coords = realloc(coords, newCount * sizeof(CLLocationCoordinate2D)); count = newCount; } } MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coords count:coordIdx]; free(coords); return polyline; } - (void)getDirections { //Cross country //37.705553,-122.372074 to 25.883937,-80.223026 //Home to work //37.7577,-122.4376 to 37.764473,-122.399639 CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:22.7001469 longitude:75.8758194]; MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; annotation.coordinate = CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude); annotation.title = @"You"; [self.mapView addAnnotation:annotation]; CLLocation *keyPlace = [[CLLocation alloc] initWithLatitude:22.6924483 longitude:75.8653895]; MKPointAnnotation *endannotation = [[MKPointAnnotation alloc] init]; endannotation.coordinate = CLLocationCoordinate2DMake(keyPlace.coordinate.latitude, keyPlace.coordinate.longitude); endannotation.title = @"School"; [self.mapView addAnnotation:endannotation]; CLLocationCoordinate2D endCoordinate; NSURL *url = [NSURL URLWithSsortingng:[NSSsortingng ssortingngWithFormat:@"https://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f&sensor=false&mode=driving", newLocation.coordinate.latitude, newLocation.coordinate.longitude, keyPlace.coordinate.latitude, keyPlace.coordinate.longitude]]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLResponse *response = nil; NSError *error = nil; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; if (!error) { NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&error]; NSLog(@"response == %@",responseDict); if ([[responseDict valueForKey:@"status"] isEqualToSsortingng:@"ZERO_RESULTS"]) { [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Could not route path from your current location" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil, nil] show]; return; } int points_count = 0; if ([[responseDict objectForKey:@"routes"] count]) points_count = [[[[[[responseDict objectForKey:@"routes"] objectAtIndex:0] objectForKey:@"legs"] objectAtIndex:0] objectForKey:@"steps"] count]; if (!points_count) { [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Could not route path from your current location" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil, nil] show]; return; } CLLocationCoordinate2D points[points_count]; NSLog(@"routes %@", [[[[responseDict objectForKey:@"routes"] objectAtIndex:0]objectForKey:@"overview_polyline"] objectForKey:@"points"] ); MKPolyline *polyline = [self polylineWithEncodedSsortingng:[[[[responseDict objectForKey:@"routes"] objectAtIndex:0]objectForKey:@"overview_polyline"] objectForKey:@"points"]]; [self.mapView addOverlay:polyline]; int j = 0; NSArray *steps = nil; if (points_count && [[[[responseDict objectForKey:@"routes"] objectAtIndex:0] objectForKey:@"legs"] count]) steps = [[[[[responseDict objectForKey:@"routes"] objectAtIndex:0] objectForKey:@"legs"] objectAtIndex:0] objectForKey:@"steps"]; for (int i = 0; i < points_count; i++) { double st_lat = [[[[steps objectAtIndex:i] objectForKey:@"start_location"] valueForKey:@"lat"] doubleValue]; double st_lon = [[[[steps objectAtIndex:i] objectForKey:@"start_location"] valueForKey:@"lng"] doubleValue]; //NSLog(@"lat lon: %f %f", st_lat, st_lon); if (st_lat > 0.0f && st_lon > 0.0f) { points[j] = CLLocationCoordinate2DMake(st_lat, st_lon); j++; } double end_lat = [[[[steps objectAtIndex:i] objectForKey:@"end_location"] valueForKey:@"lat"] doubleValue]; double end_lon = [[[[steps objectAtIndex:i] objectForKey:@"end_location"] valueForKey:@"lng"] doubleValue]; //NSLog(@"lat %f lng %f",end_lat,end_lon); //if (end_lat > 0.0f && end_lon > 0.0f) { points[j] = CLLocationCoordinate2DMake(end_lat, end_lon); endCoordinate = CLLocationCoordinate2DMake(end_lat, end_lon); j++; //} } NSLog(@"points Count %d",points_count); // MKPolyline *polyline = [MKPolyline polylineWithCoordinates:points count:points_count]; // [self.mapView addOverlay:polyline]; [self centerMapForCoordinateArray:points andCount:points_count]; } } #pragma mark - MapKit - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { MKPinAnnotationView *annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"]; annView.canShowCallout = YES; annView.animatesDrop = YES; return annView; } - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay { MKPolylineView *overlayView = [[MKPolylineView alloc] initWithOverlay:overlay]; overlayView.lineWidth = 5; overlayView.strokeColor = [UIColor purpleColor]; overlayView.fillColor = [[UIColor purpleColor] colorWithAlphaComponent:0.5f]; return overlayView; } 

Je passe par votre code et exécute en simulateur, il montrera l'avertissement CFNetwork SSLHandshake a échoué (-9824) NSURLSession / NSURLConnection Le chargement HTTP a échoué (kCFStreamErrorDomainSSL, -9824), donc je pense que vous manquez la key NSAppTransportSecurity dans votre plist.

Le problème semble avec le certificate essayez en établissant des certificates de développement et vérifiez le profil d'approvisionnement.

Définissez les certificates et le profil d'approvisionnement appropriés dans le paramètre de construction / cible puis vérifiez.

Plus de détails lisent:

https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppStoreDissortingbutionTutorial/LaunchingYourApponDevices/LaunchingYourApponDevices.html

Essayez de courir dans iphone4s ou 5 simulateur, si elle se bloque dans le simulateur que de changer

 points[j] = CLLocationCoordinate2DMake(end_lat, end_lon); endCoordinate = CLLocationCoordinate2DMake(end_lat, end_lon); j++; 

Avec

 if (j<=points_count) { points[j] = CLLocationCoordinate2DMake(end_lat, end_lon); endCoordinate = CLLocationCoordinate2DMake(end_lat, end_lon); j++; } 

Pourquoi? Parce que nous déclarons des CLLocationCoordinate2D points[points_count]; Donc, Coordinate2D max est points_count mais une certaine valeur de longitude j est plus élevée que le points_count donc nous devons mettre if condition pour j

Vérifiez-le et laissez-moi le savoir résoudre le problème ou non.