-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPackage.swift
132 lines (117 loc) · 3.67 KB
/
Package.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// swift-tools-version: 6.0
import Foundation
import PackageDescription
let libwordpressFFIVersion: WordPressRSVersion = .local
#if os(Linux)
let libwordpressFFI: Target = .systemLibrary(
name: "libwordpressFFI",
path: "target/release/libwordpressFFI-linux/"
)
#elseif os(macOS)
let libwordpressFFI: Target = libwordpressFFIVersion.target
#endif
var package = Package(
name: "WordPressAPI",
platforms: [
.iOS(.v13),
.macOS(.v11),
.tvOS(.v13),
.watchOS(.v8)
],
products: [
.library(
name: "WordPressAPI",
targets: ["WordPressAPI"]
)
],
dependencies: [],
targets: [
.target(
name: "WordPressAPI",
dependencies: [
.target(name: "WordPressAPIInternal")
],
path: "native/swift/Sources/wordpress-api",
swiftSettings: [
.enableExperimentalFeature("StrictConcurrency"),
]
),
.target(
name: "WordPressAPIInternal",
dependencies: [
.target(name: libwordpressFFI.name)
],
path: "native/swift/Sources/wordpress-api-wrapper",
exclude: [
"README.md"
],
swiftSettings: [
.swiftLanguageMode(.v5)
]
),
libwordpressFFI,
.testTarget(
name: "WordPressAPITests",
dependencies: [
.target(name: "WordPressAPI"),
.target(name: libwordpressFFI.name)
],
path: "native/swift/Tests/wordpress-api",
resources: [.copy("Resources/Responses/")]
)
]
)
// MARK: - Enable local development toolings
let localDevelopment = libwordpressFFIVersion.isLocal
if localDevelopment {
try enableSwiftLint()
}
// MARK: - Helpers
enum WordPressRSVersion {
case local
case release(version: String, checksum: String)
var isLocal: Bool {
if case .local = self {
return true
}
return false
}
var target: Target {
switch libwordpressFFIVersion {
case .local:
return .binaryTarget(name: "libwordpressFFI", path: "target/libwordpressFFI.xcframework")
case let .release(version, checksum):
return .binaryTarget(
name: "libwordpressFFI",
url: "https://cdn.a8c-ci.services/wordpress-rs/\(version)/libwordpressFFI.xcframework.zip",
checksum: checksum
)
}
}
}
// Add SwiftLint to the package so that we can see linting issues directly from Xcode.
@MainActor
func enableSwiftLint() throws {
#if os(macOS)
let filePath = URL(string:"./.swiftlint.yml", relativeTo: URL(filePath: #filePath))!
let version = try String(contentsOf: filePath, encoding: .utf8)
.split(separator: "\n")
.first(where: { $0.starts(with: "swiftlint_version") })?
.split(separator: ":")
.last?
.trimmingCharacters(in: .whitespaces)
guard let version else {
fatalError("Can't find swiftlint_version in .swiftlint.yml")
}
package.dependencies.append(.package(url: "https://github.com/realm/SwiftLint", exact: .init(version)!))
var platforms = package.platforms ?? []
if let mac = platforms.firstIndex(where: { $0 == .macOS(.v11) }) {
platforms.remove(at: mac)
platforms.append(.macOS(.v12))
}
package.platforms = platforms
if let target = package.targets.first(where: { $0.name == "WordPressAPI" }) {
target.plugins = (target.plugins ?? []) + [.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint")]
}
#endif
}