14

After I migrate my project from swift 3.2 to swift 4 in Xcode 10 I try to archive in Xcode 11 and give me this error:

PhaseScriptExecution Run\ Script /Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEV/IntermediateBuildFilesPath/MyApp-iOS.build/Release-iphoneos/MyApp-iOS-DEV.build/Script-E95AEDE51E54767F00B60429.sh (in target 'MyApp-iOS-DEV' from project 'MyApp-iOS')

. . .

/Users/desarrollo/Library/Developer/Xcode/DerivedData/MyApp-iOS-ewcyzseaubkujucenluznpmduhoo/Build/Intermediates.noindex/ArchiveIntermediates/MyApp-iOS-DEV/IntermediateBuildFilesPath/MyApp-iOS.build/Release-iphoneos/MyApp-iOS-DEV.build/Script-E95AEDE51E54767F00B60429.sh: line 5: $(CURRENT_PROJECT_VERSION) + 1: syntax error: operand expected (error token is "$(CURRENT_PROJECT_VERSION) + 1")

In the error stack I find export CURRENT_PROJECT_VERSION=114

I don't have any script with "$(CURRENT_PROJECT_VERSION) + 1" so I don't know what to do

Navtti
  • 173
  • 1
  • 7

4 Answers4

24

UPDATE 2:

This causes builds to be canceled! Have a look at S1LENT WARRIOR's answer below, it seems to be working better.

UPDATE 1:

In the latest version of Xcode (Version 11.1) you can do the build number auto increment fairly easily.

Here are the steps:

  1. Go to your target's Build Settings
  2. Search for Versioning System
  3. Set it's value to Apple Generic
  4. Go to your target's Build Phases
  5. Add a new Run Script
  6. Add the following line agvtool next-version -all

Do this for all your targets and their build numbers will all be synced and updated every time you run any of the targets.

Got this answer from here: https://stackoverflow.com/a/58237340/1432355

P.S.: As said in a comment below

Using avgtool in a Run Script Phase causes the build to get cancelled

ORIGINAL:

You didn't do anything wrong I think.

If you go to your info.plist you will see that the build number has been replaced by $(CURRENT_PROJECT_VERSION) (you can find the variable in the Build Settings tab).

I am guessing you are using a script that increments build number automatically and that is causing the issue (I have the same thing on my project right now).

If you remove that script your app should build without this error.

I haven't found a solution yet on how to make the script work with this new $(CURRENT_PROJECT_VERSION) variable. (I will update this answer when I have found the solution)

Moumou
  • 1,513
  • 2
  • 18
  • 41
12

All the above answers weren't doing the trick by themselves, I had to compute a bunch of them, including the Apple documentation (see references below). So here are the steps I did if it helps someone to have all the steps.

In Info.plist, set:

  • CFBundleShortVersionString to $(MARKETING_VERSION)
  • CFBundleVersion to $(CURRENT_PROJECT_VERSION)

In target build settings:

  • set Versioning System to "Apple Generic"
  • set Current Project Version to 1 (or whatever version you want)
  • set Marketing Version to 1.0.0 (or whatever version you want)

In the scheme > Archive:

  • add a post-action "Run Script Action":
    • Provide build settings from: your app
    • in the script: cd ${PROJECT_DIR} ; xcrun agvtool next-version -all ;

  1. Apple doc mentioned by cuimingda : https://developer.apple.com/library/archive/qa/qa1827/_index.html
  2. Some of the steps mentioned by moucheg
Toka
  • 903
  • 7
  • 12
  • I followed exactly the same steps. But the Archive keeps cancelling. I am using Xcode 11. Any solution to avoid the cancelling of archive? – Pradeep Reddy Kypa Sep 22 '20 at 12:58
  • Awesome! Works perfectly - except, I had to change **Bundle Version** to a random number, for example **1**. When I did `$(CURRENT_PROJECT_VERSION)` it didn't work. – aheze Mar 20 '21 at 01:59
  • I've got three apps - one is totally fine with $(CURRENT_PROJECT_VERSION) but the other two instantly fail to build - entering a literal value for the Bundle Version sorted the two that wouldn't build. – Stephen Watson Apr 10 '23 at 14:19
6

Here is the script that worked for me on Xcode 11+
Just add a new Run Script Phase to your Build Phases
Add it below the Link Binary with Libraries phase.

#!/bin/sh

# To make executable, use: chmod u+x Build-Versioning-Scripts/Increment_Build_Number.sh
# to locate your target's info.plist use
# ${PRODUCT_SETTINGS_PATH}

echo "----"
echo "Info.plist for target: ${PRODUCT_SETTINGS_PATH}"

buildNum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "${PRODUCT_SETTINGS_PATH}")
echo "Current build #: $buildNum"

if [ -z "$buildNum" ]; then
echo "No build number found in $PRODUCT_SETTINGS_PATH"
exit 2
fi

buildNum=$(expr $buildNum + 1)
echo "Build # incremented to: $buildNum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNum" "$PRODUCT_SETTINGS_PATH"
echo "----"
exit 0 

This script was originally posted here by Alex Zavatone.

Hope this helps

S1LENT WARRIOR
  • 11,704
  • 4
  • 46
  • 60
5

Just change CFBundleVersion from $(CURRENT_PROJECT_VERSION) to number, in my case is 1000 in Info.plist

<key>CFBundleVersion</key>
<string>1004</string>

Then the shell will be OKey:

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
Cui Mingda
  • 803
  • 1
  • 6
  • 15
  • and if you want to modify current_project_version, you can find answer at apple documentation https://developer.apple.com/library/archive/qa/qa1827/_index.html – Cui Mingda Oct 08 '19 at 02:53