Skip to content

Commit 31e3b8c

Browse files
fix(firestore, macos): use local txt file to get latest firebase SDK version
1 parent b1bd93f commit 31e3b8c

File tree

1 file changed

+32
-65
lines changed
  • packages/cloud_firestore/cloud_firestore/macos/cloud_firestore

1 file changed

+32
-65
lines changed

Diff for: packages/cloud_firestore/cloud_firestore/macos/cloud_firestore/Package.swift

+32-65
Original file line numberDiff line numberDiff line change
@@ -14,84 +14,53 @@ enum ConfigurationError: Error {
1414
case invalidFormat(String)
1515
}
1616

17-
let firestoreDirectory = String(URL(string: #file)!.deletingLastPathComponent().absoluteString
18-
.dropLast())
17+
let firestoreDirectory = String(
18+
URL(string: #file)!.deletingLastPathComponent().absoluteString
19+
.dropLast())
1920

2021
func loadFirebaseSDKVersion() throws -> String {
2122
let firebaseCoreScriptPath = NSString.path(withComponents: [
2223
firestoreDirectory,
2324
"..",
2425
"..",
25-
"..",
26-
"..",
27-
"firebase_core",
28-
"firebase_core",
2926
"ios",
30-
"firebase_sdk_version.rb",
27+
"generated_firebase_sdk_version.txt",
3128
])
3229
do {
33-
let content = try String(contentsOfFile: firebaseCoreScriptPath, encoding: .utf8)
34-
let pattern = #"def firebase_sdk_version!\(\)\n\s+'([^']+)'\nend"#
35-
if let regex = try? NSRegularExpression(pattern: pattern, options: []),
36-
let match = regex.firstMatch(
37-
in: content,
38-
range: NSRange(content.startIndex..., in: content)
39-
) {
40-
if let versionRange = Range(match.range(at: 1), in: content) {
41-
return String(content[versionRange])
42-
} else {
43-
throw ConfigurationError.invalidFormat("Invalid format in firebase_sdk_version.rb")
44-
}
45-
} else {
46-
throw ConfigurationError.parsingError("No match found in firebase_sdk_version.rb")
47-
}
30+
let version = try String(contentsOfFile: firebaseCoreScriptPath, encoding: .utf8)
31+
.trimmingCharacters(in: .whitespacesAndNewlines)
32+
return version
4833
} catch {
49-
throw ConfigurationError
50-
.fileNotFound("Error loading or parsing firebase_sdk_version.rb: \(error)")
34+
throw
35+
ConfigurationError
36+
.fileNotFound("Error loading or parsing generated_firebase_sdk_version.txt: \(error)")
5137
}
5238
}
5339

54-
func loadFirebaseCoreVersion() throws -> String {
55-
let firebaseCorePubspecPath = NSString.path(withComponents: [
56-
firestoreDirectory,
57-
"..",
58-
"..",
59-
"..",
60-
"..",
61-
"firebase_core",
62-
"firebase_core",
63-
"pubspec.yaml",
64-
])
65-
do {
66-
let yamlString = try String(contentsOfFile: firebaseCorePubspecPath, encoding: .utf8)
67-
let lines = yamlString.split(separator: "\n")
68-
69-
guard let versionLine = lines.first(where: { $0.starts(with: "version:") }) else {
70-
throw ConfigurationError.invalidFormat("No version line found in pubspec.yaml")
71-
}
72-
let libraryVersion = versionLine.split(separator: ":")[1].trimmingCharacters(in: .whitespaces)
73-
.replacingOccurrences(of: "+", with: "-")
74-
75-
return libraryVersion
76-
} catch {
77-
throw ConfigurationError
78-
.fileNotFound("Error loading or parsing firebase_core pubspec.yaml: \(error)")
79-
}
80-
}
81-
82-
func loadPubspecVersion() throws -> String {
40+
func loadPubspecVersions() throws -> (packageVersion: String, firebaseCoreVersion: String) {
8341
let pubspecPath = NSString.path(withComponents: [firestoreDirectory, "..", "..", "pubspec.yaml"])
8442
do {
8543
let yamlString = try String(contentsOfFile: pubspecPath, encoding: .utf8)
8644
let lines = yamlString.split(separator: "\n")
8745

88-
guard let versionLine = lines.first(where: { $0.starts(with: "version:") }) else {
89-
throw ConfigurationError.invalidFormat("No version line found in pubspec.yaml")
46+
guard let packageVersionLine = lines.first(where: { $0.starts(with: "version:") }) else {
47+
throw ConfigurationError.invalidFormat("No package version line found in pubspec.yaml")
9048
}
91-
let libraryVersion = versionLine.split(separator: ":")[1].trimmingCharacters(in: .whitespaces)
49+
var packageVersion = packageVersionLine.split(separator: ":")[1]
50+
.trimmingCharacters(in: .whitespaces)
9251
.replacingOccurrences(of: "+", with: "-")
52+
packageVersion = packageVersion.replacingOccurrences(of: "^", with: "")
53+
54+
guard let firebaseCoreVersionLine = lines.first(where: { $0.contains("firebase_core:") }) else {
55+
throw
56+
ConfigurationError
57+
.invalidFormat("No firebase_core dependency version line found in pubspec.yaml")
58+
}
59+
var firebaseCoreVersion = firebaseCoreVersionLine.split(separator: ":")[1]
60+
.trimmingCharacters(in: .whitespaces)
61+
firebaseCoreVersion = firebaseCoreVersion.replacingOccurrences(of: "^", with: "")
9362

94-
return libraryVersion
63+
return (packageVersion, firebaseCoreVersion)
9564
} catch {
9665
throw ConfigurationError.fileNotFound("Error loading or parsing pubspec.yaml: \(error)")
9766
}
@@ -103,9 +72,9 @@ let firebase_core_version_string: String
10372
let shared_spm_tag = "-firebase-core-swift"
10473

10574
do {
106-
library_version = try loadPubspecVersion()
75+
library_version = try loadPubspecVersions().packageVersion
10776
firebase_sdk_version_string = try loadFirebaseSDKVersion()
108-
firebase_core_version_string = try loadFirebaseCoreVersion()
77+
firebase_core_version_string = try loadPubspecVersions().firebaseCoreVersion
10978
} catch {
11079
fatalError("Failed to load configuration: \(error)")
11180
}
@@ -114,19 +83,17 @@ guard let firebase_sdk_version = Version(firebase_sdk_version_string) else {
11483
fatalError("Invalid Firebase SDK version: \(firebase_sdk_version_string)")
11584
}
11685

117-
// TODO: - we can try using existing firebase_core tag once flutterfire/Package.swift is part of release cycle
118-
// but I don't think it'll work as Swift versioning requires version-[tag name]
11986
guard let shared_spm_version = Version("\(firebase_core_version_string)\(shared_spm_tag)") else {
12087
fatalError("Invalid firebase_core version: \(firebase_core_version_string)\(shared_spm_tag)")
12188
}
12289

12390
let package = Package(
12491
name: "cloud_firestore",
12592
platforms: [
126-
.macOS("10.15"),
93+
.macOS("10.15")
12794
],
12895
products: [
129-
.library(name: "cloud-firestore", targets: ["cloud_firestore"]),
96+
.library(name: "cloud-firestore", targets: ["cloud_firestore"])
13097
],
13198
dependencies: [
13299
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: firebase_sdk_version),
@@ -141,14 +108,14 @@ let package = Package(
141108
.product(name: "firebase-core-shared", package: "flutterfire"),
142109
],
143110
resources: [
144-
.process("Resources"),
111+
.process("Resources")
145112
],
146113
cSettings: [
147114
.headerSearchPath("include/cloud_firestore/Private"),
148115
.headerSearchPath("include/cloud_firestore/Public"),
149116
.define("LIBRARY_VERSION", to: "\"\(library_version)\""),
150117
.define("LIBRARY_NAME", to: "\"flutter-fire-fst\""),
151118
]
152-
),
119+
)
153120
]
154121
)

0 commit comments

Comments
 (0)