Post

Replies

Boosts

Views

Created

PPO, are re-downloaders included in tests and tests results?
I would like to confirm this one way or another. I believe that re-downloaders are not included based on those links: https://developer.apple.com/help/app-store-connect/view-app-analytics/view-product-page-optimization-results https://developer.apple.com/help/app-store-connect/reference/reporting/app-metrics (Download metrics section). In our apps 20-30% of downloads are from re-downloaders. Thank you!
0
0
20
1w
UIKit: readableContentGuide is too wide on iPads iOS 26.x
We noticed in multiple apps that readableContentGuide is way too wide on iOS 26.x. Here are changes between iPad 13inch iOS 18.3 and the same device iOS 26.2 (but this affects also iOS 26.0 and iOS 26.1): 13 inch iOS 18 Landscape ContentSizeCategory: XS, Width: 1376.0 , Readable Width: 560.0 S, Width: 1376.0 , Readable Width: 600.0 M, Width: 1376.0 , Readable Width: 632.0 L, Width: 1376.0 , Readable Width: 664.0 XL, Width: 1376.0 , Readable Width: 744.0 XXL, Width: 1376.0 , Readable Width: 816.0 XXXL,Width: 1376.0 , Readable Width: 896.0 A_M, Width: 1376.0 , Readable Width: 1096.0 A_L, Width: 1376.0 , Readable Width: 1280.0 A_XL,Width: 1376.0 , Readable Width: 1336.0 13 inch iOS 26 Landscape ContentSizeCategory: XS, Width: 1376.0 , Readable Width: 752.0 S, Width: 1376.0 , Readable Width: 800.0 M, Width: 1376.0 , Readable Width: 848.0 L, Width: 1376.0 , Readable Width: 896.0 XL, Width: 1376.0 , Readable Width: 1000.0 XXL, Width: 1376.0 , Readable Width: 1096.0 XXXL,Width: 1376.0 , Readable Width: 1200.0 A_M, Width: 1376.0 , Readable Width: 1336.0 The code I used: class ViewController: UIViewController { lazy var readableView: UIView = { let view = UIView() view.backgroundColor = .systemBlue view.translatesAutoresizingMaskIntoConstraints = false return view }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(readableView) NSLayoutConstraint.activate([ readableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), readableView.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor), readableView.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor), readableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if readableView.frame.width > 0 { let orientation = UIDevice.current.orientation print(""" ContentSizeCategory: \(preferredContentSizeCategoryAsString()) Width: \(view.frame.width) , Readable Width: \(readableView.frame.width), Ratio: \(String(format: "%.1f", (readableView.frame.width / view.frame.width) * 100))% """) } } func preferredContentSizeCategoryAsString() -> String { switch UIApplication.shared.preferredContentSizeCategory { case UIContentSizeCategory.accessibilityExtraExtraExtraLarge: return "A_XXXL" case UIContentSizeCategory.accessibilityExtraExtraLarge: return "A_XXL" case UIContentSizeCategory.accessibilityExtraLarge: return "A_XL" case UIContentSizeCategory.accessibilityLarge: return "A_L" case UIContentSizeCategory.accessibilityMedium: return "A_M" case UIContentSizeCategory.extraExtraExtraLarge: return "XXXL" case UIContentSizeCategory.extraExtraLarge: return "XXL" case UIContentSizeCategory.extraLarge: return "XL" case UIContentSizeCategory.large: return "L" case UIContentSizeCategory.medium: return "M" case UIContentSizeCategory.small: return "S" case UIContentSizeCategory.extraSmall: return "XS" case UIContentSizeCategory.unspecified: return "U" default: return "D" } } } Please advise, it feels completely broken. Thank you.
1
1
146
Jan ’26
Connect Apple Watch to Xcode.
How to connect Apple Watch to Xcode? I haven't used Apple Watch for ages but it used to work fine. Today after adding changes to one of my apps Watch extension I wanted to test it on my Apple Watch but I'm not able to get Xcode to discover my Apple Watch. Apple watch has both Bluetooth and Wifi on. It's connected to the same Wifi as my Mac mini. Watch is paired with iPhone and the iPhone is connected to Mac mini via USB cable. Deploying to iPhone works fine, but I Xcode doesn't see as Apple Watch. iPhone sees Apple Watch. I tried Xcode 16.2, and Xcode 26.0 and Xcode Version 26.1 beta 2. I updated Apple Watch to Watch OS 26 but it didn't help. iPhone 12 Pro Max, iOS 26.0 Apple Watch Series 8 (GPS), watchOS 26.0.2 Mac mini 2025, Apple M4 Pro, macOS 15.6 Please advise. It's so frustrating! I wasted 2 hours on that already. In the past (years ago) I used to manage 3 apps with Apple Watch extensions and connection were finicky but it wasn't so bad!
1
1
344
Oct ’25
EXC_BREAKPOINT, QuartzCore , Crash CA::Render::Image::new_image
We are seeing crashes in Xcode organizer. So far we are not able to reproduce them locally. They affect multiple app releases (some older, built with Xcode 15.x and newer built with Xcode 16.0). They only affect iOS 18.5. Is there anything that changed in latest iOS? It's hard to tell what exactly is causing this crash because setting symbolic breakpoint on CA::Render::Image::new_image(unsigned int, unsigned int, unsigned int, unsigned int, CGColorSpace*, void const*, unsigned long const*, void (*)(void const*, void*), void*) triggers this breakpoint all the time, but not necessarily with exactly the previous stack frames matching the crash report. Is it a known issue? crash.crash Thank you.
0
5
483
Jul ’25
AirDropped Videos from Photos Save to Files Instead of Photos on Receiving Device
My app allows users to capture and save videos to the Photos app using the following Swift code: PHPhotoLibrary.shared().performChanges { PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: fileURL) } completionHandler: { success, error in Videos are successfully saved to Photos and play correctly. However, users report that when they AirDrop these videos from the Photos app to another device (e.g., iPad to iPhone), the videos are saved in the Files app on the receiving device instead of the Photos app. This issue is more common with higher-resolution videos, such as 2K, recorded in HEVC format at 30 fps. I wasn't able to reproduce the issue locally. I've found a thread in public apple forum: https://discussions.apple.com/thread/255276865?sortBy=rank but I wonder maybe there are some special flags that I should clear or add to my videos (e.g. PHAssetChangeRequest)? Thank you!
0
0
157
May ’25
Save MPEG-TS (h264 or HEVC) video stream using AVAssetWriter.
I'm capturing video stream from GoPro camera (I demux UDP MPEG-TS packets) and create CMSampleBuffers from them, this works fine when I display them using CMSampleBufferLayer. However when I dump them to disk using AVAssetWriter and then playback it with AVPlayer, AVPlayer has problems with scrubbing, it also cannot render previous frames, it needs to go back to key frames. Also thumbnails generated with AVAssetImageGenerator are mostly distorted and green, even though I set the requestedTimeToleranceAfter longer than the key frames frequency. When I re-encode saved video once again with AVAssetExportSession and play it back then I can scrub the video just fine. Is it because re-transcoding adds additional metadata to enable generating frames when rewinding the video and scrubbing? If so is there a way to achieve it with AVAssetWriter without much time penalty? I need the dump/save operation to be very fast. I also considered the following: Instead of de-muxing video and creating CMSampleBuffers, maybe I could directly dump the stream to disk and somehow add moov atoms with timing information. Would this approach work? If so where I can find information how to do it? Thank you!
3
0
191
Apr ’25
BGAppRefreshTask expires after few seconds (2-5 seconds).
I can see a number of events in our error logging service where we track expired BGAppRefreshTask. We use BGAppRefreshTask to update metadata. By looking into those events I can see most of reported expired tasks expired around 2-5 seconds after the app was launched. The documentations says: The system decides the best time to launch your background task, and provides your app up to 30 seconds of background runtime. I expected "up to 30 seconds" to be 10-30 seconds range, not that extremely short. Is there any heuristic that affects how much time the app gets? Is there a way to tell if the app was launched due to the background refresh task? If we have this information we can optimize what the app does during those 5 seconds. Thank you!.
8
0
252
Apr ’25
TestFlight 3.8.0 crashes on launch on iOS 14.1
Seems that recent TestFlight update (3.8.0) is broken on iOS 14.1. It crashes on launch. It worked fine on the same device just few days ago (I assumed it was 3.7.1). I uninstalled the TF and installed it again but it doesn't help. Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Triggered by Thread: 0 Attached is the crash report. I would appreciate if you guys can quickly fix it, or provide a solution. Thank you. Crash report
1
0
398
Mar ’25
AVSampleBufferDisplayLayerContentLayer memory leaks.
I noticed that AVSampleBufferDisplayLayerContentLayer is not released when the AVSampleBufferDisplayLayer is removed and released. It is possible to reproduce the issue with the simple code: import AVFoundation import UIKit class ViewController: UIViewController { var displayBufferLayer: AVSampleBufferDisplayLayer? override func viewDidLoad() { super.viewDidLoad() let displayBufferLayer = AVSampleBufferDisplayLayer() displayBufferLayer.videoGravity = .resizeAspectFill displayBufferLayer.frame = view.bounds view.layer.insertSublayer(displayBufferLayer, at: 0) self.displayBufferLayer = displayBufferLayer DispatchQueue.main.asyncAfter(deadline: .now() + 1) { self.displayBufferLayer?.flush() self.displayBufferLayer?.removeFromSuperlayer() self.displayBufferLayer = nil } } } In my real project I have mutliple AVSampleBufferDisplayLayer created and removed in different view controllers, this is problematic because the amount of leaked AVSampleBufferDisplayLayerContentLayer keeps increasing. I wonder that maybe I should use a pool of AVSampleBufferDisplayLayer and reuse them, however I'm slightly afraid that this can also lead to strange bugs. Edit: It doesn't cause leaks on iOS 18 device but leaks on iPad Pro, iOS 17.5.1
4
1
634
Dec ’24
Xcode Organizer, Insufficient terminations data available when no filter applied.
Organizer Terminations tab shows "Insufficient terminations data available" when there's no filter applied: iPhone (All). However it shows data when I explicitly select a device type. This particular app has more users than other apps for which this tab works OK. It used to work fine but stopped working a couple of months ago. The Xcode version doesn't matter (I tried Xcode 14.3.1, Xcode 15.1 and Xcode 15.2). Please check attached screenshot. Thank you.
0
0
753
Mar ’24
When and why SKPaymentQueue.default().storefront is `nil` in release builds, all iOS versions
In our app we fetch the storefront country code: SKPaymentQueue.default().storefront?.countryCode We were not sure if all users will have this property available and we track to Bugsnag when this is nil. It turned out that over 6k users don't have this property available (shortly after the release) the number is larger than we expected. Looks like it affects all iOS versions (87 iOS versions from iOS 13.x to iOS 17.x) and models (95 in our case). It is not clear when and why this would be nil. It is not related to internet availability or to the timing of calls (e.g. it happens shortly after the app starts or hours after the app was started). So, when and why would the SKPaymentQueue.default().storefront be nil`? Thanks!
0
1
745
Feb ’24
How to hide route button `showsRouteButton = false` in `MPVolumeView` without deprecation warning?
MPVolumeView's showsRouteButton was deprecated (https://developer.apple.com/documentation/mediaplayer/mpvolumeview/showsroutebutton?language=objc). It's not clear how can we now hide this button without deprecation warning. The documentation is lacking. Please advise. Thank you!
Replies
4
Boosts
0
Views
311
Activity
1w
PPO, are re-downloaders included in tests and tests results?
I would like to confirm this one way or another. I believe that re-downloaders are not included based on those links: https://developer.apple.com/help/app-store-connect/view-app-analytics/view-product-page-optimization-results https://developer.apple.com/help/app-store-connect/reference/reporting/app-metrics (Download metrics section). In our apps 20-30% of downloads are from re-downloaders. Thank you!
Replies
0
Boosts
0
Views
20
Activity
1w
UIKit: readableContentGuide is too wide on iPads iOS 26.x
We noticed in multiple apps that readableContentGuide is way too wide on iOS 26.x. Here are changes between iPad 13inch iOS 18.3 and the same device iOS 26.2 (but this affects also iOS 26.0 and iOS 26.1): 13 inch iOS 18 Landscape ContentSizeCategory: XS, Width: 1376.0 , Readable Width: 560.0 S, Width: 1376.0 , Readable Width: 600.0 M, Width: 1376.0 , Readable Width: 632.0 L, Width: 1376.0 , Readable Width: 664.0 XL, Width: 1376.0 , Readable Width: 744.0 XXL, Width: 1376.0 , Readable Width: 816.0 XXXL,Width: 1376.0 , Readable Width: 896.0 A_M, Width: 1376.0 , Readable Width: 1096.0 A_L, Width: 1376.0 , Readable Width: 1280.0 A_XL,Width: 1376.0 , Readable Width: 1336.0 13 inch iOS 26 Landscape ContentSizeCategory: XS, Width: 1376.0 , Readable Width: 752.0 S, Width: 1376.0 , Readable Width: 800.0 M, Width: 1376.0 , Readable Width: 848.0 L, Width: 1376.0 , Readable Width: 896.0 XL, Width: 1376.0 , Readable Width: 1000.0 XXL, Width: 1376.0 , Readable Width: 1096.0 XXXL,Width: 1376.0 , Readable Width: 1200.0 A_M, Width: 1376.0 , Readable Width: 1336.0 The code I used: class ViewController: UIViewController { lazy var readableView: UIView = { let view = UIView() view.backgroundColor = .systemBlue view.translatesAutoresizingMaskIntoConstraints = false return view }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(readableView) NSLayoutConstraint.activate([ readableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), readableView.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor), readableView.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor), readableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if readableView.frame.width > 0 { let orientation = UIDevice.current.orientation print(""" ContentSizeCategory: \(preferredContentSizeCategoryAsString()) Width: \(view.frame.width) , Readable Width: \(readableView.frame.width), Ratio: \(String(format: "%.1f", (readableView.frame.width / view.frame.width) * 100))% """) } } func preferredContentSizeCategoryAsString() -> String { switch UIApplication.shared.preferredContentSizeCategory { case UIContentSizeCategory.accessibilityExtraExtraExtraLarge: return "A_XXXL" case UIContentSizeCategory.accessibilityExtraExtraLarge: return "A_XXL" case UIContentSizeCategory.accessibilityExtraLarge: return "A_XL" case UIContentSizeCategory.accessibilityLarge: return "A_L" case UIContentSizeCategory.accessibilityMedium: return "A_M" case UIContentSizeCategory.extraExtraExtraLarge: return "XXXL" case UIContentSizeCategory.extraExtraLarge: return "XXL" case UIContentSizeCategory.extraLarge: return "XL" case UIContentSizeCategory.large: return "L" case UIContentSizeCategory.medium: return "M" case UIContentSizeCategory.small: return "S" case UIContentSizeCategory.extraSmall: return "XS" case UIContentSizeCategory.unspecified: return "U" default: return "D" } } } Please advise, it feels completely broken. Thank you.
Replies
1
Boosts
1
Views
146
Activity
Jan ’26
Connect Apple Watch to Xcode.
How to connect Apple Watch to Xcode? I haven't used Apple Watch for ages but it used to work fine. Today after adding changes to one of my apps Watch extension I wanted to test it on my Apple Watch but I'm not able to get Xcode to discover my Apple Watch. Apple watch has both Bluetooth and Wifi on. It's connected to the same Wifi as my Mac mini. Watch is paired with iPhone and the iPhone is connected to Mac mini via USB cable. Deploying to iPhone works fine, but I Xcode doesn't see as Apple Watch. iPhone sees Apple Watch. I tried Xcode 16.2, and Xcode 26.0 and Xcode Version 26.1 beta 2. I updated Apple Watch to Watch OS 26 but it didn't help. iPhone 12 Pro Max, iOS 26.0 Apple Watch Series 8 (GPS), watchOS 26.0.2 Mac mini 2025, Apple M4 Pro, macOS 15.6 Please advise. It's so frustrating! I wasted 2 hours on that already. In the past (years ago) I used to manage 3 apps with Apple Watch extensions and connection were finicky but it wasn't so bad!
Replies
1
Boosts
1
Views
344
Activity
Oct ’25
EXC_BREAKPOINT, QuartzCore , Crash CA::Render::Image::new_image
We are seeing crashes in Xcode organizer. So far we are not able to reproduce them locally. They affect multiple app releases (some older, built with Xcode 15.x and newer built with Xcode 16.0). They only affect iOS 18.5. Is there anything that changed in latest iOS? It's hard to tell what exactly is causing this crash because setting symbolic breakpoint on CA::Render::Image::new_image(unsigned int, unsigned int, unsigned int, unsigned int, CGColorSpace*, void const*, unsigned long const*, void (*)(void const*, void*), void*) triggers this breakpoint all the time, but not necessarily with exactly the previous stack frames matching the crash report. Is it a known issue? crash.crash Thank you.
Replies
0
Boosts
5
Views
483
Activity
Jul ’25
AirDropped Videos from Photos Save to Files Instead of Photos on Receiving Device
My app allows users to capture and save videos to the Photos app using the following Swift code: PHPhotoLibrary.shared().performChanges { PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: fileURL) } completionHandler: { success, error in Videos are successfully saved to Photos and play correctly. However, users report that when they AirDrop these videos from the Photos app to another device (e.g., iPad to iPhone), the videos are saved in the Files app on the receiving device instead of the Photos app. This issue is more common with higher-resolution videos, such as 2K, recorded in HEVC format at 30 fps. I wasn't able to reproduce the issue locally. I've found a thread in public apple forum: https://discussions.apple.com/thread/255276865?sortBy=rank but I wonder maybe there are some special flags that I should clear or add to my videos (e.g. PHAssetChangeRequest)? Thank you!
Replies
0
Boosts
0
Views
157
Activity
May ’25
Xcode 16.2, UITabBar, UITabBarItem badge is cut, iPadOS 18.0
The badge is cut if it's assigned to the last item. Is it a known issue? Thank you.
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
2
Boosts
0
Views
96
Activity
May ’25
Save MPEG-TS (h264 or HEVC) video stream using AVAssetWriter.
I'm capturing video stream from GoPro camera (I demux UDP MPEG-TS packets) and create CMSampleBuffers from them, this works fine when I display them using CMSampleBufferLayer. However when I dump them to disk using AVAssetWriter and then playback it with AVPlayer, AVPlayer has problems with scrubbing, it also cannot render previous frames, it needs to go back to key frames. Also thumbnails generated with AVAssetImageGenerator are mostly distorted and green, even though I set the requestedTimeToleranceAfter longer than the key frames frequency. When I re-encode saved video once again with AVAssetExportSession and play it back then I can scrub the video just fine. Is it because re-transcoding adds additional metadata to enable generating frames when rewinding the video and scrubbing? If so is there a way to achieve it with AVAssetWriter without much time penalty? I need the dump/save operation to be very fast. I also considered the following: Instead of de-muxing video and creating CMSampleBuffers, maybe I could directly dump the stream to disk and somehow add moov atoms with timing information. Would this approach work? If so where I can find information how to do it? Thank you!
Replies
3
Boosts
0
Views
191
Activity
Apr ’25
BGAppRefreshTask expires after few seconds (2-5 seconds).
I can see a number of events in our error logging service where we track expired BGAppRefreshTask. We use BGAppRefreshTask to update metadata. By looking into those events I can see most of reported expired tasks expired around 2-5 seconds after the app was launched. The documentations says: The system decides the best time to launch your background task, and provides your app up to 30 seconds of background runtime. I expected "up to 30 seconds" to be 10-30 seconds range, not that extremely short. Is there any heuristic that affects how much time the app gets? Is there a way to tell if the app was launched due to the background refresh task? If we have this information we can optimize what the app does during those 5 seconds. Thank you!.
Replies
8
Boosts
0
Views
252
Activity
Apr ’25
TestFlight 3.8.0 crashes on launch on iOS 14.1
Seems that recent TestFlight update (3.8.0) is broken on iOS 14.1. It crashes on launch. It worked fine on the same device just few days ago (I assumed it was 3.7.1). I uninstalled the TF and installed it again but it doesn't help. Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Triggered by Thread: 0 Attached is the crash report. I would appreciate if you guys can quickly fix it, or provide a solution. Thank you. Crash report
Replies
1
Boosts
0
Views
398
Activity
Mar ’25
AVSampleBufferDisplayLayerContentLayer memory leaks.
I noticed that AVSampleBufferDisplayLayerContentLayer is not released when the AVSampleBufferDisplayLayer is removed and released. It is possible to reproduce the issue with the simple code: import AVFoundation import UIKit class ViewController: UIViewController { var displayBufferLayer: AVSampleBufferDisplayLayer? override func viewDidLoad() { super.viewDidLoad() let displayBufferLayer = AVSampleBufferDisplayLayer() displayBufferLayer.videoGravity = .resizeAspectFill displayBufferLayer.frame = view.bounds view.layer.insertSublayer(displayBufferLayer, at: 0) self.displayBufferLayer = displayBufferLayer DispatchQueue.main.asyncAfter(deadline: .now() + 1) { self.displayBufferLayer?.flush() self.displayBufferLayer?.removeFromSuperlayer() self.displayBufferLayer = nil } } } In my real project I have mutliple AVSampleBufferDisplayLayer created and removed in different view controllers, this is problematic because the amount of leaked AVSampleBufferDisplayLayerContentLayer keeps increasing. I wonder that maybe I should use a pool of AVSampleBufferDisplayLayer and reuse them, however I'm slightly afraid that this can also lead to strange bugs. Edit: It doesn't cause leaks on iOS 18 device but leaks on iPad Pro, iOS 17.5.1
Replies
4
Boosts
1
Views
634
Activity
Dec ’24
iOS: Are there any drawback by setting assumesHTTP3Capable to true if the server doesn't support it?
Are there any drawbacks (e.g. slower request) by setting assumesHTTP3Capable to true if the server doesn't support it? Is it OK to set it globally in the app for all URLRequests or it should be set depending on to which server the app makes the request? Thanks!
Replies
2
Boosts
0
Views
1.1k
Activity
Mar ’24
Xcode Organizer, Insufficient terminations data available when no filter applied.
Organizer Terminations tab shows "Insufficient terminations data available" when there's no filter applied: iPhone (All). However it shows data when I explicitly select a device type. This particular app has more users than other apps for which this tab works OK. It used to work fine but stopped working a couple of months ago. The Xcode version doesn't matter (I tried Xcode 14.3.1, Xcode 15.1 and Xcode 15.2). Please check attached screenshot. Thank you.
Replies
0
Boosts
0
Views
753
Activity
Mar ’24
When and why SKPaymentQueue.default().storefront is `nil` in release builds, all iOS versions
In our app we fetch the storefront country code: SKPaymentQueue.default().storefront?.countryCode We were not sure if all users will have this property available and we track to Bugsnag when this is nil. It turned out that over 6k users don't have this property available (shortly after the release) the number is larger than we expected. Looks like it affects all iOS versions (87 iOS versions from iOS 13.x to iOS 17.x) and models (95 in our case). It is not clear when and why this would be nil. It is not related to internet availability or to the timing of calls (e.g. it happens shortly after the app starts or hours after the app was started). So, when and why would the SKPaymentQueue.default().storefront be nil`? Thanks!
Replies
0
Boosts
1
Views
745
Activity
Feb ’24