xcodebuild refuses to export archive without signing - ios

I'm trying to export a debug IPA of my IOS App from my CI (Github Actions) and I don't figure out why it fails. The following commands work on my computer:
xcodebuild clean archive \
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" \
-configuration Debug \
-allowProvisioningUpdates \
-workspace dist/ios-app/App/App.xcworkspace \
-scheme App \
-sdk iphoneos \
-archivePath dist/ios-assets/dist/myapp.xcarchive \
-destination 'generic/platform=iOS'
xcodebuild clean \
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" \
-configuration Debug \
-exportArchive \
-archivePath dist/ios-assets/dist/myapp.xcarchive \
-exportOptionsPlist dist/ios-app/App/exportOptions.plist \
-exportPath dist/myapp-preview
I end up with a debug App.ipa into the expected folder.
However, on my CI, only the 1st command succeeds, but the second yells
error: exportArchive: No signing certificate "iOS Development" found
How can it complain although I enforced an unsigned build?

Related

Xcode 14.2 Unable to close provisioning ledger entry because not all of its subentries are closed

Xcode 14.2 command line tools archive failed.
xcodebuild -allowProvisioningUpdates \
-workspace $WORKSPACE \
-scheme $SCHEME \
archive \
-configuration Release \
-archivePath $ARCHIVEPATH \
ONLY_ACTIVE_ARCH=NO \
EXCLUDED_ARCHS="" | xcpretty;
** ARCHIVE FAILED **
For whom might facing the problem:
This might be the update that required the "-sdk" flag to avoid the error.
i.e.
-sdk iphoneos

dyld: Symbol not found after importing .xcframework

I've created an .xcframework using this script:
FRAMEWORK_NAME=${PROJECT_NAME}
SCHEME=${PROJECT_NAME}
DISPLAY_NAME=${PROJECT_NAME}
echo "Archiving ${FRAMEWORK_NAME} for iOS simulator..." >> framework.log
xcodebuild archive \
-workspace "${PROJECT_DIR}/${FRAMEWORK_NAME}.xcworkspace" \
-scheme "${SCHEME}" \
-destination "generic/platform=iOS Simulator" \
-sdk iphonesimulator \
-archivePath "${PROJECT_DIR}/Archives/${FRAMEWORK_NAME}-iOS-Simulator" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
echo "Archiving ${FRAMEWORK_NAME} for iOS..." >> framework.log
xcodebuild archive \
-workspace "${PROJECT_DIR}/${FRAMEWORK_NAME}.xcworkspace" \
-scheme "${SCHEME}" \
-destination "generic/platform=iOS" \
-sdk iphoneos \
-archivePath "${PROJECT_DIR}/Archives/${FRAMEWORK_NAME}-iOS" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
echo "Creating the ${FRAMEWORK_NAME} XC Framework..." >> framework.log
xcodebuild -create-xcframework \
-framework "${PROJECT_DIR}/Archives/${FRAMEWORK_NAME}-iOS-Simulator.xcarchive/Products/Library/Frameworks/${DISPLAY_NAME}.framework" \
-framework "${PROJECT_DIR}/Archives/${FRAMEWORK_NAME}-iOS.xcarchive/Products/Library/Frameworks/${DISPLAY_NAME}.framework" \
-output "${PROJECT_DIR}/${DISPLAY_NAME}.xcframework"
However, when I import the .xcframework in another project I get this error:
dyld: Symbol not found: _$s12ReachabilityAAC10ConnectionO11unavailableyA2DmFWC
Referenced from: /private/var/containers/Bundle/Application/A5315543-8323-4270-8D40-8BB1C940801C/App.app/Frameworks/Framework.framework/Framework
Expected in: /private/var/containers/Bundle/Application/A5315543-8323-4270-8D40-8BB1C940801C/App.app/Frameworks/Reachability.framework/Reachability
in /private/var/containers/Bundle/Application/A5315543-8323-4270-8D40-8BB1C940801C/App.app/Frameworks/Framework.framework/Framework
dyld: launch, loading dependent libraries
DYLD_LIBRARY_PATH=/usr/lib/system/introspection
DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/GPUTools.framework/libglInterpose.dylib:/usr/lib/libMTLCapture.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
Every example I've seen on creating an .xcframework doesn't archive using an .xcworkspace, so I'm thinking my issue must be related to that. I need to archive the .xcworkspace because the framework has its own Cocoapod dependencies (Reachability being one of them), but the project I'm integrating with includes those dependencies.
Has anyone successfully created an .xcframework from source code that has Pod dependencies?

xcodebuild archive is failing when upgrading to ios 13

