I want to get thumbnail image from USDZ model from vision os, But it will get image without material apply. Here is my code
import Foundation
import SceneKit
import SceneKit.ModelIO
class ARQLThumbnailGenerator {
private let device = MTLCreateSystemDefaultDevice()!
/// Create a thumbnail image of the asset with the specified URL at the specified
/// animation time. Supports loading of .scn, .usd, .usdz, .obj, and .abc files,
/// and other formats supported by ModelIO.
/// - Parameters:
/// - url: The file URL of the asset.
/// - size: The size (in points) at which to render the asset.
/// - time: The animation time to which the asset should be advanced before snapshotting.
func thumbnail(for url: URL, size: CGSize, time: TimeInterval = 0) -> UIImage? {
let renderer = SCNRenderer(device: device, options: [:])
renderer.autoenablesDefaultLighting = true
if (url.pathExtension == "scn") {
let scene = try? SCNScene(url: url, options: nil)
renderer.scene = scene
} else {
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
renderer.scene = scene
}
let image = renderer.snapshot(atTime: time, with: size, antialiasingMode: .multisampling4X)
self.saveImageFileInDocumentDirectory(imageData: image.pngData()!)
return image
}
func saveImageFileInDocumentDirectory(imageData : Data){
var uniqueID = UUID().uuidString
let tempPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
let tempDocumentsDirectory: AnyObject = tempPath[0] as AnyObject
let uniqueVideoID = uniqueID + "image.png"
let tempDataPath = tempDocumentsDirectory.appendingPathComponent(uniqueVideoID) as String
try? imageData.write(to: URL(fileURLWithPath: tempDataPath), options: [])
}
}
Swift
RSS for tagSwift is a powerful and intuitive programming language for Apple platforms and beyond.
Posts under Swift tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
I am exploring on managing state in SwiftUI app with purpose built Views due to the advantages for managing dependency with Environment.
This is the minimal example I came up with:
@MainActor
struct AsyncStateModifier<T: Equatable>: View {
let input: T
let action: (T) async -> Void
@Environment var queue: AsyncActionQueue
var body: some View {
return EmptyView()
.onChange(of: input, initial: true) { old, new in
queue.process(action: action, with: input)
}
}
}
The drawback of this approach is initial: true allows the onChange callback to fire when view appears and since EmptyView doesn't appear the action is never executed initially.
When replacing EmptyView with Rectangle().hidden() this can be achieved, but I wanted to avoid having any impact on view hierarchy and EmptyView is suitable for that. Is there any alternative approach to make something like this possible?
I'm making a Swift Program.
I got a .a file that builded from some c++ scripts,and I can see some fuctions in it by commed "nm *.a",
and a .h file like this
My question is how to call the fuctions in .a like "testDebug",I can call from c# like
[DllImport("__Internal")]
private static extern void testDebug();
Google's answer always with a right .h file,Maybe I should make .h file correct first.
Any reply would be greatly appreciated.
Hello,
I am developing a private internal Flutter app for our customer, which will not be published on the Apple Store. One of the key features of this app is to collect RF strength metrics to share user experience with the network.
For Android, we successfully implemented the required functionality and are able to collect the following metrics:
Signal strength level (0-4)
Signal strength in dBm
RSSI
RSRQ
Cell ID
Location Area Code
Carrier name
Mobile country code
Mobile network code
Radio access technology
Connection status
Duplex mode
However, for iOS, we are facing challenges with CoreTelephony, which is not returning the necessary data. We are aware that CoreTelephony is deprecated and are looking for alternatives.
We noticed that a lot of the information we need is available via FTMInternal-4. Is there a way to access this data for a private app? Are there any other recommended approaches or frameworks that can be used to gather cellular network information on iOS for an app that won't be distributed via the Apple Store?
my swift code
import Foundation
import CoreTelephony
class RfSignalStrengthImpl: RfSignalStrengthApi {
func getCellularSignalStrength(completion: @escaping (Result<CellularSignalStrength, Error>) -> Void) {
let networkInfo = CTTelephonyNetworkInfo()
guard let carrier = networkInfo.serviceSubscriberCellularProviders?.values.first else {
completion(.failure(NSError(domain: "com.xxxx.yyyy", code: 0, userInfo: [NSLocalizedDescriptionKey: "Carrier not found"])))
return
}
let carrierName = carrier.carrierName ?? "Unknown"
let mobileCountryCode = carrier.mobileCountryCode ?? "Unknown"
let mobileNetworkCode = carrier.mobileNetworkCode ?? "Unknown"
let radioAccessTechnology = networkInfo.serviceCurrentRadioAccessTechnology?.values.first ?? "Unknown"
var connectionStatus = "Unknown"
...
...
}
Thank you for your assistance.
I'm trying to change app icon on Dock in macOS from my app. But couldn't get to work. The setAlternateIconName works fine in iOS simulator, but when I run in on my mac (Catalyst) I got this error: The requested operation couldn’t be completed because the feature is not supported.
Apple Doc - https://developer.apple.com/documentation/uikit/uiapplication/2806818-setalternateiconname
Thank you
I have a virtual machine using apple's sample code on their developer page but i have no audio.
How do i create and setup an audio device for the vm?
I want to automatically load different views depending on OS (OSX or iOS). Is there a way that I can do this without the user having to click on a link? This is my code so far.
struct ContentView: View {
#if os(iOS)
var myOS = "iOS"
#elseif os(OSX)
var myOS = "OSX"
#else
var myOS = "Something Else"
#endif
var body: some View {
NavigationStack {
VStack {
Text("PLEASE WAIT....")
.font(.system(size: 24))
.fontWeight(.bold)
}
.padding()
if (myOS == "OSX"){
// Goto Screen for iMac
}
else{
// go to screen for iOS
}
}
}
}
If I use "NavigationLink", my understanding is that the user would need to click on a link. Is there some way to do this without user interaction?
I'm debugging some Regex Builder code in my Playground. I run
the following piece code:
let timeMatchWithout = possibleTime.firstMatch(of: timeWithoutSec)
and I get this error message:
Regex.Match optional storedCapture contains no some
What could this possibly mean? contains no some???
Here is a more complete snippet, if this helps:
let hourRef = Reference<Substring>()
let minuteRef = Reference<Substring>()
let hourReg = Regex {
ChoiceOf {
Capture(as: hourRef) {
One(.digit)
One(.digit)
}
Capture(as: hourRef) {
One(.digit)
}
}
}
let minuteReg = Regex {
ChoiceOf {
Capture(as: minuteRef) {
One(.digit)
One(.digit)
}
Capture(as: minuteRef) {
One(.digit)
}
}
}
let ampmRef = Reference<Substring>()
let ampmReg = Regex {
Capture(as: ampmRef) {
ZeroOrMore {
ChoiceOf {
One("am")
One("pm")
One("a.m.")
One("p.m.")
}
}
} /* transform: {
$0.lowercase
} */
}.ignoresCase()
let timeWithoutSec = Regex {
hourReg
One(":")
minuteReg
ZeroOrMore(.whitespace)
ampmReg
}.ignoresCase()
let possibleTime = "10:20 AM"
let timeMatchWithout = possibleTime.firstMatch(of: timeWithoutSec)
The last line produces the error message.
Thanks for the help.
Note the removed transform: on the ampmReg definition. If that is included the compiler times out as noted in my previous post, yesterday.
Why does this Regex Builder code in my SwiftUI app not work? I'm parsing a string that might
be a date and time with either AM or PM specified for the time. This bit
of code looks for the optional AM or PM.
The error I get is:
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
What would 'distinct sub-expressions' mean in this case?
The code:
let ampmRef = Reference<Substring>()
let ampmReg = Regex {
Capture(as: ampmRef) {
ZeroOrMore {
ChoiceOf {
One("am")
One("pm")
}
}
} transform: {
$0.lowercase
}
}.ignoresCase()
In a related question, is there a way to return a default if the ChoiceOf fails both AM and PM?
I'm trying to get the same path you'd get by running getconf DARWIN_USER_CACHE_DIR in the terminal, but via
FileManager.default.urls(for: , in:) , but can't really find out how
is there a way to do that other than running the shell script via swift?
I have an extremely straightforward situation where an @IBOutlet in a ViewController is connected to a property in an XIB file. I've been working with iOS apps for more than ten years, and done this about a million times.
For some reason, the property becomes nil at some point after the view is loaded. I can check with the debugger to see that it is not nil at viewDidLoad, and there is nothing in my code that sets it to anything else.
I added a custom setter and getter to the variable so that I could stop in the debugger when it gets set, and the setter only gets called once, with a non-nil value.
I suspect that somehow, a different copy of my ViewController is getting instantiated, but when it does, there are no calls to any of the usual methods like viewDidLoad. In fact there is not even a call to the init method. I don't understand how this is possible.
Hi, I am new to Swift and would like to write a simple Swift script to show some HDR images or video on my VisionPro. I tried to find some code online as shown in the attachment to put one HDR image and one SDR side by side, but it seems like not to take any HDR effect. Thanks in advance.
I am little confused about when to use State / StateObject / ObservedObject.
What I have researched and what I understand:
@State --> for value types
@StateObject --> for reference types
@ObservedObject --> child objects who needs reference to above two (the parent object should have @State/@StateObject and the object should conform to Observable)
I am clear about Environment object.
Gents, dev(il)s,
I am looking for a piece of code or principal explanation to realise following:
I have a array of struct Item{}
Each item has child [Item]
in the content view I would like to have a hierarchical displayed tree of my Items and for each Item line I would like to have a button to remove it or add a child item for a selected one
I tired List entity, navigation and have no real success. Is anybody there to give me a small guide?
Thank you
M
In our app, we needed to use visionkit framework to lift up the subject from an image and crop it. Here is the piece of code:
if #available(iOS 17.0, *) {
let analyzer = ImageAnalyzer()
let analysis = try? await analyzer.analyze(image, configuration: self.visionKitConfiguration)
let interaction = ImageAnalysisInteraction()
interaction.analysis = analysis
interaction.preferredInteractionTypes = [.automatic]
guard let subject = await interaction.subjects.first else{
return image
}
let s = await interaction.subjects
print(s.first?.bounds)
guard let cropped = try? await subject.image else { return image }
return cropped
}
But the s.first?.bounds always returns a cgrect with all 0 values. Is there any other way to get the position of the cropped subject? I need the position in the image from where the subject was cropped. Can anyone help?
I've been encountering a strange crash that occurs randomly on my app's startup. The app compiles and (usually) runs just fine but every so often will close out immediately within a second or two of launching. I have found no methods to consistently reproduce this crash.
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6
Last Exception Backtrace:
0 CoreFoundation 0x1a5498870 __exceptionPreprocess + 164
1 libobjc.A.dylib 0x19d7fbc00 objc_exception_throw + 60
2 CoreFoundation 0x1a551d4f8 -[NSException init] + 0
3 Foundation 0x1a439877c -[NSObject(NSKeyValueCoding) setValue:forKey:] + 284
4 UIKitCore 0x1a796b188 -[UIViewController setValue:forKey:] + 80
5 UIKitCore 0x1a796b10c -[UIRuntimeOutletConnection connect] + 84
I would include the full crash report but for the URL needed for file attachments contains sensitive language somehow?? Any help resolving this issue would be greatly appreciated.
Hi there -- I'm cleaning up the accessibility in our app and making sure it adheres to Apple's suggested guidelines.
For accessibilityHint, apple lists a couple of suggestions in the doc here: https://developer.apple.com/documentation/objectivec/nsobject/1615093-accessibilityhint
Notably this one is one that I'm having to change a lot in our app:
Don’t include the action type in the hint. For example, don't create hints like “Tap to play the song” or “Tapping plays the song.”
However, we have some buttons that do different actions based on a double or triple tap in VoiceOver, so our hint looks something like: "Double tap to do X, Triple Tap to do Y"
This violates the accessibilityHint guidelines, but I feel like changing this would mean the customer loses out on valuable information. What does apple suggest we do in this case?
Thanks in advance!
Hello developers !
I've created a List or a ForEach from a binding where there are TextFields or TextEditors inside.
When I go to fill in the text, the keyboard dismisses after one char is typed in !
My need is to be able to add textfields as much as required.
Please have a look to this code
import SwiftUI
struct ContentView: View {
@State private var messages = ["Hello 1","Hello 2","Hello 3"]
var body: some View {
VStack(alignment: .leading) {
List($messages, id: \.self) { $msg in
TextEditor(text: $msg)
}
ForEach($messages, id: \.self) { $msg in
VStack{
TextEditor(text: $msg)
}
.contextMenu{
Button(role: .destructive, action: {
messages = messages.filter {$0 != msg}
}, label:{
Text("Delete entry")
})
}
}
Button(action: {
messages.append("-")
}
, label: {
Text("Add a row")
})
}
.background(.black)
.padding()
}
}
#Preview {
ContentView()
}
I'm using iOS 17.4 and Xcode 15.3
Thanks !
Hello fellow developers,
We are trying to develop a chatbot application for ios devices using the powers of Oracle Digital Assistant.
Main Documentation :- https://docs.oracle.com/en/cloud/paas/digital-assistant/use-chatbot/oracle-ios.html
Implementation instructions :- https://blogs.oracle.com/digitalassistant/post/oracle-techexchange-using-the-oracle-ios-sdk-to-integrate-oracle-digital-assistant-in-mobile-applications
The point is when we are trying to run the app, we are facing tons of warnings as in below screenshot.
Here is the code for the ViewController.swift as below:
//
// ViewController.swift
// ODA_Configure
//
// Created by Macbook on 15/05/24.
//
//import UIKit
//
//class ViewController: UIViewController {
//
// override func viewDidLoad() {
// super.viewDidLoad()
// // Do any additional setup after loading the view.
// }
//
//
//}
// Import the SDK
import UIKit
import BotClientUISDK
public class ViewController: UIViewController {
// Declare a global BotsViewController variable in your app view controller class
public var chatViewController: BotsViewController?
public override func viewDidLoad() {
super.viewDidLoad()
// Obtain a shared instance of BotsViewController from BotsUIManager
chatViewController = BotsUIManager.shared().viewControllerInstance()
// Specify the color changes if any in a particular component. Make sure you set all the required colors in BotsProperties before adding the chat view to the view controller.
// Add the chatViewController to your navigationController
self.navigationController?.pushViewController(chatViewController!, animated: false)
// Obtain a shared instance of BotsManager
let botsManager = BotsManager.shared()
// If you require access to callback methods provided in AuthenticationProvider. Make sure your class conforms to BotsMessageServiceDelegate
// botsManager.authenticationTokenProvider = self
let baseUrl = "idcs-oda-81e5e7409d52405784089abe830a8820-da12.data.digitalassistant.oci.oraclecloud.com"
let channelID = "ff8a2d3f-7d65-4dab-a09a-d8f574ce5b7a"
// Initialize a BotsConfiguration object and set feature flags if required.
let botsConfiguration = BotsConfiguration(url: baseUrl , channelId: channelID)
BotsManager.shared().connect(botsConfiguration: botsConfiguration)
// Set the feature flag values if the desired values are different from the default values
botsConfiguration.showConnectionStatus = true
botsConfiguration.enableSpeechSynthesis = true
botsConfiguration.disablePastActions = "none"
// Initialize the configuration in botsViewController. Make sure you set all the feature flag values before passing the botsConfiguration to initConfiguration.
chatViewController?.initConfiguration(botsConfiguration: botsConfiguration)
// If you require access to callback methods provided in BotsMessageServiceDelegate. Make sure your class conforms to BotsMessageServiceDelegate
//botsManager.delegate = self
// If you require access to callback methods provided in BotsEventListener. Make sure your class conforms to BotsEventListener
//botsManager.botsEventListener = self
// Initialize and establish connection to the chat server
BotsManager.shared().initialize(botsConfiguration: botsConfiguration, completionHandler: { (connectionStatus, error) in
if error != nil {
print ("Error: \(String(describing: error?.localizedDescription))")
} else {
print ("Connection Status: \(connectionStatus)")
}
})
}
}
After executing this code, we are getting the message as build succeeded , and this is the emulator, which happens to be blank white all the time.
Possibly due the warning which I have posted above this seems to be the showstopper in the development. We are developing this for a prestigious client and would request an assistance as soon as possible.
P.S :- We are using Xcode 15 with Simulator of version 17.0.
Hi, I have been receiving an email error message:
ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
when submitting an app to the App Store Connect using xcode.
I have searched for many solutions online, but none of them have worked. Later, I manually created the SwiftSupport directory and copied the Swift dynamic library (dylib) that the app depends on to this directory, as well as copying them to the. app/Frameworks directory. After submitting, I received an email saying that these. dylib dynamic libraries are not in the. app/Frameworks directory. I opened the IPA file and checked the directory, and I really saw that they are located below. I don't know where the problem is, can you tell me the exact reason?