mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
Added support for scheme management (#1142)
* wip * Added scheme management metadata properties to TargetScheme * wip * Added Scheme.Management for metadata * use sharedDefault * move generateSchemeManagement to SchemeGenerator * revert * update changelog * update docs * update test case * remove * remove unused file * revert * changed on fixtures project * Updated ProjectSpec docs index * User Scheme.Management also for TargetSchemes, use XCUserData * Changelog * Switch XcodeProj back tuist/XcodeProj - 8.9.0 * Reindent TOC Docs/ProjectSpec.md * Revert swift tools version --------- Co-authored-by: Tieme van Veen <tiemevanveen@hotmail.com>
This commit is contained in:
co-authored by
Tieme van Veen
parent
80e317206b
commit
43e40a9efc
@@ -13,22 +13,34 @@ public class ProjectGenerator {
|
||||
self.project = project
|
||||
}
|
||||
|
||||
public func generateXcodeProject(in projectDirectory: Path? = nil) throws -> XcodeProj {
|
||||
public func generateXcodeProject(in projectDirectory: Path? = nil, userName: String) throws -> XcodeProj {
|
||||
|
||||
// generate PBXProj
|
||||
let pbxProjGenerator = PBXProjGenerator(project: project,
|
||||
projectDirectory: projectDirectory)
|
||||
let pbxProj = try pbxProjGenerator.generate()
|
||||
|
||||
// generate Schemes
|
||||
let schemeGenerator = SchemeGenerator(project: project, pbxProj: pbxProj)
|
||||
let schemes = try schemeGenerator.generateSchemes()
|
||||
|
||||
// generate Workspace
|
||||
let workspace = try generateWorkspace()
|
||||
|
||||
let sharedData = XCSharedData(schemes: schemes)
|
||||
return XcodeProj(workspace: workspace, pbxproj: pbxProj, sharedData: sharedData)
|
||||
// generate Schemes
|
||||
let schemeGenerator = SchemeGenerator(project: project, pbxProj: pbxProj)
|
||||
let (sharedSchemes, userSchemes, schemeManagement) = try schemeGenerator.generateSchemes()
|
||||
|
||||
// generate shared data
|
||||
let sharedData = XCSharedData(schemes: sharedSchemes)
|
||||
|
||||
// generate user data
|
||||
let userData = userSchemes.isEmpty && schemeManagement == nil ? [] : [
|
||||
XCUserData(userName: userName, schemes: userSchemes, schemeManagement: schemeManagement)
|
||||
]
|
||||
|
||||
return XcodeProj(
|
||||
workspace: workspace,
|
||||
pbxproj: pbxProj,
|
||||
sharedData: sharedData,
|
||||
userData: userData
|
||||
)
|
||||
}
|
||||
|
||||
func generateWorkspace() throws -> XCWorkspace {
|
||||
|
||||
@@ -40,12 +40,15 @@ public class SchemeGenerator {
|
||||
return pbxproj
|
||||
}
|
||||
|
||||
public func generateSchemes() throws -> [XCScheme] {
|
||||
var xcschemes: [XCScheme] = []
|
||||
public func generateSchemes() throws -> (
|
||||
shared: [XCScheme],
|
||||
user: [XCScheme],
|
||||
management: XCSchemeManagement?
|
||||
) {
|
||||
var schemes: [(Scheme, ProjectTarget?)] = []
|
||||
|
||||
for scheme in project.schemes {
|
||||
let xcscheme = try generateScheme(scheme)
|
||||
xcschemes.append(xcscheme)
|
||||
schemes.append((scheme, nil))
|
||||
}
|
||||
|
||||
for target in project.projectTargets {
|
||||
@@ -64,19 +67,18 @@ public class SchemeGenerator {
|
||||
debugConfig: debugConfig.name,
|
||||
releaseConfig: releaseConfig.name
|
||||
)
|
||||
let xcscheme = try generateScheme(scheme, for: target)
|
||||
xcschemes.append(xcscheme)
|
||||
schemes.append((scheme, target))
|
||||
} else {
|
||||
for configVariant in targetScheme.configVariants {
|
||||
|
||||
let schemeName = "\(target.name) \(configVariant)"
|
||||
|
||||
|
||||
let debugConfig = project.configs
|
||||
.first(including: configVariant, for: .debug)!
|
||||
|
||||
|
||||
let releaseConfig = project.configs
|
||||
.first(including: configVariant, for: .release)!
|
||||
|
||||
|
||||
let scheme = Scheme(
|
||||
name: schemeName,
|
||||
target: target,
|
||||
@@ -85,14 +87,44 @@ public class SchemeGenerator {
|
||||
debugConfig: debugConfig.name,
|
||||
releaseConfig: releaseConfig.name
|
||||
)
|
||||
let xcscheme = try generateScheme(scheme, for: target)
|
||||
xcschemes.append(xcscheme)
|
||||
schemes.append((scheme, target))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return xcschemes
|
||||
var sharedSchemes: [XCScheme] = []
|
||||
var userSchemes: [XCScheme] = []
|
||||
var schemeManagements: [XCSchemeManagement.UserStateScheme] = []
|
||||
|
||||
for (scheme, projectTarget) in schemes {
|
||||
let xcscheme = try generateScheme(scheme, for: projectTarget)
|
||||
|
||||
if scheme.management?.shared == false {
|
||||
userSchemes.append(xcscheme)
|
||||
} else {
|
||||
sharedSchemes.append(xcscheme)
|
||||
}
|
||||
|
||||
if let management = scheme.management {
|
||||
schemeManagements.append(
|
||||
XCSchemeManagement.UserStateScheme(
|
||||
name: scheme.name + ".xcscheme",
|
||||
shared: management.shared,
|
||||
orderHint: management.orderHint,
|
||||
isShown: management.isShown
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
shared: sharedSchemes,
|
||||
user: userSchemes,
|
||||
management: schemeManagements.isEmpty
|
||||
? nil
|
||||
: XCSchemeManagement(schemeUserState: schemeManagements, suppressBuildableAutocreation: nil)
|
||||
)
|
||||
}
|
||||
|
||||
public func generateScheme(_ scheme: Scheme, for target: ProjectTarget? = nil) throws -> XCScheme {
|
||||
@@ -358,7 +390,7 @@ public class SchemeGenerator {
|
||||
.flatMap { $0.type.isExtension ? true : nil }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
private func launchAutomaticallySubstyle(for target: ProjectTarget?) -> String? {
|
||||
if target?.type.isExtension == true {
|
||||
return "2"
|
||||
@@ -461,7 +493,8 @@ extension Scheme {
|
||||
),
|
||||
archive: .init(
|
||||
config: releaseConfig
|
||||
)
|
||||
),
|
||||
management: targetScheme.management
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user