In your current Xcode project, you might have different configurations and certain configurations might have different product bundle identifier, say you have a product id for staging, another for production, and another for development.
When you push your build for TestFlight for instance you have to update the build number or the version, if you have another app for staging say com.myapp.com.staging
and you use agvtool or fastlane action increment_build_number
which uses agvtool , the new number will be set for the whole configurations and you will find that your staging or production builds in TestFlight have no clear convention.
we can use this script as a fastlane lane .
desc("increase the current_project_version config based on configuration")
lane :increase_build do |option|
fastlane_require 'Xcodeproj'
project = "../#{urProjectName.xcodeproj}"
target = <#targetName#>
buildConfiguration = <#release_configuration_name#>
CUSTOM_BUILD_NUMBER = ''
project = Xcodeproj::Project.open(project)
project.targets.each do |mtarget|
if mtarget.name == target
mtarget.build_configurations.each do |mbuild|
if mbuild.name == buildConfiguration
CUSTOM_BUILD_NUMBER = mbuild.build_settings['CURRENT_PROJECT_VERSION']
mbuild.build_settings['CURRENT_PROJECT_VERSION'] = CUSTOM_BUILD_NUMBER.to_i + 1
end
end
end
end
project.save()
end
to get the build number for configuration you may use almost the same script like this
lane :get_build_number_for_configuraiton do |option|
fastlane_require 'Xcodeproj'
project = "../#{urProjectName.xcodeproj}"
target = <#targetName#>
buildConfiguration = <#release_configuration_name#>
CUSTOM_BUILD_NUMBER = ''
project = Xcodeproj::Project.open(project)
project.targets.each do |mtarget|
if mtarget.name == target
mtarget.build_configurations.each do |mbuild|
if mbuild.name == buildConfiguration
CUSTOM_BUILD_NUMBER = mbuild.build_settings['CURRENT_PROJECT_VERSION']
end
end
end
end
CUSTOM_BUILD_NUMBER
end
In the info.plist file you need to set the value $(CURRENT_PROJECT_VERSION)
for the key Bundle version
Versioning system in build settings should be set to Apple generic
.
And make sure in the General tap the build number has a value so Xcode does not complain.
it can use some refactoring , but that should do it.
Enjoy.