Skip to content

Commit

Permalink
Merge pull request #91 from finestructure/issue-90
Browse files Browse the repository at this point in the history
Add support for macCatalyst platform
  • Loading branch information
finestructure authored Mar 8, 2023
2 parents b489675 + 7ff36d5 commit db7c850
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Sources/ArenaCore/Manifest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ struct Manifest: Decodable, Equatable {
struct Platform: Decodable, Equatable {
enum Name: String, Decodable, Equatable, CaseIterable {
case macos
case maccatalyst
case ios
case tvos
case watchos
Expand Down Expand Up @@ -64,6 +65,7 @@ extension Manifest.Product.`Type`: Decodable {

extension Manifest.Platform {
static func macos(_ version: String) -> Self { .init(platformName: .macos, version: version) }
static func macCatalyst(_ version: String) -> Self { .init(platformName: .maccatalyst, version: version) }
static func ios(_ version: String) -> Self { .init(platformName: .ios, version: version) }
static func tvos(_ version: String) -> Self { .init(platformName: .tvos, version: version) }
static func watchos(_ version: String) -> Self { .init(platformName: .watchos, version: version) }
Expand Down
10 changes: 9 additions & 1 deletion Sources/ArenaCore/PackageGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,38 @@ extension PackageGenerator {
struct Platforms: Equatable {
var iOS: Manifest.Platform?
var macOS: Manifest.Platform?
var macCatalyst: Manifest.Platform?
var tvOS: Manifest.Platform?
var watchOS: Manifest.Platform?

init(iOS: Manifest.Platform? = nil,
macOS: Manifest.Platform? = nil,
macCatalyst: Manifest.Platform? = nil,
tvOS: Manifest.Platform? = nil,
watchOS: Manifest.Platform? = nil) {
self.iOS = iOS
self.macOS = macOS
self.macCatalyst = macCatalyst
self.tvOS = tvOS
self.watchOS = watchOS
}

init(platforms: [Manifest.Platform]) {
iOS = platforms.first(where: { $0.platformName == .ios })
macOS = platforms.first(where: { $0.platformName == .macos })
macCatalyst = platforms.first(where: { $0.platformName == .maccatalyst })
tvOS = platforms.first(where: { $0.platformName == .tvos })
watchOS = platforms.first(where: { $0.platformName == .watchos })
}

var all: [Manifest.Platform] {
[self.iOS, self.macOS, self.tvOS, self.watchOS].compactMap { $0 }
[self.iOS, self.macOS, self.macCatalyst, self.tvOS, self.watchOS].compactMap { $0 }
}

func merged(with other: Platforms) -> Platforms {
.init(iOS: max(iOS, other.iOS),
macOS: max(macOS, other.macOS),
macCatalyst: max(macCatalyst, other.macCatalyst),
tvOS: max(tvOS, other.tvOS),
watchOS: max(watchOS, other.watchOS))
}
Expand All @@ -63,6 +68,7 @@ extension PackageGenerator {
guard !platforms.all.isEmpty else { return "" }
// .ios("13.0"),
// .macos("10.15"),
// .maccatalyst("10.15"),
// .tvos("13.0"),
// .watchos("6.0")
let platformsList = platforms
Expand Down Expand Up @@ -114,6 +120,8 @@ private extension Manifest.Platform {
switch self.platformName {
case .ios:
return "iOS"
case .maccatalyst:
return "macCatalyst"
case .macos:
return "macOS"
case .tvos:
Expand Down
1 change: 1 addition & 0 deletions Tests/ArenaTests/ArenaTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ extension Environment {

final class ArenaTests: XCTestCase {
override func setUp() {
super.setUp()
Current = .mock
}

Expand Down
25 changes: 25 additions & 0 deletions Tests/ArenaTests/RegressionTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import XCTest

@testable import ArenaCore

import Path


final class RegressionTests: XCTestCase {

override func setUpWithError() throws {
try super.setUpWithError()
Current = .mock
}

#if swift(>=5.7) // test can only run on 5.7+ due to manifest tools-version
func test_issue_90() throws {
// https://github.com/finestructure/Arena/issues/90
// macCatalyst platform in manifest
XCTAssertEqual(try getPackageInfo(in: fixturesDirectory/"Issue-90").platforms,
[.macos("12.0"), .macCatalyst("15.0"), .ios("15.0"), .watchos("8.0"), .tvos("15.0")])

}
#endif

}
35 changes: 35 additions & 0 deletions Tests/Fixtures/Issue-90/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// swift-tools-version: 5.7
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "RichStringKit",
platforms: [.macOS(.v12), .macCatalyst(.v15), .iOS(.v15), .watchOS(.v8), .tvOS(.v15)],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RichStringKit",
targets: ["RichStringKit"]
)
],
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 this package depends on.
.target(
name: "RichStringKit",
dependencies: [],
swiftSettings: [
.unsafeFlags(["-enable-bare-slash-regex"])
]
),
.testTarget(
name: "RichStringKitTests",
dependencies: ["RichStringKit"]
)
]
)

0 comments on commit db7c850

Please sign in to comment.