Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 37 additions & 7 deletions Sources/VariantsCore/Factory/iOS/XcodeProjFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
// Created by Arthur Alves
//

// swiftlint:disable file_length

import Foundation
import XcodeProj
import PathKit
Expand All @@ -16,7 +18,7 @@ struct XcodeProjFactory {

private let logger: Logger

init(enableVerboseLog: Bool = true) {
init(enableVerboseLog: Bool = false) {
logger = Logger(verbose: enableVerboseLog)
}

Expand Down Expand Up @@ -136,21 +138,41 @@ 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 {
// swiftlint:disable:next for_where
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
Expand All @@ -168,7 +190,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(
Expand Down Expand Up @@ -243,3 +265,11 @@ private extension XcodeProjFactory {
}
}
}

private extension XCBuildConfiguration {
var infoPlistFile: String? {
buildSettings["INFO_PLIST"] as? String
}
}

// swiftlint:enable file_length