I've got a large and complex app which has several dependencies upon 3rd party libraries (installed as pods).
The app is structured according to Model-View-Controller design and there is a requirement to implement the Model part as an .xcframework so it can be included and used in the original app along with a few new apps.
However, Apple documentation states that umbrella frameworks are not supported (Technical Note TN2435).
The Model code has several dependencies which would be totally unfeasible to replace or remove, for example it uses RealmSwift for database storage. Obviously it would be impossible to write one's own database storage scheme in place of using Realm.
However, if my framework uses Realm as a dependency, then its now become an umbrella framework.
So therefore not supported according to Apple documentation.
So what are options/solutions?
General
RSS for tagDive into the vast array of tools and services available to developers.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I just noticed that when you check the online documentation for Foundation using the delicious Objective-C flavor, some values are no more the expected ones:
https://developer.apple.com/documentation/foundation/filemanager/copyitem(at:to:)?language=objc#return-value
true if the item was copied successfully or the file manager’s delegate stopped the operation deliberately. Returns false if an error occurred.
Considering that a BOOL used to be YES or NO for the last quarter of a century, I have the following question:
[Q] What is the idea behind the disturbing changes of the Objective-C documentation?
When a static library is built with Xcode 26 (with deployment target set to iOS 13) and then linked into an app project compiled with Xcode 16, the build process fails with the following linker error:
Undefined symbols for architecture arm64:
"_swift_coroFrameAlloc"
This occurs even though both the static library and the app project have their deployment targets set to iOS 13.0. The static library works on Xcode 26, but fails to link on Xcode 16.
This issue shows up with certain Swift syntax. For example, in my case, using a property getter and setter caused the compiler to emit a reference to _swift_coroFrameAlloc, which in turn triggered the issue.
This issue prevents us from distributing pre-built static libraries compiled with Xcode 26 to teammates who are still using Xcode 16.
I’ve filed feedback for this issue (FB21130604).
Is there any way to work around it? For example, by adding specific Build Settings or something similar?
A demo project is available here: https://github.com/Naituw/SwiftLibraryDeploymentTargetIssue
The demo project includes:
StaticLibraryProject: A simple Swift static library with property getter setter usage
AppProject: An iOS app that links against the static library
verify_compatibility.sh: An automated script to reproduce the issue
Method 1: Manual Build and Verification
Open StaticLibraryProject/StaticLibraryProject.xcodeproj in Xcode 26
Build the StaticLibraryProject for iOS device (Release configuration)
Locate the built libStaticLibraryProject.a in the build products directory
Copy libStaticLibraryProject.a to AppProject/AppProject/ directory
Open AppProject/AppProject.xcodeproj in Xcode 16
Build the AppProject for iOS device
Method 2: Automated Script
Edit verify_compatibility.sh to configure the paths to your Xcode installations:
Set XCODE_26_PATH to your Xcode 26 installation path (e.g., /Applications/Xcode.app)
Set XCODE_16_PATH to your Xcode 16 installation path (e.g., /Applications/Xcode16.app)
Run the script: ./verify_compatibility.sh
Hello Team!
Recently we cleaned up profiles and renewed certificates under developer account, noticing profile expiration date showing invalid, it supposed to show certificate expiration date. Due to this I am not able to update or download profiles. Any one experienced this this? what would be the solution?.
Thanks,
Kumar.
Topic:
Developer Tools & Services
SubTopic:
General
I get a crash in Apple Watch simulator (Series 9 45mm 18.0) as soon as the app launch if I type anything on external keyboard (just hitting command key for instance to capture a screenshot). Same crash on series 7 (45mm, OS 18.1)
But app works normally when I use mouse to interact with the app on simulator.
App does not crash on real device (Watch 4 OS 10.4.1).
Nor does it crash on Series 6 simulator (44 mm OS 17.4).
Here are the log I could collect (apparently, they contain sensitive language !!! so I attach as a file.:
Attached logs
I've got an app where I want to split its Model code into a framework (.xcframework and .framework for debugging) so that it can be used by more than one app.
The code has dependencies on 3rd party code, which are installed via pods.
During the conversion process I keep running into the same issue which manifests with all the 3rd party code - which is that the majority of its api can be used (something like 80-90%) but for the remainder there is a linker error at runtime showing undefined symbols.
I have this problem with CocoaLumberjack,RealmSwift, PhoneNumberKit and more.
Its very quick and easy to reproduce the issue with a minimal framework and minimal app, below I'll describe how a minimal setup using CocoaLumberjack reproduces the issue:
From scratch, I use Xcode to create a framework project, run pod init, then modify the pod file to be:
platform :ios, '16.0'
workspace 'TheFramework'
project 'TheFramework'
target 'TheFramework' do
use_frameworks!
pod 'CocoaLumberjack/Swift', '3.8.5'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.0'
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end
Then I add source code:
import Foundation
import CocoaLumberjack
public class AClassInTheFramework {
public class func aMethod() {
let consoleLogger = DDOSLogger.sharedInstance
DDLog.add(consoleLogger, with: .debug)
DDLogDebug("Some logging")
}
}
Within the Xcode project, Build Libraries for Distribution is set to Yes, I also add that line to the pod file in case CocoaLumberjack isn't set similarly.
In the Framework's Xcode General section, Frameworks and Libraries contains Pods_TheFramework.framework set to Do Not Embed.
In the Build Phases section, in the Link Binary with Libraries section, Pods_TheFramework.framework is set to required.
Next I create an Xcode app template, run pod install, and edit the app pod file to be:
platform :ios, '16.0'
workspace 'AppUsingFramework'
project 'AppUsingFramework'
target 'AppUsingFramework' do
use_frameworks!
pod 'CocoaLumberjack/Swift', '3.8.5'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.0'
end
end
end
I build the framework, and drag and drop it into the app.
I add the following code to the app's delegate:
import TheFramework
...
AClassInTheFramework.aMethod()
The App's target has the following linkage settings:
When I build and run the app, there is the following error:
If I change the source code in the framework to this:
public class AClassInTheFramework {
public class func aMethod() {
let consoleLogger = DDOSLogger.sharedInstance
DDLog.add(consoleLogger, with: .debug)
// DDLogDebug("Some logging")
}
}
Then there is no error and the code runs successfully. This illustrates the problem I've encountered with all the nested frameworks - in this particular case calls to DDLog.add() don't result in an error but calls to DDlogDebug() do, and that has been mirrored with other nested frameworks (for example with Realm, opening a database, adding, finding,retrieving an item all works without a problem, however attempting to use Realm's Results<> API results in a similar symbol not found error).
Additionally note that the identical CocoaLumberjack code can run fine when used directly from within the app, i.e., if I add the following code to the app:
import CocoaLumberjack
func useCocoaLumberjackDirectlyFromWithinApp() {
let consoleLogger = DDOSLogger.sharedInstance
DDLog.add(consoleLogger, with: .debug)
DDLogDebug("Some logging")
}
useCocoaLumberjackDirectlyFromWithinApp()
Then it runs, i.e. DDLogDebug() can be successfully called from within the app, its only when its called via the framework that the error occurs.
Why might I be encountering these issues? I'd have thought either I'd be able to use 100% of the nested framework's public api, or 0% of it (is something is not configured correct), not ~80% which is what I am encountering.
Any ideas?
TIA
My experience with Swift 6 strict concurrency so far doesn't match my understanding of implicit MainActor isolation semantics.
This is a cross-post from StackOverflow. I will link answers between both forums.
TL;DR
Build succeeds when testing a struct declared in the test module, but fails when the struct is moved to the main module:
Main actor-isolated property … cannot be accessed from outside the actor.
Steps to reproduce
Open up Xcode 26 beta 2 on macOS 26 (probably also ok on current stables).
Create a new Swift app with Swift testing, no storage. Call it WhatTheSwift.
Set the Swift Language Version on all three targets to Swift 6.
Update the default test file to be this:
import Testing
@testable import WhatTheSwift
struct WhatTheSwiftTests {
@Test func example() async throws {
let thing = Thing(foo: "bar")
#expect(thing.foo == "bar")
}
}
struct Thing {
let foo: String
}
That should build fine, and the tests should pass.
Now, move the Thing declaration into its own Thing.swift file in the WhatTheSwift module, and try running the test again. You should see this:
Observations
Marking the test @MainActor allows the test to pass, suggesting the compiler actually wants to isolate Thing.foo to the main actor.
My question
Why? And why only when Thing is in a different module?
Hi everyone,
I'm developing a Capacitor plugin to display an RTSP video stream using MobileVLCKit on iOS. The Android side works perfectly, but I can’t get the iOS plugin to work — it seems my Swift file is not being detected or recognized, even though I’ve followed the official steps.
What works:
I followed the Capacitor Plugin Development Guide.
I implemented the Android version of the plugin in Java inside the android/ folder. Everything works perfectly from Angular: the plugin is recognized and calls execute correctly.
The issue on iOS:
I implemented the iOS part in Swift, using the official MobileVLCKit documentation.
I initially placed my RtspVlcPlugin.swift file in the plugin’s iOS folder, as the docs suggest.
Then I moved it directly into the main app’s ios/App/App/ folder next to AppDelegate.swift and tried manual registration.
The problem:
Even though I manually register the plugin with:
if let bridge = self.window?.rootViewController as? CAPBridgeViewController {
bridge.bridge?.registerPluginInstance(RtspVlcPlugin())
print("✅ Plugin RtspVlcPlugin registered manually.")
}
It prints the registration message just fine.
BUT from Angular, the plugin is not recognized: Capacitor.Plugins.RtspVlcPlugin has no methods, and I get this error:
"code":"UNIMPLEMENTED"
I also tried declaring @objc(RtspVlcPlugin) and extending CAPPlugin.
I’ve verified RtspVlcPlugin.swift is added to the target and compiled.
The Swift file doesn’t seem to register or expose any methods to Angular.
I even tried adding the code without using a plugin at all — just creating a Swift class and using it via the AppDelegate, but it still doesn't expose any callable methods.
My Swift code (RtspVlcPlugin.swift):
import Capacitor
import MobileVLCKit
@objc(RtspVlcPlugin)
public class RtspVlcPlugin: CAPPlugin, VLCMediaPlayerDelegate {
var mediaPlayer: VLCMediaPlayer?
var containerView: UIView?
var spinner: UIActivityIndicatorView?
@objc func iniciar(_ call: CAPPluginCall) {
guard
let urlStr = call.getString("url"),
let x = call.getDouble("x"),
let y = call.getDouble("y"),
let w = call.getDouble("width"),
let h = call.getDouble("height"),
let url = URL(string: urlStr)
else {
call.reject("Missing parameters")
return
}
DispatchQueue.main.async {
self.containerView?.removeFromSuperview()
let cont = UIView(frame: CGRect(x: x, y: y, width: w, height: h))
cont.backgroundColor = .black
cont.layer.cornerRadius = 16
cont.clipsToBounds = true
let sp = UIActivityIndicatorView(style: .large)
sp.center = CGPoint(x: w/2, y: h/2)
sp.color = .white
sp.startAnimating()
cont.addSubview(sp)
self.spinner = sp
self.containerView = cont
self.bridge?.viewController?.view.addSubview(cont)
let player = VLCMediaPlayer()
player.delegate = self
player.drawable = cont
player.media = VLCMedia(url: url)
self.mediaPlayer = player
player.play()
call.resolve()
}
}
@objc func cerrar(_ call: CAPPluginCall) {
DispatchQueue.main.async {
self.mediaPlayer?.stop()
self.mediaPlayer = nil
self.spinner?.stopAnimating()
self.spinner?.removeFromSuperview()
self.spinner = nil
self.containerView?.removeFromSuperview()
self.containerView = nil
call.resolve()
}
}
public func mediaPlayerStateChanged(_ aNotification: Notification!) {
guard let player = mediaPlayer,
player.state == .playing,
let sp = spinner else { return }
DispatchQueue.main.async {
sp.stopAnimating()
sp.removeFromSuperview()
self.spinner = nil
}
}
}
In the Angular project, I’m using the plugin by manually registering it with registerPlugin from @capacitor/core. Specifically, in the service where I need it, I do the following:
import { registerPlugin } from '@capacitor/core';
const RtspVlcPlugin: any = registerPlugin('RtspVlcPlugin');
After this, I try to call the methods defined in the iOS plugin, like RtspVlcPlugin.iniciar({ ... }), but I get an UNIMPLEMENTED error, which suggests that the plugin is not exposing its methods properly to the Angular/Capacitor environment. That makes me believe the problem lies in how the Swift file is integrated or registered, rather than how it is used from Angular.
I’d appreciate any guidance on how to properly expose a Swift-based Capacitor plugin’s methods so that they are accessible from Angular. Is there any additional registration step or metadata I might be missing on the iOS side?
By default, AppleClang adds /usr/local/include to the application search folders for include files (as opposed to the system include dirs). This causes problems with the expected include order because application search folders always have priority over system includes. Specifically it causes problems with the conan package manager as library includes are added with -isystem
This behaviour differs from LLVM mainline clang and GCC, where /usr/local/include is a system include (added with -internal-isystem).
Steps to reproduce -
run
echo 'int main() { return 0; }' | clang -xc -v -
the output is as follows
Apple clang version 17.0.0 (clang-1700.0.13.5)
Target: arm64-apple-darwin24.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" ... -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
-I/usr/local/include
-internal-isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include ...
Hi everyone,
I’m working on a Capacitor app built with Angular, and I’m trying to call a Swift class directly from the root of the iOS project (next to AppDelegate.swift) without using a full Capacitor plugin structure.
The Swift file is called RtspVlcPlugin.swift and looks like this:
import Capacitor
@objc(RtspVlcPlugin)
public class RtspVlcPlugin: CAPPlugin {
@objc func iniciar(_ call: CAPPluginCall) {
call.resolve()
}
}
In AppDelegate.swift I register it like this:
if let bridge = self.window?.rootViewController as? CAPBridgeViewController {
bridge.bridge?.registerPluginInstance(RtspVlcPlugin())
print("✅ RtspVlcPlugin registered.")
}
The registration message prints correctly in Xcode logs.
But from Angular, when I try to call it like this:
import { registerPlugin } from '@capacitor/core';
const RtspVlcPlugin: any = registerPlugin('RtspVlcPlugin');
RtspVlcPlugin.iniciar({ ... });
I get this error:
{"code":"UNIMPLEMENTED"}
So, even though the plugin is registered manually, it’s not exposing any methods to the Angular/Capacitor runtime.
My question is:
What is the correct way to access a manually created Swift class (in the root of the iOS project) from Angular via Capacitor?
Thanks in advance!
I'm trying to rewrite an old AppleScript mail rule that I used extensively as a Mail extension using the MailKit framework and I've run into an issue.
Previously, when developing the script, it was possible to debug it by selecting the message I wanted it applied to and choosing the Mail.app menu item "Message/Apply Rules"
This would re-execute my script and I could iterate over it as many times as I liked while developing.
I haven't found any great way of doing this for my extension with a MEMessageActionHandler. The closest I've found is to forward the message to myself and wait for it to come back in again over the internet, at which point the extension would get executed again. Needless to say, this makes debugging my MEMessageAction handler much slower.
I've tried a number of things in Mail.app to try and get it to re-execute my extension with a particular message without any luck. Does anyone know of a good process for debugging a MEMessageActionHandler that doesn't involve forwarding the message to myself over and over and waiting for it to come in each time?
Topic:
Developer Tools & Services
SubTopic:
General
Hi, my server in Melbourne Australia is getting weather forecasts from a few places around Australia. When I look at the daily timesteps that I get back, they might be something like this:
"days": [
{
"forecastStart": "2025-06-25T00:00:00Z",
"forecastEnd": "2025-06-26T00:00:00Z",
"daytimeForecast": {
"forecastStart": "2025-06-25T07:00:00Z",
"forecastEnd": "2025-06-25T19:00:00Z",
"overnightForecast": {
"forecastStart": "2025-06-25T19:00:00Z",
"forecastEnd": "2025-06-26T07:00:00Z",}
It doesn't matter where I ask for - Melbourne, Darwin, Perth, it always comes back the same.
The documentation says that daytimeForecast is 7 am to 7 pm local and overnightForecast is 7pm to 7 am local.
However, in a place like Perth 7-19Z is 3 pm to 3 am, not 7 pm to 7 am like advertised.
I can see that for any given date, there are 3 maximum temperature forecasts, a 24 hour max, a daytime max and an overnight max and they differ from each other.
Can anyone help me understand what's happening here?
And furthermore in the example above, the 24 hour forecasts that have, for example this:
"forecastStart": "2025-06-25T00:00:00Z" ... Can the 00:00:00Z be trusted literally? Or is it more the case that it's "2025-06-25" but the HMS got tacked on in a conversion?
Hi all,
I’m developing a watchOS app and have seen cases where the app is terminated by the system — for example, due to CPU usage limits being exceeded (watchdog termination). Here’s a portion of one of the crash reports:
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: CAROUSEL 2343432205
<RBSTerminateContext| domain:10 code:0x8BADF00D explanation:[app<app_name>:898] Failed to terminate gracefully after 5.0s
ProcessVisibility: Foreground
ProcessState: Running
WatchdogEvent: process-exit
WatchdogVisibility: Foreground
WatchdogCPUStatistics: (
"Elapsed total CPU time (seconds): 11.280 (user 9.800, system 1.480), 100% CPU",
"Elapsed application CPU time (seconds): 5.162, 46% CPU"
) reportType:CrashLog maxTerminationResistance:Interactive>
My questions:
1.) Is there any way to get notified (via Crashlytics, Xcode Organizer, or any other reporting mechanism) when this type of system-level termination happens — similar to how we’re notified of crashes?
2.)Is there any way for a watchOS app to receive runtime warnings from the system when it’s about to exceed CPU or memory limits — similar to UIApplication.didReceiveMemoryWarningNotification on iOS?
Thanks in advance!
Topic:
Developer Tools & Services
SubTopic:
General
Hi,
I have an installer package that runs a postinstall script. The script can take a long time to complete, as one thing it does is copy about 10-30 GB of files using the rsync tool.
We noticed on macOS 15 that the installer would fail almost exactly 10 minutes after it started. Looking in the /var/log/install.log, I see a message like this:
2025-07-01 12:54:32-07 Work-M1 package_script_service[21562]: PackageKit: Terminating PKInstallTask(pid:21573). Task has exceeded its 600 seconds of runtime.
This does not happen in my testing on macOS 12 (Monterey)
I have a few questions about this:
A) Is this documented, and which OS introduced this?
B) Is there a way a developer can extend or disable the time limit via a setting in the installer package. Or if not, is there a way end end user can disable it temporarily on their system?
Thanks, Andrew
Topic:
Developer Tools & Services
SubTopic:
General
We are looking for a platform or portal provided by Apple that allows us to track crashes, hangs, or other runtime issues faced by users while using our iOS/macOS application. This is similar to how we currently use Windows Error Reporting (WER) for our Windows application.
Important note: Our application is not distributed via the Apple App Store — it is delivered through enterprise distribution or ad-hoc provisioning.
Topic:
Developer Tools & Services
SubTopic:
General
Tags:
MetricKit
App Store
Custom Apps
Enterprise
I was developing an app using a certain bundle ID, but then had to delete it (and I also removed the app ID Identifier)
My question is, can I make a new app with the exact same bundle ID as I was using on the removed one? Since the old app never went into production I don't see why that would be a problem
I'm using Xcode 16.3 and I want to add the key "NSUbiquitousContainers" but I cannot do it in the Entitlements file, it should be in info.plist file! I have done it before but in previous versions of Xcode when the info.plist was in the project navigator.
However, now I cannot find the file and I did not find any way to create it!
Please guide me in detail how to proceed (I'm not new to Swift or SwiftUI but not familiar to project settings)?
How do I support both Liquid Glass app icon for devices running iOS 26 and a regular app icon for devices running iOS18?
Topic:
Developer Tools & Services
SubTopic:
General
I use CMake for my builds not the XCode GUI.
I want to be able to build a single .app that contains both the GUI version and the command line version. I have seen products that ship both as part of the same .app (e.g. CMake) so this is clearly entirely possible, the 64k question is HOW?
Right now I am building them as separate apps - lets call them DSS and DSSCL (*).
The code base for each is in its own directory - each with its own CMakelists.txt file.
My initial thoughts are to change the build for DSSCL so it doesn't create a bundle and then simply copy the DSSCL command and related .qm files into DSS.app/.../MacOS.
However that's likely enough totally wrong, so how should I handle this please.
As much detail as possible please, I am very new to macOS development -please don't assume knowledge of stuff that's second nature to you
Many thanks
David
(*) Strictly they are DeepSkyStacker and DeepSkyStackerCL
Topic:
Developer Tools & Services
SubTopic:
General
Good morning everyone,
I am developing a Flutter app for Android and iOS.
When I press a button, the app detects the location of the device (obviously with permissions already granted).
On Android everything works correctly.
On iOS, however, when I press the button for the first time after opening the app, the location is detected after about 30-50 seconds.
On the other hand, if I repeat the operation later, the response time is drastically reduced (only a few seconds).
I am using the location package (https://pub.dev/packages/location), and the code to get the location is as follows:
var currentLocation = await location.getLocation();
Has anyone experienced this problem before or knows how to solve it?
Thank you very much!
Federico