Posts

Post not yet marked as solved
2 Replies
Hi holdaak, Please update your request to include the following objects: "relationships": { "passTypeId": { "data": { "type": "passTypeIds", "id": "<PASS_TYPE_ID>" } } Where the <PASS_TYPE_ID> is the Wallet pass type ID as a string value. We've noted (r. 126354804) to update the documentation on App Store Connect API to reflect this expectation. Cheers, Paris
Post not yet marked as solved
1 Replies
Hi dBrewster, Please update your request to include the following objects: "relationships": { "passTypeId": { "data": { "type": "passTypeIds", "id": "<PASS_TYPE_ID>" } } Where the <PASS_TYPE_ID> is the Wallet pass type ID as a string value. We've noted (r. 126354804) to update the documentation on App Store Connect API to reflect this expectation. Cheers, Paris
Post not yet marked as solved
2 Replies
Hi dBrewster, Please update your request to include the following objects: "relationships": { "passTypeId": { "data": { "type": "passTypeIds", "id": "<PASS_TYPE_ID>" } } Where the <PASS_TYPE_ID> is the Wallet pass type ID as a string value. We've noted (r. 126354804) to update the documentation on App Store Connect API to reflect this expectation. Cheers, Paris
Post not yet marked as solved
5 Replies
Hi xtom.vavra, Please update your request to include the following objects: "relationships": { "passTypeId": { "data": { "type": "passTypeIds", "id": "<PASS_TYPE_ID>" } } Where the <PASS_TYPE_ID> is the Wallet pass type ID as a string value. We've noted (r. 126354804) to update the documentation on App Store Connect API to reflect this expectation. Cheers, Paris
Post not yet marked as solved
20 Replies
Hi, To learn more about developer changes in the European Union, please see "Why don't users in the EU have access to Home Screen web apps?" within the "Developer Q&A: Changes for apps in the EU" section listed below: https://developer.apple.com/support/dma-and-apps-in-the-eu/#dev-qa Best, Paris
Post not yet marked as solved
1 Replies
Hi NicoTF, You wrote: The expectation is documented on Authenticating users with Sign in with Apple (emphasis, in bold, mine): Send information to app servers and verify tokens Ensure that your app relays the credentials and user information to your app servers. The API collects this information and shares it with your app the first time the user logs in using Sign in with Apple. If the user then uses Sign in with Apple on another device, the API doesn’t ask for the user’s name or email again. It collects the information again only if the user stops using Sign in with Apple and later reconnects to your app. Although Apple provides the user’s email address in the identity token on all subsequent API responses, it doesn’t include other information about the user, such as their name. When you receive user information from the API response, immediately store it locally so your app can access it again in the event of a process or network failure. Your app servers verify the validity of the token credentials with Apple ID servers. For more information, see Verifying a user. It is up to the developer to decide how to properly store this user information on-disk. Cheers, Paris
Post not yet marked as solved
6 Replies
Hi DmitryKurkin, This appears to be a known issue (r. 115856582) on iOS 17 affecting sheet and fullScreenCover presentation. As a workaround, you can use bridge to UIKit to create your own presentation controllers above your SwiftUI content (preventing the memory retention issue). Please see the following code snippet as a guide: import SwiftUI enum SheetPresenterStyle { case sheet case popover case fullScreenCover case detents([UISheetPresentationController.Detent]) } class SheetWrapperController: UIViewController { let style: SheetPresenterStyle init(style: SheetPresenterStyle) { self.style = style super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() if case let (.detents(detents)) = style, let sheetController = self.presentationController as? UISheetPresentationController { sheetController.detents = detents sheetController.prefersGrabberVisible = true } } } struct SheetPresenter<Content>: UIViewRepresentable where Content: View { let label: String let content: () -> Content let style: SheetPresenterStyle init(_ label: String, style: SheetPresenterStyle, @ViewBuilder content: @escaping () -> Content) { self.label = label self.content = content self.style = style } func makeUIView(context: UIViewRepresentableContext<SheetPresenter>) -> UIButton { let button = UIButton(type: .system) button.setTitle(label, for: .normal) let action = UIAction { _ in let hostingController = UIHostingController(rootView: content()) hostingController.view.translatesAutoresizingMaskIntoConstraints = false let viewController = SheetWrapperController(style: style) switch style { case .sheet: viewController.modalPresentationStyle = .automatic case .popover: viewController.modalPresentationStyle = .popover viewController.popoverPresentationController?.sourceView = button case .fullScreenCover: viewController.modalPresentationStyle = .fullScreen case .detents: viewController.modalPresentationStyle = .automatic } viewController.addChild(hostingController) viewController.view.addSubview(hostingController.view) NSLayoutConstraint.activate([ hostingController.view.topAnchor.constraint(equalTo: viewController.view.topAnchor), hostingController.view.leadingAnchor.constraint(equalTo: viewController.view.leadingAnchor), hostingController.view.trailingAnchor.constraint(equalTo: viewController.view.trailingAnchor), hostingController.view.bottomAnchor.constraint(equalTo: viewController.view.bottomAnchor), ]) hostingController.didMove(toParent: viewController) if let rootVC = button.window?.rootViewController { rootVC.present(viewController, animated: true) } } button.addAction(action, for: .touchUpInside) return button } func updateUIView(_ uiView: UIButton, context: Context) {} } typealias ContentView = ContentViewB struct ContentViewA: View { @State private var showSheet = false @State private var showPopover = false @State private var showFullScreenCover = false var body: some View { VStack { Button("Present Sheet") { showSheet.toggle() } Button("Present Popover") { showPopover.toggle() } Button("Present Full Screen Cover") { showFullScreenCover.toggle() } Text("First") .sheet(isPresented: $showSheet) { SheetView() } .popover(isPresented: $showPopover) { PopoverView() } .fullScreenCover(isPresented: $showFullScreenCover) { FullScreenCoverView() } } } } struct ContentViewB: View { var body: some View { VStack { SheetPresenter("Present Sheet", style: .sheet) { SheetView() } SheetPresenter("Present Popover", style: .popover) { PopoverView() } SheetPresenter("Present Full Screen Cover", style: .fullScreenCover) { FullScreenCoverView() } SheetPresenter("Present Presentation Detents", style: .detents([.medium(), .large()])) { PresentationDetentsView() } Text("First") } } } struct SheetView: View { private let log = LifecycleLogger(name: "SheetView") @Environment(\.dismiss) var dismiss var body: some View { Text("SheetView") Button("Back") { dismiss() } } } struct PopoverView: View { private let log = LifecycleLogger(name: "PopoverView") @Environment(\.dismiss) var dismiss var body: some View { Text("PopoverView") Button("Back") { dismiss() } } } struct FullScreenCoverView: View { private let log = LifecycleLogger(name: "FullScreenCoverView") @Environment(\.dismiss) var dismiss var body: some View { Text("FullScreenCoverView") Button("Back") { dismiss() } } } struct PresentationDetentsView: View { private let log = LifecycleLogger(name: "PresentationDetentsView") @Environment(\.dismiss) var dismiss var body: some View { Text("PresentationDetentsView") Button("Back") { dismiss() } } } class LifecycleLogger { let name: String init(name: String) { self.name = name print("\(name).init") } deinit { print("\(name).deinit") } } Cheers, Paris
Post not yet marked as solved
1 Replies
Hi somprabhsharma, Please review the App Store Review Guidelines for the requirements of Legal, Data Collection and Storage, and Sign in with Apple—under 5.1.1(v, ix). You may need to seek legal counsel to determine the appropriate next steps for your app based on the regulations and the compliance in your region. Note: App Store Review does not pre-approve, nor pre-review app submissions, so your developer team and/or counsel will need to submit a production-ready app for review as specified in the guidelines above. Cheers, Paris
Post not yet marked as solved
1 Replies
Hi Audulus, There isn't much to go off of from this snippet of the crash report. Could you please attach the crashing project and related symbolicated crash logs to a new submission in Feedback Assistant? Once submitted, please respond here with the Feedback ID so we can determine the most appropriate next step. Cheers, Paris
Post not yet marked as solved
1 Replies
Hi matto-dev, You wrote: On every attempt of login and logout, I receive email and user name from apple as long as I have not revoked it. But if I revoke, and then try to login again. In that case, I don't get email/name. This does not match the expected behavior of Sign in with Apple. You should reach out to the React Native support channel for insight into how their implementation of Sign in with Apple is configured. For this post, I'll focus on the expected behavior of Sign in with Apple—without considering third-party libraries. The user's full name and email are only requested during the initial user authorization flow, and returned in the initial authorization response body. On subsequent authorization requests, the user's email is provided within the identity token; however, the user's full name is not returned (since it was only given to the client and was never received by Apple). This is by design, and is documented on Authenticating users with Sign in with Apple. Then, you wrote: If I delete my apple account from device, and re login from settings. In that case, I get only user name on first login attempt in app. On subsequent logins, I get nothing. What could be possibly wrong with my flow? This is also expected behavior (as described in the documentation above). To revoke credentials, you have two options: A developer may revoke programmatically via the Revoke tokens endpoint. A user may revoke manually via the iCloud Settings on device, or the Apple ID website. Cheers, Paris
Post not yet marked as solved
2 Replies
Hi aradradfar, You wrote: Recently, I. have been having issues with SwiftUI framework to view live previews in canvas sections. I'm seeking proper guidance. Based on your post, I need more information about your SwiftUI app when rendering Xcode Previews or on-device previews. Specifically, I’ll need the diagnostics Swift Previews generates to make sure I understand the error encountered by the preview system. Please create a report in Feedback Assistant to share the details requested in the instructions below. For issues with macOS, Mac Catalyst, or on-device iOS previews, perform the following steps to gather diagnostics: Download and install the Swift Previews logging profile for your device. Reproduce the error while previewing on device, taking note of the timestamp when the error occurred. Attach the Xcode sysdiagnose, sysdiagnose, or simctl diagnose logs and timestamp to your feedback. For issues with Xcode Previews, perform the following steps to gather diagnostics: Download and install the Swift Previews logging profile for your device. Reproduce the error in Xcode Previews, if you haven’t already done so. If an error banner appears in the canvas, click the "Diagnostics" button within the banner, then go to Step 5; otherwise, continue to Step 4. If the error banner is missing, navigate the menu in Xcode: Editor > Canvas > Diagnostics In the presented sheet, click the "Generate Report" button. Attach a zip file containing the diagnostic report to your bug report (will be named something like previews-diagnostics-0123456789.zip). Submitting your feedback Before you submit to Feedback Assistant, please confirm the following information is included in your feedback: For Swift Previews Xcode, system, or simctl diagnose logs, with Swift Previews logging profile, gathered after reproducing the issue timestamp identifying when the issue was reproduced focused sample Xcode project that reproduces the issue (if applicable) screenshots or videos of the error (optional) For Xcode Previews Xcode Previews diagnostics report with Swift Previews logging profile, gathered after reproducing the issue timestamp identifying when the issue was reproduced focused sample Xcode project that reproduces the issue (if applicable) screenshots or videos of the error (optional) Please include all requested information to prevent delays in my investigation. After your submission to Feedback Assistant is complete, please respond to this post with the Feedback ID. Once received, I can begin my investigation and determine if this issue is caused by an error within your SwiftUI app, a configuration issue within your Xcode project, or an underlying issue in the operating system, SwiftUI, in Xcode Previews, or on-device previews. Cheers, Paris
Post not yet marked as solved
4 Replies
Hi sateesh-anecure, You wrote: Recently we are seeing huge traffic with repeated notification event "account-deleted" for the same Apple account. [...] The actual account deletion happened in December 2022 and we get the same event repeated till now. Does anybody else see this kind of issue? To prevent sending sensitive JSON Web Tokens (JWTs) in plain text, you should create a report in Feedback Assistant to share the details requested below. Additionally, if I determine the error is caused by an internal issue in the operating system or Apple ID servers, the appropriate engineering teams have access to the same information and can communicate with you directly for more information, if needed. Please follow the instructions below to submit your feedback. For issues occurring with your web service, ensure your feedback contains the following information: the primary App ID and Services ID the user’s Apple ID, email address, and/or identity token the duplicate server-to-server notification requests, including all parameter values, and error responses (if applicable) the timestamp of when the issue was reproduced (optional) screenshots or videos of errors and unexpected behaviors (optional) Important: If providing a web service request, please ensure the client secret (JWT) has an extended expiration time (exp) of at least three (3) days, so I have enough time to diagnose the issue. Additionally, if your request requires access token or refresh tokens, please provide refresh tokens as they do not have a time-based expiration time; most access tokens have a maximum lifetime of one (1) hour, and will expire before I have a chance to look at the issue. Submitting your feedback Before you submit to Feedback Assistant, please confirm the requested information above (for your native app, web service, or email delivery) is included in your feedback. Failure to provide the requested information will only delay my investigation into the reported issue within your Sign in with Apple client. After your submission to Feedback Assistant is complete, please respond to this post with the Feedback ID, so I can escalate internally. Cheers, Paris
Post marked as solved
1 Replies
Hi JAEHOON_LEE, Yes, the user identifier and private email address remain unchanged for the same developer account and all apps authenticated with Sign in with Apple. However, even though the same user may decide to change their full name or use a different, real email address on a subsequent account creation, the user identifier will stay the same. This is way it should be used as the unique identifier for your users. Cheers, Paris
Post not yet marked as solved
5 Replies
Hi all, To prevent sending sensitive JSON Web Tokens (JWTs) in plain text, you should create a report in Feedback Assistant to share the details requested below. Additionally, if I determine the error is caused by an internal issue in the operating system or Apple ID servers, the appropriate engineering teams have access to the same information and can communicate with you directly for more information, if needed. Please follow the instructions below to submit your feedback. For "Sign Up Not Completed" errors occurring with your native app, perform the following steps: Install the Accounts/AuthKit profile on your iOS, macOS, tvOS, or watchOS device. Reproduce the issue and make a note of the timestamp when the issue occurred, while optionally capturing screenshots or video. Gather a sysdiagnose on the same iOS, macOS, tvOS, or watchOS device. Ensure your feedback contains the following information: a. the primary App ID or Bundle ID b. the user’s Apple ID, email address, and/or identity token c. the sysdiagnose gathered after reproducing the issue d. the timestamp of when the issue was reproduced e. screenshots or videos of errors and unexpected behaviors (optional) For issues occurring with your web service, ensure your feedback contains the following information: the primary App ID and Services ID the user’s Apple ID, email address, and/or identity token the failing request, including all parameter values, and error responses (if applicable) the timestamp of when the issue was reproduced (optional) screenshots or videos of errors and unexpected behaviors (optional) Submitting your feedback Before you submit to Feedback Assistant, please confirm the requested information above (for your native app, web service, or email delivery) is included in your feedback. Failure to provide the requested information will only delay my investigation into the reported issue within your Sign in with Apple client. After your submission to Feedback Assistant is complete, please respond to this thread with the Feedback ID. Once received, we can begin our investigation and determine if this issue is caused by an error within your client, a configuration issue within your developer account, or an underlying system bug. Cheers, Paris
Post not yet marked as solved
1 Replies
Hi Pushparaj_Setindia, Is there any way by which we can get token from apple with encrypted key. This key will be kept as a secret key at apple and our project side as well. Hence, it will be secured or is there any apple link where this token can be decoded. Yes, you can securely transfer the authorization grant code received in your ASAuthorizationAppleIDCredential to your server infrastructure, then your server can validate the authorizationCode to receive the user's identity token, refresh token, and access token. Please see the following documentation for more info: Generate and validate tokens Cheers, Paris