Skip to content

Instantly share code, notes, and snippets.

@skymobilebuilds
Last active May 17, 2022 12:36
Show Gist options
  • Star 56 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5 to your computer and use it in GitHub Desktop.
Save skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5 to your computer and use it in GitHub Desktop.
Xcode 13 and 12 Carthage Build Workaround
#!/bin/bash -e
echo "🤡 Applying carthage 12 and 13 workaround 🤡"
xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX)
# For Xcode 12 make sure EXCLUDED_ARCHS is set to arm architectures otherwise
# the build will fail on lipo due to duplicate architectures.
CURRENT_XCODE_VERSION=$(xcodebuild -version | grep "Build version" | cut -d' ' -f3)
echo 'EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200 = arm64 arm64e armv7 armv7s armv6 armv8' > $xcconfig
echo "EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200__BUILD_$CURRENT_XCODE_VERSION = arm64 arm64e armv7 armv7s armv6 armv8" >> $xcconfig
echo 'EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1300 = arm64 arm64e armv7 armv7s armv6 armv8' >> $xcconfig
echo "EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1300__BUILD_$CURRENT_XCODE_VERSION = arm64 arm64e armv7 armv7s armv6 armv8" >> $xcconfig
echo 'EXCLUDED_ARCHS = $(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT)__XCODE_$(XCODE_VERSION_MAJOR))' >> $xcconfig
export XCODE_XCCONFIG_FILE="$xcconfig"
carthage "$@"
@skymobilebuilds
Copy link
Author

skymobilebuilds commented Sep 17, 2020

For Xcode 12 and 13 use:

curl -# https://gist.githubusercontent.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5/raw/fbee83e3240b22b61edf2874f28249a24b20e9c1/carthage-xc12.sh -o wcarthage && chmod +x wcarthage

Verification checksums:

sha256: 62600e2246d6aa34bb600a4214e6e4f491b56d2a4a4226d1a12d835ce044d960
MD5: bf267b8245522df4c33547dabe2e13ee
sha1: 13d948d60d0f17ed179e92395b3be79735a13fa2

For Xcode 12.0.1 (12A7300) use:

Installation:

curl https://gist.githubusercontent.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5/raw/f638b57097897b38fc0b1e62a527a814952968d7/carthage-xc12.sh -o wcarthage && chmod +x wcarthage

Verification checksums:

sha256: 42ae315f58092d67fa826807b0c0eda4ffd20a5cf1001016fac809d15cc366e3
md5: caf21ac2f90837f030cc6663465acf4e
sha1: 2d02fe9567ab0f4ee51a43901c9c1340d5ad68fa

For Xcode 12.2.0 use:

Installation:

curl https://gist.githubusercontent.com/skymobilebuilds/61f4a95bd62a3db36b52719aeab7e0d5/raw/61affe5b13efaeb83ba3aaf5ef2cb97bab893485/carthage-xc12.sh -o wcarthage && chmod +x wcarthage

Usage:

./wcarthage bootstrap --platform iOS --cache-builds
./wcarthage update --platform iOS --cache-builds
./wcarthage build --archive

@prgorasiya
Copy link

thanks a lot, this saved me!

@pigfly
Copy link

pigfly commented Sep 18, 2020

Hi @skymobilebuilds,

Thanks for the gist, got a quick question, does this applies to all Xcode 12 beta version or just GM ?

EXCLUDED_ARCHS__EFFECTIVE_PLATFORM might be different between different Xcode 12 versions.

@skymobilebuilds
Copy link
Author

@pigfly this applies only to Xcode 12.0 (12A7209) as there's no reason, at least for me, to keep using older beta versions

@chriswunsch00
Copy link

Nice work - just running this now !

@JT501
Copy link

JT501 commented Sep 18, 2020

work like a charm!

@serhatleventyavas
Copy link

Nice work, thanks a lot, this saved me!

@bguidolim
Copy link

Well done. Thanks :)

@drosenstark
Copy link

drosenstark commented Sep 18, 2020

This is running perfectly, depositing and picking up the file in tmp. Perhaps the error I'm hitting is different? I can build the Xcode project for device. However, building for simulator I get this message:

Module 'DeviceKit' was created for incompatible target arm64-apple-ios9.0: .../Carthage/build/iOS/DeviceKit.framework/Modules/DeviceKit.swiftmodule/arm64.swiftmodule

Is this the problem that we're solving here, builds for device but not for simulator?

Thanks for doing this.

