I followed this tutorial to add JournalingSuggestions API, but it keeps showing me No such module 'JournalingSuggestions'. How can I fix this?
import SwiftUI
import JournalingSuggestions
struct ContentView: View {
@State var suggestionTitle: String? = nil
var body: some View {
VStack {
JournalingSuggestionsPicker {
Text("Select Journaling Suggestion")
}
onCompletion: { suggestion in
suggestionTitle = suggestion.title
}
Text(suggestionTitle ?? "")
}
.padding()
}
}
#Preview {
ContentView()
}
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
163 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
let package = Package(
name: "MyLibrary",
platforms: [.iOS(.v17)],
There is no ios26 option. How do I build it under ios26?
thanks
Hi all,
I'm developing a standalone SwiftUI watchOS app (no iOS host or extension), targeting watchOS 11.5, and running into persistent connection issues with Xcode.
Xcode rarely detects my Apple Watch (Series 7, watchOS 11.5)
Sometimes it appears nested under the iPhone; most of the time, it doesn’t
Errors include:
"OS version is lower than the deployment target" (both are 11.5)
"Unable to install... device not supported"
"Connection error 4000", "Tunnel timeout error 1001"
"Ensure Wi-Fi is enabled on both machines" (Wi-Fi is on and on the same network)
Once in a while, the app does install, but mostly I’m blocked.
What I’ve Tried
Verified pairing and trust
Cleaned builds, nuked Derived Data and caches
Reset iPhone privacy settings
Removed and re-added my Apple ID
Used xcrun xctrace list devices (watch inconsistently appears)
Despite this, the app only installs about 5% of the time. Testing (or even running) on real hardware is nearly impossible, and has become incredibly frustrating for me.
Any help or insights would be much appreciated.
I'm trying to create two widgets, widget A and B.
Currently A and B are very similar so they share the same Intent and Intent Timeline Provider.
I use the Intent Configuration interface to set a parameter, in this example lets say its the background tint.
On one of the widgets, widget A, I want to also set another String enum parameter (for a timescale), but I don't want this option to be there for widget B as it's not relevant.
I'm aware of some of the options for configuring the ParameterSummary, but none that let me pass in or inject the "kind" string (or widget ID) of the widget that's being modified.
I'll try to provide some code for examples.
My Widget Definition (targeting >= iOS 17)
struct WidgetA: Widget {
// I'd like to access this parameter within the intent
let kind: String = "WidgetA"
var body: some WidgetConfiguration {
AppIntentConfiguration(kind: kind, intent: WidgetIntent.self, provider: IntentTimelineProvider()) { entry in
WidgetView(data: entry)
}
.configurationDisplayName("Widget A")
.description("A widget.")
.supportedFamilies([.systemMedium, .systemLarge])
}
}
struct WidgetB: Widget {
let kind: String = "WidgetB"
var body: some WidgetConfiguration {
AppIntentConfiguration(kind: kind, intent: WidgetIntent.self, provider: IntentTimelineProvider()) { entry in
WidgetView(data: entry)
}
.configurationDisplayName("Widget B")
.description("B widget.")
.supportedFamilies([.systemMedium, .systemLarge])
}
}
struct IntentTimelineProvider: AppIntentTimelineProvider {
typealias Entry = WidgetIntentTimelineEntry
typealias Intent = WidgetIntent
........
}
struct WidgetIntent: AppIntent, WidgetConfigurationIntent {
// This intent allows configuration of the widget background
// This intent also allows for the widget to display interactive buttons for changing the Trend Type
static var title: LocalizedStringResource = "Widget Configuration"
static var description = IntentDescription("Description.")
static var isDiscoverable: Bool { return false}
init() {}
init(trend:String) {
self.trend = trend
}
// Used for implementing interactive Widget
func perform() async throws -> some IntentResult {
print("WidgetIntent perform \(trend)")
#if os(iOS)
WidgetState.setState(type: trend)
#endif
return .result()
}
@Parameter(title: "Trend Type", default: "Trend")
var trend:String
// I only want to show this parameter for Widget A and not Widget B
@Parameter(title: "Trend Timescale", default: .week)
var timescale: TimescaleTypeAppEnum?
@Parameter(title: "Background Tint", default: BackgroundTintTypeAppEnum.none)
var backgroundTint: BackgroundTintTypeAppEnum?
static var parameterSummary: some ParameterSummary {
// Summary("Test Info") {
// \.$timescale
// \.$backgroundTint
// }
// An example of a configurable widget parameter summary, but not based of kind/ID string
When(\.$backgroundTint, .equalTo, BackgroundTintTypeAppEnum.none) {
Summary("Test Info") {
\.$timescale
\.$backgroundTint
}
} otherwise : {
Summary("Test Info") {
\.$backgroundTint
}
}
}
}
enum TimescaleTypeAppEnum: String, AppEnum {
case week
case fortnight
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Trend Timescale")
static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [
.week: "Past Week",
.fortnight: "Past Fortnight"
]
}
enum BackgroundTintTypeAppEnum: String, AppEnum {
case blue
case none
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Background Tint")
static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [
.none: "None (Default)",
.blue: "Blue"
]
}
I know I could achieve what I'm after by having a separate Intent and separate IntentTimelineProvider for each widget. But this all seems unnessecary for just a simple optional parameter based on what widget its configuring.... unless I'm missing the point about Intents, Widgets or something!
I've done a fair bit of other searching but can't find an answer to this overall scenario.
Many thanks for any help.
We have separated much of our UI into different packages to reduce complexity and compile time. When we recently tested using new .xcstrings string catalogs, we hit an unexpected problem.
Strings extracted from SwiftUI components like Text or Button are extracted into the Localizable.xcstrings in the same package, but the default behaviour of Text(_ key:tableName:bundle:comment:) is to use Bundle.main.
When the default behaviour of the string extraction isn't to extract to the main app target, this introduces a very fragile system where it's easy to add code that looks localised, but ends up failing lookup at runtime.
I don't feel comfortable that we will always remember to define the correct module every time we create a Text. Also, other components like Button doesn't have an init that takes a Bundle, so we would also have to remember that Button(_ titleKey:action:) can now only be used in a package if we make sure that the main bundle contains a matching key.
Is there a way for us to make sure that strings are always extracted to the same place as they are resolved against by default? Either by having strings in packages extracted to an xcstrings file in the main app or having Text default to resolving against the module bundle by default?
I am sort of trying to do the opposite of what others are doing. I have a target called CopyFramework that creates a CopyFramework.framework within my main xcproj file.
I set up this target because a specific framework (we can call it Tools.xcframework) is distributed as a binary. That framework file lives within the code.
Tools.xcframework is structured like so
Tools.xcframework (Coding/testBuild/DynamicToolFrameworks/Tools.xcframework)
info.plist
ios-arm64/
Tools.xcframework/
Tools (executable file)
Tools.bundle
Headers/
Info.plist
Modules/
Tools.swiftmodule/
arm64-apple-ios.abi.json
arm64-apple-ios.private.swiftinterface
arm64-apple-ios.swiftdoc
arm64-apple-ios.swiftinterface
module.modulemap
module.private.modulemap
PrivateHeaders/
ios-arm64_x86_64-simulator/
When the CopyFramework target is run xcode does a few steps which copy the correct version of this framework to derived data.
Process Tools.xcframework (iOS)
Coding/testBuild/DynamicToolFrameworks/Tools.xcframework
/Library/Developer/Xcode/DerivedData/testBuild-sha/Build/Products/Debug-iphoneos/Tools.framework ios
cd /Users/calebkierum/Coding/testBuild
builtin-process-xcframework --xcframework Coding/testBuild/DynamicToolFrameworks/Tools.xcframework --platform ios --target-path Library/Developer/Xcode/DerivedData/testBuild-sha/Build/Products/Debug-iphoneos
Meaning essentially that the Tools.xcframework for the proper platform is taken from Tools.xcframework/ios-arm64 and copied to Library/Developer/Xcode/DerivedData/testBuild-sha/Build/Products/Debug-iphoneos/Tools.xcframework
I am writing a Swift Package that needs to be able to reference the correct Tools.xcframework. I have set it up like so:
let package = Package(
name: "CoreObjC",
platforms: [.iOS(.v17), .macCatalyst(.v17)],
products: [
.library(name: "CoreObjC", targets: ["CoreObjC"]),
],
dependencies: [
// Does something to here ???
//.package(path: "../testBuild")
],
targets: [
.target(
name: "CoreObjC",
dependencies: [
// Here I would like to be referencing the CopyFramework.framework target within my buildTest.xcproj file
.product(name: "CopyFramework", package: /*??? its not in a swift package its a part of an xcproj file*/)
],
path: "CoreObjC",
publicHeadersPath: "Headers",
linkerSettings: [
.linkedFramework("Tools", .when(platforms: [.iOS])),
.linkedLibrary("c++")
]
),
],
cxxLanguageStandard: CXXLanguageStandard.gnucxx14
)
Now obviously this does not work. I do not know how to communicate to the Package.swift file that the binary dependency is a framework target within my xcproj file. If I do run the target CopyFramework followed by building CoreObjC it works though (so long as you comment out the bits trying to reference CopyFramework). Running the CopyFramework target processes the Tools.xcframework and copies the proper xcframework sub folder to Derived data and the Swift Package build system seems to be able to see it.
Is there a way I can get rid of this manual step? Make it so that when I build the CoreObjC target (swift package) that either CopyFramework is run or some other process is run to get the proper xcframework out of Coding/testBuild/DynamicToolFrameworks/Tools.xcframework and into DerivedData?
Is it even theoretically possible to have a Swift Package reference a target in a normal xcproj file?
I'd like to determine, definitively, if nesting of "binaries" within other "binaries" is possible with iOS.
I put binaries in quotes because I've read documentation/forum posts stating things like nested frameworks isn't supported in iOS. A framework is a binary isn't it, or contains one. So does a statement such as that apply specifically and only to nested frameworks, or does it also apple to other scenarios - such as a SPM binary integrated into a framework?
Here's the specific scenario I'm seeking clarity on - suppose an SDK providing an API/functionality is built as an .xcframework and that SDK contains dependencies on two other components (Firebase, AlmoFire, RealmSwift, CocoaLumberjack, whatever etc.).
Lets say the SDK has two dependencies X and Y and it integrates them via SPM.
Q1: If there is an app A which integrates the SDK, and A doesn't use X and Y itself, then can X and Y be embedded within the SDK and thus opague to A? Is this possible in iOS?
Q2: If A integrates the SDK as above, but additionally, it itself uses X and Y independently of the SDK, then is this situation possible in iOS?
Presumably in Q1 the SDK needs to embed X and Y into the framework?
While presumably in Q2 it should not - because the app will be and hence that would lead to duplicate symbols and potential undefined behaviour (and therefore X and Y's SPM package spec needs to specify dynamic?)
I've been trying to get a clear picture of this for literally weeks and weeks, without reaching a clear conclusion.
So some definitive answer would be very much appreciated.
Delete me
PLATFORM AND VERSION
Development environment: Xcode 16.4 (16F6), macOS 15.5 (24F74)
Run-time configuration: iOS 18.3.1
DESCRIPTION OF PROBLEM
I cannot build my app due to a module not found error when I'm importing Sample-Swift.h header to an ObjectiveC file.
I need to use Swift code to ObjectiveC file with Swift code using an external XCFramework.
It seems to be related to a mix with ObjectiveC and Swift code when Swift code uses class inheritance from FZWorkoutKit class.
With a full Swift project, no issue.
STEPS TO REPRODUCE
Project https://fizzup.s3.amazonaws.com/files/public/Sample-WK.zip
Open the provided project and try to build it. The issue occurs.
In MyObject.m file, if you comment the first import (Sample-Swift.h), no issue occurs but I cannot use my Swift code (MyFile class).
Uncomment the line commented in step 1.
Go to MyFile.swift and change class inheritance from GoModeController (from FZWorkoutKit framework) to UIView (from UIKit). No issue occurs.
I'm watching the session video "What's new in Xcode 26" and when I try out the new #Playground macro (in the context of a local package in my project) I see only this activity indicator for about 10-15 minutes:
Eventually I do see this error:
Despite the error, my local package does not import SwiftUI and has no dependencies other than Foundation.
I checked the Xcode 26 release notes and I don't see this issue mentioned.
A clean build of my project takes 55 seconds. Is it expected behavior that #Playground would require 10+ minutes to spin up?
Is there anything I can to do make the new #Playground macro work correctly?
Thank you.
Is there a way to share a SwiftUI App's @Observable model into a CPTemplateApplicationSceneDelegate ?
Is there an incantation to go from the UIApplicationDelegate via @UIApplicationDelegateAdaptor to the UISceneDelegate for CarPlay via a userInfo? I can't seem to figure it out.
Otherwise I have to use a shared global, and I'd prefer not to have to do it this way. Any ideas? Thanks!
Hello,
I’m building a Swift-based SDK (using SwiftUI) that will be distributed as a single .xcframework, and consumed by a React Native application. The SDK has multiple internal module dependencies (e.g., Essentials, CoreModels, CoreRepository), each of which is currently implemented as a local Swift Package (SPM).
When I attempt to archive the main SDK framework using xcodebuild archive with BUILD_LIBRARY_FOR_DISTRIBUTION=YES, the archive process fails during SwiftEmitModule for these SPMs. I understand this likely relates to module stability requirements for .xcframework distribution.
My key question:
Is it mandatory to convert all Swift Packages (SPMs) into Xcode framework targets in order to successfully archive and bundle them into a distributable .xcframework?
Or alternatively, is there a recommended approach to make Swift Packages archive-compatible for use in a compiled, closed-source SDK, without converting them into Xcode framework targets?
Awaiting your guidance.
With Swift being brought to new places, is anyone working on interoperability with PHP? I'd love to replace much of my PHP and Javascript web code with Swift (and ideally SwiftUI for UI design). Are there any projects/people working in this space?
I had several library projects that were working in Swift Playgrounds < 4.6 but I get several duplicate compilation errors and previews will not build in Swift Playgrounds > 4.6. Does anyone know how to fix this issue?
Example project:
This project builds and runs fine under Swift Playgrounds 4.5.1 however it will not run complaining multiple commands produce generated output files under Swift Playgrounds 4.6.1, 4.6.2, and 4.6.3.
https://github.com/kudit/Compatibility
Download this repository and add the extension ".swiftpm" to the folder and double click to open in Swift Playgrounds. If running on earlier Swift Playgrounds you can see there are no errors and previews work great (on both macOS and iPadOS versions of Swift Playgrounds 4.5.x). However, on Swift Playgrounds 4.6.x, previews will not display.
Are embedded libraries not support anymore? This would be very disappointing.
I posted this as a Feedback weeks ago with no response: FB16509699
Topic:
Developer Tools & Services
SubTopic:
Swift Playground
Tags:
Swift Packages
Swift Playground
Playground Support
I would like to inquire about a concern related to the app review process. Specifically, I would like to understand if forcefully denying an application's execution on the iOS Simulator (for instance, by implementing a check in the code that prevents the app from running in a simulated environment) could negatively impact or delay the app’s approval during the App Store review process.
This measure is intended solely for security and integrity reasons during development and distribution. The app functions normally on real devices, and all other guidelines and requirements outlined by Apple are being strictly followed.
Could you please confirm whether such a restriction on the Simulator is acceptable, and if there are any best practices or recommendations from Apple regarding this?
Thank you for your support, and I look forward to your guidance.
Hello.
We've built our app with Xcode cloud until now.
And we faced a issue after we changed some dependencies in SPM.
the problems occur while resolving below dependencies
https://github.com/naver/naveridlogin-sdk-ios-swift
https://github.com/navermaps/SPM-NMapsMap
with below message.
xcodebuild: error: Could not resolve package dependencies:
failed downloading 'https://repository.map.naver.com/archive/pod/NMapsMap/3.21.0/NMapsMap.zip' which is required by binary target 'NMapsMapBinary': downloadError("A server with the specified hostname could not be found.")
failed downloading 'https://repository.map.naver.com/archive/pod/NMapsGeometry/1.0.2/NMapsGeometry.zip' which is required by binary target 'NMapsGeometry': downloadError("A server with the specified hostname could not be found.")
is there a way to handle this error by ourselves?
we need your help. thank you.
I have a s hared library in C++ that was built with GNU Libtool, and I want to bundle it with my Swift app and call it from the app. How can I bundle it and call it?
As stated in the title.
I am running the following code.
Each time I perform an API call, I create a new instance of URLSession and use a background-configured session to allow background API calls.
`
Code being executed:
import Foundation
// Model definitions
struct RandomUserResponse: Codable {
let results: [RandomUser]
}
struct RandomUser: Codable {
let name: Name
let email: String
}
struct Name: Codable {
let first: String
let last: String
}
// Fetcher class
class RandomUserFetcher: NSObject, URLSessionDataDelegate {
private var receivedData = Data()
private var completion: ((RandomUser?) -> Void)?
private var session: URLSession!
func fetchRandomUserInBackground(completion: @escaping (RandomUser?) -> Void) {
self.completion = completion
let configuration = URLSessionConfiguration.background(withIdentifier: "com.example.randomuser.bg")
session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
let url = URL(string: "https://randomuser.me/api/" )!
let task = session.dataTask(with: url)
task.resume()
}
// Data received
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
receivedData.append(data)
}
// Completion
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
defer { self.session.finishTasksAndInvalidate() }
guard error == nil else {
print("Error: \(error!)")
completion?(nil)
return
}
do {
let response = try JSONDecoder().decode(RandomUserResponse.self, from: receivedData)
completion?(response.results.first)
} catch {
print("Decoding error: \(error)")
completion?(nil)
}
}
}`
Called in viewDidLoad, etc.:
let fetcher = RandomUserFetcher()
fetcher.fetchRandomUserInBackground { user in
if let user = user {
print("Name: \(user.name.first) \(user.name.last), Email: \(user.email)")
} else {
print("Failed to fetch random user.")
}
}
In Instruments' Network instrument, I focus on my app's process, use 'Command + 3', and switch to 'List: URLSessionTasks'.
Even though didCompleteWithError is called and the API call fully completes, the Duration keeps increasing, and the Success column remains '-' (neither 'Yes' nor 'No').
For non-background URLSessions, the session shows up as 'unnamed session', but for background URLSessions, it appears as 'unnamed background session 1 (XXXXXX-XXXXXX-XXXXX)'.
Does this mean the session is not actually being completed?
I've checked Debug Memory Graph and confirmed there is no NSURLSession memory leak, but is it possible that the app is somehow still retaining session information internally?
I also suspect that Instruments may not be able to fully track background URLSession tasks.
An internal error occurs when executing the xcodebuild -list command targeting a Swift Package. This behavior is new in Xcode 16.3 and was not present in the previous version, Xcode 16.2.
cd ~/Developer
mkdir Playground
cd Playground
swift package init
xcodebuild -list
Command line invocation:
/Applications/Xcode-16.3.0.app/Contents/Developer/usr/bin/xcodebuild -list
Resolve Package Graph
** INTERNAL ERROR: Unable to load workspace '/Users/treastrain/Developer/Playground' **
Uncaught Exception: -[Swift.__SwiftDeferredNSArray intersectsSet:]: unrecognized selector sent to instance 0x600001aab5e0
Stack:
0 __exceptionPreprocess (in CoreFoundation)
1 objc_exception_throw (in libobjc.A.dylib)
2 -[NSObject(NSObject) __retain_OA] (in CoreFoundation)
3 ___forwarding___ (in CoreFoundation)
4 _CF_forwarding_prep_0 (in CoreFoundation)
5 -[DVTCoreDevice(DVTCoreDeviceIDE) deviceSupportsBuildable:buildParameters:error:] (in IDEFoundation)
6 -[DVTCoreDevice(DVTCoreDeviceIDE) supportedArchitecturesForBuildableContext:buildParameters:error:] (in IDEFoundation)
7 _IDERunDestinationsForBuildableUsingDeviceWithBuildParameters (in IDEFoundation)
8 -[IDERunDestinationManager runDestinationsForScheme:schemeCommands:executionEnvironment:eligibleOnly:genericOnly:architectureVisibility:] (in IDEFoundation)
9 IDESchemeDetermineAvailableRunDestinations (in IDEFoundation)
10 -[IDEScheme _actuallyInvalidateAvailableRunDestinations] (in IDEFoundation)
11 addSchemeAndMakeActiveIfNecessary #1 (result:error:) in IDESwiftPackage.generateScheme(with:buildable:additionalBuildables:unsetRunnable:makeActive:orderHint:) (in IDESwiftPackageCore)
12 IDESwiftPackage.generateScheme(with:buildable:additionalBuildables:unsetRunnable:makeActive:orderHint:) (in IDESwiftPackageCore)
13 IDESwiftPackage.generateSchemes(_:isRootPackage:) (in IDESwiftPackageCore)
14 IDESwiftPackage.update(from:graphHasErrors:delegate:) (in IDESwiftPackageCore)
15 specialized IDESPMWorkspaceDelegate.rootPackagesDidUpdate(packages:graphHasErrors:modelGraphSynchronizerToken:) (in IDESwiftPackageCore)
16 closure #1 in IDESPMWorkspaceDelegate.packageGraphDidFinishAction(_:duration:result:) (in IDESwiftPackageCore)
17 partial apply for closure #1 in IDESPMWorkspaceDelegate.disableWorkspaceContentSynchronization(during:) (in IDESwiftPackageCore)
18 <deduplicated_symbol> (in DVTFoundation)
19 <deduplicated_symbol> (in DVTFoundation)
20 thunk for @escaping @callee_guaranteed () -> () (in DVTFoundation)
21 __58-[DVTModelObjectGraph performBlockCoalescingModelChanges:]_block_invoke (in DVTFoundation)
22 -[DVTModelGraphTransactionScope performTransaction:] (in DVTFoundation)
23 -[DVTModelObjectGraph performBlockCoalescingModelChanges:] (in DVTFoundation)
24 DVTModelObjectGraph.performBlockCoalescingModelChanges<A>(_:) (in DVTFoundation)
25 IDESPMWorkspaceDelegate.disableWorkspaceContentSynchronization(during:) (in IDESwiftPackageCore)
26 IDESPMWorkspaceDelegate.packageGraphDidFinishAction(_:duration:result:) (in IDESwiftPackageCore)
27 <deduplicated_symbol> (in IDESwiftPackageCore)
28 SPMWorkspace.packageGraphActionFinished(_:) (in SwiftPM)
29 closure #2 in closure #3 in SPMWorkspace.processPackageGraphActionsInBackgroundIfNeeded(canProcessPackageGraphActions:) (in SwiftPM)
30 <deduplicated_symbol> (in SwiftPM)
31 <deduplicated_symbol> (in SwiftPM)
32 <deduplicated_symbol> (in SwiftPM)
33 completeTaskWithClosure(swift::AsyncContext*, swift::SwiftError*) (in libswift_Concurrency.dylib)
zsh: abort xcodebuild -list
Environments:
% xcodebuild -version
Xcode 16.3
Build version 16E140
% swift --version
swift-driver version: 1.120.5 Apple Swift version 6.1 (swiftlang-6.1.0.110.21 clang-1700.0.13.3)
Target: arm64-apple-macosx15.0
First time user here. Trying to build my React-Native app on xcode. I keep getting "Could not build Module" and "missing package product" and tried many combination for my Podfile.
I am on macbook pro M2, XCode version 16.2, building on iphone 16 v18.3.1. Pod version 1.16.2, react-native-cli:2.0.1,
Here is my Podfile. I tried to assign modular_headers to individual Firebase packages but then I cant pod install.
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
use_modular_headers!
platform :ios, '18.0'
prepare_react_native_project!
target 'plana' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
:fabric_enabled => false,
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
post_install do |installer|
react_native_post_install(
installer,
config[:reactNativePath],
:mac_catalyst_enabled => false,
)
end
end