Post

Replies

Boosts

Views

Activity

Reply to Universal Links failing for some users but working for others
Thanks, Albert. We investigated this with our infrastructure team and found that requests to the AASA endpoint are currently subject to security controls, which explains why your request received an HTML response instead of the AASA file. We also reviewed Apple's guidance regarding hosted AASA files and understand that the endpoint should accept requests from all user agents, including AASA-Bot and CFNetwork. To ensure we align our configuration with Apple's requirements, could you please confirm whether there are any additional Apple user agents, services, or request sources that may be used to retrieve or validate the AASA file beyond AASA-Bot and CFNetwork? As per our team, we are allowing for only AASA-Bot/1.0.0 now. So help us rightly on this for which user agent we should allow for this AASA request. Thanks, Nethaji
Jul ’26
Reply to Universal Links failing for some users but working for others
Thank you for your response. I have reviewed the Universal Links documentation and Tech Notes that were referenced. From my side, I am able to access and download the AASA file successfully from both locations: https://www.gartner.com/apple-app-site-association & https://www.gartner.com/.well-known/apple-app-site-association Because the file is accessible and returns valid content in my testing, I am wondering whether the issue could be related to request filtering, bot protection, WAF rules, CDN rules, or user-agent restrictions that may be preventing Apple services from retrieving the file in certain scenarios. I found Apple's recent update regarding hosted AASA file user-agent policies: https://developer.apple.com/search/?q=2025-05-15+Added+User-Agent+policies+for+the+hosted+AASA+file To help us validate our server configuration, could you please confirm the user agents and request patterns that Apple services may use when retrieving the AASA file? should we explicitly allow any of the following user agents (or others)? AASA-Bot AASA-Bot/1.0.0 CFNetwork Apple app-site-association swcd Our objective is to ensure that no security controls, CDN rules, bot mitigation policies, or user-agent filtering on our servers inadvertently block AASA retrieval requests from Apple. Could you please provide guidance on: The current user-agent string(s) Apple uses to fetch AASA files. Whether Apple recommends allowlisting specific user-agents. Whether there are any additional IP ranges, headers, or request characteristics that should be considered. Any diagnostics that can help verify that Apple is successfully downloading and processing the AASA file. Any clarification would be greatly appreciated as we are trying to rule out server-side filtering as a potential cause of the Universal Links behavior we are investigating. Thank you for your help.
Jul ’26
Reply to Universal Links failing for some users but working for others
We're investigating an intermittent Universal Links behavior and would appreciate a review of our AASA (Apple App Site Association) configuration to determine whether there is anything missing or misconfigured that could explain what we're seeing. When we test internally, Universal Links work as expected: Tested across multiple devices. Tested with fresh installs and reinstalls. Universal Links consistently open the app when expected. No issues reproduced on devices available to us. However, some of our analytics/tracking tools have flagged a few user journeys that appear unusual. Specifically, we see cases where: A user starts their journey in the mobile browser. At nearly the same timestamp (or immediately afterward), an app session is initiated. In several cases, the entry point appears to be a Branch.io link. Because the behavior is difficult to reproduce, we're trying to determine whether there could be an AASA-related issue impacting only certain devices, iOS versions, or installation states. Below is the current AASA response from: https://www.gartner.com/apple-app-site-association HTTP/2 200 content-type: binary/octet-stream content-length: 1747 notice any issues or missing configuration in the AASA file that could cause Universal Links to behave inconsistently across a subset of users? Is there any concern with having both paths and components defined for the same app entry? Could the entry "community.gartner.com/*" under paths be problematic since it appears to include a hostname rather than a path? Are there any known iOS behaviors where Universal Link attribution can result in browser and app sessions appearing to start almost simultaneously, particularly when using Branch.io links? Any insights, best practices, or troubleshooting suggestions would be greatly appreciated.
Jul ’26
Reply to Universal Links failing for some users but working for others
Thank you for your response and for sharing The AASA URL included in my post was provided as a reference. We do host the AASA file in the supported location (/.well-known/apple-app-site-association) and have verified that it is accessible and valid. Our primary challenge is that Universal Links are working correctly for the majority of users, but a small subset of users experience failures where the same links open in Safari instead of the app. Since the issue is intermittent and user-specific, we have been unable to reliably reproduce it. We are particularly interested in understanding: Whether there are known device-level or user-level conditions that can cause Universal Links to stop working. How to determine if the AASA association has become stale or invalid on specific devices. Any diagnostic logs or troubleshooting steps that can help identify why Universal Links are failing only for certain users. We will review the troubleshooting guidance in TN3155, but any insights into debugging intermittent, user-specific Universal Link failures would be greatly appreciated. Thank you.
Jun ’26
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
yes you are right. Am saving the compressed quality image into userdefaults and loading the image with actual resolution from user defaults and while displaying resizing the image based on widget like 61x61 and 46x46. As per your suggestion now I am saving the image with 200x200 into user defaults and getting the same while displaying it as 46X46 for medium and 61x61 for large into widgets and. But still am getting memory limit exception while rendering the both medium( has two articles with images) and large family widgets (4 articles with images). Working fine when rendering the data for medium widget ( with two articles and two images). Note: Both the widgets has same data but no of records vary. Any suggestions on this.
Sep ’22
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
Saving images from timeline provider into UserDefaults by compressing the quality and calling the getImageFromUserDefaults bind the image which was saved.  //Get the images from the User Defaults based on resId.     static func getImageFromUserDefaults(key: String) -> UIImage? {         if let userDefaults = UserDefaults(suiteName: userDefaultsAppGroup) {             if let imageData = userDefaults.object(forKey: key) as? Data,                let image = UIImage(data: imageData) {                 return image             }         }                  return nil     }          //Save the images into User Defaults, reId as Key     static func saveIntoUserDefaults(image : UIImage, resId: Int) {         if let userDefaults = UserDefaults(suiteName: SharedContentConstants.userDefaultsAppGroup) {             if let jpegRepresentation = image.jpegData(compressionQuality: 0.5) {                     userDefaults.set(jpegRepresentation, forKey: String(resId))                 }         }     }
Sep ’22
Reply to Widget is not auto refreshing
As you suggested I have added only two timeline entries but still the widget is not getting auto refreshed.     func getTimeline(in context: Context, completion: @escaping (Timeline<RecommendedWidgetEntry>) -> Void) {         let accessTokenValue = Keychain.getAccessTokenValue()         if let token = accessTokenValue, !token.isEmpty  {                widgetVM.getRecommendedDataForWidget{ (result) in                     switch result {                     case .success(let items):                         widgetVM.downloadImages(recommendedData: items) { (result) in                             switch result {                             case .success(_),.failure(_) :                                 var refreshEntries: [RecommendedWidgetEntry] = []                                 if let At6AM = Calendar.current.date(bySettingHour: 6, minute: 0, second: 0, of: Date()) {                                     let refreshEntryFor6AM = RecommendedWidgetEntry(date: At6AM, recommedationData: items)                                     refreshEntries.append(refreshEntryFor6AM)                                 }                                 if let At6PM = Calendar.current.date(bySettingHour: 18, minute: 0, second: 0, of: Date()) {                                     let refreshEntryFor6PM = RecommendedWidgetEntry(date: At6PM, recommedationData: items)                                     refreshEntries.append(refreshEntryFor6PM)                                 }                                 let timeline = Timeline(entries: refreshEntries, policy: .atEnd)                                 completion(timeline)                             }                         }                     case .failure(_):                         let entry = RecommendedWidgetEntry(date: Date(), recommedationData: WidgetFeedModel.getPlaceholderData())                             let timeline = Timeline(entries: [entry], policy: .never)                             completion(timeline)                     }                 }         }         else {             if accessTokenValue == nil { // if token is nil then considering it as member is not logged in.                 SharedContentConstants.clearUserDefaultsData()                 let entry = RecommendedWidgetEntry(date: Date(), recommedationData: [])                 let timeline = Timeline(entries: [entry], policy: .never)                 completion(timeline)                 return             }         }     } On my timeline provider am calling the Rest API to fetch the data to update the widget. Could you please help me out is there any issue with the refresh policy ( My widgets must auto refresh twice a day like 6AM and 6PM) Kindly provide the reason, why the widgets are not autorefreshing on it's own. Thanks.
Topic: App & System Services SubTopic: General Tags:
Sep ’22
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
Am downloading the images like this and binding to widget UI. Correct me how can I proceed these memory limit issue. struct NetworkImage: View {          let url: URL?     var viewDimension : CGFloat = 46          var body: some View {             if let url = url, let imageData = try? Data(contentsOf: url),                let uiImage = UIImage(data: imageData) {                 AnyView( Image(uiImage: uiImage)                     .resizable()                     .aspectRatio(1, contentMode: .fit)                     .frame(width: viewDimension, height: viewDimension, alignment: .center)                     .border(Color(red: 0.957, green: 0.957, blue: 0.957), width: 2.0)                     .cornerRadius(4)                 )             }             else {                                  AnyView( EmptyView() )             }     } }
Sep ’22
Reply to Universal Links failing for some users but working for others
Thanks, Albert. We investigated this with our infrastructure team and found that requests to the AASA endpoint are currently subject to security controls, which explains why your request received an HTML response instead of the AASA file. We also reviewed Apple's guidance regarding hosted AASA files and understand that the endpoint should accept requests from all user agents, including AASA-Bot and CFNetwork. To ensure we align our configuration with Apple's requirements, could you please confirm whether there are any additional Apple user agents, services, or request sources that may be used to retrieve or validate the AASA file beyond AASA-Bot and CFNetwork? As per our team, we are allowing for only AASA-Bot/1.0.0 now. So help us rightly on this for which user agent we should allow for this AASA request. Thanks, Nethaji
Replies
Boosts
Views
Activity
Jul ’26
Reply to Universal Links failing for some users but working for others
Thank you for your response. I have reviewed the Universal Links documentation and Tech Notes that were referenced. From my side, I am able to access and download the AASA file successfully from both locations: https://www.gartner.com/apple-app-site-association & https://www.gartner.com/.well-known/apple-app-site-association Because the file is accessible and returns valid content in my testing, I am wondering whether the issue could be related to request filtering, bot protection, WAF rules, CDN rules, or user-agent restrictions that may be preventing Apple services from retrieving the file in certain scenarios. I found Apple's recent update regarding hosted AASA file user-agent policies: https://developer.apple.com/search/?q=2025-05-15+Added+User-Agent+policies+for+the+hosted+AASA+file To help us validate our server configuration, could you please confirm the user agents and request patterns that Apple services may use when retrieving the AASA file? should we explicitly allow any of the following user agents (or others)? AASA-Bot AASA-Bot/1.0.0 CFNetwork Apple app-site-association swcd Our objective is to ensure that no security controls, CDN rules, bot mitigation policies, or user-agent filtering on our servers inadvertently block AASA retrieval requests from Apple. Could you please provide guidance on: The current user-agent string(s) Apple uses to fetch AASA files. Whether Apple recommends allowlisting specific user-agents. Whether there are any additional IP ranges, headers, or request characteristics that should be considered. Any diagnostics that can help verify that Apple is successfully downloading and processing the AASA file. Any clarification would be greatly appreciated as we are trying to rule out server-side filtering as a potential cause of the Universal Links behavior we are investigating. Thank you for your help.
Replies
Boosts
Views
Activity
Jul ’26
Reply to Universal Links failing for some users but working for others
We're investigating an intermittent Universal Links behavior and would appreciate a review of our AASA (Apple App Site Association) configuration to determine whether there is anything missing or misconfigured that could explain what we're seeing. When we test internally, Universal Links work as expected: Tested across multiple devices. Tested with fresh installs and reinstalls. Universal Links consistently open the app when expected. No issues reproduced on devices available to us. However, some of our analytics/tracking tools have flagged a few user journeys that appear unusual. Specifically, we see cases where: A user starts their journey in the mobile browser. At nearly the same timestamp (or immediately afterward), an app session is initiated. In several cases, the entry point appears to be a Branch.io link. Because the behavior is difficult to reproduce, we're trying to determine whether there could be an AASA-related issue impacting only certain devices, iOS versions, or installation states. Below is the current AASA response from: https://www.gartner.com/apple-app-site-association HTTP/2 200 content-type: binary/octet-stream content-length: 1747 notice any issues or missing configuration in the AASA file that could cause Universal Links to behave inconsistently across a subset of users? Is there any concern with having both paths and components defined for the same app entry? Could the entry "community.gartner.com/*" under paths be problematic since it appears to include a hostname rather than a path? Are there any known iOS behaviors where Universal Link attribution can result in browser and app sessions appearing to start almost simultaneously, particularly when using Branch.io links? Any insights, best practices, or troubleshooting suggestions would be greatly appreciated.
Replies
Boosts
Views
Activity
Jul ’26
Reply to Universal Links failing for some users but working for others
Thank you for your response and for sharing The AASA URL included in my post was provided as a reference. We do host the AASA file in the supported location (/.well-known/apple-app-site-association) and have verified that it is accessible and valid. Our primary challenge is that Universal Links are working correctly for the majority of users, but a small subset of users experience failures where the same links open in Safari instead of the app. Since the issue is intermittent and user-specific, we have been unable to reliably reproduce it. We are particularly interested in understanding: Whether there are known device-level or user-level conditions that can cause Universal Links to stop working. How to determine if the AASA association has become stale or invalid on specific devices. Any diagnostic logs or troubleshooting steps that can help identify why Universal Links are failing only for certain users. We will review the troubleshooting guidance in TN3155, but any insights into debugging intermittent, user-specific Universal Link failures would be greatly appreciated. Thank you.
Replies
Boosts
Views
Activity
Jun ’26
Reply to What is the risk/impact for app, if third party sdks don’t update their privacy manifests?
Thanks @Claude31 As per my understanding, Apple is not declared/confirmed that the app will be rejected if the 3rd party SDK's doesn't provide their manifests. Could any one help me out with the Apple reference for the above one.
Topic: Privacy & Security SubTopic: General Tags:
Replies
Boosts
Views
Activity
Feb ’24
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
yes you are right. Am saving the compressed quality image into userdefaults and loading the image with actual resolution from user defaults and while displaying resizing the image based on widget like 61x61 and 46x46. As per your suggestion now I am saving the image with 200x200 into user defaults and getting the same while displaying it as 46X46 for medium and 61x61 for large into widgets and. But still am getting memory limit exception while rendering the both medium( has two articles with images) and large family widgets (4 articles with images). Working fine when rendering the data for medium widget ( with two articles and two images). Note: Both the widgets has same data but no of records vary. Any suggestions on this.
Replies
Boosts
Views
Activity
Sep ’22
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
Saving images from timeline provider into UserDefaults by compressing the quality and calling the getImageFromUserDefaults bind the image which was saved.  //Get the images from the User Defaults based on resId.     static func getImageFromUserDefaults(key: String) -> UIImage? {         if let userDefaults = UserDefaults(suiteName: userDefaultsAppGroup) {             if let imageData = userDefaults.object(forKey: key) as? Data,                let image = UIImage(data: imageData) {                 return image             }         }                  return nil     }          //Save the images into User Defaults, reId as Key     static func saveIntoUserDefaults(image : UIImage, resId: Int) {         if let userDefaults = UserDefaults(suiteName: SharedContentConstants.userDefaultsAppGroup) {             if let jpegRepresentation = image.jpegData(compressionQuality: 0.5) {                     userDefaults.set(jpegRepresentation, forKey: String(resId))                 }         }     }
Replies
Boosts
Views
Activity
Sep ’22
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
Again facing memory limit issue on my device after two days. Getting crashed when saving the image to file system. Added the memory graph and object graph for the same. Don't no how to move forward with remote images on my widgets. Kindly suggest the way how to overcome this low memory issue.
Replies
Boosts
Views
Activity
Sep ’22
Reply to Widget is not auto refreshing
As you suggested I have added only two timeline entries but still the widget is not getting auto refreshed.     func getTimeline(in context: Context, completion: @escaping (Timeline<RecommendedWidgetEntry>) -> Void) {         let accessTokenValue = Keychain.getAccessTokenValue()         if let token = accessTokenValue, !token.isEmpty  {                widgetVM.getRecommendedDataForWidget{ (result) in                     switch result {                     case .success(let items):                         widgetVM.downloadImages(recommendedData: items) { (result) in                             switch result {                             case .success(_),.failure(_) :                                 var refreshEntries: [RecommendedWidgetEntry] = []                                 if let At6AM = Calendar.current.date(bySettingHour: 6, minute: 0, second: 0, of: Date()) {                                     let refreshEntryFor6AM = RecommendedWidgetEntry(date: At6AM, recommedationData: items)                                     refreshEntries.append(refreshEntryFor6AM)                                 }                                 if let At6PM = Calendar.current.date(bySettingHour: 18, minute: 0, second: 0, of: Date()) {                                     let refreshEntryFor6PM = RecommendedWidgetEntry(date: At6PM, recommedationData: items)                                     refreshEntries.append(refreshEntryFor6PM)                                 }                                 let timeline = Timeline(entries: refreshEntries, policy: .atEnd)                                 completion(timeline)                             }                         }                     case .failure(_):                         let entry = RecommendedWidgetEntry(date: Date(), recommedationData: WidgetFeedModel.getPlaceholderData())                             let timeline = Timeline(entries: [entry], policy: .never)                             completion(timeline)                     }                 }         }         else {             if accessTokenValue == nil { // if token is nil then considering it as member is not logged in.                 SharedContentConstants.clearUserDefaultsData()                 let entry = RecommendedWidgetEntry(date: Date(), recommedationData: [])                 let timeline = Timeline(entries: [entry], policy: .never)                 completion(timeline)                 return             }         }     } On my timeline provider am calling the Rest API to fetch the data to update the widget. Could you please help me out is there any issue with the refresh policy ( My widgets must auto refresh twice a day like 6AM and 6PM) Kindly provide the reason, why the widgets are not autorefreshing on it's own. Thanks.
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Sep ’22
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
Thanks for your reply. Am using UserDefaults to cache the images from timeline provider and it's working fine instead of using File System.
Replies
Boosts
Views
Activity
Sep ’22
Reply to Widget is crashing with 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB, unused=0x0)
Am downloading the images like this and binding to widget UI. Correct me how can I proceed these memory limit issue. struct NetworkImage: View {          let url: URL?     var viewDimension : CGFloat = 46          var body: some View {             if let url = url, let imageData = try? Data(contentsOf: url),                let uiImage = UIImage(data: imageData) {                 AnyView( Image(uiImage: uiImage)                     .resizable()                     .aspectRatio(1, contentMode: .fit)                     .frame(width: viewDimension, height: viewDimension, alignment: .center)                     .border(Color(red: 0.957, green: 0.957, blue: 0.957), width: 2.0)                     .cornerRadius(4)                 )             }             else {                                  AnyView( EmptyView() )             }     } }
Replies
Boosts
Views
Activity
Sep ’22