Merge branch 'spm'
This commit is contained in:
commit
56971cca28
|
@ -66,3 +66,5 @@ fastlane/Preview.html
|
|||
fastlane/screenshots
|
||||
fastlane/test_output
|
||||
xcuserdata
|
||||
.DS_Store
|
||||
Sources/.DS_Store
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
// swift-tools-version:5.0
|
||||
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
||||
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "XcodeReleases",
|
||||
platforms: [
|
||||
.macOS(.v10_14),
|
||||
],
|
||||
products: [
|
||||
// Products define the executables and libraries produced by a package, and make them visible to other packages.
|
||||
.library(name: "XcodeReleases", targets: ["XcodeReleases"]),
|
||||
.executable(name: "json-export", targets: ["json-export"]),
|
||||
.executable(name: "xccheck", targets: ["xccheck"])
|
||||
],
|
||||
dependencies: [
|
||||
// Dependencies declare other packages that this package depends on.
|
||||
// .package(url: /* package url */, from: "1.0.0"),
|
||||
],
|
||||
targets: [
|
||||
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
||||
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
|
||||
.target(name: "XcodeReleases", dependencies: []),
|
||||
.target(name: "json-export", dependencies: ["XcodeReleases"]),
|
||||
.target(name: "xccheck", dependencies: ["XcodeReleases"])
|
||||
]
|
||||
)
|
|
@ -1,2 +1,3 @@
|
|||
# data
|
||||
The data generator that powers xcodereleases.com
|
||||
# XcodeReleases
|
||||
|
||||
The data and generator that powers xcodereleases.com
|
||||
|
|
Binary file not shown.
|
@ -8,14 +8,14 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct Compilers: Codable {
|
||||
let gcc: Array<Version>?
|
||||
let llvm_gcc: Array<Version>?
|
||||
let llvm: Array<Version>?
|
||||
let clang: Array<Version>?
|
||||
let swift: Array<Version>?
|
||||
public struct Compilers: Codable {
|
||||
public let gcc: Array<Version>?
|
||||
public let llvm_gcc: Array<Version>?
|
||||
public let llvm: Array<Version>?
|
||||
public let clang: Array<Version>?
|
||||
public let swift: Array<Version>?
|
||||
|
||||
init(gcc: Version? = nil, llvm_gcc: Version? = nil, llvm: Version? = nil, clang: Version? = nil, swift: Version? = nil) {
|
||||
public init(gcc: Version? = nil, llvm_gcc: Version? = nil, llvm: Version? = nil, clang: Version? = nil, swift: Version? = nil) {
|
||||
self.gcc = gcc.map { [$0] }
|
||||
self.llvm_gcc = llvm_gcc.map { [$0] }
|
||||
self.llvm = llvm.map { [$0] }
|
||||
|
@ -23,7 +23,7 @@ struct Compilers: Codable {
|
|||
self.swift = swift.map { [$0] }
|
||||
}
|
||||
|
||||
init(gcc: Array<Version>?, llvm_gcc: Array<Version>?, llvm: Array<Version>?, clang: Array<Version>?, swift: Array<Version>?) {
|
||||
public init(gcc: Array<Version>?, llvm_gcc: Array<Version>?, llvm: Array<Version>?, clang: Array<Version>?, swift: Array<Version>?) {
|
||||
self.gcc = gcc?.isEmpty == true ? nil : gcc
|
||||
self.llvm_gcc = llvm_gcc?.isEmpty == true ? nil : llvm_gcc
|
||||
self.llvm = llvm?.isEmpty == true ? nil : llvm
|
|
@ -8,21 +8,21 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct Link: Codable {
|
||||
let url: URL
|
||||
let sizeMB: Int?
|
||||
public struct Link: Codable {
|
||||
public let url: URL
|
||||
public let sizeMB: Int?
|
||||
|
||||
init(_ string: String, _ size: Int? = nil) {
|
||||
public init(_ string: String, _ size: Int? = nil) {
|
||||
self.url = URL(string: string)!
|
||||
self.sizeMB = size
|
||||
}
|
||||
}
|
||||
|
||||
struct Links: Codable {
|
||||
let download: Link?
|
||||
let notes: Link?
|
||||
public struct Links: Codable {
|
||||
public let download: Link?
|
||||
public let notes: Link?
|
||||
|
||||
init(download: Link? = nil, notes: Link? = nil) {
|
||||
public init(download: Link? = nil, notes: Link? = nil) {
|
||||
self.download = download
|
||||
self.notes = notes
|
||||
}
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
enum Release: Codable {
|
||||
public enum Release: Codable {
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
public enum CodingKeys: String, CodingKey {
|
||||
case gm, gmSeed, beta, dp
|
||||
}
|
||||
|
||||
var isGM: Bool {
|
||||
public var isGM: Bool {
|
||||
guard case .gm = self else { return false }
|
||||
return true
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ enum Release: Codable {
|
|||
case beta(Int)
|
||||
case dp(Int)
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
public init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
if let _ = try container.decodeIfPresent(Bool.self, forKey: .gm) {
|
||||
self = .gm
|
||||
|
@ -39,7 +39,7 @@ enum Release: Codable {
|
|||
}
|
||||
}
|
||||
|
||||
func encode(to encoder: Encoder) throws {
|
||||
public func encode(to encoder: Encoder) throws {
|
||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||
switch self {
|
||||
case .gm: try container.encode(true, forKey: .gm)
|
|
@ -8,41 +8,41 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct SDKs: Codable {
|
||||
let macOS: Array<Version>?
|
||||
let iOS: Array<Version>?
|
||||
let watchOS: Array<Version>?
|
||||
let tvOS: Array<Version>?
|
||||
public struct SDKs: Codable {
|
||||
public let macOS: Array<Version>?
|
||||
public let iOS: Array<Version>?
|
||||
public let watchOS: Array<Version>?
|
||||
public let tvOS: Array<Version>?
|
||||
|
||||
init(macOS: Version? = nil, iOS: Version? = nil, watchOS: Version? = nil, tvOS: Version? = nil) {
|
||||
public init(macOS: Version? = nil, iOS: Version? = nil, watchOS: Version? = nil, tvOS: Version? = nil) {
|
||||
self.macOS = macOS.map { [$0] }
|
||||
self.iOS = iOS.map { [$0] }
|
||||
self.watchOS = watchOS.map { [$0] }
|
||||
self.tvOS = tvOS.map { [$0] }
|
||||
}
|
||||
|
||||
init(macOS: Array<Version>?, iOS: Version? = nil, watchOS: Version? = nil, tvOS: Version? = nil) {
|
||||
public init(macOS: Array<Version>?, iOS: Version? = nil, watchOS: Version? = nil, tvOS: Version? = nil) {
|
||||
self.macOS = macOS?.isEmpty == true ? nil : macOS
|
||||
self.iOS = iOS.map { [$0] }
|
||||
self.watchOS = watchOS.map { [$0] }
|
||||
self.tvOS = tvOS.map { [$0] }
|
||||
}
|
||||
|
||||
init(macOS: Array<Version>?, iOS: Array<Version>?, watchOS: Version? = nil, tvOS: Version? = nil) {
|
||||
public init(macOS: Array<Version>?, iOS: Array<Version>?, watchOS: Version? = nil, tvOS: Version? = nil) {
|
||||
self.macOS = macOS?.isEmpty == true ? nil : macOS
|
||||
self.iOS = iOS?.isEmpty == true ? nil : iOS
|
||||
self.watchOS = watchOS.map { [$0] }
|
||||
self.tvOS = tvOS.map { [$0] }
|
||||
}
|
||||
|
||||
init(macOS: Array<Version>?, iOS: Array<Version>?, watchOS: Array<Version>?, tvOS: Version? = nil) {
|
||||
public init(macOS: Array<Version>?, iOS: Array<Version>?, watchOS: Array<Version>?, tvOS: Version? = nil) {
|
||||
self.macOS = macOS?.isEmpty == true ? nil : macOS
|
||||
self.iOS = iOS?.isEmpty == true ? nil : iOS
|
||||
self.watchOS = watchOS?.isEmpty == true ? nil : watchOS
|
||||
self.tvOS = tvOS.map { [$0] }
|
||||
}
|
||||
|
||||
init(macOS: Array<Version>?, iOS: Array<Version>?, watchOS: Array<Version>?, tvOS: Array<Version>?) {
|
||||
public init(macOS: Array<Version>?, iOS: Array<Version>?, watchOS: Array<Version>?, tvOS: Array<Version>?) {
|
||||
self.macOS = macOS?.isEmpty == true ? nil : macOS
|
||||
self.iOS = iOS?.isEmpty == true ? nil : iOS
|
||||
self.watchOS = watchOS?.isEmpty == true ? nil : watchOS
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
typealias V = Version
|
||||
struct Version: Codable {
|
||||
let number: String?
|
||||
let build: String
|
||||
let release: Release
|
||||
internal typealias V = Version
|
||||
public struct Version: Codable {
|
||||
public let number: String?
|
||||
public let build: String
|
||||
public let release: Release
|
||||
|
||||
init(_ build: String, _ number: String? = nil, _ release: Release = .gm) {
|
||||
public init(_ build: String, _ number: String? = nil, _ release: Release = .gm) {
|
||||
self.number = number; self.build = build; self.release = release
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// Xcode.swift
|
||||
// xcodereleases
|
||||
//
|
||||
// Created by Xcode Releases on 4/3/18.
|
||||
// Copyright © 2018 Xcode Releases. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct Xcode: Codable {
|
||||
public let name: String
|
||||
public let version: Version
|
||||
public let date: YMD
|
||||
public let requires: String
|
||||
public let sdks: SDKs?
|
||||
public let compilers: Compilers?
|
||||
public let links: Links?
|
||||
|
||||
public init(name: String = "Xcode", version: Version, date: (Int, Int, Int), requires: String, sdks: SDKs? = nil, compilers: Compilers? = nil, links: Links? = nil) {
|
||||
self.name = name
|
||||
self.version = version;
|
||||
self.date = YMD(date);
|
||||
self.requires = requires;
|
||||
self.sdks = sdks;
|
||||
self.compilers = compilers
|
||||
self.links = links
|
||||
}
|
||||
}
|
|
@ -8,16 +8,16 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
struct YMD: Codable {
|
||||
let year: Int
|
||||
let month: Int
|
||||
let day: Int
|
||||
public struct YMD: Codable {
|
||||
public let year: Int
|
||||
public let month: Int
|
||||
public let day: Int
|
||||
|
||||
init(_ ymd: (Int, Int, Int)) {
|
||||
public init(_ ymd: (Int, Int, Int)) {
|
||||
self.year = ymd.0; self.month = ymd.1; self.day = ymd.2
|
||||
}
|
||||
|
||||
init(_ year: Int, _ month: Int, _ day: Int) {
|
||||
public init(_ year: Int, _ month: Int, _ day: Int) {
|
||||
self.year = year; self.month = month; self.day = day
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
extension Xcode {
|
||||
|
||||
public static var allVersions: Array<Xcode> {
|
||||
return xcodes11 + xcodes10 + xcodes9 + xcodes8 + xcodes7 + xcodes6 + xcodes5 + xcodes4 + xcodes3 + xcodes2 + xcodes1
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
//
|
||||
// main.swift
|
||||
//
|
||||
//
|
||||
// Created by Xcode Releases on 9/11/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import XcodeReleases
|
||||
|
||||
let encoder = JSONEncoder()
|
||||
|
||||
if CommandLine.arguments.contains("--pretty") {
|
||||
encoder.outputFormatting = .prettyPrinted
|
||||
}
|
||||
|
||||
do {
|
||||
let data = try encoder.encode(Xcode.allVersions)
|
||||
var s = String(data: data, encoding: .utf8) ?? "[]"
|
||||
s = s.replacingOccurrences(of: "\\/", with: "/")
|
||||
print("\(s)")
|
||||
} catch let e {
|
||||
fatalError("\(e)")
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
//
|
||||
// Page.swift
|
||||
//
|
||||
//
|
||||
// Created by Xcode Releases on 9/13/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct Page {
|
||||
|
||||
let url: URL
|
||||
let document: XMLDocument
|
||||
|
||||
func xpath(_ xpath: String) -> Array<XMLNode> {
|
||||
let results = try? document.nodes(forXPath: xpath)
|
||||
return results ?? []
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Xcode Releases on 9/11/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import WebKit
|
||||
|
||||
let searchAllFrames = """
|
||||
function x_look(str, where) {
|
||||
var result = doc.evaluate(xpath, context || doc, null, XPathResult.ANY_TYPE, null);
|
||||
}
|
||||
function x(str) {
|
||||
console.log("looking in document");
|
||||
var result = $x(str, null);
|
||||
if (result === null) {
|
||||
var frames = document.getElementsByTagName("iframe");
|
||||
for (var i = 0; i < frames.length; i++) {
|
||||
console.log("looking in frame " + i);
|
||||
result = $x(str, frames[i].contentDocument);
|
||||
if (result !== null) { break; }
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function xpath(xpath, context) {
|
||||
var doc = (context && context.ownerDocument) || document;
|
||||
var result = doc.evaluate(xpath, context || doc, null, XPathResult.ANY_TYPE, null);
|
||||
switch (result.resultType) {
|
||||
case XPathResult.NUMBER_TYPE:
|
||||
return result.numberValue;
|
||||
case XPathResult.STRING_TYPE:
|
||||
return result.stringValue;
|
||||
case XPathResult.BOOLEAN_TYPE:
|
||||
return result.booleanValue;
|
||||
default:
|
||||
var nodes = [];
|
||||
var node;
|
||||
while (node = result.iterateNext())
|
||||
nodes.push(node);
|
||||
return nodes;
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
class Scraper: NSObject, WKNavigationDelegate, WKUIDelegate {
|
||||
|
||||
private let config = WKWebViewConfiguration()
|
||||
private let webView: WKWebView
|
||||
|
||||
private var _currentStep: Step?
|
||||
private var _currentPage: Page?
|
||||
private let stepQueue = DispatchQueue(label: "StepQueue")
|
||||
|
||||
private var loadCompletions = Dictionary<WKNavigation, (Page?) -> Void>()
|
||||
|
||||
override init() {
|
||||
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 2048), configuration: config)
|
||||
|
||||
super.init()
|
||||
webView.navigationDelegate = self
|
||||
webView.uiDelegate = self
|
||||
}
|
||||
|
||||
func run() {
|
||||
guard _currentStep == nil else { return }
|
||||
move(to: LoadDownloadsPage(context: self))
|
||||
}
|
||||
|
||||
func load(page: String, completion: @escaping (Page?) -> Void) {
|
||||
guard let u = URL(string: page) else { return }
|
||||
let r = URLRequest(url: u)
|
||||
if let nav = webView.load(r) {
|
||||
loadCompletions[nav] = completion
|
||||
} else {
|
||||
DispatchQueue.main.async { completion(nil) }
|
||||
}
|
||||
}
|
||||
|
||||
func currentPage() -> Page? {
|
||||
return _currentPage
|
||||
}
|
||||
|
||||
func move(to step: Step) {
|
||||
stepQueue.sync {
|
||||
_currentStep?.end()
|
||||
_currentStep = step
|
||||
_currentStep?.start()
|
||||
}
|
||||
}
|
||||
|
||||
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
|
||||
|
||||
print("deciding policy for \(navigationAction)")
|
||||
print("source: \(navigationAction.sourceFrame)")
|
||||
print("target: \(navigationAction.targetFrame)")
|
||||
|
||||
decisionHandler(.allow)
|
||||
}
|
||||
|
||||
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
|
||||
webView.evaluateJavaScript(searchAllFrames, completionHandler: nil)
|
||||
let url = webView.url
|
||||
stepQueue.async {
|
||||
self._currentPage = self.constructCurrentPage()
|
||||
self.loadCompletions.removeValue(forKey: navigation)?(self._currentPage)
|
||||
}
|
||||
}
|
||||
|
||||
private func executeJS(_ js: String) -> Any? {
|
||||
dispatchPrecondition(condition: .onQueue(stepQueue))
|
||||
let g = DispatchGroup(); g.enter()
|
||||
var result: Any?
|
||||
DispatchQueue.main.async {
|
||||
self.webView.evaluateJavaScript(js, completionHandler: { (r, e) in
|
||||
result = r
|
||||
g.leave()
|
||||
})
|
||||
}
|
||||
g.wait()
|
||||
return result
|
||||
}
|
||||
|
||||
private func constructCurrentPage() -> Page? {
|
||||
guard let html = executeJS("document.documentElement.outerHTML") as? String else { return nil }
|
||||
guard let doc = try? XMLDocument(data: Data(html.utf8), options: [.documentTidyHTML]) else { return nil }
|
||||
let frameNodes = (try? doc.nodes(forXPath: "//iframe")) ?? []
|
||||
let frames = frameNodes.compactMap { constructPageForFrame($0) }
|
||||
return nil
|
||||
}
|
||||
|
||||
private func constructPageForFrame(_ frame: XMLNode) -> Page? {
|
||||
guard let xp = frame.xPath else { return nil }
|
||||
|
||||
let output = executeJS("xpath(\"\(xp)\").contentDocument.outerHTML")
|
||||
|
||||
print(output)
|
||||
return nil
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
//
|
||||
// Step.swift
|
||||
//
|
||||
//
|
||||
// Created by Xcode Releases on 9/11/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import WebKit
|
||||
|
||||
class Step: NSObject, WKNavigationDelegate {
|
||||
|
||||
let context: Scraper
|
||||
|
||||
init(context: Scraper) {
|
||||
self.context = context
|
||||
}
|
||||
|
||||
func start() { }
|
||||
func end() { }
|
||||
|
||||
}
|
||||
|
||||
class LoadDownloadsPage: Step {
|
||||
|
||||
override func start() {
|
||||
context.load(page: "https://developer.apple.com/download") { page in
|
||||
guard let p = page else { return }
|
||||
if p.url.host == "idmsa.apple.com" {
|
||||
print("login")
|
||||
}
|
||||
print("\(p.url.absoluteString)")
|
||||
|
||||
let nodes = p.xpath(".//iframe")
|
||||
print("Found: \(nodes)")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// main.swift
|
||||
//
|
||||
//
|
||||
// Created by Xcode Releases on 9/11/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import WebKit
|
||||
import AppKit
|
||||
|
||||
class XCCheckDelegate: NSObject, NSApplicationDelegate {
|
||||
|
||||
var lastPrintedString: String?
|
||||
let scraper = Scraper()
|
||||
|
||||
func applicationDidFinishLaunching(_ notification: Notification) {
|
||||
scraper.run()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var delegate: XCCheckDelegate? = XCCheckDelegate()
|
||||
NSApplication.shared.delegate = delegate
|
||||
NSApplication.shared.run()
|
||||
delegate = nil
|
|
@ -1,379 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 50;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
552FE3A62074412700AF684D /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3A52074412700AF684D /* main.swift */; };
|
||||
552FE3AD2074412D00AF684D /* Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3AC2074412D00AF684D /* Xcode.swift */; };
|
||||
552FE3B42075419300AF684D /* Xcode1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3B32075419300AF684D /* Xcode1.swift */; };
|
||||
552FE3B6207545EE00AF684D /* Xcode2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3B5207545EE00AF684D /* Xcode2.swift */; };
|
||||
552FE3B82075461100AF684D /* Xcode3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3B72075461100AF684D /* Xcode3.swift */; };
|
||||
552FE3BA2075465000AF684D /* Xcode4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3B92075465000AF684D /* Xcode4.swift */; };
|
||||
552FE3BC2075467D00AF684D /* Xcode5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3BB2075467D00AF684D /* Xcode5.swift */; };
|
||||
552FE3BE207546AA00AF684D /* Xcode6.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3BD207546AA00AF684D /* Xcode6.swift */; };
|
||||
552FE3C0207546D200AF684D /* Xcode7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3BF207546D200AF684D /* Xcode7.swift */; };
|
||||
552FE3C22075470000AF684D /* Xcode8.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3C12075470000AF684D /* Xcode8.swift */; };
|
||||
552FE3C42075472200AF684D /* Xcode9.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3C32075472200AF684D /* Xcode9.swift */; };
|
||||
552FE3C8207550B100AF684D /* Compilers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3C7207550B100AF684D /* Compilers.swift */; };
|
||||
552FE3CA207550C900AF684D /* Release.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3C9207550C900AF684D /* Release.swift */; };
|
||||
552FE3CC207550D300AF684D /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3CB207550D300AF684D /* Version.swift */; };
|
||||
552FE3CE207550E300AF684D /* SDKs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3CD207550E300AF684D /* SDKs.swift */; };
|
||||
552FE3D02075510700AF684D /* YMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3CF2075510700AF684D /* YMD.swift */; };
|
||||
552FE3EC2076790600AF684D /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552FE3EB2076790600AF684D /* Link.swift */; };
|
||||
556CC3E422A5B5750070A144 /* Xcode11.swift in Sources */ = {isa = PBXBuildFile; fileRef = 556CC3E322A5B5750070A144 /* Xcode11.swift */; };
|
||||
55F3756C20BE0EBD00E7D742 /* Xcode10.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55F3756B20BE0EBD00E7D742 /* Xcode10.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
552FE3A02074412700AF684D /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
552FE3A22074412700AF684D /* xcodereleases */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xcodereleases; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
552FE3A52074412700AF684D /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
552FE3AC2074412D00AF684D /* Xcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode.swift; sourceTree = "<group>"; };
|
||||
552FE3B32075419300AF684D /* Xcode1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode1.swift; sourceTree = "<group>"; };
|
||||
552FE3B5207545EE00AF684D /* Xcode2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode2.swift; sourceTree = "<group>"; };
|
||||
552FE3B72075461100AF684D /* Xcode3.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode3.swift; sourceTree = "<group>"; };
|
||||
552FE3B92075465000AF684D /* Xcode4.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode4.swift; sourceTree = "<group>"; };
|
||||
552FE3BB2075467D00AF684D /* Xcode5.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode5.swift; sourceTree = "<group>"; };
|
||||
552FE3BD207546AA00AF684D /* Xcode6.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode6.swift; sourceTree = "<group>"; };
|
||||
552FE3BF207546D200AF684D /* Xcode7.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode7.swift; sourceTree = "<group>"; };
|
||||
552FE3C12075470000AF684D /* Xcode8.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode8.swift; sourceTree = "<group>"; };
|
||||
552FE3C32075472200AF684D /* Xcode9.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode9.swift; sourceTree = "<group>"; };
|
||||
552FE3C7207550B100AF684D /* Compilers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Compilers.swift; sourceTree = "<group>"; };
|
||||
552FE3C9207550C900AF684D /* Release.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Release.swift; sourceTree = "<group>"; };
|
||||
552FE3CB207550D300AF684D /* Version.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = "<group>"; };
|
||||
552FE3CD207550E300AF684D /* SDKs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDKs.swift; sourceTree = "<group>"; };
|
||||
552FE3CF2075510700AF684D /* YMD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YMD.swift; sourceTree = "<group>"; };
|
||||
552FE3EB2076790600AF684D /* Link.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Link.swift; sourceTree = "<group>"; };
|
||||
556CC3E322A5B5750070A144 /* Xcode11.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode11.swift; sourceTree = "<group>"; };
|
||||
55F3756B20BE0EBD00E7D742 /* Xcode10.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode10.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
552FE39F2074412700AF684D /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
552FE3992074412700AF684D = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
552FE3A42074412700AF684D /* xcodereleases */,
|
||||
552FE3A32074412700AF684D /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
552FE3A32074412700AF684D /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
552FE3A22074412700AF684D /* xcodereleases */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
552FE3A42074412700AF684D /* xcodereleases */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
552FE3A52074412700AF684D /* main.swift */,
|
||||
552FE3C62075509800AF684D /* Model */,
|
||||
552FE3C52075476E00AF684D /* Data */,
|
||||
);
|
||||
path = xcodereleases;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
552FE3C52075476E00AF684D /* Data */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
556CC3E322A5B5750070A144 /* Xcode11.swift */,
|
||||
55F3756B20BE0EBD00E7D742 /* Xcode10.swift */,
|
||||
552FE3C32075472200AF684D /* Xcode9.swift */,
|
||||
552FE3C12075470000AF684D /* Xcode8.swift */,
|
||||
552FE3BF207546D200AF684D /* Xcode7.swift */,
|
||||
552FE3BD207546AA00AF684D /* Xcode6.swift */,
|
||||
552FE3BB2075467D00AF684D /* Xcode5.swift */,
|
||||
552FE3B92075465000AF684D /* Xcode4.swift */,
|
||||
552FE3B72075461100AF684D /* Xcode3.swift */,
|
||||
552FE3B5207545EE00AF684D /* Xcode2.swift */,
|
||||
552FE3B32075419300AF684D /* Xcode1.swift */,
|
||||
);
|
||||
path = Data;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
552FE3C62075509800AF684D /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
552FE3AC2074412D00AF684D /* Xcode.swift */,
|
||||
552FE3C7207550B100AF684D /* Compilers.swift */,
|
||||
552FE3C9207550C900AF684D /* Release.swift */,
|
||||
552FE3CB207550D300AF684D /* Version.swift */,
|
||||
552FE3CD207550E300AF684D /* SDKs.swift */,
|
||||
552FE3CF2075510700AF684D /* YMD.swift */,
|
||||
552FE3EB2076790600AF684D /* Link.swift */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
552FE3A12074412700AF684D /* xcodereleases */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 552FE3A92074412700AF684D /* Build configuration list for PBXNativeTarget "xcodereleases" */;
|
||||
buildPhases = (
|
||||
552FE39E2074412700AF684D /* Sources */,
|
||||
552FE39F2074412700AF684D /* Frameworks */,
|
||||
552FE3A02074412700AF684D /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = xcodereleases;
|
||||
productName = xcodereleases;
|
||||
productReference = 552FE3A22074412700AF684D /* xcodereleases */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
552FE39A2074412700AF684D /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1020;
|
||||
LastUpgradeCheck = 0930;
|
||||
ORGANIZATIONNAME = "Xcode Releases";
|
||||
TargetAttributes = {
|
||||
552FE3A12074412700AF684D = {
|
||||
CreatedOnToolsVersion = 9.3;
|
||||
};
|
||||
55BA69D9225BAB1000AABBC4 = {
|
||||
CreatedOnToolsVersion = 10.2;
|
||||
LastSwiftMigration = 1020;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 552FE39D2074412700AF684D /* Build configuration list for PBXProject "xcodereleases" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 552FE3992074412700AF684D;
|
||||
productRefGroup = 552FE3A32074412700AF684D /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
552FE3A12074412700AF684D /* xcodereleases */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
552FE39E2074412700AF684D /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
552FE3EC2076790600AF684D /* Link.swift in Sources */,
|
||||
552FE3A62074412700AF684D /* main.swift in Sources */,
|
||||
552FE3CC207550D300AF684D /* Version.swift in Sources */,
|
||||
552FE3BE207546AA00AF684D /* Xcode6.swift in Sources */,
|
||||
552FE3AD2074412D00AF684D /* Xcode.swift in Sources */,
|
||||
552FE3C8207550B100AF684D /* Compilers.swift in Sources */,
|
||||
552FE3B42075419300AF684D /* Xcode1.swift in Sources */,
|
||||
552FE3C22075470000AF684D /* Xcode8.swift in Sources */,
|
||||
552FE3BA2075465000AF684D /* Xcode4.swift in Sources */,
|
||||
552FE3B6207545EE00AF684D /* Xcode2.swift in Sources */,
|
||||
55F3756C20BE0EBD00E7D742 /* Xcode10.swift in Sources */,
|
||||
552FE3CE207550E300AF684D /* SDKs.swift in Sources */,
|
||||
552FE3D02075510700AF684D /* YMD.swift in Sources */,
|
||||
556CC3E422A5B5750070A144 /* Xcode11.swift in Sources */,
|
||||
552FE3B82075461100AF684D /* Xcode3.swift in Sources */,
|
||||
552FE3BC2075467D00AF684D /* Xcode5.swift in Sources */,
|
||||
552FE3C0207546D200AF684D /* Xcode7.swift in Sources */,
|
||||
552FE3C42075472200AF684D /* Xcode9.swift in Sources */,
|
||||
552FE3CA207550C900AF684D /* Release.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
552FE3A72074412700AF684D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
552FE3A82074412700AF684D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
552FE3AA2074412700AF684D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 654LUM7646;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 4.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
552FE3AB2074412700AF684D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 654LUM7646;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 4.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
552FE39D2074412700AF684D /* Build configuration list for PBXProject "xcodereleases" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
552FE3A72074412700AF684D /* Debug */,
|
||||
552FE3A82074412700AF684D /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
552FE3A92074412700AF684D /* Build configuration list for PBXNativeTarget "xcodereleases" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
552FE3AA2074412700AF684D /* Debug */,
|
||||
552FE3AB2074412700AF684D /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 552FE39A2074412700AF684D /* Project object */;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:xcodereleases.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,31 +0,0 @@
|
|||
//
|
||||
// Xcode.swift
|
||||
// xcodereleases
|
||||
//
|
||||
// Created by Xcode Releases on 4/3/18.
|
||||
// Copyright © 2018 Xcode Releases. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
let xcodes: Array<Xcode> = xcodes11 + xcodes10 + xcodes9 + xcodes8 + xcodes7 + xcodes6 + xcodes5 + xcodes4 + xcodes3 + xcodes2 + xcodes1
|
||||
|
||||
struct Xcode: Codable {
|
||||
let name: String
|
||||
let version: Version
|
||||
let date: YMD
|
||||
let requires: String
|
||||
let sdks: SDKs?
|
||||
let compilers: Compilers?
|
||||
let links: Links?
|
||||
|
||||
init(name: String = "Xcode", version: Version, date: (Int, Int, Int), requires: String, sdks: SDKs? = nil, compilers: Compilers? = nil, links: Links? = nil) {
|
||||
self.name = name
|
||||
self.version = version;
|
||||
self.date = YMD(date);
|
||||
self.requires = requires;
|
||||
self.sdks = sdks;
|
||||
self.compilers = compilers
|
||||
self.links = links
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
//
|
||||
// main.swift
|
||||
// xcodereleases
|
||||
//
|
||||
// Created by Xcode Releases on 4/3/18.
|
||||
// Copyright © 2018 Xcode Releases. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
var encoder = JSONEncoder()
|
||||
//encoder.outputFormatting = .prettyPrinted
|
||||
do {
|
||||
let data = try encoder.encode(xcodes)
|
||||
var s = String(data: data, encoding: .utf8) ?? "[]"
|
||||
s = s.replacingOccurrences(of: "\\/", with: "/")
|
||||
print("\(s)")
|
||||
} catch let e {
|
||||
fatalError("\(e)")
|
||||
}
|
Loading…
Reference in New Issue