(Upgrading to Carthage 0.36 didn't help. Also this is Version 12.2 beta (12B5018i))

@chriswunsch00
Copy link

Carthage release notes says that .36 doesn’t fix this.

I have that issue too re sim but it makes sense since this is omitting those arch’s. You should still be able top build for device/archive?

@drosenstark
Copy link

Carthage release notes says that .36 doesn’t fix this.

I have that issue too re sim but it makes sense since this is omitting those arch’s. You should still be able top build for device/archive?

Correct, I can build for device and probably archive, but not simulator.

Weirdly, this is the same error that happens whether I use Carthage normally or use this script.

@unixb0y
Copy link

unixb0y commented Sep 19, 2020

Thanks so much, works like a charm!

@terryworona
Copy link

terryworona commented Sep 19, 2020

Thanks for the script. I too can't build to simulator. Device is fine.

Xcode (12 GM) console:

The file couldn’t be saved.
Command PhaseScriptExecution failed with a nonzero exit code

@SergejLogis
Copy link

Immense thanks! Saved a day (week, actually) for me! 🙇

@manifity
Copy link

This isn't helped me with Original error: Unable to launch WebDriverAgent because of xcodebuild failure: Command 'carthage bootstrap --platform iOS\\,tvOS' exited with code 1". What I need to do to fix this?

Thank in adnvance!

@zylz10
Copy link

zylz10 commented Sep 21, 2020

thanks a lot, this saved me!

@KeiroMidori
Copy link

Saved me thank you for this !

@s4cha
Copy link

s4cha commented Sep 22, 2020

@skymobilebuilds, you sir, deserve a medal of honor 🎖️

@odanu
Copy link

odanu commented Sep 24, 2020

This is running perfectly, depositing and picking up the file in tmp. Perhaps the error I'm hitting is different? I can build the Xcode project for device. However, building for simulator I get this message:

Module 'DeviceKit' was created for incompatible target arm64-apple-ios9.0: .../Carthage/build/iOS/DeviceKit.framework/Modules/DeviceKit.swiftmodule/arm64.swiftmodule

Is this the problem that we're solving here, builds for device but not for simulator?

Thanks for doing this.

(Upgrading to Carthage 0.36 didn't help. Also this is Version 12.2 beta (12B5018i))

I am experiencing the same issue but with Swinject framework.
Module 'Swinject' was created for incompatible target arm64-apple-ios9.0

@drosenstark did you find a solution?

@notohiro
Copy link

This is super nice!

@odanu
Copy link

odanu commented Sep 25, 2020

For anyone getting project compile errors like Module 'xxx' was created for incompatible target arm64-apple-ios9.0 after applying this patch, there is one thing to be done, to fix it.
Exclude arm64 from every scheme for iOS Simluator SDK, inside your target.
Screenshot 2020-09-25 at 15 13 21

@yuhanle
Copy link

yuhanle commented Sep 27, 2020

@PacoPacoPakitor
Copy link

`*** Building scheme "OmiseSDK" in OmiseSDK.xcodeproj
Build Failed
Task failed with exit code 1:
/usr/bin/xcrun lipo -create /Users/paco/Library/Caches/org.carthage.CarthageKit/DerivedData/12.0.1_12A7300/omise-ios/v3.5.0/Build/Intermediates.noindex/ArchiveIntermediates/OmiseSDK/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/OmiseSDK.framework/OmiseSDK /Users/paco/Library/Caches/org.carthage.CarthageKit/DerivedData/12.0.1_12A7300/omise-ios/v3.5.0/Build/Products/Release-iphonesimulator/OmiseSDK.framework/OmiseSDK -output /Users/paco/wf-ios/Carthage/Build/iOS/OmiseSDK.framework/OmiseSDK

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/ys/5mpd508n7cn480b721dsq99m0000gn/T/carthage-xcodebuild.XnxTXQ.log`

@rob5408
Copy link

rob5408 commented Oct 6, 2020

`*** Building scheme "OmiseSDK" in OmiseSDK.xcodeproj
Build Failed
Task failed with exit code 1:
/usr/bin/xcrun lipo -create /Users/paco/Library/Caches/org.carthage.CarthageKit/DerivedData/12.0.1_12A7300/omise-ios/v3.5.0/Build/Intermediates.noindex/ArchiveIntermediates/OmiseSDK/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/OmiseSDK.framework/OmiseSDK /Users/paco/Library/Caches/org.carthage.CarthageKit/DerivedData/12.0.1_12A7300/omise-ios/v3.5.0/Build/Products/Release-iphonesimulator/OmiseSDK.framework/OmiseSDK -output /Users/paco/wf-ios/Carthage/Build/iOS/OmiseSDK.framework/OmiseSDK

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/ys/5mpd508n7cn480b721dsq99m0000gn/T/carthage-xcodebuild.XnxTXQ.log`

Same for me, but the log says BUILD SUCCESSFUL.

@funzin
Copy link

funzin commented Oct 8, 2020

#!/bin/sh -e
echo "Carthage wrapper"
echo "Applying Xcode 12 workaround..."
xcconfig="/tmp/xc12-carthage.xcconfig"

# Xcode 12.x
echo 'EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200 = arm64 arm64e armv7 armv7s armv6 armv8' > $xcconfig

# General stuff
echo 'EXCLUDED_ARCHS = $(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT)__XCODE_$(XCODE_VERSION_MAJOR))' >> $xcconfig
echo 'ONLY_ACTIVE_ARCH=NO' >> $xcconfig
echo 'VALID_ARCHS = $(inherited) x86_64' >> $xcconfig
export XCODE_XCCONFIG_FILE="$xcconfig"
echo "Workaround applied. xcconfig here: $XCODE_XCCONFIG_FILE"

carthage $@

If you've already switched to Xcode12, this will still work without adding a version.

@bguidolim
Copy link

@funzin well done

@bscothern
Copy link

Thank you @funzin for the great update to the script.

@nickynova
Copy link

where to include this script when trying to solve this issue?
#!/bin/sh -e
echo "Carthage wrapper"
echo "Applying Xcode 12 workaround..."
xcconfig="/tmp/xc12-carthage.xcconfig"

Xcode 12.x

echo 'EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64__XCODE_1200 = arm64 arm64e armv7 armv7s armv6 armv8' > $xcconfig

General stuff

echo 'EXCLUDED_ARCHS = $(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)_NATIVE_ARCH_64_BIT$(NATIVE_ARCH_64_BIT)_XCODE$(XCODE_VERSION_MAJOR))' >> $xcconfig
echo 'ONLY_ACTIVE_ARCH=NO' >> $xcconfig
echo 'VALID_ARCHS = $(inherited) x86_64' >> $xcconfig
export XCODE_XCCONFIG_FILE="$xcconfig"
echo "Workaround applied. xcconfig here: $XCODE_XCCONFIG_FILE"

carthage $@

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment