Skip to content

Commit b7248e0

Browse files
fix(firestore, macos): ensure Package.swift pulls firebase-ios-sdk version from local txt file (#17097)
1 parent 2371d2d commit b7248e0

File tree

1 file changed

+22
-58
lines changed
  • packages/cloud_firestore/cloud_firestore/macos/cloud_firestore

1 file changed

+22
-58
lines changed

packages/cloud_firestore/cloud_firestore/macos/cloud_firestore/Package.swift

+22-58
Original file line numberDiff line numberDiff line change
@@ -22,76 +22,42 @@ func loadFirebaseSDKVersion() throws -> String {
2222
firestoreDirectory,
2323
"..",
2424
"..",
25-
"..",
26-
"..",
27-
"firebase_core",
28-
"firebase_core",
2925
"ios",
30-
"firebase_sdk_version.rb",
31-
])
32-
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-
}
48-
} catch {
49-
throw ConfigurationError
50-
.fileNotFound("Error loading or parsing firebase_sdk_version.rb: \(error)")
51-
}
52-
}
53-
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",
26+
"generated_firebase_sdk_version.txt",
6427
])
6528
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
29+
let version = try String(contentsOfFile: firebaseCoreScriptPath, encoding: .utf8)
30+
.trimmingCharacters(in: .whitespacesAndNewlines)
31+
return version
7632
} catch {
7733
throw ConfigurationError
78-
.fileNotFound("Error loading or parsing firebase_core pubspec.yaml: \(error)")
34+
.fileNotFound("Error loading or parsing generated_firebase_sdk_version.txt: \(error)")
7935
}
8036
}
8137

82-
func loadPubspecVersion() throws -> String {
38+
func loadPubspecVersions() throws -> (packageVersion: String, firebaseCoreVersion: String) {
8339
let pubspecPath = NSString.path(withComponents: [firestoreDirectory, "..", "..", "pubspec.yaml"])
8440
do {
8541
let yamlString = try String(contentsOfFile: pubspecPath, encoding: .utf8)
8642
let lines = yamlString.split(separator: "\n")
8743

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

94-
return libraryVersion
60+
return (packageVersion, firebaseCoreVersion)
9561
} catch {
9662
throw ConfigurationError.fileNotFound("Error loading or parsing pubspec.yaml: \(error)")
9763
}
@@ -103,9 +69,9 @@ let firebase_core_version_string: String
10369
let shared_spm_tag = "-firebase-core-swift"
10470

10571
do {
106-
library_version = try loadPubspecVersion()
72+
library_version = try loadPubspecVersions().packageVersion
10773
firebase_sdk_version_string = try loadFirebaseSDKVersion()
108-
firebase_core_version_string = try loadFirebaseCoreVersion()
74+
firebase_core_version_string = try loadPubspecVersions().firebaseCoreVersion
10975
} catch {
11076
fatalError("Failed to load configuration: \(error)")
11177
}
@@ -114,8 +80,6 @@ guard let firebase_sdk_version = Version(firebase_sdk_version_string) else {
11480
fatalError("Invalid Firebase SDK version: \(firebase_sdk_version_string)")
11581
}
11682

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]
11983
guard let shared_spm_version = Version("\(firebase_core_version_string)\(shared_spm_tag)") else {
12084
fatalError("Invalid firebase_core version: \(firebase_core_version_string)\(shared_spm_tag)")
12185
}

0 commit comments

Comments
 (0)