I am trying to use xcodebuild to create an ipa of my iOS app. These are the commands my script is running
xcodebuild build \
-project AirQuality.xcodeproj \
-scheme "Air Quality - Development" \
-derivedDataPath /Users/gbreen/src/cuwcd/air-quality-ios/derivedData \
-configuration "Development Release" SYMROOT=/Users/gbreen/src/cuwcd/air-quality-ios/build OBJROOT=/Users/gbreen/src/cuwcd/air-quality-ios/build DEPLOYMENT_LOCATION=YES | xcpretty
xcodebuild archive \
-project AirQuality.xcodeproj \
-scheme "Air Quality - Development" \
-derivedDataPath /Users/gbreen/src/cuwcd/air-quality-ios/derivedData \
-configuration "Development Release" SYMROOT=/Users/gbreen/src/cuwcd/air-quality-ios/build OBJROOT=/Users/gbreen/src/cuwcd/air-quality-ios/build DEPLOYMENT_LOCATION=YES \
-archivePath /Users/gbreen/src/cuwcd/air-quality-ios/build/archive-Test/"Air Quality - Development".xcarchive \
| xcpretty
xcrun xcodebuild \
-exportArchive \
-exportOptionsPlist /Users/gbreen/src/cuwcd/air-quality-ios/build/archive-Test/exportOptions-Test.plist \
-archivePath /Users/gbreen/src/cuwcd/air-quality-ios/build/archive-Test/"Air Quality - Development".xcarchive \
-exportPath /Users/gbreen/src/cuwcd/air-quality-ios/build/archive-Test
It works great when my app is targeting iOS 12 but when I move it to iOS 13 the xcrun command fails with a message:
error: archive at path '/Users/gbreen/src/cuwcd/air-quality-ios/build/archive-Test/Air Quality - Development.xcarchive' is malformed
Are there any specific considerations I need to make when updating to iOS 13? Do I need to configure something on my machine so xcrun knows it's an iOS 13 xcarchive? I just don't know where to go with this?
Through trial and error I figured out this same issue with my own build process.
You need to take out the build flags:
SYMROOT=...
OBJROOT=...
DSTROOT=...
I don't entirely know why because I don't know the inner workings of xcodebuild and how it was updated for Xcode 11. So, I suspect the answer lies somewhere in : this long document.
I hope that helps!

Getting Issue in Jenkins Continues Integration to HockeyApp in Xcode 8.3.2

All,
We are using Jenkins Continuous integration for App Uploads Below is the Script in Execute Shell in the Job.
rm -fr ~/Library/Caches/CocoaPods/
rm -fr Pods/
rm -rf ~/Library/Developer/Xcode/DerivedData/*
pod install
xcodebuild -configuration Release -scheme MyApp_Test -workspace MyApp.xcworkspace SYMROOT="${WORKSPACE}/MyApp/Build/"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${WORKSPACE}/MyApp/Build/Release-iphoneos/MyApp_Test.app" -o "${WORKSPACE}/MyApp/Build/Release-iphoneos/MyApp.ipa"
Earlier it is working perfectly and able to the integration, Recently we updated he Xcode to 8.3.2, From then we are getting errors below are the Errors we are getting
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
Build step 'Execute shell' marked build as failure
Build step 'Upload to HockeyApp' marked build as failure
Can any one help in solving the issue seems PackageApplication is deprecated and exportArchive is added, how can we change to that syntax
Before: xcrun with PackageApplication
# Build the application
xcodebuild \
-scheme "${SCHEME_NAME}" \
-sdk "${TARGET_SDK}" \
-configuration Release build
# Package the application
/usr/bin/xcrun \
-sdk "${TARGET_SDK}" \
PackageApplication \
-v "${PROJECT_BUILDDIR}/${SCHEME_NAME}.app" \
-o "${BUILD_OUTPUT_DIR}/${APP_NAME}.ipa" \
--sign "${DEVELOPER_NAME}" \
--embed "${PROVISIONING_PROFILE}"
After: xcodebuild with -exportArchive
# Archive the application
xcodebuild \
-scheme "${SCHEME_NAME}" \
-sdk "${TARGET_SDK}" \
-archivePath "${PROJECT_BUILDDIR}/${SCHEME_NAME}.xcarchive" \
-configuration Release \
PROVISIONING_PROFILE="${PROVISIONING_PROFILE}" \
archive
# Export the archive to an ipa
xcodebuild \
-exportArchive \
-archivePath "${PROJECT_BUILDDIR}/${SCHEME_NAME}.xcarchive" \
-exportOptionsPlist "${EXPORT_PLIST}" \
-exportPath "${BUILD_OUTPUT_DIR}"

xcodebuild will codesign with Xcode 6 and alternate bundle ID but not with Xcode 7

Our CI server does a daily ad-hoc build of our app by swapping in a different bundle ID like this:
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier com.example.app.daily" \
app/app-Info.plist
and then building and archiving with xcodebuild:
xcodebuild \
CODE_SIGNING_REQUIRED=YES \
CODE_SIGN_IDENTITY="$DEVELOPER_NAME" \
PROVISIONING_PROFILE="$PROFILE_UUID" \
-sdk iphoneos \
-workspace "$XCODE_WORKSPACE" \
-scheme "$XCODE_SCHEME" \
clean archive \
-archivePath "$ARCHIVE_PATH"
with Xcode 6 this worked perfectly, but in Xcode 7 we're getting this error:
Code Sign error: Provisioning profile does not match bundle
identifier: The provisioning profile specified in your build settings
(“Daily AdHoc Profile for CI Servers”) has an AppID of
“com.example.app.daily” which does not match your bundle
identifier “com.example.app”.
It's as if Xcode 7 isn't seeing that we changed the bundle ID. Is it looking somewhere else?
#Mozilla pointed me in the right direction. Upgrading to an Xcode 7 project moved the bundle identifier into a "Product Bundle Identifier" setting in the Packaging section of the build settings.
Xcode's help sidebar revealed that this setting was named PRODUCT_BUNDLE_IDENTIFIER. So my command became:
xcodebuild \
CODE_SIGNING_REQUIRED=YES \
CODE_SIGN_IDENTITY="$DEVELOPER_NAME" \
PROVISIONING_PROFILE="$PROFILE_UUID" \
PRODUCT_BUNDLE_IDENTIFIER="com.example.app.daily" \
-sdk iphoneos \
-workspace "$XCODE_WORKSPACE" \
-scheme "$XCODE_SCHEME" \
clean archive \
-archivePath "$ARCHIVE_PATH"
and it worked!

Resources