22 May 2024 Leave a comment Tech-Help
When building a project in Xcode, particularly when transitioning from Xcode 11 to Xcode 12 and above, you might encounter the error: “Building for iOS Simulator, but linking in an object file built for iOS, for architecture arm64.” This issue often arises due to architectural mismatches between your project settings and the simulator environment. Here’s a comprehensive guide to help you troubleshoot and resolve this error.
Understanding the Root Cause
The primary cause of this error is that Xcode 12+ includes support for Apple Silicon (arm64) architecture for simulators. Consequently, when building for the iOS Simulator, Xcode may attempt to link against arm64 binaries, which is not supported on Intel-based Macs.
Step-by-Step Solution
Follow these steps to resolve the error:
1. Exclude arm64 for Simulator Architecture
To prevent Xcode from attempting to build arm64 for the simulator, you can exclude this architecture in your project and Pod project settings:
- Navigate to the Build Settings of your project.
- Add Any iOS Simulator SDK with the value
arm64
inside Excluded Architecture.
If you are using custom XCConfig
files, add the following line:
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
2. Update Pod Project Settings
Repeat the above steps for your Pod project. Alternatively, you can automate this by adding the following snippet to your Podfile
:
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
3. Set “Build Active Architecture Only” to Yes
Another approach is to ensure that Xcode only builds for the active architecture:
- Go to Build Settings and set Build Active Architecture Only (ONLY_ACTIVE_ARCH) to Yes for all configurations.
If you are using CocoaPods, you can add this to your Podfile
:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
end
end
end
Additional Tips
Ensure that you are using the latest versions of CocoaPods and your dependencies. Sometimes, simply updating can resolve the issue as vendors may have provided support for the new architecture.
Leveraging Repeato for Efficient Testing
While resolving such build issues is crucial, maintaining high-quality standards through continuous testing is equally important. This is where Repeato comes in handy. Repeato is a no-code test automation tool for iOS and Android that allows you to create, run, and maintain automated tests swiftly.
With Repeato, you can:
- Quickly edit and run tests, thanks to its computer vision and AI capabilities.
- Delegate test automation tasks to non-technical colleagues or QAs, freeing up developers to focus on creating great products.
Explore more about Repeato and how it can streamline your testing process by visiting our documentation and blog sections.
By following the steps outlined in this guide and leveraging tools like Repeato, you can ensure a smoother development and testing workflow, ultimately leading to a more robust and reliable application.