From f6933ffb6046c4b982634d2f8dd794f8103cd758 Mon Sep 17 00:00:00 2001 From: Gabriel Minucci Date: Mon, 3 Mar 2025 14:53:02 +0200 Subject: [PATCH 1/2] fix: update xcconfig in the main target only if using cocoapods --- .../Factory/iOS/XcodeProjFactory.swift | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift b/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift index c29862dd..75b3cbe2 100644 --- a/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift +++ b/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift @@ -16,7 +16,7 @@ struct XcodeProjFactory { private let logger: Logger - init(enableVerboseLog: Bool = true) { + init(enableVerboseLog: Bool = false) { logger = Logger(verbose: enableVerboseLog) } @@ -136,21 +136,40 @@ struct XcodeProjFactory { target: iOSTarget, autoSave: Bool = false) { do { + let isUsingCocoapodsWorkspace = isCocoapodsWorkspace( + configurations: xcodeProject.pbxproj.buildConfigurations) + for conf in xcodeProject.pbxproj.buildConfigurations { - if - let infoList = conf.buildSettings["INFOPLIST_FILE"] as? String, - infoList == target.source.info { + if isUsingCocoapodsWorkspace { + let confName = conf.baseConfiguration?.name?.lowercased() + guard confName?.contains("pods") == false else { continue } + conf.baseConfiguration = fileReference + } else { + guard conf.infoPlistFile == target.source.info else { continue } conf.baseConfiguration = fileReference } } - if autoSave { try xcodeProject.write(path: path) } + + if autoSave { + try xcodeProject.write(path: path) + } + logger.logInfo("✅ ", item: "Changed baseConfiguration of target '\(target.name)'", color: .green) } catch { logger.logFatal("❌ ", item: "Unable to edit baseConfiguration for target '\(target.name)'") } } - + + private func isCocoapodsWorkspace(configurations: [XCBuildConfiguration]) -> Bool { + for conf in configurations { + if conf.baseConfiguration?.name?.lowercased().contains("pods") == true { + return true + } + } + return false + } + /// Modify value directly in `.xcodeproj/project.pbxproj` /// - Parameters: /// - keyValue: Key/value pair to be modified @@ -168,7 +187,7 @@ struct XcodeProjFactory { logger.logInfo("Updating: ", item: projectPath) project.pbxproj.buildConfigurations - .filter({ ($0.buildSettings["INFOPLIST_FILE"] as? String)?.contains(targetName) ?? false }) + .filter({ $0.infoPlistFile?.contains(targetName) ?? false }) .filter({ configTypeNames.contains($0.name.lowercased()) }) .forEach { conf in logger.logDebug( @@ -243,3 +262,9 @@ private extension XcodeProjFactory { } } } + +private extension XCBuildConfiguration { + var infoPlistFile: String? { + buildSettings["INFO_PLIST"] as? String + } +} From b8bf1a7179ef9f6950c262b9f3899299301a7c65 Mon Sep 17 00:00:00 2001 From: Gabriel Minucci Date: Mon, 3 Mar 2025 15:05:08 +0200 Subject: [PATCH 2/2] fix: linter errors --- Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift b/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift index 75b3cbe2..d049d552 100644 --- a/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift +++ b/Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift @@ -5,6 +5,8 @@ // Created by Arthur Alves // +// swiftlint:disable file_length + import Foundation import XcodeProj import PathKit @@ -163,6 +165,7 @@ struct XcodeProjFactory { private func isCocoapodsWorkspace(configurations: [XCBuildConfiguration]) -> Bool { for conf in configurations { + // swiftlint:disable:next for_where if conf.baseConfiguration?.name?.lowercased().contains("pods") == true { return true } @@ -268,3 +271,5 @@ private extension XCBuildConfiguration { buildSettings["INFO_PLIST"] as? String } } + +// swiftlint:enable file_length