Files
GLEGram-iOS/third-party/XcodeGen/Tests/PerformanceTests/TestProject.swift
T
Leeksov 4647310322 GLEGram 12.5 — Initial public release
Based on Swiftgram 12.5 (Telegram iOS 12.5).
All GLEGram features ported and organized in GLEGram/ folder.

Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass,
Font Replacement, Fake Profile, Chat Export, Plugin System, and more.

See CHANGELOG_12.5.md for full details.
2026-04-06 09:48:12 +03:00

182 lines
6.9 KiB
Swift

import Foundation
import PathKit
import ProjectSpec
import XcodeProj
extension Project {
static func testProject(basePath: Path, createSources: Bool = true) throws -> Project {
if createSources {
try? basePath.delete()
try basePath.mkpath()
}
var paths: [Path] = []
var targets: [Target] = []
let scheme = TargetScheme(
testTargets: [],
configVariants: ["Test", "Staging", "Prod"],
gatherCoverageData: true,
storeKitConfiguration: "Configuration.storekit",
disableMainThreadChecker: true,
stopOnEveryMainThreadCheckerIssue: false,
commandLineArguments: [
"--command": true,
"--command2": false,
],
environmentVariables: [
XCScheme.EnvironmentVariable(variable: "ENV", value: "HELLO", enabled: true),
XCScheme.EnvironmentVariable(variable: "ENV2", value: "HELLO", enabled: false),
],
preActions: [Scheme.ExecutionAction(name: "run", script: "script")],
postActions: [Scheme.ExecutionAction(name: "run", script: "script")],
management: Scheme.Management(shared: false, orderHint: 1, isShown: true)
)
for platform in Platform.allCases {
let appTarget = Target(
name: "App_\(platform)",
type: .application,
platform: platform,
sources: [TargetSource(path: "App_\(platform)")],
dependencies: [
Dependency(type: .target, reference: "Framework_\(platform)"),
Dependency(type: .target, reference: "Framework2_\(platform)"),
Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "Alamofire"),
Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "BrightFutures"),
],
scheme: scheme
)
targets.append(appTarget)
if createSources {
paths += try createTargetSources(path: basePath, target: appTarget)
}
let testTarget = Target(
name: "App_Test_\(platform)",
type: .unitTestBundle,
platform: platform,
sources: [TargetSource(path: "App_Test_\(platform)")],
dependencies: [
Dependency(type: .target, reference: "App_\(platform)"),
Dependency(type: .target, reference: "Framework_\(platform)"),
Dependency(type: .target, reference: "Framework2_\(platform)"),
],
scheme: scheme
)
targets.append(testTarget)
if createSources {
paths += try createTargetSources(path: basePath, target: testTarget)
}
let frameworkTarget = Target(
name: "Framework_\(platform)",
type: .framework,
platform: platform,
sources: [
TargetSource(path: "Framework_\(platform)"),
],
dependencies: [
Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "Alamofire"),
],
scheme: scheme
)
targets.append(frameworkTarget)
if createSources {
paths += try createTargetSources(path: basePath, target: frameworkTarget)
}
let frameworkTarget2 = Target(
name: "Framework2_\(platform)",
type: .framework,
platform: platform,
sources: [TargetSource(path: "Framework2_\(platform)")],
dependencies: [
Dependency(type: .target, reference: "Framework_\(platform)"),
Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "Alamofire"),
Dependency(type: .carthage(findFrameworks: false, linkType: .dynamic), reference: "BrightFutures"),
],
scheme: scheme
)
targets.append(frameworkTarget2)
if createSources {
paths += try createTargetSources(path: basePath, target: frameworkTarget2)
}
}
if createSources {
let files = paths.filter { $0.isFile }
let directories = paths.filter { $0.isDirectory }
print("Generated \(files.count) files and \(directories.count) directories")
}
return Project(
basePath: basePath,
name: "Project",
configs: [
Config(name: "Debug Test", type: .debug),
Config(name: "Release Test", type: .release),
Config(name: "Debug Staging", type: .debug),
Config(name: "Release Staging", type: .release),
Config(name: "Debug Prod", type: .debug),
Config(name: "Release Prod", type: .release),
],
targets: targets,
aggregateTargets: [],
settings: [:],
settingGroups: [:],
schemes: [],
options: SpecOptions(),
fileGroups: [],
configFiles: [:],
attributes: [:]
)
}
fileprivate static func createTargetSources(path: Path, target: Target) throws -> [Path] {
let levels = 3
let directoriesPerLevel = 1
let swiftFilesPerDirectory = 5
let objFilesPerDirectory = 2
let resourcesPerDirectory = 2
var paths: [Path] = []
func createDirectory(_ path: Path, depth: Int = 0) throws {
try path.mkpath()
paths.append(path)
for swiftFile in 1...swiftFilesPerDirectory {
let file = path + "file_\(swiftFile).swift"
try file.write("")
paths.append(file)
}
for resourceFile in 1...resourcesPerDirectory {
let file = path + "file_\(resourceFile).png"
try file.write("")
paths.append(file)
}
for objFile in 1...objFilesPerDirectory {
let header = path + "file_\(objFile).h"
try header.write("")
paths.append(header)
let implementation = path + "file_\(objFile).m"
try implementation.write("")
paths.append(implementation)
}
if depth < levels - 1 {
for directory in 1...directoriesPerLevel {
try createDirectory(path + "directory_\(directory)", depth: depth + 1)
}
}
}
for source in target.sources {
try createDirectory(path + source.path)
}
return paths
}
}