flutter build bundle 하기전에 자동으로 pubspec.yaml 파일의 앱 버전을 올려주는 유틸리티.
보통 릴리즈 할때 버전을 올린다. 버전을 올리지 않고 빌드하면 스토어에서 버전코드 중복이라는 귀찮은 메시지를 보게 된다. 그래서 작은 유틸리티를 만들었다.
// ignore_for_file: avoid_print
import 'dart:io';
void main() {
incrementPubspecVersion();
}
int incrementPubspecVersion() {
final pubspecFile = File('pubspec.yaml');
final lines = pubspecFile.readAsLinesSync();
// find version line
final versionIndex = lines.indexWhere((line) => line.startsWith('version:'));
if (versionIndex == -1) {
print('No version found in pubspec.yaml');
return 1;
}
final versionLine = lines[versionIndex];
final version = versionLine.split(' ').last.trim();
// verson + buildNumber
final parts = version.split('+');
final versionNumber = parts[0];
int versionNumberLast = 0;
int buildNumber = 0;
var versionNumbers = versionNumber.split(".");
try {
versionNumberLast = int.parse(versionNumbers.last);
buildNumber = int.parse(parts[1]);
} catch (ignored) {
print('Invalid version or build numbe. set to 0');
}
// new version string
final newVersion =
'${versionNumbers.first}.${versionNumbers[1]}.${versionNumberLast + 1}+${buildNumber + 1}';
lines[versionIndex] = 'version: $newVersion';
// update pubspec.yaml file
pubspecFile.writeAsStringSync(lines.join('\n'));
print('pubspec version: $newVersion');
return buildNumber + 1;
}
# flutterbuildbundle [package code] [mac or win]
cd ~/Workspace/flutter/$1
cp ~/Workspace/key/android/key.$2.properties ~/Workspace/flutter/$1/android/key.properties
flutter build appbundle --release
cd ~/Workspace/flutter/$1
cat > autover.dart <<EOF
// ignore_for_file: avoid_print
import 'dart:io';
void main() {
incrementPubspecVersion();
}
int incrementPubspecVersion() {
final pubspecFile = File('pubspec.yaml');
final lines = pubspecFile.readAsLinesSync();
// find version line
final versionIndex = lines.indexWhere((line) => line.startsWith('version:'));
if (versionIndex == -1) {
print('No version found in pubspec.yaml');
return 1;
}
final versionLine = lines[versionIndex];
final version = versionLine.split(' ').last.trim();
// verson + buildNumber
final parts = version.split('+');
final versionNumber = parts[0];
int versionNumberLast = 0;
int buildNumber = 0;
var versionNumbers = versionNumber.split(".");
try {
versionNumberLast = int.parse(versionNumbers.last);
buildNumber = int.parse(parts[1]);
} catch (ignored) {
print('Invalid version or build numbe. set to 0');
}
// new version string
final newVersion =
'\${versionNumbers.first}.\${versionNumbers[1]}.\${versionNumberLast + 1}+\${buildNumber + 1}';
lines[versionIndex] = 'version: \$newVersion';
// update pubspec.yaml file
pubspecFile.writeAsStringSync(lines.join('\n'));
print('pubspec version: \$newVersion');
return buildNumber + 1;
}
EOF
dart run autover.dart
cp ~/Workspace/key/android/key.$2.properties ~/Workspace/flutter/$1/android/key.properties
flutter build appbundle --release
버전 1.0.1+1 구조는 소프트웨어 버전 번호를 나타내는 일반적인 형식이며, 각 자릿수는 다음과 같은 의미를 가집니다: