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

Apple Music Preview URLs from MusicKit
Hey guys, I've been searching high and low for some clarity when it comes to this topic. Essentially, what is the legality/risk of using apple music previews in my app. Does Apple license the previews meaning they are fair to use as long as I link to that URL? Do i need to license every song individually? I can not find anything concrete out and while the apple team let my app (that currently plays preview urls) on the app store I know that doesn't necessarily legally cover me. Any input is appreciated, i know this is a pretty niche area.
0
0
114
Jun ’25
IOS 26,BLE Localname is truncated to 6 bytes
When I startAdvertising, my localName is long,Will not be truncated and the type is 0X09; self.advertisementData = @{CBAdvertisementDataLocalNameKey: localDevName, CBAdvertisementDataServiceUUIDsKey: @[[CBUUID UUIDWithString:serviceUUID]] }; [self.peripheralManager startAdvertising:self.advertisementData]; IOS 18.5: The service uuids in ADV_IND occupies 24 bytes, the local name in SCAN_RESP is 20 bytes in size and has not been truncated, and there is no manufacturer specific data in SCAN_RESP;You can view the following image: But in IOS26, why is the local name truncated to only 6 bytes for the same message, and why does SCAN_RESP always contain Manufacturer Specific Data; Why is there such a big difference, and what changes has iOS 26 made for broadcasting? Is it necessary to include Manufacturer Specific Data in the IOS 26 SCAN.RESP message? What documents are available for reference? Is there any way to ensure that the local name is not truncated? Is there a maximum length limit Are there other ways to broadcast longer data? Does anyone know why? thank
1
0
206
Jun ’25
Questions about BLE broadcasting in version 26
After upgrading to iOS system 26, the local name broadcast type is 08, but before upgrading, it is 09 and will be included in the scan resp message; In version 26, the scan resp will also include Manufacturer Specific Data. Before the upgrade, the broadcast message may not necessarily include Manufacturer Specific Data; What I want to ask is, are there any restrictions on Bluetooth broadcasting in version 26? Is it necessary to include Manufacturer Specific Data data? If Manufacturer Specific Data data is included, it may cause fields in the local name broadcast to be truncated and use simple names of type 08
1
0
115
Jun ’25
Pictures
I am running the iOS 26. I am having issues with deleting the pictures. I have checked my iCloud storage and my phone storage and all is good there. Not sure why they will not delete. I have the iPhone 16
1
0
69
Jun ’25
ios 26 battery 0%
«Hello everyone, after installing iOS 26, I noticed that on my iPhone 13 Pro, which had its battery replaced, the battery status in the settings shows 0%, and the phone does not charge more than 1%, no matter how long I leave it plugged in. The same problem is observed on iPhones 14 and lower where the battery (FB18154101) was replaced.»
4
2
155
Jun ’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
979
Jun ’25
Summary of issues encountered with the Screen Time interface
I have developed three apps using the Screen Time API. The following are common problems I encountered in the three apps: DeviceActivityMonitorExtension is automatically killed after running for a few days (frequently) The same DeviceActivityEvent in DeviceActivityMonitorExtension is triggered twice during eventDidReachThreshold (especially obvious in iOS18.5) Screen Time authorization is automatically canceled for no reason (occasionally) I hope to get help
5
2
382
Jun ’25
Screen Sharing failures after installing MacOS 26 Beta 2
Upgraded my M1 Mac mini from MacOS Tahoe 26 Beta to Beta 2. Prior to the update I had no problem connecting to the Max mini from my MacBook Pro M2 running Now, attempting to connect to the Mac mini from a MacBook Pro M2 running Sequoia 15.5. After the update, I can enter my password, but then I am disconnected with the error "This Mac was unable to start a High Performance connection to the Mac mini" and to "change the screen sharing type to standard and try again" Connecting via a "Standard" connection showed that the Window Server failed.
0
0
91
Jun ’25
Apple JS SDK: invalid_client error with new Service IDs in AppleID.auth.signIn()
We’re integrating Sign in with Apple using Apple’s official JavaScript SDK: https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js We’ve successfully used this setup with an older Service ID, but when we try to use any newly created Service ID, we get the following error immediately when calling AppleID.auth.signIn(): invalid_client This happens before any request reaches our backend. The same flow, redirect URI, and frontend code works fine with an old Service ID — but fails with new ones. ✅ What We’ve Verified: The Service ID (e.g., com.projectx.web.login) is created under Apple Developer → Identifiers → Service IDs The redirect URI is correct and matches exactly (HTTPS, no trailing slash) No client_secret is passed in the frontend (by design) We’re using usePopup: true ❌ What Doesn’t Work: Any new Service ID we create — even on the same domain and configuration — fails with invalid_client. 🔁 What We’ve Tried: Creating multiple new Service IDs Waiting 48+ hours in case of propagation delays Validating HTTPS and redirect URI setup Comparing all settings with the working (older) Service ID (which we deleted since we thought that was causing a problem) Testing in different environments and browsers ❓ Questions: Why do newly created Service IDs fail with invalid_client while older ones work? Are there undocumented requirements, propagation delays, or steps for new Service IDs to become active? Is this a known limitation or bug in the SDK? 💻 Our Code: import { useEffect } from "react"; import { Button, Box } from "@mui/material"; import api from "../utils/api"; // Axios wrapper import AppleIcon from "@mui/icons-material/Apple"; import MainAuthStyles from "../pages/MainAuthStyles"; import { useUser } from "../../../user-module/src/contexts/UserContext"; import { useNavigate } from "react-router-dom"; // Apple global type declare global { interface Window { AppleID: any; } } type AppleSignInButtonProps = { setApiError: (msg: string) => void; }; const AppleLogInButton = ({ setApiError }: AppleSignInButtonProps) => { const { user, setUser } = useUser(); const navigate = useNavigate(); useEffect(() => { if (!window.AppleID) return; window.AppleID.auth.init({ clientId: import.meta.env.VITE_APPLE_CLIENT_ID, scope: "name email", redirectURI: import.meta.env.VITE_APPLE_REDIRECT_URI, usePopup: true, }); }, []); const handleAppleLogin = async () => { try { const response = await window.AppleID.auth.signIn(); const { id_token, code, user } = response.authorization; const res = await api.post("/auth/apple-login", { idToken: id_token, code, user, rememberMe: true, }); if (res.data.success == true && res.data.user.userDataInitialised == true ) { setUser({ id: res.data.user.id ? res.data.user.id : '', fullName: res.data.user.fullName ? res.data.user.fullName : '', email: res.data.user.email ? res.data.user.email : '', role: res.data.user.role ? res.data.user.role : '', signUpType: res.data.user.signUpType ? res.data.user.signUpType : '', userDataInitialised: res.data.user.userDataInitialised ? res.data.user.userDataInitialised : false, }); localStorage.setItem("accessToken", res.data.accessToken); localStorage.setItem("refreshToken", res.data.refreshToken); navigate("/app") } else { setApiError("Unrecognized login method") return; } } catch (err) { console.error("Apple Sign-In failed", err); setApiError("AppleSignInFailed"); } }; return ( <Box mt={2}> <Button variant="outlined" fullWidth onClick={handleAppleLogin} className="AuthAppleButton" startIcon={<AppleIcon />} > Log in with Apple </Button> </Box> ); }; export default AppleLogInButton; Any help from the Apple team or anyone who's resolved this issue would be appreciated — we’re currently blocked on deploying new environments due to this error. Thanks!
0
1
140
Jun ’25
iOS 26 Beta Bug
Updated iPhone to 26 beta 2, everything is ok but battery, battery is changed, not original. My phone can't charge higher than 1% and turns off every 5 minutes, even connecting to wireless charger and cable at the same time don't work, restored iPhone thru iTunes.I hope I will be able to install new beta without any problems because loving the new design,hoping for the best. Thanks.
2
3
258
Jun ’25
iOS 26 0% Battery Health
Updated iPhone to 26 beta 2, everything is ok but battery, battery is changed, not original. My phone can't charge higher than 1% and turns off every 5 minutes, even connecting to wireless charger and cable at the same time don't work, restored iPhone thru iTunes.I hope I will be able to install new beta without any problems because loving the new design, hoping for the best. Thanks. My FB-FB18327769
0
1
259
Jun ’25
Question About CarPlay Certification When Using Custom Wiring Harness
Hello developers, My question isn't directly related to app or software development, but this seems to be the most appropriate channel to possibly find the information I need. Context I work for an automotive company and I'm currently looking for Apple CarPlay certification guidelines. We're in the process of installing a multimedia system in a vehicle. The most viable solution would be to use the multimedia unit and microphone provided by our supplier, but with a custom wiring harness developed by our company to simplify the installation process. The multimedia unit, microphone, and the supplier’s harness are already certified for CarPlay. Question Would using our company’s custom wiring harness affect the existing CarPlay certification of the supplier’s product? Any information, contact, or suggestion on where I could find official guidance on this matter would be greatly appreciated. Thank you in advance!
0
0
82
Jun ’25
ipad won't power after reset
In preparing my ipad 7th gen for resale, I factory reset and now it will not power up. Tried hard reset, new cables, different computer. iTunes does not recognize the ipad yet device manager shows it hooked to usb port. Any advice? Thanks!
0
0
84
Jun ’25
Brightness slider UI bug when long-pressed in iOS 26
Hi! I found a UI bug in iOS 26.0 (23A5276f). When you swipe down from the top right to open Control Center and adjust brightness using the slider, everything looks normal. However, if you long-press the brightness slider, the brightness knob detaches from the base. The button becomes smaller while the frame remains the same, making the UI asymmetrical and misaligned. This happens consistently and is clearly a layout issue.
3
0
102
Jun ’25
Problème ubs app.
When I open ubs app (Switzerland) : Jailbreak: the Mobile Banking app cannot be used Manufacturer usage restrictions have been removed from this device (Jailbreak). To continue using the UBS Mobile Banking app, please restore your device to the original state. 😧😧😧 ???
1
0
33
Jun ’25
Apple Music Preview URLs from MusicKit
Hey guys, I've been searching high and low for some clarity when it comes to this topic. Essentially, what is the legality/risk of using apple music previews in my app. Does Apple license the previews meaning they are fair to use as long as I link to that URL? Do i need to license every song individually? I can not find anything concrete out and while the apple team let my app (that currently plays preview urls) on the app store I know that doesn't necessarily legally cover me. Any input is appreciated, i know this is a pretty niche area.
Replies
0
Boosts
0
Views
114
Activity
Jun ’25
IOS 26,BLE Localname is truncated to 6 bytes
When I startAdvertising, my localName is long,Will not be truncated and the type is 0X09; self.advertisementData = @{CBAdvertisementDataLocalNameKey: localDevName, CBAdvertisementDataServiceUUIDsKey: @[[CBUUID UUIDWithString:serviceUUID]] }; [self.peripheralManager startAdvertising:self.advertisementData]; IOS 18.5: The service uuids in ADV_IND occupies 24 bytes, the local name in SCAN_RESP is 20 bytes in size and has not been truncated, and there is no manufacturer specific data in SCAN_RESP;You can view the following image: But in IOS26, why is the local name truncated to only 6 bytes for the same message, and why does SCAN_RESP always contain Manufacturer Specific Data; Why is there such a big difference, and what changes has iOS 26 made for broadcasting? Is it necessary to include Manufacturer Specific Data in the IOS 26 SCAN.RESP message? What documents are available for reference? Is there any way to ensure that the local name is not truncated? Is there a maximum length limit Are there other ways to broadcast longer data? Does anyone know why? thank
Replies
1
Boosts
0
Views
206
Activity
Jun ’25
Questions about BLE broadcasting in version 26
After upgrading to iOS system 26, the local name broadcast type is 08, but before upgrading, it is 09 and will be included in the scan resp message; In version 26, the scan resp will also include Manufacturer Specific Data. Before the upgrade, the broadcast message may not necessarily include Manufacturer Specific Data; What I want to ask is, are there any restrictions on Bluetooth broadcasting in version 26? Is it necessary to include Manufacturer Specific Data data? If Manufacturer Specific Data data is included, it may cause fields in the local name broadcast to be truncated and use simple names of type 08
Replies
1
Boosts
0
Views
115
Activity
Jun ’25
Pictures
I am running the iOS 26. I am having issues with deleting the pictures. I have checked my iCloud storage and my phone storage and all is good there. Not sure why they will not delete. I have the iPhone 16
Replies
1
Boosts
0
Views
69
Activity
Jun ’25
tvOS 26 removes ability to restrict apps with passcode
Please make sure this feature gets placed back. Parents need a way to provide the ability for kids to watch and not watch at their discretion. The new system doesn’t allow this to happen. Are there any workarounds?
Replies
0
Boosts
0
Views
114
Activity
Jun ’25
Spatial scenes
Hello I want to ask you why special scenes feature not available for iPhone 11 in iOS 26.
Replies
1
Boosts
0
Views
141
Activity
Jun ’25
ios 26 battery 0%
«Hello everyone, after installing iOS 26, I noticed that on my iPhone 13 Pro, which had its battery replaced, the battery status in the settings shows 0%, and the phone does not charge more than 1%, no matter how long I leave it plugged in. The same problem is observed on iPhones 14 and lower where the battery (FB18154101) was replaced.»
Replies
4
Boosts
2
Views
155
Activity
Jun ’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) } }
Replies
2
Boosts
0
Views
979
Activity
Jun ’25
Summary of issues encountered with the Screen Time interface
I have developed three apps using the Screen Time API. The following are common problems I encountered in the three apps: DeviceActivityMonitorExtension is automatically killed after running for a few days (frequently) The same DeviceActivityEvent in DeviceActivityMonitorExtension is triggered twice during eventDidReachThreshold (especially obvious in iOS18.5) Screen Time authorization is automatically canceled for no reason (occasionally) I hope to get help
Replies
5
Boosts
2
Views
382
Activity
Jun ’25
Screen Sharing failures after installing MacOS 26 Beta 2
Upgraded my M1 Mac mini from MacOS Tahoe 26 Beta to Beta 2. Prior to the update I had no problem connecting to the Max mini from my MacBook Pro M2 running Now, attempting to connect to the Mac mini from a MacBook Pro M2 running Sequoia 15.5. After the update, I can enter my password, but then I am disconnected with the error "This Mac was unable to start a High Performance connection to the Mac mini" and to "change the screen sharing type to standard and try again" Connecting via a "Standard" connection showed that the Window Server failed.
Replies
0
Boosts
0
Views
91
Activity
Jun ’25
Apple JS SDK: invalid_client error with new Service IDs in AppleID.auth.signIn()
We’re integrating Sign in with Apple using Apple’s official JavaScript SDK: https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js We’ve successfully used this setup with an older Service ID, but when we try to use any newly created Service ID, we get the following error immediately when calling AppleID.auth.signIn(): invalid_client This happens before any request reaches our backend. The same flow, redirect URI, and frontend code works fine with an old Service ID — but fails with new ones. ✅ What We’ve Verified: The Service ID (e.g., com.projectx.web.login) is created under Apple Developer → Identifiers → Service IDs The redirect URI is correct and matches exactly (HTTPS, no trailing slash) No client_secret is passed in the frontend (by design) We’re using usePopup: true ❌ What Doesn’t Work: Any new Service ID we create — even on the same domain and configuration — fails with invalid_client. 🔁 What We’ve Tried: Creating multiple new Service IDs Waiting 48+ hours in case of propagation delays Validating HTTPS and redirect URI setup Comparing all settings with the working (older) Service ID (which we deleted since we thought that was causing a problem) Testing in different environments and browsers ❓ Questions: Why do newly created Service IDs fail with invalid_client while older ones work? Are there undocumented requirements, propagation delays, or steps for new Service IDs to become active? Is this a known limitation or bug in the SDK? 💻 Our Code: import { useEffect } from "react"; import { Button, Box } from "@mui/material"; import api from "../utils/api"; // Axios wrapper import AppleIcon from "@mui/icons-material/Apple"; import MainAuthStyles from "../pages/MainAuthStyles"; import { useUser } from "../../../user-module/src/contexts/UserContext"; import { useNavigate } from "react-router-dom"; // Apple global type declare global { interface Window { AppleID: any; } } type AppleSignInButtonProps = { setApiError: (msg: string) => void; }; const AppleLogInButton = ({ setApiError }: AppleSignInButtonProps) => { const { user, setUser } = useUser(); const navigate = useNavigate(); useEffect(() => { if (!window.AppleID) return; window.AppleID.auth.init({ clientId: import.meta.env.VITE_APPLE_CLIENT_ID, scope: "name email", redirectURI: import.meta.env.VITE_APPLE_REDIRECT_URI, usePopup: true, }); }, []); const handleAppleLogin = async () => { try { const response = await window.AppleID.auth.signIn(); const { id_token, code, user } = response.authorization; const res = await api.post("/auth/apple-login", { idToken: id_token, code, user, rememberMe: true, }); if (res.data.success == true && res.data.user.userDataInitialised == true ) { setUser({ id: res.data.user.id ? res.data.user.id : '', fullName: res.data.user.fullName ? res.data.user.fullName : '', email: res.data.user.email ? res.data.user.email : '', role: res.data.user.role ? res.data.user.role : '', signUpType: res.data.user.signUpType ? res.data.user.signUpType : '', userDataInitialised: res.data.user.userDataInitialised ? res.data.user.userDataInitialised : false, }); localStorage.setItem("accessToken", res.data.accessToken); localStorage.setItem("refreshToken", res.data.refreshToken); navigate("/app") } else { setApiError("Unrecognized login method") return; } } catch (err) { console.error("Apple Sign-In failed", err); setApiError("AppleSignInFailed"); } }; return ( <Box mt={2}> <Button variant="outlined" fullWidth onClick={handleAppleLogin} className="AuthAppleButton" startIcon={<AppleIcon />} > Log in with Apple </Button> </Box> ); }; export default AppleLogInButton; Any help from the Apple team or anyone who's resolved this issue would be appreciated — we’re currently blocked on deploying new environments due to this error. Thanks!
Replies
0
Boosts
1
Views
140
Activity
Jun ’25
iOS 26 Beta Bug
Updated iPhone to 26 beta 2, everything is ok but battery, battery is changed, not original. My phone can't charge higher than 1% and turns off every 5 minutes, even connecting to wireless charger and cable at the same time don't work, restored iPhone thru iTunes.I hope I will be able to install new beta without any problems because loving the new design,hoping for the best. Thanks.
Replies
2
Boosts
3
Views
258
Activity
Jun ’25
iPhone13pro max 美版A2484 iOS 26.0 (23A5276f)
触控按钮里面的截屏功能无法使用。按键组合截屏可以是正常使用。
Replies
0
Boosts
0
Views
78
Activity
Jun ’25
iOS 26 0% Battery Health
Updated iPhone to 26 beta 2, everything is ok but battery, battery is changed, not original. My phone can't charge higher than 1% and turns off every 5 minutes, even connecting to wireless charger and cable at the same time don't work, restored iPhone thru iTunes.I hope I will be able to install new beta without any problems because loving the new design, hoping for the best. Thanks. My FB-FB18327769
Replies
0
Boosts
1
Views
259
Activity
Jun ’25
Question About CarPlay Certification When Using Custom Wiring Harness
Hello developers, My question isn't directly related to app or software development, but this seems to be the most appropriate channel to possibly find the information I need. Context I work for an automotive company and I'm currently looking for Apple CarPlay certification guidelines. We're in the process of installing a multimedia system in a vehicle. The most viable solution would be to use the multimedia unit and microphone provided by our supplier, but with a custom wiring harness developed by our company to simplify the installation process. The multimedia unit, microphone, and the supplier’s harness are already certified for CarPlay. Question Would using our company’s custom wiring harness affect the existing CarPlay certification of the supplier’s product? Any information, contact, or suggestion on where I could find official guidance on this matter would be greatly appreciated. Thank you in advance!
Replies
0
Boosts
0
Views
82
Activity
Jun ’25
ipad won't power after reset
In preparing my ipad 7th gen for resale, I factory reset and now it will not power up. Tried hard reset, new cables, different computer. iTunes does not recognize the ipad yet device manager shows it hooked to usb port. Any advice? Thanks!
Replies
0
Boosts
0
Views
84
Activity
Jun ’25
Safari and Mail quoting unepectely
Every broke I either open mail or the safari application they crash and eveytime I hit reopen and they crash again macOS 26 developer beta 2
Replies
1
Boosts
1
Views
102
Activity
Jun ’25
Brightness slider UI bug when long-pressed in iOS 26
Hi! I found a UI bug in iOS 26.0 (23A5276f). When you swipe down from the top right to open Control Center and adjust brightness using the slider, everything looks normal. However, if you long-press the brightness slider, the brightness knob detaches from the base. The button becomes smaller while the frame remains the same, making the UI asymmetrical and misaligned. This happens consistently and is clearly a layout issue.
Replies
3
Boosts
0
Views
102
Activity
Jun ’25
Problème ubs app.
When I open ubs app (Switzerland) : Jailbreak: the Mobile Banking app cannot be used Manufacturer usage restrictions have been removed from this device (Jailbreak). To continue using the UBS Mobile Banking app, please restore your device to the original state. 😧😧😧 ???
Replies
1
Boosts
0
Views
33
Activity
Jun ’25