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.
Compiler
RSS for tagDiscuss the various compiler and toolchain technologies used in development.
Posts under Compiler tag
105 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Hi @all,
I get follow error:
needs -Onone Swift optimization level.
how can I solve this?
thank you for the help
greeting Fabian
Hello All:
I dusted off some old code to bring up to date with the latest and greatest Xcode (16B3) and ran into this weird compile error. Doesn't appear to be actually in my code. The code is in Objective-C (I did say it was old).
In file included from /Volumes/Hard Disk 2/Codewarrior Projects/iCollect For Mac and iPad/iCollect2/Classes/NSImage+Additions.mm:9:
In file included from /Volumes/Hard Disk 2/Codewarrior Projects/iCollect For Mac and iPad/iCollect2/Classes/NSImage+Additions.h:10:
In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Quartz.framework/Headers/Quartz.h:9:
In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Quartz.framework/Headers/PDFKit.h:6:
In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/PDFKit.framework/Headers/PDFKit.h:21:
/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/PDFKit.framework/Headers/PDFDocument.h:26:53: error: expected identifier or '{'
26 | typedef NS_ENUM(NSUInteger, PDFSelectionGranularity);
| ^
1 error generated.
Any ideas? I understand that Xcode is in beta now and if this is outside of the forum's scope, no problem. If a radar needs to be opened, I'll do that too if required.
Thanks in advance for your time.
All Best
John
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?
Building with below imports returns an error. What could I do to mitigate this? I did clean the build cache and delete the derived data folder.
import SwiftData
import SwiftUI
The error:
Command SwiftCompile failed with a nonzero exit code
/Users/thomas/Documents/Projects/SwiftUI/workouts/Workouts/Workouts/Views/Workout/WorkoutView.swift:9:8 No such module '_SwiftData_SwiftUI'
This feedback has also been submitted under: FB14182548
when building my project with Xcode16 Beta, I came across several compile errors in c++ code, which used to be ok when building with Xcode15. It's not easy to fix them because some of them came from third part libraries. Is there a way to configure Xcode to build c++ code conforming to the Xcode 15 manner? (I know I can get back to Xcode15 temporarily, but I worry these issue can not be fixed even in the official release version)
I have a very simple Mac app with just a MTKView in it which shows a single color. I want to move the rendering code to C++. For this I created a C++ framework target which interoperates with the Swift code - main project target. I am trying to link metal-cpp library to the C++ framework target using these instructions. Approach described in this article works with simple C++ Mac console apps. But in my mixed Swift/C++ project Xcode cannot find Foundation/Foundation.hpp (and probably other headers) to include into the C++ header.
I inserted metal-cpp folder into my project and added it to C++ target's header search paths, as written in the instructions.
I had code compiling with C++20 using XCode 14.3.
I now updated to XCode 15.4, and that feature is not available anymore...
No member named 'join' in namespace 'std::ranges::views'
Why is join got dropped?
Crowdstrike Falcon vs Xcode performance
Our IT department is using CrowdStrike Falcon, an ML-security tool, on all the Mac hardware. It will flag processes as malicious, and it sounds like it may sandbox such processes that are deemed malicious and / or scan anything the process touches.
TLDR
Does anybody know how to make CrowdStrike Falcon behave nicely with Xcode and its tools and prevent it from consuming high CPU and interfering with the build and debugging processes? Xcode, SwiftUI previews and building should be as performant as possible.
Details
Perplexity describes CrowdStrike Falcon as follows:
CrowdStrike Falcon is a cloud-based endpoint security platform that provides real-time protection against malware, ransomware, and other cyber threats. It uses artificial intelligence and machine learning to detect and prevent known and unknown threats across endpoints (laptops, desktops, servers, etc.), cloud workloads, and cloud environments. The Falcon platform includes next-generation antivirus, endpoint detection and response (EDR), managed threat hunting, vulnerability management, and other security capabilities delivered through a lightweight sensor that streams data to the CrowdStrike cloud for analysis and response.
The problem is that apparently Falcon's ML signatures will flag Xcode as malicious. So when building in Xcode, Falcon will use a huge amount of CPU (I have seen it go up to 456%), affecting build performance. I am getting the impression it is sandboxing and / or scanning every single file Xcode touches. The same goes for the iOS Simulator which will also cause Falcon to consume lots of CPU. It's clear this is affecting our build performance a lot.
Falcon supports a number of exclusions:
Machine learning (ML) exclusion: For trusted file paths, stop all ML-based detections and preventions, or stop files from being uploaded to the CrowdStrike cloud.
Indicator of attack (IOA) exclusion: Stop all behavioral detections and preventions for an IOA that’s based on a CrowdStrike-generated detection.
Sensor visibility exclusion: For trusted file paths that you want to exclude from sensor monitoring, minimize sensor event collection, and stop all associated detections and preventions. Use sensor visibility exclusions with extreme caution. Potential attacks and malware associated with excluded files will not be recorded, detected, or prevented.
Using Sensor Visibility Exclusions it is possible to exclude applications on file pattern basis and preventing Falcon's ML signatures for flagging any such process as malicious. Which means that it is possible to exclude /Applications/Xcode.app/** and prevent it, or the processes it spawns, as malicious.
However, Xcode and the toolchain are much more complicated than just excluding a single binary. Switching toolchains via sudo xcode-select -s will also update a lot of files in /usr (see Xcode.app/Contents/Developer/usr) such as /usr/bin/swift*, /usr/bin/ibtool*, /usr/bin/lldb and /usr/bin/xcrun (there are many more).
For testing Xcode performance we excluded /Applications/Xcode.app/** and /usr/bin from Falcon, but just launching the simulator and a simulator build of the app will still cause Falcon to go up to about 300%. I assume this will affect SwiftUI live previews as well. Probably /Users/*/Library/Developer/** should be excluded as well then?
Obviously, Falcon's AI/ML should just identify all of this as legitimate software development tools and no exclusions should be necessary...
IMHO a file-pattern based exclusion seems to contradict what this tool is supposed to do. I would think it should evaluate signing (codesign / spctl) or validate checksums, rather than file pattern based exclusions. But as long as Xcode becomes more performant I am not complaining. The less an IT tool is flagging legitimate software as malicious and interfering with our daily work, the better.
So my question is if anybody knows how to make CrowdStrike Falcon behave nicely with Xcode and its tools and prevent it from consuming high CPU and interfering with the build and debugging processes? Xcode, SwiftUI previews and building should be as performant as possible.
Looking for anyone that has some experience in getting Xcode to work with external compiler/linkers in what is tantamount to a foreign tool chain to build non-apple platform executables.
For example, I want to ultimately use Xcode to edit, build, and push bare metal firmware (read "no operating system at external device"). Think of it as in how to use Xcode to develop the firmware in the processor in the ThunderBolt 4 cable (TPS65994AD) which runs a variant of the ARM Cortex-M machine code. Suppose I don't want to use TI's "Code Composer Studio (CCS)" but instead want to use Xcode which might drive some part of Code Composer Studio. Xcode supports external / foreign tool chains (or did) but the question is "have you done it successfully for any foreign platform?" and if so what was your approach?
I'm trying to not waste a bunch of time with horrendous make file scripting only to find out that I did not have to do it or it headed down the wrong directions. I have a hard time believing that someone hasn't done this before for something even more monolithic like Arduino.
Hello Everyone,
I'm working on an app that utilizes the new C++ - Swift interop feature. I have a module called ModuleA that contains multiple Swift classes, and I need to store instances of these classes in a C++ class as a class member(to ensure ARC until the class object is deallocated). However, I want to retain the Swift class objects on the stack without directly allocating heap memory from C++.
Sample Swift Code:
public class SwiftClassA {
public init() {}
public func FuncA() -> Void {
// Perform operations specific to SwiftClassA }
}
public class SwiftClassB {
public init() {}
public func FuncA() -> Void {
// Perform operations specific to SwiftClassB
}
}
// Additional Swift classes (SwiftClassC to SwiftClassN) follow a similar structure.
Sample Cpp Code:
CppClass.hpp
#include "ModuleA-Swift.h" // Include generated Swift headerclass
CppClass {
public:
// Functions and declarationsprivate:
XYZ vClassObject; // Placeholder for Any Swift class object
};
CppClass.cpp
#include "ModuleA-Swift.h" // Include generated Swift headervoid
CppClass::SomeFuncA() noexcept
{
ModuleA::SwiftClassA obj = ModuleA::SwiftClassA::init(); // Initialize SwiftClassA object
vClassObject = obj; // Assign SwiftClassA object to vClassObject
}
void CppClass::SomeFuncB() noexcept {
ModuleA::SwiftClassB obj = ModuleA::SwiftClassB::init(); // Initialize SwiftClassB object
vClassObject = obj; // How do I Assign SwiftClassB object to vClassObject?
}
I'm looking for suggestions on how to efficiently store different types of Swift class objects in my C++ class while maintaining stack-based object retention and proper memory management. Any help or insights would be greatly appreciated.
Thanks,
Harshal
I'm debugging some Regex Builder code in my Playground. I run
the following piece code:
let timeMatchWithout = possibleTime.firstMatch(of: timeWithoutSec)
and I get this error message:
Regex.Match optional storedCapture contains no some
What could this possibly mean? contains no some???
Here is a more complete snippet, if this helps:
let hourRef = Reference<Substring>()
let minuteRef = Reference<Substring>()
let hourReg = Regex {
ChoiceOf {
Capture(as: hourRef) {
One(.digit)
One(.digit)
}
Capture(as: hourRef) {
One(.digit)
}
}
}
let minuteReg = Regex {
ChoiceOf {
Capture(as: minuteRef) {
One(.digit)
One(.digit)
}
Capture(as: minuteRef) {
One(.digit)
}
}
}
let ampmRef = Reference<Substring>()
let ampmReg = Regex {
Capture(as: ampmRef) {
ZeroOrMore {
ChoiceOf {
One("am")
One("pm")
One("a.m.")
One("p.m.")
}
}
} /* transform: {
$0.lowercase
} */
}.ignoresCase()
let timeWithoutSec = Regex {
hourReg
One(":")
minuteReg
ZeroOrMore(.whitespace)
ampmReg
}.ignoresCase()
let possibleTime = "10:20 AM"
let timeMatchWithout = possibleTime.firstMatch(of: timeWithoutSec)
The last line produces the error message.
Thanks for the help.
Note the removed transform: on the ampmReg definition. If that is included the compiler times out as noted in my previous post, yesterday.
Why does this Regex Builder code in my SwiftUI app not work? I'm parsing a string that might
be a date and time with either AM or PM specified for the time. This bit
of code looks for the optional AM or PM.
The error I get is:
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
What would 'distinct sub-expressions' mean in this case?
The code:
let ampmRef = Reference<Substring>()
let ampmReg = Regex {
Capture(as: ampmRef) {
ZeroOrMore {
ChoiceOf {
One("am")
One("pm")
}
}
} transform: {
$0.lowercase
}
}.ignoresCase()
In a related question, is there a way to return a default if the ChoiceOf fails both AM and PM?
We are facing an issue on Catalyst when building our app using Xcode 15.4.
The issue is related to precompiled frameworks and seems to be widespread as it happens with multiple vendors (like Firebase or Braze).
We are using SPM to add these dependencies, for instance:
.package(url: "https://github.com/braze-inc/braze-swift-sdk", from: "8.2.1"),
When building, we get the following error:
clang:1:1: invalid version number in '-target arm64-apple-ios10.15-macabi'
Our macOS deployment target is 12.3. Our iOS deployment target is 15.4.
I will try to create a reproducer I can share but I wanted to share this in case there's a known workaround.
Thanks in advance!
I am making an app in SwiftUI, but the backend code relies on python and cannot be converted to swift. How can I get the file to run?
I'm defining a typealias for a set, and then creating an extension for the new typealias.
When I do this, I'm getting an odd syntax error. Any/all guidance appreciated.
typealias IntSet = Set<Int>
extension IntSet {
func aFunction() -> Set<String> {
let array: [String] = self.map { "\($0)" }
return Set(array)
}
}
At the return line, I get the following syntax error: Cannot convert return expression of type 'Set<Int>' to return type 'Set<String>'
Even if I replace the return line with the following, I get the same compile error
return Set("array")
For calling swift api of a class to cpp , we need to include SwiftInterfaceGeneratedHeader to cpp file and then we can access swift class api in cpp . Signature of swift class with public apis will be added to the SwiftInterfaceGeneratedHeader.
We find an odd behaviour here . Signature of classes will be added to SwiftInterfaceGeneratedHeader in alphabetical order (swift class name alphabetically lower will be added first to generated header).
If we have a swift class which is referenced by another swift class Api , then referenced class's name should be alphabetically lower that referee class , otherwise we will get a build error :- "Unknown class name".
public class A {
public func funca () {
print ("class A")
}
}
public class B {
public func funcb () {
print ("class B")
}
public func funcb2 (pA:A) {
pA.funca()
}
public func funcb3 (pC:C) {
pC.funcc()
}
}
public class C {
public func funcc () {
print ("class C")
}
}
Cpp class where we include bridging header after turning on swift cpp interop :
class Test1 {
public:
static void testfunc ();
};
#include "Test1.hpp"
#include "cppswiftinterop-Swift.h"
void
Test1::testfunc()
{
}
Here , we have three swift classes , Class A,B,C. And since we are including SwiftInterfaceGeneratedHeader in cpp , signature of these class will be added to the generated header . In this project , we are referencing Class A and Class C from Class B .
And since A is alphabetically lower that B , it works fine (because signature of A in Generated header will be added before it is referenced by B). But since C is alphabetically above than B , it will through build error (Unknown type name 'C') , because Signature of C in Generated header will be added after it is referenced by class B).
If i rename Class C to Class AA then , it works fine.
Is this a bug in swift cpp interop?
Is gfortran 8.2 versioned compiler is compatible with what latest macOs version?
Hi People :)
I'm experimenting with Swift/C++ interoperability these days.
I'd like to understand how could I conform a Swift class to Cxx header:
Like this:
import Application
class App: Application {
public func run() {
let app = NSApplication.shared
let delegate = AppDelegate()
app.delegate = delegate
app.run()
}
}
But I got this error:
/Users/tonygo/oss/native-research/App.swift:27:7: error: inheritance from non-protocol, non-class type 'Application'
class App: Application {
^
ninja: build stopped: subcommand failed.
That seems normal indeed.
Reproductible example: https://github.com/tony-go/native-research/tree/conform-swift-to-cxx-header (Just run make)
I also have another branch on that repo where I use an intermediate Cxx bridge file that conforms to the :Application class and use the Swift API, like this: https://github.com/tony-go/native-research/tree/main/app
Bit I think that its a lot of boilerplate.
So I wonder which approach could I take for this?
Cheers :)
I'm seeing some weird behavior with conditional compilation when I use a build configuration other than "Debug" or "Release", and I'm wondering if I'm doing something wrong or if this is an Xcode bug.
The setup
Xcode version: 15.3
I have a simple SwiftUI view that takes in a model and displays an attribute of the model.
struct ContentView: View {
let model: Model
var body: some View {
VStack {
Text("Name: \(model.name)")
}
.padding()
}
}
In the model file, I have the struct definition, but also an extension that defines some sample data for use in SwiftUI previews:
struct Model {
let id: String
let name: String
}
#if DEBUG
extension Model {
static let example = Model(
id: "50fef362-f53d-4ded-9168-b887ff62e59d",
name: "John Doe"
)
}
#endif
And finally, I have a preview provider that uses this sample data:
#Preview {
ContentView(model: Model.example)
}
Normal behavior
With the default "Debug" build configuration, this works just fine. There are no compilation errors, and the preview renders as expected.
The issue
Start off by changing the name of the build configuration to, e.g. "DebugDev"
Now I start seeing seeing a mis-match between what happens and what Xcode tells me is happening.
The code still compiles and runs, and the SwiftUI preview still works, but Xcode is displaying things as if it doesn't compile.
Xcode formats the conditionally compiled code with a lower opacity color as if DEBUG isn't defined:
In the view file, I now see a compilation error when referencing the conditionally-compiled code:
Autocomplete doesn't work when trying to reference the conditionally compiled code
Additional details/observations
I have confirmed that the DEBUG active compilation condition is still defined in the build settings. All I've done is change the name of the build config
I was initially thinking this might have something to do with the fact that this appears in a preview provider, since those are treated a bit differently, but the same thing happens if I reference the conditionally compiled code directly in the view class
Another theory: since I was referencing conditionally compiled code from code that wasn't conditionally compiled, maybe Xcode was trying to tell me that wasn't valid. So, I tried placing the code that calls the conditionally compiled code (in this case, the view class) inside an #if DEBUG. This does get rid of the displayed compilation error, but auto-complete still doesn't work, and the whole class is displayed with the lower-opacity font.
Help?
I feel like I must be missing something. The only alternative I can think of is that Xcode has some logic hard-coded with the default "Debug" build config, and that would be...just silly.