Post

Replies

Boosts

Views

Activity

Reply to IP Multicast - Packet sent on button click issue
import SwiftUI import os import Foundation import Network class MulticastController { var multicastIP : NWEndpoint.Host = "239.6.4.50" var multicastPort : NWEndpoint.Port = 5890 let group: NWConnectionGroup init() { let endpoints: [NWEndpoint] = [.hostPort(host: multicastIP, port: multicastPort)] guard let multicast = try? NWMulticastGroup(for: endpoints) else { fatalError("Multicast Group setup error") } let params: NWParameters = .udp params.allowLocalEndpointReuse = true group = NWConnectionGroup(with: multicast, using: params) group.setReceiveHandler(maximumMessageSize: 16384, rejectOversizedMessages: true) { message, data, isComplete in if let data, let value = String(data: data, encoding: .utf8) { print(message, value, isComplete) } else { print(message, isComplete) } } group.stateUpdateHandler = { (newState) in print("Group entered state \(String(describing: newState))") } group.start(queue: .main) } func sendMulticastPacket(message: String) { let data = message.data(using: .utf8) group.send(content: data) { error in if let error = error { print(error.localizedDescription) } else { print("ok") } } } } struct ContentView: View { var session = MulticastController() let message = "Hello World" var body: some View { VStack { Button(action: { session.sendMulticastPacket(message: message) }, label: { Text("Send Multicast Packet") } ) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Apr ’23
Reply to How to structure code to handle mutations from Vision (face detection) requests
Replace mrbean with another image in the assets folder. import SwiftUI @main struct DevForumVisionApp: App { @StateObject var model = VisionModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(model) } } } import SwiftUI import Vision struct ContentView: View { @EnvironmentObject private var model: VisionModel var body: some View { VStack { Image(uiImage: model.uiImage) .resizable() .aspectRatio(contentMode: .fit) Text("faces: \(model.faceCount)") } .onAppear(perform: { model.run() }) .padding() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() .environmentObject(VisionModel()) } } class VisionModel: ObservableObject { @Published private(set) var uiImage = UIImage(named: "mrbean")! @Published private(set) var faceCount: Int = 0 private(set) var request: VNDetectFaceRectanglesRequest? private(set) var handler: VNImageRequestHandler? private(set) var requestOptions = [VNImageOption: Any]() init() { } func run() { handler = VNImageRequestHandler(cgImage: uiImage.cgImage!, options: requestOptions) self.request = VNDetectFaceRectanglesRequest() { [weak self] request, error in if error == nil, let count = request.results?.count { self?.faceCount = count } } if let request, let handler { do { try handler.perform([request]) } catch { print(error) } } } }
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Apr ’23
Reply to Combine AnyCancellable.store(in:) EXC_BAD_ACCESS
Making request async is the issue. This version works without issue in playgrounds: import UIKit import Combine struct User: Codable { let userId: Int let id: Int let title: String let completed: Bool } struct Download { private var cancellables = Set<AnyCancellable>() mutating func request() { URLSession.shared .dataTaskPublisher(for: URL(string: "https://jsonplaceholder.typicode.com/todos/1")!) .map{$0.data} .decode(type: User.self, decoder: JSONDecoder()) .receive(on: DispatchQueue.main) .sink(receiveCompletion: { print ("Received completion: \($0).") }, receiveValue: { data in print(data) }) .store(in: &cancellables) } } var download = Download() download.request() or making request async as follows in playgrounds: import UIKit import Combine struct User: Codable { let userId: Int let id: Int let title: String let completed: Bool } struct Download { private var cancellables = Set<AnyCancellable>() mutating func request() async -> User { return await withCheckedContinuation { continuation in URLSession.shared .dataTaskPublisher(for: URL(string: "https://jsonplaceholder.typicode.com/todos/1")!) .map{$0.data} .decode(type: User.self, decoder: JSONDecoder()) .receive(on: DispatchQueue.main) .sink(receiveCompletion: { print ("Received completion: \($0).") }, receiveValue: { data in continuation.resume(returning: data) }) .store(in: &cancellables) } } } Task { var download = Download() let user = await download.request() print(user) }
Topic: Programming Languages SubTopic: Swift Tags:
Apr ’23
Reply to Please Create a Sendable Version of CKRecord or Make CKRecord Sendable
You can take responsibility for it being Sendable. By default the Sendable protocol is made unavailable to CKRecord. extension CKRecord : @unchecked Sendable { } But these are the supported types that are sendable by default. https://developer.apple.com/documentation/swift/sendable NSFoundation types mention above NSStrings, NSData will not be Sendable but the Swift Foundation types Strings, Data are.
Apr ’23
Reply to SwiftUI - Accessing StateObject's Object Without Being Installed on a View
Follow the design in this sample project: https://developer.apple.com/documentation/coredata/loading_and_displaying_a_large_data_feed
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Apr ’23
Reply to IP Multicast - Packet sent on button click issue
import SwiftUI import os import Foundation import Network class MulticastController { var multicastIP : NWEndpoint.Host = "239.6.4.50" var multicastPort : NWEndpoint.Port = 5890 let group: NWConnectionGroup init() { let endpoints: [NWEndpoint] = [.hostPort(host: multicastIP, port: multicastPort)] guard let multicast = try? NWMulticastGroup(for: endpoints) else { fatalError("Multicast Group setup error") } let params: NWParameters = .udp params.allowLocalEndpointReuse = true group = NWConnectionGroup(with: multicast, using: params) group.setReceiveHandler(maximumMessageSize: 16384, rejectOversizedMessages: true) { message, data, isComplete in if let data, let value = String(data: data, encoding: .utf8) { print(message, value, isComplete) } else { print(message, isComplete) } } group.stateUpdateHandler = { (newState) in print("Group entered state \(String(describing: newState))") } group.start(queue: .main) } func sendMulticastPacket(message: String) { let data = message.data(using: .utf8) group.send(content: data) { error in if let error = error { print(error.localizedDescription) } else { print("ok") } } } } struct ContentView: View { var session = MulticastController() let message = "Hello World" var body: some View { VStack { Button(action: { session.sendMulticastPacket(message: message) }, label: { Text("Send Multicast Packet") } ) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Replies
Boosts
Views
Activity
Apr ’23
Reply to Abuse of a leak in App-store relates to In-App Events , App store Fast Action need
That is keyword aggregation where results are the name of an app or a suggested set of keywords related to a set of apps using them search engine design 101 - palm on face.
Replies
Boosts
Views
Activity
Apr ’23
Reply to How to structure code to handle mutations from Vision (face detection) requests
Replace mrbean with another image in the assets folder. import SwiftUI @main struct DevForumVisionApp: App { @StateObject var model = VisionModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(model) } } } import SwiftUI import Vision struct ContentView: View { @EnvironmentObject private var model: VisionModel var body: some View { VStack { Image(uiImage: model.uiImage) .resizable() .aspectRatio(contentMode: .fit) Text("faces: \(model.faceCount)") } .onAppear(perform: { model.run() }) .padding() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() .environmentObject(VisionModel()) } } class VisionModel: ObservableObject { @Published private(set) var uiImage = UIImage(named: "mrbean")! @Published private(set) var faceCount: Int = 0 private(set) var request: VNDetectFaceRectanglesRequest? private(set) var handler: VNImageRequestHandler? private(set) var requestOptions = [VNImageOption: Any]() init() { } func run() { handler = VNImageRequestHandler(cgImage: uiImage.cgImage!, options: requestOptions) self.request = VNDetectFaceRectanglesRequest() { [weak self] request, error in if error == nil, let count = request.results?.count { self?.faceCount = count } } if let request, let handler { do { try handler.perform([request]) } catch { print(error) } } } }
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Apr ’23
Reply to How do I respond to test device association?
Compliance is your best option, provide the required information in any of your apps meta data on App Store Connect, contact Apple DTS for clarification if your developer account is not being used on Test Devices by a 3rd party outside of your account's normal usage.
Replies
Boosts
Views
Activity
Apr ’23
Reply to Xcode 14.3 not building app in iOS 16.4
Did you enable developer mode in settings app privacy & security?
Replies
Boosts
Views
Activity
Apr ’23
Reply to Combine AnyCancellable.store(in:) EXC_BAD_ACCESS
Making request async is the issue. This version works without issue in playgrounds: import UIKit import Combine struct User: Codable { let userId: Int let id: Int let title: String let completed: Bool } struct Download { private var cancellables = Set<AnyCancellable>() mutating func request() { URLSession.shared .dataTaskPublisher(for: URL(string: "https://jsonplaceholder.typicode.com/todos/1")!) .map{$0.data} .decode(type: User.self, decoder: JSONDecoder()) .receive(on: DispatchQueue.main) .sink(receiveCompletion: { print ("Received completion: \($0).") }, receiveValue: { data in print(data) }) .store(in: &cancellables) } } var download = Download() download.request() or making request async as follows in playgrounds: import UIKit import Combine struct User: Codable { let userId: Int let id: Int let title: String let completed: Bool } struct Download { private var cancellables = Set<AnyCancellable>() mutating func request() async -> User { return await withCheckedContinuation { continuation in URLSession.shared .dataTaskPublisher(for: URL(string: "https://jsonplaceholder.typicode.com/todos/1")!) .map{$0.data} .decode(type: User.self, decoder: JSONDecoder()) .receive(on: DispatchQueue.main) .sink(receiveCompletion: { print ("Received completion: \($0).") }, receiveValue: { data in continuation.resume(returning: data) }) .store(in: &cancellables) } } } Task { var download = Download() let user = await download.request() print(user) }
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Apr ’23
Reply to What can I use for 2D assets?
Google is your friend.
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Apr ’23
Reply to What can I use for 2D assets?
Google is your friend
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Apr ’23
Reply to Is it required or just suggested that I should make an iPad/Mac app
Not required but it extends your potential user base across the Apple ecosystem. Consider Apple Watch support also but it is not required.
Replies
Boosts
Views
Activity
Apr ’23
Reply to 400, 401 and 403 errors whilst trying to fetch private repos from Github API.
Check your inbox, GitHub recently sent out emails to certain users requiring them to adopt a new login protocol depending on their account type.
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Apr ’23
Reply to Please Create a Sendable Version of CKRecord or Make CKRecord Sendable
You can take responsibility for it being Sendable. By default the Sendable protocol is made unavailable to CKRecord. extension CKRecord : @unchecked Sendable { } But these are the supported types that are sendable by default. https://developer.apple.com/documentation/swift/sendable NSFoundation types mention above NSStrings, NSData will not be Sendable but the Swift Foundation types Strings, Data are.
Replies
Boosts
Views
Activity
Apr ’23
Reply to Invites not being sent to Internal Testers in TestFlight
Confirm if the invited user responded to the invite.
Replies
Boosts
Views
Activity
Apr ’23
Reply to Xcode 14.3 cannot read c++
I created a new project with no issues. Maybe paths in your build settings are incorrect.
Replies
Boosts
Views
Activity
Apr ’23
Reply to iOS 16.4: UISearchTextField.resignFirstResponder() --> app hangs, CPU 100%
You can try checking to see if the control is still the first responder before resigning it also remove the DLog as well and see what happens.
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
Boosts
Views
Activity
Mar ’23