NOTE! It turns out that my Xcode 16.1 project is born with a Launch Screen Storyboard, where I could just insert my launch image! That solved it for me.
Post
Replies
Boosts
Views
Activity
From the video "How To Add An App Icon In Xcode 14" - https://www.youtube.com/watch?v=OO8PM9PsE90 - and the comment that says use "CMD + Shift + O" to search for 'assets', I can conclude that in my Xcode project "assets catalog" is a weird Apple code for this folder:
Project Navigator -> -> Resources -> Images -> AppIcon
NOW I can add my single 1024x1024 icon image file, and let Xcode 16.1 create all the size versions it needs!
PS: The answer from "DTS Engineer" just repeats the false claim that there exists an "assets catalog" called "Assets.xcassets". That folder still does not exist in my Xcode 16.1 project... But I solved the problem.
After having followed the advice from DTS Engineer from Apple, including buying a new USB cable, my conclusion is that it is not possible to connect an iPhone 7 running iOS 15.8.3 to Xcode 16.1 on MacOS 15.0.1 Sequoia.
This is quite unsatisfactory. For me, it puts Apple in a very bad light. I can add that I have used this iPhone 7 with earlier versions of Xcode (on earlier versions of MacOS) without problems!
The fact that I pay more than 100 USD per year for the license to be an iOS app developer makes me even more unsatisfied. Now I have to buy another (newer) iPhone...
Are you sure this is what you mean?:
[quote='811766022, DTS Engineer, /thread/767515?answerId=811766022#811766022']
ensure that the iOS version on your iPhone is at least as old as the minimum iOS version supported by the Xcode version you're using
[/quote]
The lowest Minimum Deployment option on the General tab, under Targets, is iOS 15.6, and my iPhone just updated to 15.8.3. So what you are saying is that I need to downgrade iOS on the phone below iOS 15.6?
That sounds strange.
That is a very strange idea...!
Homebrew was installed AFTER the "xcode-select --install" command...
And System Settings -> Software Update agreed that the Command Line Tools needed to be updated...!
Closing and Restarting Xcode solved it for me - and many others - see https://developer.apple.com/forums/thread/133759 .
Yes, that works perfectly! Thank you!
When I searched for information on displaying maps on iOS I found this:
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/LocationAwarenessPG/MapKit/MapKit.html
And the part about MKmapview NOT showing all annotations here:
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html#//apple_ref/doc/uid/TP40009497-CH6-SW45
Now that you mention it, I can see that it might be outdated archived documentation. But that was what I found when I searched, and it doesn't refer you to any newer versions, so I assumed it was up-to-date.
But again: Thank you very much! Now it looks perfect.
Thank you very much!!
I can see now that MKMarkerAnnotationView has variables/properties to turn the displaying of a title and a subtitle on/off, but MKPinAnnotationView does not have such logic. (Strange.)
But... :-) There is still a problem:
Unless you zoom in, one or more MKPointAnnotation(s) are not shown at all, and on other MKPointAnnotation(s) the title text is missing. For my purpose, I want all information to be displayed all the time.
This subject - how many annotations to draw on the map - is described here:
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html
Excerpts:
" All annotations are drawn at the same scale every time, regardless of
the map’s current zoom level. If your map contains many annotations,
your annotation views could overlap each other as the user zooms out. To
counter this behavior, you can add and remove annotations based on the
map’s current zoom level.
...
Implementing the logic necessary to add and remove annotations
is your responsibility.
...
The only way to eliminate annotation overcrowding is to remove some of
the annotation objects from the map view. This typically involves
implementing the mapView:regionWillChangeAnimated: and mapView:regionDidChangeAnimated:
methods to detect changes in the map zoom level. During a zoom change,
you can add or remove annotations as needed based on their proximity to
one another. You might also consider other criteria (such as the user’s
current location) to eliminate some annotations. "
According to that, it is the KMLviewer code that removes annotations based on zoom level. But where is that code? I can't find any 'regionWillChangeAnimated' or 'regionDidChangeAnimated' in the code.
Thank you!
Wauw! Yes - that works!
I would never have gotten that idea - that the documentation on MapKit - MKMapView - is so misleading...
Thank you!
Now all 'balloon' markers are shown all the time.
There is only one small inconvenience: Some of the title texts only appear when zooming. Do you know if there is any way of also forcing them to always be turned on?
Thank you!
That command is a bit cryptic to me... :-)
And the result is not exactly as expected - I mean latitudes and longitudes are within [-90;+90] and [-180;+180], but the numbers below are much much larger?
(lldb) po overlays.map {$0 as! MKPolyline}.map {Array(UnsafeBufferPointer(start:$0.points(),count:$0.pointCount))}
▿ 10 elements
▿ 0 : 2 elements
▿ 0 : MKMapPoint x : 117883367.59539957
y : 70861444.881933
▿ 1 : MKMapPoint x : 118607415.83505598
y : 70680834.53921854
▿ 1 : 2 elements
▿ 0 : MKMapPoint x : 118441733.74494734
y : 71578008.7574973
▿ 1 : MKMapPoint x : 117749165.70252322
y : 71814479.09122863
▿ 2 : 2 elements
▿ 0 : MKMapPoint x : 118311383.29024056
y : 71083267.28620416
▿ 1 : MKMapPoint x : 119039612.1903483
y : 70938560.8337035
▿ 3 : 2 elements
▿ 0 : MKMapPoint x : 117349946.79156
y : 71842649.73875001
▿ 1 : MKMapPoint x : 117798366.05769886
y : 72412616.11056598
▿ 4 : 2 elements
▿ 0 : MKMapPoint x : 117630562.56314905
y : 70896032.54940976
▿ 1 : MKMapPoint x : 116901460.90088205
y : 71039800.62831044
▿ 5 : 2 elements
▿ 0 : MKMapPoint x : 117238216.79458134
y : 71348308.82833827
▿ 1 : MKMapPoint x : 117001456.46769533
y : 72040794.67949402
▿ 6 : 2 elements
▿ 0 : MKMapPoint x : 117987254.6410381
y : 72066796.5154083
▿ 1 : MKMapPoint x : 118291226.77453867
y : 71401739.6663419
▿ 7 : 2 elements
▿ 0 : MKMapPoint x : 117274415.68432339
y : 71712389.33240001
▿ 1 : MKMapPoint x : 116717162.22724375
y : 71232706.02820335
▿ 8 : 2 elements
▿ 0 : MKMapPoint x : 118103113.58567446
y : 70920013.76664141
▿ 1 : MKMapPoint x : 117442255.64753546
y : 71255771.67482962
▿ 9 : 2 elements
▿ 0 : MKMapPoint x : 118404987.20831521
y : 71705176.99185553
▿ 1 : MKMapPoint x : 119010223.05936122
y : 72110774.61697051
(lldb)
Thank you very much!
When converted like that, the geographic coordinates look perfect. So the overall question still remains: Why are none of the MKPolyline(s) visible on the map?
For more information on this project, see https://developer.apple.com/forums/thread/680107
This is the main swift file in the KMLviewer project:
swift
//
// KMLViewerViewController.swift
// KMLViewer
//
// Translated by OOPer in cooperation with shlab.jp, on 2015/10/17.
//
//
/*
Copyright (C) 2015 Apple Inc. All Rights Reserved.
See LICENSE.txt for this sample’s licensing information
Abstract:
Displays an MKMapView and demonstrates how to use the included KMLParser class to place annotations and overlays from a parsed KML file on top of the MKMapView./
import UIKit
import MapKit
@objc(KMLViewerViewController)
class KMLViewerViewController: UIViewController, MKMapViewDelegate {
@IBOutlet private weak var map: MKMapView!
private var kmlParser: KMLParser!
override func viewDidLoad() {
super.viewDidLoad()
map.mapType = .hybridFlyover
// Locate the path to the file in the application's bundle
// and parse it with the KMLParser.
let url = Bundle.main.url(forResource: "KML_Sample", withExtension: "kml")!
self.kmlParser = KMLParser(url: url)
self.kmlParser.parseKML()
// Add all of the MKOverlay objects parsed from the KML file to the map.
let overlays = self.kmlParser.overlays
overlays.forEach {overlay in
if let polyline = overlay as? MKPolyline {
var coords = Array(repeating: CLLocationCoordinate2D(), count: polyline.pointCount)
polyline.getCoordinates(&coords, range: NSRange(0..polyline.pointCount))
print(coords)
}
}
self.map.addOverlays(overlays)
let temp_debug = overlays.map {$0 as! MKPolyline}.map {Array(UnsafeBufferPointer(start:$0.points(),count:$0.pointCount))}
// Add all of the MKAnnotation objects parsed from the KML file to the map.
let annotations = self.kmlParser.points
self.map.addAnnotations(annotations)
// Walk the list of overlays and annotations and create a MKMapRect that
// bounds all of them and store it into flyTo.
var flyTo = MKMapRect.null
for overlay in overlays {
if flyTo.isNull {
flyTo = overlay.boundingMapRect
} else {
flyTo = flyTo.union(overlay.boundingMapRect)
}
}
for annotation in annotations {
let annotationPoint = MKMapPoint(annotation.coordinate)
let pointRect = MKMapRect(x: annotationPoint.x, y: annotationPoint.y, width: 0, height: 0)
if flyTo.isNull {
flyTo = pointRect
} else {
flyTo = flyTo.union(pointRect)
}
}
// Position the map so that all overlays and annotations are visible on screen.
self.map.visibleMapRect = flyTo
}
//MARK: MKMapViewDelegate
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) - MKOverlayRenderer {
return self.kmlParser.rendererForOverlay(overlay)!
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) - MKAnnotationView? {
return self.kmlParser.viewForAnnotation(annotation)
}
}
Thank you very much to both of you!
Now it works!
I choose the solution where the code is put in the KMLparser and not in the main file. That seems more correct and as kind of a preparation for implementing detecting style elements inside Linestring. But since I don't have different styles on different lines, I haven't bothered enhancing the parser itself. I am still a beginner in Swift. :-)
Thank you very much to both of you!
Now it works!
I choose the solution where the code is put in the KMLparser and not in the main file. That seems more correct and as kind of a preparation for implementing detecting style elements inside Linestring. But since I don't have different styles on different lines, I haven't bothered enhancing the parser itself. I am still a beginner in Swift. :-)
OK. Thanks!
I guess I will have to look at the definition of MKMapPoint tomorrow - now it's bed time. :-)
Yes! I have attached the KML file.
EDIT: I clicked the 'Text attachment' icon below this editor, but I can't see the file here... So I have put it here instead: transformation.dk/deling/geo-esp-series-2.kml