mirror of
https://github.com/GLEGram/GLEGram-iOS.git
synced 2026-04-25 12:26:55 +02:00
4647310322
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.
182 lines
6.9 KiB
Swift
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
|
|
}
|
|
}
|