We use XCode 15.2 to build our application, but we found that the app crashes on iOS 12.1.1, while it works without crashing on iOS 12.5.7. We discovered that the crash is related to ImageLoaderMachO::doModInitFunctions. We're not sure what is causing this.
Post
Replies
Boosts
Views
Activity
When I run the code, xCode shows me this error "Expressions are not allowed at the top level" While the code is correct and runs in the main.swift file only. And also runs in online compilers. please give me solution...
Hi @all,
I get follow error:
needs -Onone Swift optimization level.
how can I solve this?
thank you for the help
greeting Fabian
I came across a useful repo on GitHub:
https://github.com/GianniCarlo/DirectoryWatcher/blob/master/Sources/DirectoryWatcher/DirectoryWatcher.swift
self.queue = DispatchQueue.global()
self.source = DispatchSource.makeFileSystemObjectSource(fileDescriptor: descriptor, eventMask: .write, queue: self.queue)
self.source?.setEventHandler {
[weak self] in
self?.directoryDidChange()
}
self.source?.setCancelHandler() {
close(descriptor)
}
self.source?.resume()
How do I translate this to OC version? I have an app that was written in OC and I plan to incorporate this directory watcher into the project.
During my analysis of the binary size changes after compiling Swift source code, I discovered symbols with the ".island" suffix. I couldn't find meaningful information about this suffix through my search, so I decided to reach out for assistance.
While comparing the changes in binary size after modifying specific code, I noticed a significant increase (from 33MB to 520MB). Upon analyzing the symbols of the enlarged binary using the nm command, I found the following pattern:
t _$s12{SomeSymbol}WOb
t _$s12{SomeSymbol}WOb.island
t _$s12{SomeSymbol}WOb.island2
t _$s12{SomeSymbol}WOb.island3
When I output the symbols of the binary using nm, I noticed many symbols with the same name but different ".island", ".island2", ".island3" suffixes. Disassembling the binary showed that functions with these suffixes simply delegate calls sequentially: x.island3 -> x.island2 -> x.island1 -> x.
It appears that these symbols serve as delegates for function calls, but I would like to understand why such duplicated functions with these suffixes are generated. Could someone help me to provide some insights on this matter?
'consume' applied to value that the compiler does not support. This is a compiler bug. Please file a bug with a small example of the bug.
public func requestTopicsAndSubTopics() async throws -> (topics: [Topic], subTopics: [String: [SubTopic]]) {
var subTopics = [String: [SubTopic]]()
let topics = try await getTopics().sorted { $0.index < $1.index }
try await withThrowingTaskGroup(of: ([SubTopic], String).self) { [weak self] group in
guard let self else { return }
for topic in topics {
guard let topicId = topic.id else { throw Error.missingId }
group.addTask {
let subTopics = try await self.getSubtopics(topicId: topicId).sorted { $0.name < $1.name }
return (consume subTopics, topicId)
}
}
for try await (resultedSubTopics, topicId) in group {
subTopics.updateValue(resultedSubTopics, forKey: topicId)
}
}
return (consume topics, consume subTopics)
}
I need to decode JSON into a class. The JSON has a field called "Type", and I cannot declare a property with that name in my class since Type is a reserved word.
I tried declaring CodingKeys, but that doesn't work unless I declare EVERY property in the CodingKeys. This class has about a hundred properties and I have others like it, I do not want to do this.
Is there a better solution?
I got the error and I don’t how can I fix it help please
struct MovieDetail: View {
var movie: Movie
let screen = UIScreen.main.bounds
@State private var showSeasonPicker = true
@State private var selectedSeason = 0
var body: some View {
ZStack {
Color.black
.ignoresSafeArea()
ZStack {
VStack {
HStack {
Spacer()
Button() {
// Closing Button
}label: {
Image(systemName: "xmark.circle")
.font(.system(size: 28))
}
}
.padding(.horizontal, 22)
ScrollView (.vertical, showsIndicators: false){
VStack {
StandardHomeMovie(movie: movie)
.frame(width: screen.width / 2.5)
MovieInfoSubheadline(movie: movie)
if movie.promotionHeadline != nil {
Text(movie.promotionHeadline!)
.bold()
.font(.headline)
}
PlayButton(text: "Play", imagename: "play.fill", backgroundColor: .red) {
//
}
CurrentEpisodeInformation(movie: movie)
CastInfo(movie: movie)
HStack(spacing: 60){
SmallVerticalButton(text: "My List", isOnImage: "checkmark", isOffImage: "plus", isOn: true) {
//
}
SmallVerticalButton(text: "Rate", isOnImage: "hand.thumbsup.fill", isOffImage: "hand.thumbsup", isOn: true) {
//
}
SmallVerticalButton(text: "Share", isOnImage: "square.and.arrow.up", isOffImage: "square.and.arrow.up", isOn: true) {
//
}
Spacer()
}
.padding(.leading, 20)
CustomTabSwitcher(tabs: [.episodes, .trailers, .more], movie: movie, showSeasonPicker: $showSeasonPicker, selectedSeason: $selectedSeason)
}
.padding(.horizontal, 10)
}
Spacer()
}
.foregroundStyle(.white)
if showSeasonPicker {
Group {
Color.black.opacity(0.9)
VStack(spacing: 40){
Spacer()
ForEach(0..<(movie.numberOfSeasons ?? 0)) { season in
Button(action: {
self.selectedSeason = (season != 0)
self.showSeasonPicker = false
}, label: {
Text("Season: \(season + 1)")
.foregroundStyle(selectedSeason == season + 1 ? .white : .gray)
.bold()
.font(.title2)
})
}
Spacer()
Button(action: {
self.showSeasonPicker = false
}, label: {
Image(systemName: "xmark.circle.fill")
.foregroundStyle(.white)
.font(.system(size: 40))
.scaleEffect(x: 1.1)
})
.padding(.bottom, 30)
}
}
.ignoresSafeArea()
}
}
}
}
}
#Preview {
MovieDetail(movie: exampleMovie2)
}
struct MovieInfoSubheadline: View {
var movie: Movie
var body: some View {
HStack(spacing: 20){
Image(systemName: "hand.thumbsup.fill")
.foregroundStyle(.white)
Text(String(movie.year))
RatingView(rating: movie.rating)
Text(movie.numberOfSeasonsDisplay)
ZStack{
Text("HD")
.foregroundStyle(.white)
.font(.system(size: 12))
.bold()
Rectangle()
.stroke(.gray, lineWidth: 2)
.frame(width: 30, height: 20)
}
}
.foregroundStyle(.gray)
.padding(.vertical, 6)
}
}
struct RatingView: View {
var rating: String
var body: some View {
ZStack {
Rectangle()
.foregroundStyle(.gray)
Text(rating)
.foregroundStyle(.white)
.font(.system(size: 12))
.bold()
}
.frame(width: 50, height: 20)
}
}
struct CastInfo: View {
var movie: Movie
var body: some View {
VStack(spacing: 3) {
HStack {
Text("Cast: \(movie.cast)")
Spacer()
}
HStack {
Text("Creaters: \(movie.creaters)")
Spacer()
}
}
.font(.caption)
.foregroundStyle(.gray)
.padding(.vertical, 10)
}
}
struct CurrentEpisodeInformation: View {
var movie: Movie
var body: some View {
Group {
HStack {
Text(movie.episodeInfoDisplay)
.bold()
Spacer()
}
.padding(.vertical, 4)
HStack {
Text(movie.episodeDescriptionDisplay)
.font(.subheadline)
Spacer()
}
}
}
}
Usage of multiple async lets crashes the app in a nondeterministic fashion. We are experiencing this crash in production, but it is rare.
0 libswift_Concurrency.dylib 0x20a8b89b4 swift_task_create_commonImpl(unsigned long, swift::TaskOptionRecord*, swift::TargetMetadata<swift::InProcess> const*, void (swift::AsyncContext* swift_async_context) swiftasynccall*, void*, unsigned long) + 384
1 libswift_Concurrency.dylib 0x20a8b6970 swift_asyncLet_begin + 36
We managed to isolate the issue, and we submitted a technical incident (Case-ID: 8007727). However, we were completely ignored, and referred to the developer forums.
To reproduce the bug you need to run the code on a physical device and under instruments (we used swift concurrency). This bug is present on iOS 17 and 18, Xcode 15.1, 15.4 and 16 beta, swift 5 and 6, including strict concurrency.
Here's the code for Swift 6 / Xcode 16 / strict concurrency:
(I wanted to attach the project but for some reason I am unable to)
typealias VoidHandler = () -> Void
enum Fetching { case inProgress, idle }
protocol PersonProviding: Sendable {
func getPerson() async throws -> Person
}
actor PersonProvider: PersonProviding {
func getPerson() async throws -> Person {
async let first = getFirstName()
async let last = getLastName()
async let age = getAge()
async let role = getRole()
return try await Person(firstName: first,
lastName: last,
age: age,
familyMemberRole: role)
}
private func getFirstName() async throws -> String {
try await Task.sleep(nanoseconds: 1_000_000_000)
return ["John", "Kate", "Alex"].randomElement()!
}
private func getLastName() async throws -> String {
try await Task.sleep(nanoseconds: 1_400_000_000)
return ["Kowalski", "McMurphy", "Grimm"].randomElement()!
}
private func getAge() async throws -> Int {
try await Task.sleep(nanoseconds: 2_100_000_000)
return [56, 24, 11].randomElement()!
}
private func getRole() async throws -> Person.Role {
try await Task.sleep(nanoseconds: 500_000_000)
return Person.Role.allCases.randomElement()!
}
}
@MainActor
final class ViewModel {
private let provider: PersonProviding = PersonProvider()
private var fetchingTask: Task<Void, Never>?
let onFetchingChanged: (Fetching) -> Void
let onPersonFetched: (Person) -> Void
init(onFetchingChanged: @escaping (Fetching) -> Void,
onPersonFetched: @escaping (Person) -> Void) {
self.onFetchingChanged = onFetchingChanged
self.onPersonFetched = onPersonFetched
}
func fetchData() {
fetchingTask?.cancel()
fetchingTask = Task {
do {
onFetchingChanged(.inProgress)
let person = try await provider.getPerson()
guard !Task.isCancelled else { return }
onPersonFetched(person)
onFetchingChanged(.idle)
} catch {
print(error)
}
}
}
}
struct Person {
enum Role: String, CaseIterable { case mum, dad, brother, sister }
let firstName: String
let lastName: String
let age: Int
let familyMemberRole: Role
init(firstName: String, lastName: String, age: Int, familyMemberRole: Person.Role) {
self.firstName = firstName
self.lastName = lastName
self.age = age
self.familyMemberRole = familyMemberRole
}
}
import UIKit
class ViewController: UIViewController {
@IBOutlet private var first: UILabel!
@IBOutlet private var last: UILabel!
@IBOutlet private var age: UILabel!
@IBOutlet private var role: UILabel!
@IBOutlet private var spinner: UIActivityIndicatorView!
private lazy var viewModel = ViewModel(onFetchingChanged: { [weak self] state in
switch state {
case .idle:
self?.spinner.stopAnimating()
case .inProgress:
self?.spinner.startAnimating()
}
}, onPersonFetched: { [weak self] person in
guard let self else { return }
first.text = person.firstName
last.text = person.lastName
age.text = "\(person.age)"
role.text = person.familyMemberRole.rawValue
})
@IBAction private func onTap() {
viewModel.fetchData()
}
}
It seems I can declare variables like below in a source file:
private let var1 = 1234
fileprivate let var2 = "abcd"
class MyClass {
// ...
}
So what's the difference between the 2 vars here?
I have a custom localisation function in my project that enforces the inclusion of the bundle parameter (specifically so that Swift packages are forced to include the Bundle.module value).
While migrating to String Catalogs, I noticed that my custom localisation function wasn't being recognised by the automatic extraction that the Swift compiler is doing, but only in my Swift package targets.
Is there a way to set something like LOCALIZED_STRING_MACRO_NAMES in Swift Packages?
This is the error I am continuosly receiving.
@discardableResult func doSomething() -> Bool {
// does something
return true
}
This function can be called in the following ways:
doSomething()
let didSucceed = doSomething()
Is there a way to differentiate the two from inside the doSomething() function, as in, is there a way to know if the caller is using the result?
I want to build a Swift library package that uses modified build of OpenSSL and Curl.
I have already statically compiled both and verified I can use them in an Objective-C framework on my target platform (iOS & iOS Simulator). I'm using XCFramework files that contain the static library binaries and headers:
openssl.xcframework/
ios-arm64/
openssl.framework/
Headers/
[...]
openssl
ios-arm64_x86_64-simulator/
openssl.framework/
Headers/
[...]
openssl
Info.plist
I'm not sure how I'm supposed to set up my Swift package to import these libraries.
I can use .systemLibrary but that seems to use the embedded copies of libssl and libcurl on my system, and I can't figure out how to use the path: parameter to that.
I also tried using a .binaryTarget pointing to the XCFramework files, but that didn't seem to work as there is no module generated and I'm not sure how to make one myself.
At a basic high level, this is what I'm trying to accomplish:
where libcrypto & libssl come from the provided openssl.xcframework file, and libcurl from curl.xcframework
HI, I have a app with Swift Programming language. It is built successfully on my Monterey Intel by using Xcode 14.
I am trying to built same app on Sonoma Silicon arm64 by using Xcode 15.4. But app is failing to build with below errors. Can anyone suggest reason for this?
Copy /Users/testuser/git/agent/out/Darwin/Release/TESTFileProvider.appex/Contents/Resources/swift-nio__NIOFileSystem.bundle /Users/testuser/git/agent/out/Darwin/Release/swift-nio__NIOFileSystem.bundle (in target 'TESTFileProvider' from project 'TEST')
cd /Users/testuser/git/agent/dgagent/agent/macosx/dgc/TEST
builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -resolve-src-symlinks /Users/testuser/git/agent/out/Darwin/Release/swift-nio__NIOFileSystem.bundle /Users/testuser/git/agent/out/Darwin/Release/TESTFileProvider.appex/Contents/Resources
error: /Users/testuser/git/agent/out/Darwin/Release/swift-nio__NIOFileSystem.bundle: No such file or directory (in target 'TESTFileProvider' from project 'TEST')
Copy /Users/testuser/git/agent/out/Darwin/Release/TESTFileProvider.appex/Contents/Resources/swift-nio_NIOPosix.bundle /Users/testuser/git/agent/out/Darwin/Release/swift-nio_NIOPosix.bundle (in target 'TESTFileProvider' from project 'TEST')
cd /Users/testuser/git/agent/dgagent/agent/macosx/dgc/TEST
builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -resolve-src-symlinks /Users/testuser/git/agent/out/Darwin/Release/swift-nio_NIOPosix.bundle /Users/testuser/git/agent/out/Darwin/Release/TESTFileProvider.appex/Contents/Resources
error: /Users/testuser/git/agent/out/Darwin/Release/swift-nio_NIOPosix.bundle: No such file or directory (in target 'TESTFileProvider' from project 'TEST')
I'm continuing with the migration towards Swift 6. Within one of our libraries, I want to check whether a parameter object: Any? confirms to Sendable.
I tried the most obvious one:
if let sendable = object as? Sendable {
}
But that results into the compiler error "Marker protocol 'Sendable' cannot be used in a conditional cast".
Is there an other way to do this?
Hey, im new here. And I need to share a variable between files, settings and home. I've searched all over and found solutions, but I just don't understand what to do.
Hello there,
we have the following crash in production (99% in background) with our latest release, but we are not able to indentify 100% the main actor.
It could be Intercom SDK.
Firebase reports:
Crash
CoreFoundation
__CFRunLoopServiceMachPort
mach_msg
__CFRunLoopServiceMachPort
Any suggestion?
I want to ask about NSDecimalNumber. is it any changes for use this function ? i test use number like this.
example:
a = "1000000.0"
var a i make number formatter use NumberFormatter
b = NSDecimalNumber(string: a with number formatter).decimalValue
i try to print b. the value return 1. Anyone can help ?
Helo all,
Currently, I'm working on an iOS app that performs measurement and shows the results to the user in a graph. I use a Savitzky-Golay filter to filter out noise, so that the graph is nice and smooth. However, the code that calculates the Savitzky-Golay coefficients using sparse matrices crashes sometimes, throwing an EXC_BAD_ACCESS. I tried to find out what the problem is by turning on Address Sanitizer and Thread Sanitizer, but, for some reason, the bad access exception isn't thrown when either of these is on. What else could I try to trace back the problem?
Thanks in advance,
CaS
To reproduce the error, run the following:
import SwiftUI
import Accelerate
struct ContentView: View {
var body: some View {
VStack {
Button("Try", action: test)
}
.padding()
}
func test() {
for windowLength in 3...100 {
let coeffs = SavitzkyGolay.coefficients(windowLength: windowLength, polynomialOrder: 2)
print(coeffs)
}
}
}
class SavitzkyGolay {
static func coefficients(windowLength: Int, polynomialOrder: Int, derivativeOrder: Int = 0, delta: Int = 1) -> [Double] {
let (halfWindow, remainder) = windowLength.quotientAndRemainder(dividingBy: 2)
var pos = Double(halfWindow)
if remainder == 0 {
pos -= 0.5
}
let X = [Double](stride(from: Double(windowLength) - pos - 1, through: -pos, by: -1))
let P = [Double](stride(from: 0, through: Double(polynomialOrder), by: 1))
let A = P.map { exponent in
X.map {
pow($0, exponent)
}
}
var B = [Double](repeating: 0, count: polynomialOrder + 1)
B[derivativeOrder] = Double(factorial(derivativeOrder)) / pow(Double(delta), Double(derivativeOrder))
return leastSquaresSolution(A: A, B: B)
}
static func leastSquaresSolution(A: [[Double]], B: [Double]) -> [Double] {
let sparseA = A.sparseMatrix()
var sparseAValuesCopy = sparseA.values
var xValues = [Double](repeating: 0, count: A.transpose().count)
var bValues = B
sparseAValuesCopy.withUnsafeMutableBufferPointer { valuesPtr in
let a = SparseMatrix_Double(
structure: sparseA.structure,
data: valuesPtr.baseAddress!
)
bValues.withUnsafeMutableBufferPointer { bPtr in
xValues.withUnsafeMutableBufferPointer { xPtr in
let b = DenseVector_Double(
count: Int32(B.count),
data: bPtr.baseAddress!
)
let x = DenseVector_Double(
count: Int32(A.transpose().count),
data: xPtr.baseAddress!
)
#warning("EXC_BAD_ACCESS is thrown below")
print("This code is executed...")
let status = SparseSolve(SparseLSMR(), a, b, x, SparsePreconditionerDiagScaling)
print("...but, if an EXC_BAD_ACCESS is thrown, this code isn't")
if status != SparseIterativeConverged {
fatalError("Failed to converge. Returned with error \(status).")
}
}
}
}
return xValues
}
}
func factorial(_ n: Int) -> Int {
n < 2 ? 1 : n * factorial(n - 1)
}
extension Array where Element == [Double] {
func sparseMatrix() -> (structure: SparseMatrixStructure, values: [Double]) {
let columns = self.transpose()
var rowIndices: [Int32] = columns.map { column in
column.indices.compactMap { indexInColumn in
if column[indexInColumn] != 0 {
return Int32(indexInColumn)
}
return nil
}
}.reduce([], +)
let sparseColumns = columns.map { column in
column.compactMap {
if $0 != 0 {
return $0
}
return nil
}
}
var counter = 0
var columnStarts = [Int]()
for sparseColumn in sparseColumns {
columnStarts.append(counter)
counter += sparseColumn.count
}
let reducedSparseColumns = sparseColumns.reduce([], +)
columnStarts.append(reducedSparseColumns.count)
let structure: SparseMatrixStructure = rowIndices.withUnsafeMutableBufferPointer { rowIndicesPtr in
columnStarts.withUnsafeMutableBufferPointer { columnStartsPtr in
let attributes = SparseAttributes_t()
return SparseMatrixStructure(
rowCount: Int32(self.count),
columnCount: Int32(columns.count),
columnStarts: columnStartsPtr.baseAddress!,
rowIndices: rowIndicesPtr.baseAddress!,
attributes: attributes,
blockSize: 1
)
}
}
return (structure, reducedSparseColumns)
}
func transpose() -> Self {
let columns = self.count
let rows = self.reduce(0) { Swift.max($0, $1.count) }
return (0 ..< rows).reduce(into: []) { result, row in
result.append((0 ..< columns).reduce(into: []) { result, column in
result.append(row < self[column].count ? self[column][row] : 0)
})
}
}
}