When building a SwiftUI project in Xcode 26.3, Swift compilation fails
in the Release configuration with Optimization Level set to -O, when the iOS deployment
target is lower than iOS 26 (e.g. iOS 16, 17, or 18).
The failure occurs when using a generic class conforming to ObservableObject
that contains a @Published property.
The same code:
Compiles successfully in Xcode 16.3 (Release, -O) with iOS 16/17/18
Compiles successfully in Xcode 26.x when the deployment target is set to iOS 26
Compiles successfully in Xcode 26.x Debug configuration (-Onone)
Compiles successfully in Xcode 26.x Release when optimization is disabled (-Onone)
However, in Xcode 26.3, the build consistently fails in Release (-O)
when targeting iOS 16, 17, or 18.
This appears to be a Swift compiler optimization issue related to generics,
ObservableObject, @Published, and back-deployment to iOS versions prior to iOS 26.
STEPS TO REPRODUCE
Create a new SwiftUI App project using Xcode 26.3.
Leave all project settings at default (Swift version 5).
Set the iOS Deployment Target to iOS 16, 17, or 18.
Use the following minimal code:
import SwiftUI
internal import Combine
@MainActor
class CommonViewModel<Item>: ObservableObject {
@Published var listArray = [Item]()
}
class ContentViewModel: CommonViewModel<String> {
func reloadData() {
self.listArray = ["1"]
}
}
struct ContentView: View {
@StateObject private var viewModel = ContentViewModel()
var body: some View {
Color.clear
.onAppear {
viewModel.reloadData()
}
}
}
Build and run the app using the Release configuration.
Swift Packages
RSS for tagCreate reusable code, organize it in a lightweight way, and share it across Xcode projects and with other developers using Swift Packages.
Posts under Swift Packages tag
149 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I use spm manage swift package, now i want my macos app support arm64e,so i add arm64e in Build Srtting -> Architectures.
but i got error Could not find module 'SwiftyJSON' for target 'arm64e-apple-macos'; found: arm64-apple-macos, x86_64-apple-macos
Apparently, if no limit in Package.swift, SPM will only compile versions for x86 and ARM64 architectures by default.
now, how should I configure SPM to compile the arm64e version?
thanks
I am reporting a reproducible performance issue in iOS 18.6 where synchronizing the scroll position of two Chart views via chartScrollPosition(id:) causes a complete redraw loop when custom AxisMarks are used. This occurs even when the axis marks are technically "hidden," leading to significant frame drops and stuttering on modern hardware like the iPhone 15.
Environment
Device: iPhone 15
OS: iOS 18.6 (22G86)
Frameworks: SwiftUI, Swift Charts, Observation
The Issue
When using a shared @Observable state to sync two charts, the scrolling is fluid only if the axes are at their default settings. As soon as a custom AxisMarks block is added to either chart, the following behavior is observed:
Diffing Failure:
The framework appears unable to maintain the identity of the axis components during the scroll update.
Redraw Loop:
Instead of an incremental scroll translation, the diffing algorithm triggers a full reload/re-render of both charts on every scroll offset change.
Impact: CPU spikes to 100% and the UI becomes unresponsive.
This happens even if the custom AxisMarks is used solely to hide the axis (e.g., AxisMarks { _ in }), suggesting the issue is with the custom declaration itself rather than the complexity of the marks being rendered.
Steps to Reproduce
Create two Chart views in a VStack.
Bind both to a single @Observable property using .chartScrollPosition(id: $state.pos).
Add any .chartXAxis { AxisMarks(...) { ... } } modifier.
Scroll either chart; observe the stuttering.
import SwiftUI
import Charts
import Observation
@Observable class ChartState {
var scrollPos: Date = .now
}
struct PerformanceBugView: View {
@State private var state = ChartState()
var body: some View {
VStack {
Chart(data) { ... }
.chartScrollPosition(id: $state.scrollPos)
.chartXAxis {
// This custom mark triggers the performance issue
AxisMarks { _ in AxisValueLabel() }
}
Chart(data) { ... }
.chartScrollPosition(id: $state.scrollPos)
}
}
}
Questions for the Community/Apple Engineers:
Is there a way to provide a stable identifier to AxisMarks to prevent them from being treated as "new" during a scroll update?
Why does even an empty AxisMarks block (used for hiding) trigger a layout invalidation that standard axes do not?
Are there internal optimizations for chartScrollPosition that are bypassed when the axis layout is customized?
For me it looks like Xcode 26 has problems reading SPM packages from a locally hosted BitBucket git solution.
While Xcode 16 work perfectly fine, Xcode 26 fails to load and gives "Server SSH Fingerprint Failed to Verify" as error description. Cleaning build data and DerivedData sometimes makes loading work. Any change in Package dependencies will break it again.
Anyone having same problems? How do you handle it?
My project uses about 10 local packages. When Xcode determins its dependencies graph it includes project Foo (a package) and project Foo_Foo (???). This is a no op for normal builds, but causes the Foo package to be linked twice for test builds which then fail due to duplicate symbols.
Nowhere in my repository is Foo_Foo defined or reference. Nowhere in the .xcodeproj/ folder is there mention of Foo_Foo.
What am I doing wrong?
Can't able to run the Create ML for training and I upgraded to MacOS 26.3 beta and I have tried older and newer
Hi everyone,
I’m facing an issue with CloudKit sync getting stuck during initial device migration in my SwiftData-based app.
The app follows a local-first architecture using SwiftData + CloudKit sync, and works correctly for:
✔ Incremental sync
✔ Bi-directional updates
✔ Small datasets
However, when onboarding a new device with large historical data, sync becomes extremely slow or appears stuck. Even after two hours data is not fully synced. ~6900 Transactions
🚨 Problem
When installing the app on a new iPhone and enabling iCloud sync:
• Initial hydration starts
• A small amount of data syncs
• Then sync stalls indefinitely
Observed behaviour:
• iPhone → Mac sync works (new changes sync back)
• Mac → iPhone large historical migration gets stuck
• Reinstalling app / clearing container does not resolve issue
• Sync never completes full migration
This gives the impression that:
CloudKit is trickling data but not progressing after a certain threshold.
The architecture is:
• SwiftData local store
• Manual CloudKit sync layer
• Local-first persistence
• Background push/pull sync
So I understand:
✔ Conflict resolution is custom
✔ Initial import may not be optimized by default
But I expected CloudKit to eventually deliver all records.
Instead, the new device remains permanently in a “partial state”.
⸻
🔍 Observations
• No fatal CloudKit errors
• No rate-limit errors
• No quota issues
• iCloud is available
• Sync state remains “Ready”
• Hydration remains “mostlyReady”
Meaning:
CloudKit does not report failure — but data transfer halts.
⸻
🤔 Questions
Would appreciate guidance on:
Is CloudKit designed to support large initial dataset migration via manual sync layers?
Or is this a known limitation vs NSPersistentCloudKitContainer?
⸻
Does CloudKit internally throttle historical record fetches?
Could it silently stall without error when record volume is high?
⸻
Is there any recommended strategy for:
• Bulk initial migration
• Progressive hydration
• Forcing forward sync progress
⸻
Should initial migration be handled outside CloudKit (e.g. via file transfer / backup restore) before enabling sync?
⸻
🎯 Goal
I want to support:
• Large historical onboarding
• Multi-device sync
• User-visible progress
Without forcing migration to Core Data.
⸻
🙏 Any advice on:
• Best practices
• Debugging approach
• CloudKit behavior in such scenarios
would be greatly appreciated.
Thank you!
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags:
Swift Packages
CloudKit
Swift
Cloud and Local Storage
Hello everyone! I am trying to wrap a ViewModifier inside a Swift Package that bundles a metal shader file to be used in the modifier. Everything works as expected in the Preview, in the Simulator and on a real device for iOS. It also works in Preview and in the Simulator for tvOS but not on a real AppleTV. I have tried this on a 4th generation Apple TV running tvOS 26.3 using Xcode 26.2.0.
Xcode logs the following: The metallib is processed and exists in the bundle.
Compiler failed to build request
precondition failure: pipeline error: custom_effect-fg2a5cia7fmha4: error: unresolved visible function reference: custom_fn
Reason: visible function not loaded
Compiler failed to build request
precondition failure: pipeline error: custom_effect-fg2a5cia7fmha4: error: unresolved visible function reference: custom_fn
Reason: visible function not loaded
Compiler failed to build request
precondition failure: pipeline error: custom_effect-fg2a5cia7fmha4: error: unresolved visible function reference: custom_fn
Reason: visible function not loaded
Compiler failed to build request
precondition failure: pipeline error: custom_effect-fg2a5cia7fmha4: error: unresolved visible function reference: custom_fn
Reason: visible function not loaded
Compiler failed to build request
precondition failure: pipeline error: custom_effect-fg2a5cia7fmha4: error: unresolved visible function reference: custom_fn
Reason: visible function not loaded
Compiler failed to build request
precondition failure: pipeline error: custom_effect-fg2a5cia7fmha4: error: unresolved visible function reference: custom_fn
Reason: visible function not loaded
Contents of Package.swift:
import PackageDescription
let package = Package(
name: "Test",
platforms: [
.iOS(.v17),
.tvOS(.v17)
],
products: [
.library(
name: "Test",
targets: [
"Test"
]
)
],
targets: [
.target(
name: "Test",
resources: [
.process("Shaders")
]
),
.testTarget(
name: "TestTests",
dependencies: [
"Test"
]
)
]
)
Content of my metal file:
#include <metal_stdlib>
using namespace metal;
[[ stitchable ]] float2 complexWave(float2 position, float time, float2 size, float speed, float strength, float frequency) {
float2 normalizedPosition = position / size;
float moveAmount = time * speed;
position.x += sin((normalizedPosition.x + moveAmount) * frequency) * strength;
position.y += cos((normalizedPosition.y + moveAmount) * frequency) * strength;
return position;
}
And my ViewModifier:
import MetalKit
import SwiftUI
extension ShaderFunction {
static let complexWave: ShaderFunction = {
ShaderFunction(
library: .bundle(.module),
name: "complexWave"
)
}()
}
extension Shader {
static func complexWave(arguments: [Shader.Argument]) -> Shader {
Shader(function: .complexWave, arguments: arguments)
}
}
struct WaveModifier: ViewModifier {
let start: Date = .now
func body(content: Content) -> some View {
TimelineView(.animation) { context in
let delta = context.date.timeIntervalSince(start)
content
.visualEffect { view, proxy in
view.distortionEffect(
.complexWave(
arguments: [
.float(delta),
.float2(proxy.size),
.float(0.5),
.float(8),
.float(10)
]
),
maxSampleOffset: .zero
)
}
}
.onAppear {
let paths = Bundle.module.paths(forResourcesOfType: "metallib", inDirectory: nil)
print(paths)
}
}
}
extension View {
public func wave() -> some View {
modifier(WaveModifier())
}
}
#Preview {
Image(systemName: "cart")
.wave()
}
Any help is appreciated.
I have a live activity, that works fine when the Lock Screen showing, but as soon as it "sleeps" dims down for always on display, everything in the widget disappears and an Activity Indicator(spinner), displays in its place, but non-animating.
Hi there,
I recently updated to the latest version of macOS Tahoe 26.3.
Since then, Xcode is not able to resolve my Swift Package dependencies anymore. We use SSH for all our Github hosted packages. When package resolution is running, we randomly have Failed to verify SSH fingerprint on some remote package.
Nothing has changed and it worked perfectly with Tahoe 26.2. The SSH have been reconfigured and known hosts have been verified.
Is something changed between those 2 versions or is it a bug ?
Hi!
I have a Catalyst app that embeds command line utility. So the project has two targets:
Catalyst target, this target depends on #2 and embeds it into its bundle.
macOS target, the command line tool.
Both targets have package dependency to the same package.
I used this to embed the CMD tool.
Everything builds, runs and works fine until I try to archive the project. Archiving stops early with such error:
error: Multiple commands produce '/Users/kse2/Library/Developer/Xcode/DerivedData/PkgTest-clngkndczxoprpdlwefqqiqlryjt/Build/Intermediates.noindex/ArchiveIntermediates/PkgTest/IntermediateBuildFilesPath/UninstalledProducts/macosx/MacrosForSwift.o'
note: Target 'MacrosForSwift' (project 'MacrosForSwift') has a command with output '/Users/kse2/Library/Developer/Xcode/DerivedData/PkgTest-clngkndczxoprpdlwefqqiqlryjt/Build/Intermediates.noindex/ArchiveIntermediates/PkgTest/IntermediateBuildFilesPath/UninstalledProducts/macosx/MacrosForSwift.o'
note: Target 'MacrosForSwift' (project 'MacrosForSwift') has a command with output '/Users/kse2/Library/Developer/Xcode/DerivedData/PkgTest-clngkndczxoprpdlwefqqiqlryjt/Build/Intermediates.noindex/ArchiveIntermediates/PkgTest/IntermediateBuildFilesPath/UninstalledProducts/macosx/MacrosForSwift.o'
What I have tried to fix archiving:
Changing PkgTestCMD target to be on Catalyst/iOS instead of macOS. This works but I'm not sure how to properly run CMD tool with iOS SDK (if this correct at all): I need the main thread to be 'unblocked' and be active while background tasks exist.
Adding an aux framework that act as container for the package. Doesn't work.
Splitting targets into different projects, making workspace and cross-project reference. Doesn't work.
My understanding is that archiving attempts to produce .o files for both Catalyst and macOS simultaneously, due to PkgTest being Catalyst and PkgTestCMD being macOS targets.
How to archive such a project? Is there a way to separate archiving of CMD and main app? Maybe separate .o files into different directories.
Simple building and running the project works, why archiving doesn't want to?
I have a test project for the issue: PkgTest. main branch is the source project, DepFramework contains attempt #2, Workspace—#3.
Thank you!
I am working on a remote control application for macOS where I need to maintain two "virtual" cursors:
Remote Cursor: Follows the remote user's movements.
Local Cursor: Follows the local user's physical mouse/trackpad movements.
To move the system cursor (for the remote side), I use CGWarpMouseCursorPosition as follows:
void DualCursorMac::UpdateSystemCursorPosition(int x, int y) {
CGPoint point = CGPointMake(static_cast<CGFloat>(x), static_cast<CGFloat>(y));
// Warp the cursor to match remote coordinates
CGWarpMouseCursorPosition(point);
}
Meanwhile, I use a CGEventTap to monitor local physical movements to update my local virtual cursor's UI:
CGEventRef Mouse::MouseTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
if (remoteControlMode) {
// We want to suppress system cursor movement but still read the delta
const int deltaX = static_cast<int>(CGEventGetIntegerValueField(event, kCGMouseEventDeltaX));
const int deltaY = static_cast<int>(CGEventGetIntegerValueField(event, kCGMouseEventDeltaY));
NSLog(@"MouseTapCallback: delta:(%d, %d)", deltaX, deltaY);
// Update local virtual cursor UI based on deltas...
return nullptr; // Consume the event
}
return event;
}
The Problem:
When CGWarpMouseCursorPosition is called frequently to update the system cursor, it interferes with the kCGMouseEventDeltaX/Y values in the Event Tap.
Specifically, if the local user moves the trackpad slowly (expecting deltas of 1 or 2), but a "Warp" occurs simultaneously (e.g., jumping the cursor from (100, 100) to (300, 300)), the deltaX and deltaY in the callback suddenly spike to very large values. It seems the system calculates the delta based on the new warped position rather than the pure physical displacement of the trackpad.
This makes the local virtual cursor "jump" erratically and makes it impossible to track smooth local movement during remote control.
My Question:
Is there a way to get the "raw" or "pure" physical relative movement (delta) from the trackpad/mouse that is independent of the system cursor's absolute position or warping?
Are there alternative APIs (perhaps IOKit or different CGEvent fields) that would allow me to get consistent deltas even when the cursor is being warped programmatically?
Can I use external Swift Package Dependencies for the challenge, or will my app just not run as the testing environment is offline? I have a couple dependencies which are crucial to the running of my submission
Good day,
I've uploaded a build to TestFlight, but received an automated response with the following error:
ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
Our project started in Objective-C and have mixed swift class and pods. The last uploaded build without any automated response was Nov 8, 2023.
I'm using XCode Version 26.0.1 (17A400). I've tried every way i found in internet and i'm not able to find any solution for this.
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
use_frameworks! :linkage => :dynamic (in pods)
We would appreciate any assistance in clarifying why this issue is occurring and how we should proceed to address it. Your guidance would mean a lot.
Thank you.
Topic:
App Store Distribution & Marketing
SubTopic:
TestFlight
Tags:
Swift Packages
App Store
iOS
App Submission
Hi there,
I just re-install 26.2, but I got many issues regarding to SwiftUI's components.
How can I fix it? Do I need download or install something else?
I downloaded package, I can see it in Package Dependencies tab, [swift-collections | https://github.com/apple/swift-collections.git | Up to Next Major Version] — looks OK.
But (quite strange):
import Collections //🛑 No such module 'Collections'
typealias Objects = OrderedSet<anyHashable> // No error
I took Collection word from a list or typed — no difference.
if I remove import Collections there is no OrderedSet anymore (of course)
Can't compile. Cleaned build folder, restarted Xcode...
What could be wrong with it? Any ideas?
This post documents an issue I reported in feedback FB19610114 and see if anyone knows of a workaround. Here is a copy of the feedback.
Short version
Manipulation (SwiftUI OR RealityKit) fails to translate entities after changing rooms. By changing rooms, I mean a human wearing an Apple Vision Pro leaving one room and entering another room. Once this issue occurs, it impacts all apps that use these features. A device restart is the only solution I have to fix it.
Feedback FB19610114
This is an odd one. I'm using the new Manipulation Component in visionOS 26. Most of the time this works well. Sometime it stops working and when it does the only way to get it working again is to reboot the headset.
When this happens, I can continue to rotate and scale items, but translation no longer works. It is as if the item is stuck to a fixed point in the parent scene (window, volume, etc). When this bug occurs, it affects every app across the entire operating system that is using manipulation, including the RealityKit component AND the SwiftUI version. This is not limited to one app and is not limited to apps that I am working on. Once this error occurs, it affects literally any application across the operating system that is using this API, including apps from Apple.
I won't speculate on the cause of this, but I do know of one way where I can always get it to happen.
Here is how to reproduce it:
Make an Xcode project with a single entity that uses the Manipulation Component. There is no need to customize the configuration of this component. The default implementation will work.
Build and run this app on device. You can keep running from device or quit and launch the app like normal on device.
Open the app and manipulate the entity - it should work as expected.
Physically walk into another room. It is vital that you leave the current room that you are in and enter a different room entirely.
Use the digital crown to recenter your view and bring your window or volume to you.
Test the manipulation on the entity again - it should still be working as expected at this point.
Physically, move yourself and your headset into the original room where you started.
Use the digital crown to recenter your view and bring your window or volume to you.
Test the manipulation on the entity again - you should now see the issue.
When I follow the steps above, then 100% of the time manipulation translation stops working at this point. It will impact any application using this API. The only way to fix it is to restart my headset.
A few points to keep in mind
It does not matter if an app is actively being run from Xcode.
When this occurs, it impacts every single app, not just one.
When this occurs, rotation and scaling continue to work, but the entity/view cannot be translated.
This impacts BOTH the SwiftUI version and the RealityKit version.
When this occurs, the only way to "fix" it is to reboot the device.
Is it possible to achieve sub-second end-to-end latency when displaying live streaming video using APMP (Apple Projected Media Profile) with Wide FoV?
APMP supports HLS playback, but my understanding is that standard HLS introduces several seconds of latency. I would like to know whether APMP (especially Wide FoV) supports Low-Latency HLS, or if there are inherent limitations that make sub-second latency impractical.
If APMP is not suitable for this use case, are there any recommended alternatives within AVFoundation or related frameworks for rendering wide-FoV live video with very low latency?
Thank you for any insights.
Xcode tells me
Previewing in executable targets now requires a new build layout for unoptimized builds. Either set ENABLE_DEBUG_DYLIB to YES for this target, or break out your preview code into a separate framework with its own scheme.
How do enable that in Package.swift. swiftSettings don't work (.define and unsafeFlags with -D ...).
Creating a library product that the executable then depends on doesn't help either.
I have two targets, one is an executable target. The #Preview macro is in the non-executable target.
I’m building an iOS SDK that is distributed as a binary XCFramework and consumed via Swift Package Manager using a binaryTarget.
What I’ve done so far:
Built the SDK using xcodebuild archive for device and simulator
Created the XCFramework using xcodebuild -create-xcframework
The SDK contains a resource bundle with JSON/config files
The XCFramework is wrapped using SPM (code-only wrapper target)
Currently, the resource bundle exists outside the XCFramework, and the host app needs to add it manually during integration. I want to avoid this and make the SDK completely self-contained.
What I’m trying to achieve:
Embed the resource bundle inside the SDK framework so that each XCFramework slice contains it
Ensure the SDK can load its assets internally at runtime without any host app changes
Questions:
What is the correct way to embed a .bundle inside a framework so it gets packaged into each XCFramework slice during archiving?
Which Xcode build phases or build settings are required for this (e.g., Copy Bundle Resources, SKIP_INSTALL, etc.)?
At runtime, what is the recommended approach for locating and loading this embedded bundle from within the SDK code?
Any guidance or best practices for achieving this would be helpful.