iOS 빌드에서 incrementVersion이 한자리 버전일경우 이슈 발생 수정

This commit is contained in:
leedongmyung 2025-11-13 15:11:09 +09:00
parent 255be8c407
commit baf5c877fc

View file

@ -33,7 +33,10 @@ class BuildiOS extends Command {
await getMainXcodeprojPath(data.xcworkspaceFilePath!);
/************ Auto find build number ************/
var autoBuildNumber = (data.autoBuildNumber ?? false) ? !((version != null && version.isNotEmpty) || (buildNumber != null && buildNumber.isNotEmpty)) : false;
var autoBuildNumber = (data.autoBuildNumber ?? false)
? !((version != null && version.isNotEmpty) ||
(buildNumber != null && buildNumber.isNotEmpty))
: false;
if (autoBuildNumber) {
var appID = await getAppIdentifier(
data.workspace, xcodeproj, data.scheme, data.setAppID);
@ -44,7 +47,8 @@ class BuildiOS extends Command {
throw Exception(
'If autoVersionNumber = true then must set apiKeyPath.');
}
var fastFile = await initializeFastlane(data.workspace!, data.apiKeyPath!, appID);
var fastFile =
await initializeFastlane(data.workspace!, data.apiKeyPath!, appID);
var fastlaneContent = fastFile.readAsStringSync();
//Find PREPARE_FOR_SUBMISSION state Version
@ -55,7 +59,14 @@ class BuildiOS extends Command {
var process = await ProcessExecutor.run(shell);
var arr = process.stdout.toString().split('\n');
const result = '[RESULT]: ';
var needIncrementVersionState = ['WAITING_FOR_REVIEW', 'WAITING_FOR_REVIEW', 'IN_REVIEW', 'PENDING_DEVELOPER_RELEASE', 'PENDING_APPLE_RELEASE', 'REPLACED_WITH_NEW_VERSION'];
var needIncrementVersionState = [
'WAITING_FOR_REVIEW',
'WAITING_FOR_REVIEW',
'IN_REVIEW',
'PENDING_DEVELOPER_RELEASE',
'PENDING_APPLE_RELEASE',
'REPLACED_WITH_NEW_VERSION'
];
List<dynamic> jsonArr;
String? readyForSaleVersion = null;
for (var item in arr) {
@ -79,11 +90,11 @@ class BuildiOS extends Command {
}
}
if (targetVersion == null) {
if(readyForSaleVersion != null) {
if (readyForSaleVersion != null) {
targetVersion = incrementVersion(readyForSaleVersion);
} else {
throw Exception(
'Can not find target version when state = PREPARE_FOR_SUBMISSION, PENDING_DEVELOPER_RELEASE');
'Can not find target version when state = PREPARE_FOR_SUBMISSION, PENDING_DEVELOPER_RELEASE');
}
}
version = targetVersion;
@ -102,14 +113,17 @@ class BuildiOS extends Command {
if (item.contains(result)) {
var json =
jsonDecode(item.substring(item.indexOf(result) + result.length));
targetBuildNumber = json['latest_build_number'];
var key = 'latest_build_number';
if (json is Map && json.containsKey(key)) {
targetBuildNumber = json[key].toString();
}
break;
}
}
if (targetBuildNumber == null) {
throw Exception('Can not find target build number.');
}
buildNumber = incrementVersion(targetBuildNumber);
buildNumber = incrementVersion(targetBuildNumber, fixedLength: 4);
}
String? target = data.target;
@ -119,7 +133,8 @@ class BuildiOS extends Command {
'${data.workspace}/$xcodeproj/project.pbxproj', version);
} else {
target = target ?? await getTargetXcodeproj(data.workspace!, xcodeproj!);
version = await getSettingXcodeproj(data.workspace!, xcodeproj!, target!, 'MARKETING_VERSION');
version = await getSettingXcodeproj(
data.workspace!, xcodeproj!, target!, 'MARKETING_VERSION');
}
//buildNumber가 ,
if (buildNumber != null && buildNumber.isNotEmpty) {
@ -127,12 +142,18 @@ class BuildiOS extends Command {
'${data.workspace}/$xcodeproj/project.pbxproj', buildNumber);
} else {
target = target ?? await getTargetXcodeproj(data.workspace!, xcodeproj!);
buildNumber = await getSettingXcodeproj(data.workspace!, xcodeproj!, target!, 'CURRENT_PROJECT_VERSION');
buildNumber = await getSettingXcodeproj(
data.workspace!, xcodeproj!, target!, 'CURRENT_PROJECT_VERSION');
}
var setVersion = data.setVersion != null && data.setVersion!.isNotEmpty ? data.setVersion! : '<@property.version>';
var setVersion = data.setVersion != null && data.setVersion!.isNotEmpty
? data.setVersion!
: '<@property.version>';
setProperty(setVersion, version);
var setBuildNumber = data.setBuildNumber != null && data.setBuildNumber!.isNotEmpty ? data.setBuildNumber! : '<@property.buildNumber>';
var setBuildNumber =
data.setBuildNumber != null && data.setBuildNumber!.isNotEmpty
? data.setBuildNumber!
: '<@property.buildNumber>';
setProperty(setBuildNumber, buildNumber);
var os = 'iOS';
@ -206,25 +227,26 @@ class BuildiOS extends Command {
}
}
static Future<File> initializeFastlane(String workspace, String apiKeyPath, String appID) async {
static Future<File> initializeFastlane(
String workspace, String apiKeyPath, String appID) async {
var json = jsonDecode(File(apiKeyPath).readAsStringSync());
var fastlaneContent = fastlaneTemplete;
fastlaneContent = fastlaneContent
.replaceFirst('[APP_IDENTIFIER]', appID)
.replaceFirst('[API_KEY_ID]', json['key_id'])
.replaceFirst('[API_ISSUER_ID]', json['issuer_id'])
.replaceFirst('[AUTH_KEY_CONTENT]',
json['key'].toString().replaceAll('\n', '\\n'));
var fastlaneContent = fastlaneTemplete;
fastlaneContent = fastlaneContent
.replaceFirst('[APP_IDENTIFIER]', appID)
.replaceFirst('[API_KEY_ID]', json['key_id'])
.replaceFirst('[API_ISSUER_ID]', json['issuer_id'])
.replaceFirst('[AUTH_KEY_CONTENT]',
json['key'].toString().replaceAll('\n', '\\n'));
var shell = StringBuffer();
shell.write('cd $workspace');
shell.write(' && rm -rf "$workspace/fastlane"');
shell.write(' && yes | fastlane init');
await ProcessExecutor.run(shell);
var shell = StringBuffer();
shell.write('cd $workspace');
shell.write(' && rm -rf "$workspace/fastlane"');
shell.write(' && yes | fastlane init');
await ProcessExecutor.run(shell);
var fastFile = File('$workspace/fastlane/Fastfile');
fastFile.writeAsStringSync(fastlaneContent, flush: true);
return dataFutrue(fastFile);
var fastFile = File('$workspace/fastlane/Fastfile');
fastFile.writeAsStringSync(fastlaneContent, flush: true);
return dataFutrue(fastFile);
}
Future<String?> getAppIdentifier(String? workspace, String? xcodeproj,
@ -337,16 +359,18 @@ class BuildiOS extends Command {
await file.writeAsString(updatedLines.join('\n'));
}
Future<String?> getSettingXcodeproj(String workspace, String xcodeproj, String target, String marker) async {
Future<String?> getSettingXcodeproj(
String workspace, String xcodeproj, String target, String marker) async {
String? version;
var shell = StringBuffer();
shell.write('cd $workspace');
shell.write(' && xcodebuild -project $xcodeproj -target $target -showBuildSettings | grep $marker');
shell.write(
' && xcodebuild -project $xcodeproj -target $target -showBuildSettings | grep $marker');
var mark = '$marker = ';
var process = await ProcessExecutor.run(shell);
var arr = process.stdout.toString().split('\n');
for(var item in arr) {
for (var item in arr) {
if (item.contains(mark)) {
version = item.replaceAll(mark, '').trim();
break;
@ -355,15 +379,17 @@ class BuildiOS extends Command {
return dataFutrue(version);
}
Future<String?> getTargetXcodeproj(String workspace, String xcoodeproj) async {
Future<String?> getTargetXcodeproj(
String workspace, String xcoodeproj) async {
String? target;
var shell = StringBuffer();
shell.write('cd $workspace');
shell.write(" && xcodebuild -project $xcoodeproj -list | awk '/Targets:/ {getline; print; exit}'");
shell.write(
" && xcodebuild -project $xcoodeproj -list | awk '/Targets:/ {getline; print; exit}'");
var process = await ProcessExecutor.run(shell);
var arr = process.stdout.toString().split('\n');
for(var item in arr) {
for (var item in arr) {
item = item.trim();
if (item.isNotEmpty) {
target = item.trim();