Apple Developers

RSS for tag

This is a dedicated space for developers to connect, share ideas, collaborate, and ask questions. Introduce yourself, network with other developers, and foster a supportive community.

Learn More

Posts under Apple Developers subtopic

Post

Replies

Boosts

Views

Activity

Prevent iOS "Use Mobile Data" Prompt When Connected to Wi-Fi Without Internet in Flutter
I am developing a flutter app that connects the app to the boat VCU through Wi-Fi. In the iOS version of the mobile app, when the device connects to a Wi-Fi network, iOS assumes that all network traffic should route through Wi-Fi. As the connected Wi-Fi network has no internet access, iOS prompts the user with the options: "Use Mobile Data" or "Keep Trying Wi-Fi." If the user selects "Keep Trying Wi-Fi," mobile data will not be used by other apps on the phone. If the user selects "Use Mobile Data," the app switches to mobile data while remaining connected to the Wi-Fi network (VCU) without any issues. The issue is we need to find a way to prevent showing that prompt and instead handle this through code. After connecting to VCU, the mobile network is available for a few second but then it switches to wifi and no internet! I checked all the online documentation but there is not any solution for it. So, I need to stay connect to vcc and other apps use mobile data. I tried WiFiForIoTPlugin.forceWifiUsage(false); but didn't work. I tried adding delay that also didn't work. This is the function in my code that handles connecting to Wi-fI: Future connectToWifi() async { try { if (Platform.isAndroid) { isConnected = await WiFiForIoTPlugin.connect( _vesselData['ssid'], password: _vesselData['passphrase'], security: NetworkSecurity.WPA, // Enable Internet access withInternet: false, isHidden: true, timeoutInSeconds: 10, joinOnce: true, ); // Force Android to treat Wi-Fi as the primary network using await WiFiForIoTPlugin.forceWifiUsage(true); } else if (Platform.isIOS){ isConnected = await WiFiForIoTPlugin.connect( _vesselData['ssid'], password: _vesselData['passphrase'], security: NetworkSecurity.WPA, isHidden: true, timeoutInSeconds: 10, // Ensures the connection remains persistent, preventing the system from disconnecting the device. joinOnce: false, ); } if (isConnected) { log("Connected to ${_vesselData['ssid']}"); streamData(); } else { log("Failed to connect to ${_vesselData['ssid']}"); } } catch (e) { log("Error: $e"); } } I use :Device Model: iPhone 12 Pro Max iOS Version: iOS 18.3.1 Xcode Version: Xcode 16.2 Mac Version: macOS Sonoma 14.3
1
0
297
Mar ’25
Just wondering
I’m just trying to find someone who know what the diagnostic logs o my apple watch are for like sysdouagnos and the Bridge Pair Performance obviously I understand what a diagnostic logs are but it’s looks as if I need to download them still why wouldn‘t it already be running
0
0
266
Jan ’25
Crash Report
Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: Namespace SIGNAL, Code 6 Abort trap: 6 Terminating Process: Microsoft Excel [1618] Application Specific Information: stack buffer overflow Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x19da2b720 __pthread_kill + 8 1 libsystem_pthread.dylib 0x19da63f70 pthread_kill + 288 2 libsystem_c.dylib 0x19d97099c __abort + 136 3 libsystem_c.dylib 0x19d961e74 __stack_chk_fail + 96 4 Microsoft Excel 0x106a89f88 0x104bdc000 + 32169864 5 Microsoft Excel 0x106a89b74 0x104bdc000 + 32168820 6 Microsoft Excel 0x106acc2fc 0x104bdc000 + 32441084 7 Microsoft Excel 0x106a98cc4 0x104bdc000 + 32230596 8 Microsoft Excel 0x106a97c04 0x104bdc000 + 32226308 9 Microsoft Excel 0x106a897f4 0x104bdc000 + 32167924 10 Microsoft Excel 0x106a8731c 0x104bdc000 + 32158492 11 Microsoft Excel 0x105d69ac8 0x104bdc000 + 18406088 12 Microsoft Excel 0x1061bea10 0x104bdc000 + 22948368 13 Microsoft Excel 0x104dbc1b4 0x104bdc000 + 1966516 14 Microsoft Excel 0x104d828a8 0x104bdc000 + 1730728 15 Microsoft Excel 0x104d80ff8 0x104bdc000 + 1724408 16 Microsoft Excel 0x104d809b4 0x104bdc000 + 1722804 17 Microsoft Excel 0x104d808e0 0x104bdc000 + 1722592 18 Foundation 0x19ed394e8 __NSFireDelayedPerform + 372 19 CoreFoundation 0x19db66384 CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 32 20 CoreFoundation 0x19db66028 __CFRunLoopDoTimer + 1012 21 CoreFoundation 0x19db65b38 __CFRunLoopDoTimers + 356 22 CoreFoundation 0x19db4b520 __CFRunLoopRun + 1856 23 CoreFoundation 0x19db4a724 CFRunLoopRunSpecific + 588 24 HIToolbox 0x1a90a2530 RunCurrentEventLoopInMode + 292 25 HIToolbox 0x1a90a8348 ReceiveNextEventCommon + 676 26 HIToolbox 0x1a90a8508 _BlockUntilNextEventMatchingListInModeWithFilter + 76 27 AppKit 0x1a16b5034 _DPSNextEvent + 660 28 AppKit 0x1a20192d4 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688 29 AppKit 0x1a16a8060 -[NSApplication run] + 480 30 AppKit 0x1a167e854 NSApplicationMain + 888 31 dyld 0x19d6e4274 start + 2840 Thread 1: 0 libsystem_kernel.dylib 0x19da22f54 mach_msg2_trap + 8 1 libsystem_kernel.dylib 0x19da35604 mach_msg2_internal + 80 2 libsystem_kernel.dylib 0x19da2baf8 mach_msg_overwrite + 480 3 libsystem_kernel.dylib 0x19da2329c mach_msg + 24 4 merp 0x108eb7f74 0x108eb4000 + 16244 5 libsys
2
0
168
Feb ’25
Recently used emoticons
Why can’t Apple just release a version that put the most frequent used emoticons in the most left side of the emoticons keyboard??? Each person always uses the same 20 or 30 emoticons. How this could be reported to developers? Thx
2
0
133
Feb ’25
macOS 15.4 Beta (24E5222f) Killed My External Displays – Send Help (or an Exorcist)
For 9 Glorious Months, My MacBook Pro & J5 Create JCD543 HUB Were Best Friends… Until I Updated macOS For nearly a year, my MacBook Pro 14” (2023, M2 Pro, 16GB RAM) worked flawlessly with my J5 Create JCD543 HUB, allowing me to run: ✅ 4 External Displays (Samsung, LG, Insignia, Samsung) A setup that worked perfectly… until I updated macOS. Then Came the Update… and the Issues Began First, I updated last week. Two of my four displays stopped working. No big deal, I thought—I’ve dealt with display quirks before. Then, like an optimist ignoring red flags, I updated again last night to 15.4 Beta (24E5222f) and… well, now things are completely broken. My Once-Perfect Setup (Now a Display Disaster) JCD543 HUB → 2 HDMI displays (not working) JUD380 HUB → 1 HDMI display (partially working, unstable) MacBook HDMI port → 1 HDMI display (working, but feeling abandoned) JCA365 USB-C to Dual HDMI Adapter (Not part of my setup, but tested—also not working) What I’ve Tried (aka My Troubleshooting Journey) ✔ Restarted my Mac multiple times ✔ Uninstalled and reinstalled J5 drivers ✔ Swapped cables, unplugged/replugged everything, tested known-working HDMI cables (they work fine on other devices) ✔ Deleted /Library/Preferences/com.apple.windowserver.displays.plist (this fixed a similar issue in the past, but the file no longer exists in this update) The Likely Culprit? It seems to be a J5 driver issue triggered by the macOS update—and I’m not alone. Others are reporting similar problems. Apple… Any Fixes? I just want my four screens back. The setup worked flawlessly for 9 months, so it’s hard to believe it was never meant to work. If anyone has a workaround, I’m open to testing any solution—whether it’s a driver update, system tweak, or hidden macOS setting that might bring my displays back to life. Any advice would be greatly appreciated! Thanks in advance. (P.S. Apple, if you’re reading this—please look into this issue!)
0
0
548
Mar ’25
A wired keyboard connected via a hub cannot wake up the iPad on iOS version after 18.0
Problem Description: On the iPad 10th tablet, when a USB 2.0 interface extended by a Type - C interface through a USB 2.0 hub is used to connect a keyboard, there is an issue that the keyboard cannot wake up the system when the system version is 18.0 (inclusive) or higher. However, this problem does not occur on systems earlier than 18.0. Note: To ensure low power consumption of the product, if there is no key press on the keyboard for 10 minutes, the power supply of some functions of the hub will be cut off, but the power supply of the keyboard will remain on. When a key is pressed, the power supply of all functions of the hub will be reconnected.
1
0
101
Mar ’25
Appleインビテーションで招待された人の条件は?
説明ではApple Accountが無くても回答可能とあるが、招待された画面を開きメールアドレスを入力するとApple acountのパスワードを入れるか、新規にacountを作成する画面になる。 Apple Accountが無い人は何も出来ないのか?それともあのパスワード欄は新規にパスワード登録するためのもの? また、招待を送ったメールアドレスとApple acountのメールアドレスが違う場合はどうなるのだろう? 誰か試した人いますか?
0
0
177
Feb ’25
Displaying limited contacts list in UIKit
I have an app that was written in UIKit. It's too large, and it would be much too time consuming at this point to convert it to SwiftUI. I want to incorporate the new limited contacts into this app. The way it's currently written everything works fine except for showing the limited contacts in the contact picker. I have downloaded and gone though the Apple tutorial app but I'm having trouble thinking it through into UIKit. After a couple of hours I decided I need help. I understand I need to pull the contact IDs of the contacts that are in the limited contacts list. Not sure how to do that or how to get it to display in the picker. Any help would be greatly appreciated. func requestAccess(completionHandler: @escaping (_ accessGranted: Bool) -> Void) { switch CNContactStore.authorizationStatus(for: .contacts) { case .authorized: completionHandler(true) case .denied: showSettingsAlert(completionHandler) case .restricted, .notDetermined: CNContactStore().requestAccess(for: .contacts) { granted, error in if granted { completionHandler(true) } else { DispatchQueue.main.async { [weak self] in self?.showSettingsAlert(completionHandler) } } } // iOS 18 only case .limited: completionHandler(true) @unknown default: break } } // A text field that displays the name of the chosen contact @IBAction func contact_Fld_Tapped(_ sender: TextField_Designable) { sender.resignFirstResponder() // The contact ID that is saved to the Db getTheCurrentContactID() let theAlert = UIAlertController(title: K.Titles.chooseAContact, message: nil, preferredStyle: .actionSheet) // Create a new contact let addContact = UIAlertAction(title: K.Titles.newContact, style: .default) { [weak self] _ in self?.requestAccess { _ in let openContact = CNContact() let vc = CNContactViewController(forNewContact: openContact) vc.delegate = self // this delegate CNContactViewControllerDelegate DispatchQueue.main.async { self?.present(UINavigationController(rootViewController: vc), animated: true) } } } let getContact = UIAlertAction(title: K.Titles.fromContacts, style: .default) { [weak self] _ in self?.requestAccess { _ in self?.contactPicker.delegate = self DispatchQueue.main.async { self?.present(self!.contactPicker, animated: true) } } } let editBtn = UIAlertAction(title: K.Titles.editContact, style: .default) { [weak self] _ in self?.requestAccess { _ in let store = CNContactStore() var vc = CNContactViewController() do { let descriptor = CNContactViewController.descriptorForRequiredKeys() let editContact = try store.unifiedContact(withIdentifier: self!.oldContactID, keysToFetch: [descriptor]) vc = CNContactViewController(for: editContact) } catch { print("Getting contact to edit failed: \(self!.VC_String) \(error)") } vc.delegate = self // delegate for CNContactViewControllerDelegate self?.navigationController?.isNavigationBarHidden = false self?.navigationController?.navigationItem.hidesBackButton = false self?.navigationController?.pushViewController(vc, animated: true) } } let cancel = UIAlertAction(title: K.Titles.cancel, style: .cancel) { _ in } if oldContactID.isEmpty { editBtn.isEnabled = false } theAlert.addAction(getContact) // Select from contacts theAlert.addAction(addContact) // Create new contact theAlert.addAction(editBtn) // Edit this contact theAlert.addAction(cancel) let popOver = theAlert.popoverPresentationController popOver?.sourceView = sender popOver?.sourceRect = sender.bounds popOver?.permittedArrowDirections = .any present(theAlert,animated: true) } func requestAccess(completionHandler: @escaping (_ accessGranted: Bool) -> Void) { switch CNContactStore.authorizationStatus(for: .contacts) { case .authorized: completionHandler(true) case .denied: showSettingsAlert(completionHandler) case .restricted, .notDetermined: CNContactStore().requestAccess(for: .contacts) { granted, error in if granted { completionHandler(true) } else { DispatchQueue.main.async { [weak self] in self?.showSettingsAlert(completionHandler) } } } // iOS 18 only case .limited: completionHandler(true) @unknown default: break } } // MARK: - Contact Picker Delegate extension AddEdit_Quote_VC: CNContactPickerDelegate { func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { selectedContactID = contact.identifier let company: String = contact.organizationName let companyText = company == "" ? K.Titles.noCompanyName : contact.organizationName contactNameFld_Outlet.text = CNContactFormatter.string(from: contact, style: .fullName)! companyFld_Outlet.text = companyText save_Array[0] = K.AppFacing.true_App setSaveBtn_AEQuote() } } extension AddEdit_Quote_VC: CNContactViewControllerDelegate { func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool { return false } func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) { selectedContactID = contact?.identifier ?? "" if selectedContactID != "" { let company: String = contact?.organizationName ?? "" let companyText = company == "" ? K.Titles.noCompanyName : contact!.organizationName contactNameFld_Outlet.text = CNContactFormatter.string(from: contact!, style: .fullName) companyFld_Outlet.text = companyText getTheCurrentContactID() if selectedContactID != oldContactID { save_Array[0] = K.AppFacing.true_App setSaveBtn_AEQuote() } } dismiss(animated: true, completion: nil) } }
2
0
776
Jun ’25
Hello.
Dear Apple, I am sending this review to tell you that with my new update. I am not a fan of the photos set up. I find it very confusing and find myself getting irritated very often and giving up after searching for an image… which is frustrating for many reasons including I need my camera roll for work often. please make adjustments with the newest update… please. thank you, if anyone took the time to read this. Ashton, a very sad customer
1
0
254
Feb ’25
How to Get Incoming Call Notifications to Create a Phone App in iOS 18.2+?
I am trying to create a phone app that can receive incoming call notifications using CallKit, as described in Apple's CallKit documentation. Added the com.apple.developer.calling-app entitlement in my .entitlements file. Implemented CXProvider and set up the delegate methods (provider:perform: and providerDidReset). Added UIBackgroundModes with voip in Info.plist. Configured CXProviderConfiguration to support phone numbers. I expected to receive incoming call notifications when my app was set as the default calling app. However, I am not receiving any notifications when an incoming call arrives. How can I properly detect and handle incoming calls in my default calling app? Is there any additional configuration required for iOS 18.2+?
0
0
326
Feb ’25
When navigationstack is using two times in SWIFTUI
Hello, I use Navigationstack in the first and second views. In this case, the second view is executed immediately and then disappears. Is there a solution? The code is as follows. device = i-phone struct ContentView: View { @State var path: [String] = [] var body: some View { NavigationStack(path: $path) { VStack { Text("Screen1") Spacer() Button(action: { path.append("2nd") }, label: { Text("go to 2nd Screen") }) } .navigationDestination(for: String.self) { s in if s == "2nd" { let _ = print("1st screen nav path(1) = \(path)") SecondScreen(path: $path) let _ = print("1st screen nav path(2) = \(path)") } } .onAppear { print("1st screen on appear") print("1st screen path = \(path)") } .onDisappear { print("1st screen on disappear") print("1st screen disa. path = \(path)") } .padding() } } } struct SecondScreen: View { @State var path2: [String] = [] @Binding var path: [String] var body: some View { NavigationStack(path: $path2) { VStack { Text("2nd Screen is loaded") Spacer() Button(action: { path2.append("3rd") } , label: { Text("go to 3rd Screen") }) Button(action: { path2.removeLast() } , label: { Text("back to 1st Screen") }) } .navigationDestination(for: String.self) { s in if s == "3rd" { // Text("3rd") thirdScreen() } else { thirdScreen() } } } .onAppear { print("2nd screen on appear") print("2nd screen path = \(path)") print("2nd screen path2 = \(path2)") } .onDisappear { print("2nd screen on disappear") print("2nd screen path = \(path)") print("2nd screen disa. path2 = \(path2)") } } } struct thirdScreen: View { var body: some View { VStack { Text("3rd Screen") } .onAppear { print("3rd screen on appear") } .onDisappear { print("3rd screen on disappear") } } }
0
0
197
Jan ’25
Watch series 6 beta 11.4 issue
I updated my Apple Watch Series 6 before Apple withdrew beta 11.4 as an option. I see on forums that I am not alone with this issue. Many series 6 watches are now stuck in a boot loop. I hope Apple can resolve the issue for those of us that pushed the update to our watches before the issue was identified. Support were unable to assist.
0
0
306
Feb ’25
Bluetooth scan cycle problem
I have the following questions that need official answers: 1: Whether the Bluetooth scanning cycle can be controlled through the software level. If it can be controlled, please tell me how to control it. 2: Now the IOS mobile phone scanning strategy, how long is the scanning cycle, and what is the scanning duty cycle in this scanning cycle
0
0
229
Feb ’25