I’m writing an app that, among other things, displays very large images (e.g. 106,694 x 53,347 pixels). These are GeoTIFF images, in this case containing digital elevation data for a whole planet. I will eventually need to be able to draw polygons on the displayed image.
There was a time when one would use CATiledLayer, but I wonder what is best today. I started this app in Swift/Cocoa, but I'm toying with the idea of starting over in SwiftUI (my biggest hesitation is that I have yet to upgrade to Big Sur).
The image data I have is in strips, with an integral number of image rows per strip. Strips are not guaranteed to be contiguous in the file. Pixel formats vary, but in the motivating use case are 16 bits per pixel, with the values signifying meters. As a first approximation, I can simply display these values in a 16 bpp grayscale image.
Is the right thing to do to set up a CoreImage pipeline? As I understand it that should give me some automatic memory management, right?
I’m hoping to find out the best approach before I spend a lot of time going down the wrong path.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
I have some code calling this method:
mutating
func
readOffset() UInt64
{
let offset: UInt64
debugLog("readOffset")
switch (self.formatVersion)
{
case .v42:
let offset32: UInt32 = self.reader.get()
offset = UInt64(offset32)
case .v43:
offset = self.reader.get()
}
return offset
}
If I put a breakpoint on the switch statement, Xcode never stops there, and if the debugLog() call is commented out, I can't even step into the function at the call site; it just runs to the next breakpoint in my code, wherever that happens to be.
If I put the breakpoint on debugLog(), it stops at the breakpoint.
If I put breakpoints at the self.reader.get() calls, it stops at those breakpoints AND I can step into it.
This is a unit test targeting macOS, and optimization is -Onone.
Xcode 12.4 (12D4e) on Catalina 10.15.7 (19H524).
For years I've poked at a little personal project, an electronic schematic capture app. It's basically a specialized version of something like Illustrator or Omnigraffle, in that you create graphical objects from primitives, instantiate them onto the canvas, and connect them with polylines.
I'm very new to SwiftUI, but I'm wondering if it makes sense to build a new custom view to handle drawing this canvas as a "native" SwiftUI view. I know it's possible to wrap NSViews in SwiftUI, but if SwiftUI can handle it, I'd like to just reimplement it.
There are a number of requirements that complicate things:
This view lives inside a scroll view (or at least, it has bounds that usually extend beyond the window).
The view contains custom graphics and text.
Some graphical elements span large portions of the canvas (e.g. the poly lines connecting components).
The number of individual elements can be quite high (performance concerns). Quadtrees are often used to help with this.
It zooms
Marquee-selection
Mouse down, drag, and up changes the model in significant and varied ways.
Hovering can change appearance of some items.
Can SwiftUI handle all this? I tried to find an example or documentation, but was not having much luck. Almost everything is iOS-focused, so precise and nuanced mouse handling is uncommon.
I'm developing a little USB device for use with macOS, and the name includes the non-ASCII character ū:
LATIN SMALL LETTER U WITH MACRON
Unicode: U+016B, UTF-8: C5 AB
My source file is UTF-8 encoded, but as I understand it, USB uses UTF-16LE encoding for all its strings.
GCC (which I'm using to compile the code for the device) doesn't implement the \u unicode point escape. So I tried "productname\xc5\xab", which causes USB Prober to report the Product String as "productname\u016b".
Is that just USB Prober not properly rendering the string? Or am I still not encoding it correctly?
I’ve been having a heckuva time getting macOS (Catalina) to let my app open the associated -wal and -shm files. Googling for answers, it seems macOS should already know about these, but if not, I can create NSIsRelatedItemType additions. But that didn't seem to work for me:
Is there something more I need to do?
If I put the main SQLite file to open inside the app's container, then SQLite can open the associated files just fine.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>SQLiteDocument</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>LSItemContentTypes</key>
<array>
<string>org.sqlite.sqlite3</string>
</array>
<key>NSDocumentClass</key>
<string>$(PRODUCT_MODULE_NAME).Document</string>
</dict>
		<dict>
				<key>CFBundleTypeExtensions</key>
				<array>
						<string>sqlite-shm</string>
						<string>sqlite-wal</string>
						<string>sqlite-journal</string>
				</array>
				<key>CFBundleTypeName</key>
				<string>Support Type</string>
				<key>CFBundleTypeRole</key>
				<string>Editor</string>
				<key>NSIsRelatedItemType</key>
				<true/>
		</dict>
</array>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.database</string>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>SQLite3</string>
<key>UTTypeIcons</key>
<dict/>
<key>UTTypeIdentifier</key>
<string>org.sqlite.sqlite3</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>sqlite</string>
</array>
</dict>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.database</string>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>SQLite3</string>
<key>UTTypeIcons</key>
<dict/>
<key>UTTypeIdentifier</key>
<string>org.sqlite.sqlite3</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>sqlite</string>
</array>
</dict>
</dict>
</array>
</dict>
</plist>
We have some HTML content embedded in our app. These live in two top-level folders. These folders have been localized, and so live in Resources/en.lproj/HelpContent and Resources/fr.lproj/HelpContent (for example). Similarly, we have a bunch of localized .storyboard files.Xcode 8 builds this just fine. Xcode 9b6 complains:duplicate output file
'/Users/me/Library/Developer/Xcode/DerivedData/MyApp-
fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/
HelpContent' on task: CpResource
/Users/me/Projects/Clients/MyCompany/repo/mp_vision/iOS/Controller/MyApp
/Resources/fr.lproj/HelpContent
/Users/me/Library/Developer/Xcode/DerivedData/MyApp-
fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/
HelpContent (in target 'MyApp')unable to build node:
'/Users/me/Library/Developer/Xcode/DerivedData/MyApp-
fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/
HelpContent' (node is produced by multiple commands; e.g.,
'b1132708c20f997e752faabcee01d49c82a500833121dcd848c3954357d9f7b1:
CpResource
/Users/me/Projects/Clients/MyCompany/repo/mp_vision/iOS/Controller/MyApp
/Resources/en.lproj/HelpContent
/Users/me/Library/Developer/Xcode/DerivedData/MyApp-
fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/
HelpContent' and
'b1132708c20f997e752faabcee01d49c82a500833121dcd848c3954357d9f7b1:
CpResource
/Users/me/Projects/Clients/MyCompany/repo/mp_vision/iOS/Controller/MyApp
/Resources/fr.lproj/HelpContent
/Users/me/Library/Developer/Xcode/DerivedData/MyApp-
fdskkibuvbsubudkmqtgsjxmyqme/Build/Products/Debug-iphoneos/MyApp.app/
HelpContent')The Files & Groups list shows it correctly (e.g. "HelpContent" with "HelpContent (English)" and "HelpContent (French)" as sub-folders. The folders only show up once in the Copy Bundle Resources phase.But the build stops almost immediately on this error.