Groot Groot - 4 months ago 8
iOS Question

Why won't my build phase scripts be executed when creating an IPA from command line?

Question - short version:

Why won't my build

phase scripts
be executed when creating an IPA from the command line?
When I'm running
xcodebuild
to create an IPA the predefined build phase scripts does not get executed. Why is that?




Question - lengthy version:

I have a workspace with a scheme I want to create an IPA out of from command line.

This works fine except for one thing; I have two scripts in the build phases of the target that is used to put the correct app version (
CFBundleShortVersionString
) and the correct svn revision number (
CFBundleVersion
). These to scripts works fine when archiving from xcode but for some reason they do not get run when archiving from command line.
First of all why is that?

Here are the scripts that are working (if archiving form xCode)
enter image description here
enter image description here

When archiving and creating the IPA from the command line I do (the essentials)

# Building
xcodebuild ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release clean build

# Creating IPA
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${PROJECT_BUILD_DIR}/${APPLICATION_NAME}.app" -o "${IPA_OUTPUT_PATH}/${APPLICATION_NAME}.ipa"


It works and creates an IPA but none of the build phase scripts gets executed leaving both the revision number and version number untouched.

All suggestions are appreciated!

UPDATE DUE TO BDASH's ANSWER

Instead of making a clean build I make an install as

xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release


The predefined script will IN FACT be executed (can be seen in the project version number) with no errors during the install. However the created IPA will have a size of ~300 bytes (instead of ~10MB) and cannot be installed on a device.

Building the app before installing it, i.e.

# Building
xcodebuild clean build ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release
# Installing
xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release


and then creating the IPA will result in an IPA with executed version script and of correct size BUT it is not possible installing it on a device. Trying to put it on a device will give an error message saying

"The program "MyApp" was not installed on you iPhone device "My Device" because an unknown error has occurred."

Answer

You have "Run script only when installing" checked for at least one of the script phases. That phase won't be run when using the build action to xcodebuild, only if using the install action.