Overview

Post

Replies

Boosts

Views

Created

Popovers are broken on Catalyst builds without portrait support
On macOS 15.2, any Mac Catalyst project that does not support portrait iPad orientation will no longer be able to successfully show the contents of any popover controls. This does not appear to be a problem on earlier versions of macOS and it only affects Mac Catalyst builds, not "Designed for iPad" builds. STEPS TO REPRODUCE Create a project that utilizes Mac Catalyst. Create a simple button that shows a popover with simple content. Remove Portrait as a supported orientation. Run the project on macOS 15.2 as a Mac Catalyst build. Note that the content inside the popover is not shown the popover is shown. Run the project as Designed for iPad. Note that the popover content shows correctly.
3
2
314
Jan ’25
Issue in Sequoia OS(15.2) with USB FAT32 remounting, when monitored with ES_EVENT_TYPE_AUTH_MOUNT event
Description: The issue with USB FAT32 is seen in Sequoia OS. Most of the times issue is seen when FAT32 USB is mounted along with other USBs like XFAT. The scenario is where USB mounting is monitored using Endpoint Security framework event ES_EVENT_TYPE_AUTH_MOUNT and when event is received, it will be denied for mounting is it is in read-write mode. And, program tries to mount the USB in read-only mode. Steps to Reproduce: Use the xcode program (which will be sent) for testing. Run the executable on macos having Sequoia OS. start executing the binary after successful compilation. Make sure it's running. Take 2 USB drives one with FAT32 and another one with XFAT. Try to mount the USBs and watch the logs on the terminal where the binary is running. We can see, the USB mounting in read-only mode fails for FAT32 where as it passes for other USB. The issue with mounting is not seen always, but, seen when more than 1 USB mounted and FAT32 we see most of the times. Once the mounting fails for the USB, we keep seeing this issue if we try to mount the USB using command line or any other way, until we remove the device and reconnect it. #include <EndpointSecurity/EndpointSecurity.h> #include <bsm/libbsm.h> #include <iostream> #include <os/log.h> #define MAX_THREADS_LIMIT 64 es_client_t *g_client = nullptr; dispatch_queue_t dispatchQueue; static std::atomic<int> m_numThreads; bool mountVolumeCommandLine(const std::string diskPath, const bool &isReadOnly) { std::string command(""); const std::string quote = "\""; if(isReadOnly) { command = "diskutil mount readOnly "+ quote + diskPath + quote; } else { command = "diskutil mount "+ quote + diskPath + quote; } FILE *mount = popen(command.c_str(), "r"); if (mount == NULL) { os_log_error(OS_LOG_DEFAULT, "Failure!! mounting of %{public}s failed using command = %{public}s", diskPath.c_str(),command.c_str()); return false; } else { std::string result = ""; os_log(OS_LOG_DEFAULT, "successful!! executed mount for %{public}s using command = %{public}s ",diskPath.c_str(), command.c_str()); } pclose(mount); return true; } void handleEvents(const es_message_t *msg) { m_numThreads++; switch(msg->event_type) { case ES_EVENT_TYPE_AUTH_MOUNT: { std::string diskPath = msg->event.mount.statfs->f_mntfromname; std::string volumePath = msg->event.mount.statfs->f_mntonname; mountVolumeCommandLine(diskPath, true); break; } default: break; } m_numThreads--; } bool sendAuthResponse(const es_message_t *msg, const es_auth_result_t &result) { es_respond_result_t res = es_respond_auth_result(g_client, msg, result, false); if (res != ES_RESPOND_RESULT_SUCCESS) { os_log_error(OS_LOG_DEFAULT, "SampleEndpointSecurity Failed to respond to auth event error"); return false; } return true; } int createESClient(const es_handler_block_t &handler) { dispatchQueue = dispatch_queue_create("com.test.es_notify", DISPATCH_QUEUE_SERIAL); dispatch_set_target_queue(dispatchQueue, dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)); while(1) { es_new_client_result_t res = es_new_client(&g_client, handler); if(ES_NEW_CLIENT_RESULT_SUCCESS != res) { g_client = nullptr; std::cout<<"client creation failed"<<std::endl; if(ES_NEW_CLIENT_RESULT_ERR_NOT_ENTITLED == res) { os_log_error(OS_LOG_DEFAULT, "SampleEndpointSecurity ESClient creation Error: Program requires proper entitlement"); sleep(300); } else if(ES_NEW_CLIENT_RESULT_ERR_NOT_PERMITTED == res) { os_log_error(OS_LOG_DEFAULT,"SampleEndpointSecurity ESClient creation Error: Program needs proper permission for using ESClient"); } else { os_log_error(OS_LOG_DEFAULT,"SampleEndpointSecurity ESClient creation Error: %d", res); } return 1; } else { break; } } es_clear_cache_result_t resCache = es_clear_cache(g_client); if(ES_CLEAR_CACHE_RESULT_SUCCESS != resCache) { os_log_error(OS_LOG_DEFAULT, "\n SampleEndpointSecurity es_clear_cache: %d\n", resCache); return 1; } return 0; } int main() { es_handler_block_t handler = ^void(es_client_t * _Nonnull, const es_message_t * _Nonnull msg){ bool processEvent = false; if(!msg->process->is_es_client) { switch(msg->event_type) { case ES_EVENT_TYPE_AUTH_MOUNT: { std::string diskPath = msg->event.mount.statfs->f_mntfromname; std::string volumePath = msg->event.mount.statfs->f_mntonname; long flags = msg->event.mount.statfs->f_flags; if(flags & MNT_RDONLY) { os_log(OS_LOG_DEFAULT, "ALLOW readOnly mount event for volumePath= %{public}s and diskPath=%{public}s", volumePath.c_str(), diskPath.c_str()); sendAuthResponse(msg, ES_AUTH_RESULT_ALLOW); } else { os_log(OS_LOG_DEFAULT, "DENY the mount event for volumePath=%{public}s and diskPath=%{public}s", volumePath.c_str(), diskPath.c_str()); sendAuthResponse(msg, ES_AUTH_RESULT_DENY); processEvent = true; } break; } default: { os_log(OS_LOG_DEFAULT,"SampleEndpointSecurity default case event_type: (%d)", msg->event_type); break; // Not interested } } if(processEvent && m_numThreads.load() < MAX_THREADS_LIMIT) { es_retain_message(msg); dispatch_async(dispatchQueue, ^{ handleEvents(msg); es_release_message(msg); }); } } }; if(createESClient(handler) == 1) { return 1; } es_event_type_t events[] = {ES_EVENT_TYPE_AUTH_MOUNT }; es_return_t subscribed = es_subscribe(g_client, events, // Count of es_event_type_t entries stored in events[] sizeof(events) / sizeof(es_event_type_t) ); if(ES_RETURN_ERROR == subscribed) { os_log_error(OS_LOG_DEFAULT, "SampleEndpointSecurity es_subscribe: ES_RETURN_ERROR\n"); return 1; } dispatch_main(); return 0; }
1
1
314
Jan ’25
Verify with wallet run in simulator
I am fallowing the steps mention here https://developer.apple.com/wallet/get-started-with-verify-with-wallet/ and https://developer.apple.com/documentation/passkit/requesting-identity-data-from-a-wallet-pass to run a POC in simulator but I am getting a crash DigitalPresentmentSession requestDocument fatal error from xpc: This app has crashed because it called an API it is not entitled to use. :0: Fatal error: This app has crashed because it called an API it is not entitled to use.
3
0
249
Jan ’25
Unable to download PCCM Model in Xcode
The operation couldn’t be completed. (IDELanguageModelKit.IDEModelDownloadAdapter.(unknown context at $123069a90).DownloadError error 3.) Domain: IDELanguageModelKit.IDEModelDownloadAdapter.(unknown context at $123069a90).DownloadError Code: 3 User Info: { DVTErrorCreationDateKey = "2025-01-31 01:58:50 +0000"; } There was an error processing the asset. Domain: IDELanguageModelKit.IDEModelDownloadAdapter.(unknown context at $123069a90).DownloadError Code: 3 System Information macOS Version 15.3 (Build 24D60) Xcode 16.2 (23507) (Build 16C5032a) Timestamp: 2025-01-31T09:58:50+08:00
3
0
404
Jan ’25
Since iOS 18.3, icons are no longer generated correctly with QLThumbnailGenerator
Since iOS 18.3, icons are no longer generated correctly with QLThumbnailGenerator. No error is returned either. But this error message now appears in the console: Error returned from iconservicesagent image request: <ISTypeIcon: 0x3010f91a0>,Type: com.adobe.pdf - <ISImageDescriptor: 0x302f188c0> - (36.00, 36.00)@3x v:1 l:5 a:0:0:0:0 t:() b:0 s:2 ps:0 digest: B19540FD-0449-3E89-AC50-38F92F9760FE error: Error Domain=NSOSStatusErrorDomain Code=-609 "Client is disallowed from making such an icon request" UserInfo={NSLocalizedDescription=Client is disallowed from making such an icon request} Does anyone know this error? Is there a workaround? Are there new permissions to consider? Here is the code how icons are generated: let request = QLThumbnailGenerator.Request(fileAt: url, size: size, scale: scale, representationTypes: self.thumbnailType) request.iconMode = true let generator = QLThumbnailGenerator.shared generator.generateRepresentations(for: request) { [weak self] thumbnail, _, error in }
15
5
1.1k
Feb ’25
Appstore Rejection - Your app's binary includes the following call-to-action and/or URL that directs users to external mechanisms for purchases or subscriptions to be used in the app.
Recently we've faced an issue when submitting the new build for reviewal. It was rejected with following reasoning: Your app's binary includes the following call-to-action and/or URL that directs users to external mechanisms for purchases or subscriptions to be used in the app. Complain was related to phrase To discover our products please visit our website We're going to to rephrase it as Our website can help you to learn more about our products Will it solve the issue? According to ChatGPT following phrasing should not be considered a call-to-action. What's your opinions?
2
0
274
Feb ’25
Custom HCE payment UI
We are currently developing a wallet solution that uses the iOS EEA HCE API. During the development of our solution we have been unable to identify how we can opt out of using the native HCE payment modal screen or biometric authentication UI so that we can customise the experience to align with our overall customer experience. The only available customisation is a label below the title of the screen which does not meet our needs. Please can you advise how we can opt out of using the native HCE payment modal screen. If it is not possible to opt out of using the native HCE payment modal screen, please can you provide the rationale for this given the Digital Marketing Act interoperability guidelines and EU Commitments in case AT.40452.
1
3
169
Feb ’25
Simulating key press event to type text in UITextField
in iOS, user can set focus on UItextField and tapping a key in the virtual keyboard updates the text in the textfield. This user action causes the relevant delegates of UITextFieldDelegate to get invoked, i.e the handlers associated with action of user entering some text in the textfield. I m trying to simulate this user action where I am trying to do this programatically. I want to simulate it in a way such that all the handlers/listeners which otherwise would have been invoked as a result of user typing in the textfield should also get invoked now when i am trying to do it programatically. I have a specific usecase of this in my application. Below is how I m performing this simulation. I m manually updating the text field associated(UITextField.text) and updating its value. And then I m invoking the delegate manually as textField.delegate?.textField?(textField, shouldChangeCharactersIn: nsRange, replacementString: replacementString) I wanted to know If this is the right way to do this. Is there something better available that can be used, such that simulation has the same affect as the user performing the update?
Topic: UI Frameworks SubTopic: UIKit Tags:
3
0
313
Feb ’25
Assertion failed: (reconstituted == accumulator), function setFixup64, file OutputFile.cpp, line 2975
Xcode 16.2 Flutter version 3.27.1 0 0x1008abee4 __assert_rtn + 160 1 0x1008add9c ld::tool::OutputFile::setFixup64(unsigned char*, unsigned long long, ld::Atom const*) (.cold.3) + 0 2 0x100789640 ld::tool::OutputFile::setFixup64(unsigned char*, unsigned long long, ld::Atom const*) + 656 3 0x100785b78 ld::tool::OutputFile::applyFixUps(ld::Internal&amp;, unsigned long long, ld::Atom const*, unsigned char*) + 4388 4 0x10078be18 ___ZN2ld4tool10OutputFile10writeAtomsERNS_8InternalEPh_block_invoke + 488 5 0x19bc19428 _dispatch_client_callout2 + 20 6 0x19bc2d850 _dispatch_apply_invoke3 + 336 7 0x19bc193e8 _dispatch_client_callout + 20 8 0x19bc1ac68 _dispatch_once_callout + 32 9 0x19bc2c8a4 _dispatch_apply_invoke + 252 10 0x19bc193e8 _dispatch_client_callout + 20 11 0x19bc2b080 _dispatch_root_queue_drain + 864 12 0x19bc2b6b8 _dispatch_worker_thread2 + 156 13 0x19bdc5fd0 _pthread_wqthread + 228 A linker snapshot was created at: /tmp/Test Kopi Kenangan.debug.dylib-2025-02-27-100512.ld-snapshot ld: Assertion failed: (reconstituted == accumulator), function setFixup64, file OutputFile.cpp, line 2975. clang: error: linker command failed with exit code 1 (use -v to see invocation)
5
1
501
Feb ’25
How to regenerate passkey for appstoreconnect.apple.com
When logging into appstoreconnect I get the option to use a password or passkey: Password works fine. However passkey always results in: This is probably because I don't actually have any passkeys: So I think what is happening is that Apple thinks I have a passkey, which is why it's offering that as an option. I can't see any option to create a passkey, or regenerate one. I'm not sure how I've ended up in this state. I have a vague memory that sometime years ago when passkeys were first introduced on appstoreconnect that I tried to create one, but because it wouldn't let me store it in BitWarden, I backed out. It's not a major problem because I can still log in using password. But I'm worried in case some time in the future passkey becomes the only option. Does anyone know of any way I can reset or regenerate my passkey for appstoreconnect?
1
1
291
Feb ’25
Fetching app version release dates with App Store Connect API
What App Store Connect API endpoint(s) do I need to use to get the release dates of an app's various app versions? On App Store Connect itself, I can navigate to a given app and select "History", on the left side under General. See screenshot: In the screenshot, you can clearly see that version 1.9 became Ready for Distribution on Nov 12, 2024 at 3:28 AM, and that version 1.10 became Ready for Distribution on February 18, 2025 at 8:10 AM. However, I haven't been able to find to get any of these detailed status history via the App Store Connect API. Specifically I'm looking for release, or "go live", dates for the various versions of a given app. I'd have expected one of these API endpoints, or some combination thereof, to include this information in some way, but I'm just not finding it: GET https://api.appstoreconnect.apple.com/v1/apps/{id}/appStoreVersions GET https://api.appstoreconnect.apple.com/v1/appStoreVersions/{id} GET https://api.appstoreconnect.apple.com/v1/apps/{id}/builds GET https://api.appstoreconnect.apple.com/v1/apps/{id}/reviewSubmissions I've submitted FB16730940 and also via TSI.
2
0
259
Mar ’25
Live Activity Update Not Working Consistently in the Background
Hi everyone, I’m working on implementing Live Activities in my app, and I’ve encountered an issue where the Live Activity updates work intermittently when the app is in the background. Sometimes they update correctly, but at other times, they don’t update at all, even though they should be running in the background. However, when the app is brought to the foreground, the updates happen correctly. A few things I’ve checked: The app is using ActivityKit to update the Live Activity with Activity.update(). I’ve enabled the necessary background modes in the Capabilities section. Is there a possibility that I’m hitting the system budget limit while experiencing this issue? If this is a limitation, how can I avoid it or manage this situation? Has anyone else faced this issue? Any advice or potential solutions would be greatly appreciated! Thank you!
4
0
489
Mar ’25
URLSession is broken in iOS 18.4 RC Simulator
I'm seeing fully reproducible issues with URLSession on iOS 18.4 RC Simulator running from Xcode 16.3 RC. URLSession seems to get into a broken state after a second app run. The following sample succeeds in fetching the JSON on first app run but when the app is closed and ran again it fails with one of these errors: Error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." I'm wondering if this something related to my OS setup or is this due to internal URLSession changes in iOS 18.4. Already submitted as FB17006003. Sample code attached below: import SwiftUI @main struct NetworkIssue18_4App: App { var body: some Scene { WindowGroup { ContentView() } } } struct ContentView: View { @State private var message: String = "" var body: some View { VStack { Text(message) Button("Try Again") { Task { await fetch() } } } .task { await fetch() } } private func fetch() async { message = "Loading..." let url = URL(string: "https://poetrydb.org/title/Ozymandias/lines.json")! let session = URLSession.shared do { let response = try await session.data(from: url) print("Response: \(response)") message = "Success, data length: \(response.0.count)" } catch { print("Error: \(error)") message = "Error: \(error.localizedDescription)" } } }
55
41
21k
Mar ’25
Issues with Family Control API: App Blocking & Screen Time for Multiple Children
We are developing a parental control application in SwiftUI with features like app blocking and screen time management. We are using the Family Control API along with Apple Family Sharing, allowing parents to add multiple children to the family group. We have followed the apple documentation still we are facing following issues: App Blocking Issue: The family picker does not display each child's name separately or their apps individually. Instead, it shows all children's apps together, making it difficult to block apps for a specific child. Screen Time Data Issue: We receive the total screen time usage for all children combined rather than separate screen time data for each child. Syncing Delay: When a new child is added to the Family Sharing group, we are unsure how long it takes for their apps to sync and appear on the parent’s device.
2
3
342
Mar ’25
Images with unusual color spaces not correctly loaded by Core Image
Some users reported that their images are not loading correctly in our app. After a lot of debugging we identified the following: This only happens when the app is build for Mac Catalyst. Not on iOS, iPadOS, or “real” macOS (AppKit). The images in question have unusual color spaces. We observed the issue for uRGB and eciRGB v2. Those images are rendered correctly in Photos and Preview on all platforms. When displaying the image inside of a UIImageView or in a SwiftUI Image, they render correctly. The issue only occurs when loading the image via Core Image. When comparing the different Core Image render graphs between AppKit (working) and Catalyst (faulty) builds, they look identical—except for the result. Mac (AppKit): Catalyst: Something seems to be off when Core Image tries to load an image with foreign color space in Catalyst. We identified a workaround: By using a CGImageDestination to transcode the image using the kCGImageDestinationOptimizeColorForSharing option, Image I/O will convert the image to sRGB (or similar) and Core Image is able to load the image correctly. However, one potentially loses fidelity this way. Or might there be a better workaround?
2
3
84
Apr ’25
XCode reverts CoreData's .xccurrentversion
I am experiencing an issue where XCode reverts .xccurrentversion file in my iOS app to the first version whenever xcodebuild is run or whenever XCode is started. This means I can build the app and run tests in XCode if I discard the reversion .xccurrentversion on XCode start. However, testing on CI is impossible because the version the tests rely on are reverted whenever xcodebuild is run. The commands I run to reproduce the issue ❯ git status Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Path/.xccurrentversion no changes added to commit (use "git add" and/or "git commit -a") ❯ git checkout "Path/.xccurrentversion" Updated 1 path from the index ❯ git status nothing to commit, working tree clean ❯ xcodebuild \ -scheme Scheme \ -configuration Configuration \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro,OS=latest' \ -skipPackagePluginValidation \ -skipMacroValidation \ test > /dev/null # test fails because model version is reverted ❯ git status HEAD detached at pull/249/merge Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Path/.xccurrentversion no changes added to commit (use "git add" and/or "git commit -a") I have experienced such issue in 16.3 (16E140) and 16.2 (16C5032a). Similar issues/solutions I have found online are the following. But they are either not relevant or do not work in my case. https://stackoverflow.com/questions/17631587/xcode-modifies-current-coredata-model-version-at-every-launch https://github.com/CocoaPods/Xcodeproj/issues/81 Is anyone aware of any solution? Is there a recommended way I can run diagnostics on XCode and file a feedback?
13
0
182
Apr ’25
App getting stuck after active from background
I got users feed back, sometimes they seem the launch screen after active from background, and the launch screen show more longer than the cold launch. I check the app's log, when this issue happens, it displays a view controller named 'STKPrewarmingViewController', and disappears after about 5 seconds. And form the normal users, app don't have same behavior. It seems app need prewarming after back from background, why? Devices System version: iOS 18.4, app build with Xcode 16. How to fixed this issues? Thanks!
1
0
171
Apr ’25