Skip to content

Commit f918bde

Browse files
orangeinceDivineDominion
authored andcommitted
Support Swift Package Manager. (#77)
* add SwiftPackageManager support. * add resourcehelper's file reference to fix test error in SwiftPM
1 parent 0a5ac63 commit f918bde

File tree

6 files changed

+57
-3
lines changed

6 files changed

+57
-3
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ DerivedData
1919
*.hmap
2020
*.ipa
2121
*.xcuserstate
22+
.build/
2223

2324
# CocoaPods
2425
#

Package.swift

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// swift-tools-version:5.0
2+
// The swift-tools-version declares the minimum version of Swift required to build this package.
3+
4+
import PackageDescription
5+
6+
let package = Package(
7+
name: "SwiftCSV",
8+
products: [
9+
// Products define the executables and libraries produced by a package, and make them visible to other packages.
10+
.library(
11+
name: "SwiftCSV",
12+
targets: ["SwiftCSV"]),
13+
],
14+
dependencies: [
15+
// Dependencies declare other packages that this package depends on.
16+
// .package(url: /* package url */, from: "1.0.0"),
17+
],
18+
targets: [
19+
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
20+
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
21+
.target(
22+
name: "SwiftCSV",
23+
path: "SwiftCSV"),
24+
.testTarget(
25+
name: "SwiftCSVTests",
26+
dependencies: ["SwiftCSV"],
27+
path: "SwiftCSVTests"),
28+
]
29+
)

SwiftCSV.xcodeproj/project.pbxproj

+8
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@
6565
BEE5461E1CBBB15900C0666F /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEE5461D1CBBB15900C0666F /* Description.swift */; };
6666
E46085921CCB1E8F00385286 /* large.csv in Resources */ = {isa = PBXBuildFile; fileRef = E46085911CCB1E8F00385286 /* large.csv */; };
6767
E46085941CCB1F5C00385286 /* PerformanceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E46085931CCB1F5C00385286 /* PerformanceTest.swift */; };
68+
F5C19F502283243C00920B06 /* ResourceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C19F4F2283243C00920B06 /* ResourceHelper.swift */; };
69+
F5C19F512283C0C100920B06 /* ResourceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C19F4F2283243C00920B06 /* ResourceHelper.swift */; };
70+
F5C19F522283C0C300920B06 /* ResourceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C19F4F2283243C00920B06 /* ResourceHelper.swift */; };
6871
/* End PBXBuildFile section */
6972

7073
/* Begin PBXContainerItemProxy section */
@@ -124,6 +127,7 @@
124127
BEE5461D1CBBB15900C0666F /* Description.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Description.swift; sourceTree = "<group>"; };
125128
E46085911CCB1E8F00385286 /* large.csv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = large.csv; sourceTree = "<group>"; };
126129
E46085931CCB1F5C00385286 /* PerformanceTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PerformanceTest.swift; sourceTree = "<group>"; };
130+
F5C19F4F2283243C00920B06 /* ResourceHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResourceHelper.swift; sourceTree = "<group>"; };
127131
/* End PBXFileReference section */
128132

129133
/* Begin PBXFrameworksBuildPhase section */
@@ -243,6 +247,7 @@
243247
BE06B67C1CB7267B009578CC /* empty_fields.csv */,
244248
BE06B6811CB7287F009578CC /* quotes.csv */,
245249
E46085911CCB1E8F00385286 /* large.csv */,
250+
F5C19F4F2283243C00920B06 /* ResourceHelper.swift */,
246251
);
247252
name = Res;
248253
sourceTree = "<group>";
@@ -558,6 +563,7 @@
558563
files = (
559564
E46085941CCB1F5C00385286 /* PerformanceTest.swift in Sources */,
560565
3D1E59C71945FFAD001CF760 /* CSVTests.swift in Sources */,
566+
F5C19F502283243C00920B06 /* ResourceHelper.swift in Sources */,
561567
508975E11DBF3E51006F3DBE /* EnumeratedViewTests.swift in Sources */,
562568
3D3749E3194D6DF7008F262A /* TSVTests.swift in Sources */,
563569
BE06B6801CB726B5009578CC /* URLTests.swift in Sources */,
@@ -585,6 +591,7 @@
585591
files = (
586592
5FB74BE01CCB9312009DDBF1 /* CSVTests.swift in Sources */,
587593
5FB74BE11CCB9312009DDBF1 /* QuotedTests.swift in Sources */,
594+
F5C19F512283C0C100920B06 /* ResourceHelper.swift in Sources */,
588595
508975E21DBF3E51006F3DBE /* EnumeratedViewTests.swift in Sources */,
589596
5FB74BE21CCB9312009DDBF1 /* TSVTests.swift in Sources */,
590597
5FB74BE31CCB9312009DDBF1 /* URLTests.swift in Sources */,
@@ -612,6 +619,7 @@
612619
files = (
613620
5FB74BE51CCB931F009DDBF1 /* CSVTests.swift in Sources */,
614621
5FB74BE61CCB931F009DDBF1 /* QuotedTests.swift in Sources */,
622+
F5C19F522283C0C300920B06 /* ResourceHelper.swift in Sources */,
615623
508975E31DBF3E51006F3DBE /* EnumeratedViewTests.swift in Sources */,
616624
5FB74BE71CCB931F009DDBF1 /* TSVTests.swift in Sources */,
617625
5FB74BE81CCB931F009DDBF1 /* URLTests.swift in Sources */,

SwiftCSVTests/PerformanceTest.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class PerformanceTest: XCTestCase {
1313
var csv: CSV!
1414

1515
override func setUp() {
16-
let csvURL = Bundle(for: CSVTests.self).url(forResource: "large", withExtension: "csv")!
16+
let csvURL = ResourceHelper.url(forResource: "large", withExtension: "csv")!
1717
csv = try! CSV(url: csvURL)
1818
}
1919

SwiftCSVTests/ResourceHelper.swift

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import Foundation
2+
3+
// Find url of resource.
4+
// This is a workaround for SwiftPM, becasue SwiftPM is not yet support for include resources with targets.(https://bugs.swift.org/browse/SR-2866)
5+
struct ResourceHelper {
6+
static func url(forResource name: String, withExtension type: String) -> URL? {
7+
let bundle = Bundle(for: CSVTests.self)
8+
if let url = bundle.url(forResource: name, withExtension: type) {
9+
return url
10+
} else if let realBundle = Bundle(path: "\(bundle.bundlePath)/../../../../SwiftCSVTests") {
11+
return realBundle.url(forResource: name, withExtension: type)
12+
} else {
13+
return nil
14+
}
15+
}
16+
}

SwiftCSVTests/URLTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class URLTests: XCTestCase {
1313
var csv: CSV!
1414

1515
func testEmptyFields() {
16-
let csvURL = Bundle(for: CSVTests.self).url(forResource: "empty_fields", withExtension: "csv")!
16+
let csvURL = ResourceHelper.url(forResource: "empty_fields", withExtension: "csv")!
1717
csv = try! CSV(url: csvURL)
1818
let expected = [
1919
["id": "1", "name": "John", "age": "23"],
@@ -29,7 +29,7 @@ class URLTests: XCTestCase {
2929
}
3030

3131
func testQuotes() {
32-
let csvURL = Bundle(for: CSVTests.self).url(forResource: "quotes", withExtension: "csv")!
32+
let csvURL = ResourceHelper.url(forResource: "quotes", withExtension: "csv")!
3333
csv = try! CSV(url: csvURL)
3434
let expected = [
3535
["id": "4", "name, first": "Alex", "name, last": "Smith"],

0 commit comments

Comments
 (0)