Xcode: Autoincrement Build number

Come distinguere in maniera certa una compilazione da un altra? Come sapere, indipendentemente dalla data, quale archivio per l’invio ad Apple è stato creato prima o dopo? È sufficiente utilizzare il Build number, nei settings del progetto in Xcode, appena sotto il Version number. Però modificarlo ogni volta a mano è fastidiosissimo.

Ecco allora che possiamo utilizzare il comodissimo script di sekati:

1
2
3
4
5
6
7
8
9
10
11
12
13
# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)
 
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}"
# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)

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}"

In pratica si aggiungono e ultime tre righe ad una nuova Build Phase (si crea cliccando sul + in alto a sinistra). L’autore consigli di spostare questa nuova fase appena sotto “Link Binaries With Libraries”, ovvero appena sotto i framework.

Se il numero di Build è un numero intero, questo viene incrementato ogni volta che si lancia il comando Build o Run, sia per il Simulatore che per un Device, e ogni volta che si archivia per inviare l’app ad Apple.

Comodissimo.

Verificare che una stringa contenta un valore numerico

Per verifica se una stringa rappresenta correttamente un numero si può usare la classe NSNumberFormatter. Infatti, avendo inizializzato un numberFormatter, si può usare il metodo

1
[numberFormatter numberFromString:string]
[numberFormatter numberFromString:string]

che restituisce nil se la NSString non è convertibile in numero.