From d983527d1607df31a0f353e9d83bb2c472ad741f Mon Sep 17 00:00:00 2001 From: Andrew Heard Date: Tue, 30 Sep 2025 12:58:55 -0400 Subject: [PATCH] [Firebase AI] Add placeholder `Firebase` folder for zip frameworks --- .../ChatExample/Models/ChatMessage.swift | 6 +- .../Screens/ConversationScreen.swift | 6 +- .../ViewModels/ConversationViewModel.swift | 6 +- .../ChatExample/Views/ErrorDetailsView.swift | 6 +- firebaseai/ChatExample/Views/ErrorView.swift | 6 +- .../Grounding/GroundedResponseView.swift | 6 +- .../ChatExample/Views/MessageView.swift | 6 +- .../project.pbxproj | 64 +++++++++++++++++++ .../FirebaseAIExample/ContentView.swift | 6 +- .../Screens/FunctionCallingScreen.swift | 6 +- .../ViewModels/FunctionCallingViewModel.swift | 6 +- .../Screens/PhotoReasoningScreen.swift | 6 +- .../ViewModels/PhotoReasoningViewModel.swift | 6 +- .../Screens/GenerateContentScreen.swift | 6 +- .../ViewModels/GenerateContentViewModel.swift | 6 +- firebaseai/ImagenScreen/ImagenScreen.swift | 6 +- firebaseai/ImagenScreen/ImagenViewModel.swift | 6 +- 17 files changed, 144 insertions(+), 16 deletions(-) diff --git a/firebaseai/ChatExample/Models/ChatMessage.swift b/firebaseai/ChatExample/Models/ChatMessage.swift index 345337937..79f18c5e4 100644 --- a/firebaseai/ChatExample/Models/ChatMessage.swift +++ b/firebaseai/ChatExample/Models/ChatMessage.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import Foundation enum Participant { diff --git a/firebaseai/ChatExample/Screens/ConversationScreen.swift b/firebaseai/ChatExample/Screens/ConversationScreen.swift index 2b3e5cc10..d12341dea 100644 --- a/firebaseai/ChatExample/Screens/ConversationScreen.swift +++ b/firebaseai/ChatExample/Screens/ConversationScreen.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import GenerativeAIUIComponents import SwiftUI diff --git a/firebaseai/ChatExample/ViewModels/ConversationViewModel.swift b/firebaseai/ChatExample/ViewModels/ConversationViewModel.swift index 98a237ec3..1326ac95a 100644 --- a/firebaseai/ChatExample/ViewModels/ConversationViewModel.swift +++ b/firebaseai/ChatExample/ViewModels/ConversationViewModel.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import Foundation import UIKit diff --git a/firebaseai/ChatExample/Views/ErrorDetailsView.swift b/firebaseai/ChatExample/Views/ErrorDetailsView.swift index e333f2896..cd1e3f60e 100644 --- a/firebaseai/ChatExample/Views/ErrorDetailsView.swift +++ b/firebaseai/ChatExample/Views/ErrorDetailsView.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import MarkdownUI import SwiftUI diff --git a/firebaseai/ChatExample/Views/ErrorView.swift b/firebaseai/ChatExample/Views/ErrorView.swift index 55ea40369..bd321426c 100644 --- a/firebaseai/ChatExample/Views/ErrorView.swift +++ b/firebaseai/ChatExample/Views/ErrorView.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import SwiftUI struct ErrorView: View { diff --git a/firebaseai/ChatExample/Views/Grounding/GroundedResponseView.swift b/firebaseai/ChatExample/Views/Grounding/GroundedResponseView.swift index 92479d3ac..ea0501926 100644 --- a/firebaseai/ChatExample/Views/Grounding/GroundedResponseView.swift +++ b/firebaseai/ChatExample/Views/Grounding/GroundedResponseView.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import SwiftUI /// A view that displays a chat message that is grounded in Google Search. diff --git a/firebaseai/ChatExample/Views/MessageView.swift b/firebaseai/ChatExample/Views/MessageView.swift index b11c903e5..f35dd7b35 100644 --- a/firebaseai/ChatExample/Views/MessageView.swift +++ b/firebaseai/ChatExample/Views/MessageView.swift @@ -14,7 +14,11 @@ import MarkdownUI import SwiftUI -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif struct RoundedCorner: Shape { var radius: CGFloat = .infinity diff --git a/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj b/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj index 752471d35..b82868213 100644 --- a/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj +++ b/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj @@ -7,6 +7,20 @@ objects = { /* Begin PBXBuildFile section */ + 860F09212E8C4179002D85D0 /* FirebaseAILogic.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09142E8C4171002D85D0 /* FirebaseAILogic.xcframework */; }; + 860F09222E8C4179002D85D0 /* FirebaseAILogic.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09142E8C4171002D85D0 /* FirebaseAILogic.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 860F09242E8C417A002D85D0 /* FirebaseAppCheckInterop.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09152E8C4171002D85D0 /* FirebaseAppCheckInterop.xcframework */; }; + 860F09252E8C417A002D85D0 /* FirebaseAppCheckInterop.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09152E8C4171002D85D0 /* FirebaseAppCheckInterop.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 860F09262E8C417B002D85D0 /* FirebaseAuthInterop.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09162E8C4171002D85D0 /* FirebaseAuthInterop.xcframework */; }; + 860F09272E8C417B002D85D0 /* FirebaseAuthInterop.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09162E8C4171002D85D0 /* FirebaseAuthInterop.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 860F09282E8C417C002D85D0 /* FirebaseCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09172E8C4171002D85D0 /* FirebaseCore.xcframework */; }; + 860F09292E8C417C002D85D0 /* FirebaseCore.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09172E8C4171002D85D0 /* FirebaseCore.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 860F092A2E8C417E002D85D0 /* FirebaseCoreExtension.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09182E8C4171002D85D0 /* FirebaseCoreExtension.xcframework */; }; + 860F092B2E8C417E002D85D0 /* FirebaseCoreExtension.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09182E8C4171002D85D0 /* FirebaseCoreExtension.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 860F092C2E8C417F002D85D0 /* FirebaseCoreInternal.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09192E8C4171002D85D0 /* FirebaseCoreInternal.xcframework */; }; + 860F092D2E8C417F002D85D0 /* FirebaseCoreInternal.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F09192E8C4171002D85D0 /* FirebaseCoreInternal.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 860F09302E8C422B002D85D0 /* GoogleUtilities.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 860F092E2E8C4210002D85D0 /* GoogleUtilities.xcframework */; }; + 860F09312E8C422B002D85D0 /* GoogleUtilities.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 860F092E2E8C4210002D85D0 /* GoogleUtilities.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 869200B32B879C4F00482873 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 869200B22B879C4F00482873 /* GoogleService-Info.plist */; }; 86BB55EA2E8B2D6D0054B8B5 /* FunctionCallingScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86C1F47E2BC726150026816F /* FunctionCallingScreen.swift */; }; 86BB55EB2E8B2D6D0054B8B5 /* BouncingDots.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88E10F5C2B11135000C08E95 /* BouncingDots.swift */; }; @@ -58,7 +72,34 @@ DEFECAAA2D7B4CCD00EF9621 /* ImagenScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFECAA62D7B4CCD00EF9621 /* ImagenScreen.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXCopyFilesBuildPhase section */ + 860F09232E8C4179002D85D0 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 860F092B2E8C417E002D85D0 /* FirebaseCoreExtension.xcframework in Embed Frameworks */, + 860F09272E8C417B002D85D0 /* FirebaseAuthInterop.xcframework in Embed Frameworks */, + 860F09312E8C422B002D85D0 /* GoogleUtilities.xcframework in Embed Frameworks */, + 860F092D2E8C417F002D85D0 /* FirebaseCoreInternal.xcframework in Embed Frameworks */, + 860F09292E8C417C002D85D0 /* FirebaseCore.xcframework in Embed Frameworks */, + 860F09222E8C4179002D85D0 /* FirebaseAILogic.xcframework in Embed Frameworks */, + 860F09252E8C417A002D85D0 /* FirebaseAppCheckInterop.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 860F09142E8C4171002D85D0 /* FirebaseAILogic.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseAILogic.xcframework; sourceTree = ""; }; + 860F09152E8C4171002D85D0 /* FirebaseAppCheckInterop.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseAppCheckInterop.xcframework; sourceTree = ""; }; + 860F09162E8C4171002D85D0 /* FirebaseAuthInterop.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseAuthInterop.xcframework; sourceTree = ""; }; + 860F09172E8C4171002D85D0 /* FirebaseCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseCore.xcframework; sourceTree = ""; }; + 860F09182E8C4171002D85D0 /* FirebaseCoreExtension.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseCoreExtension.xcframework; sourceTree = ""; }; + 860F09192E8C4171002D85D0 /* FirebaseCoreInternal.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseCoreInternal.xcframework; sourceTree = ""; }; + 860F092E2E8C4210002D85D0 /* GoogleUtilities.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = GoogleUtilities.xcframework; sourceTree = ""; }; 869200B22B879C4F00482873 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 86BB56082E8B2D6D0054B8B5 /* FirebaseAIExampleZip.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseAIExampleZip.app; sourceTree = BUILT_PRODUCTS_DIR; }; 86C1F47E2BC726150026816F /* FunctionCallingScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FunctionCallingScreen.swift; sourceTree = ""; }; @@ -98,6 +139,13 @@ buildActionMask = 2147483647; files = ( 86BB55FF2E8B2D6D0054B8B5 /* MarkdownUI in Frameworks */, + 860F09282E8C417C002D85D0 /* FirebaseCore.xcframework in Frameworks */, + 860F09262E8C417B002D85D0 /* FirebaseAuthInterop.xcframework in Frameworks */, + 860F09212E8C4179002D85D0 /* FirebaseAILogic.xcframework in Frameworks */, + 860F092C2E8C417F002D85D0 /* FirebaseCoreInternal.xcframework in Frameworks */, + 860F09302E8C422B002D85D0 /* GoogleUtilities.xcframework in Frameworks */, + 860F09242E8C417A002D85D0 /* FirebaseAppCheckInterop.xcframework in Frameworks */, + 860F092A2E8C417E002D85D0 /* FirebaseCoreExtension.xcframework in Frameworks */, 86BB56002E8B2D6D0054B8B5 /* GenerativeAIUIComponents in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -115,6 +163,20 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 860F091A2E8C4171002D85D0 /* Firebase */ = { + isa = PBXGroup; + children = ( + 860F09142E8C4171002D85D0 /* FirebaseAILogic.xcframework */, + 860F09152E8C4171002D85D0 /* FirebaseAppCheckInterop.xcframework */, + 860F09162E8C4171002D85D0 /* FirebaseAuthInterop.xcframework */, + 860F09172E8C4171002D85D0 /* FirebaseCore.xcframework */, + 860F09182E8C4171002D85D0 /* FirebaseCoreExtension.xcframework */, + 860F09192E8C4171002D85D0 /* FirebaseCoreInternal.xcframework */, + 860F092E2E8C4210002D85D0 /* GoogleUtilities.xcframework */, + ); + path = Firebase; + sourceTree = ""; + }; 86C1F47F2BC726150026816F /* Screens */ = { isa = PBXGroup; children = ( @@ -192,6 +254,7 @@ 86C1F4822BC726150026816F /* FunctionCallingExample */, 8848C8302B0D04BC007B434F /* Products */, 88209C222B0FBE1700F64795 /* Frameworks */, + 860F091A2E8C4171002D85D0 /* Firebase */, ); sourceTree = ""; }; @@ -346,6 +409,7 @@ 86BB55E92E8B2D6D0054B8B5 /* Sources */, 86BB55FD2E8B2D6D0054B8B5 /* Frameworks */, 86BB56012E8B2D6D0054B8B5 /* Resources */, + 860F09232E8C4179002D85D0 /* Embed Frameworks */, ); buildRules = ( ); diff --git a/firebaseai/FirebaseAIExample/ContentView.swift b/firebaseai/FirebaseAIExample/ContentView.swift index 93247fa5c..1714a0653 100644 --- a/firebaseai/FirebaseAIExample/ContentView.swift +++ b/firebaseai/FirebaseAIExample/ContentView.swift @@ -13,7 +13,11 @@ // limitations under the License. import SwiftUI -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif enum BackendOption: String, CaseIterable, Identifiable { case googleAI = "Gemini Developer API" diff --git a/firebaseai/FunctionCallingExample/Screens/FunctionCallingScreen.swift b/firebaseai/FunctionCallingExample/Screens/FunctionCallingScreen.swift index 474a55ede..8af6b5568 100644 --- a/firebaseai/FunctionCallingExample/Screens/FunctionCallingScreen.swift +++ b/firebaseai/FunctionCallingExample/Screens/FunctionCallingScreen.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import GenerativeAIUIComponents import SwiftUI diff --git a/firebaseai/FunctionCallingExample/ViewModels/FunctionCallingViewModel.swift b/firebaseai/FunctionCallingExample/ViewModels/FunctionCallingViewModel.swift index 8bd7f90ef..a5a4412c9 100644 --- a/firebaseai/FunctionCallingExample/ViewModels/FunctionCallingViewModel.swift +++ b/firebaseai/FunctionCallingExample/ViewModels/FunctionCallingViewModel.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import Foundation import UIKit diff --git a/firebaseai/GenerativeAIMultimodalExample/Screens/PhotoReasoningScreen.swift b/firebaseai/GenerativeAIMultimodalExample/Screens/PhotoReasoningScreen.swift index 48cea4882..469cb7586 100644 --- a/firebaseai/GenerativeAIMultimodalExample/Screens/PhotoReasoningScreen.swift +++ b/firebaseai/GenerativeAIMultimodalExample/Screens/PhotoReasoningScreen.swift @@ -16,7 +16,11 @@ import GenerativeAIUIComponents import MarkdownUI import PhotosUI import SwiftUI -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif struct PhotoReasoningScreen: View { let firebaseService: FirebaseAI diff --git a/firebaseai/GenerativeAIMultimodalExample/ViewModels/PhotoReasoningViewModel.swift b/firebaseai/GenerativeAIMultimodalExample/ViewModels/PhotoReasoningViewModel.swift index 24a2e96e2..11113fb81 100644 --- a/firebaseai/GenerativeAIMultimodalExample/ViewModels/PhotoReasoningViewModel.swift +++ b/firebaseai/GenerativeAIMultimodalExample/ViewModels/PhotoReasoningViewModel.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import Foundation import OSLog import PhotosUI diff --git a/firebaseai/GenerativeAITextExample/Screens/GenerateContentScreen.swift b/firebaseai/GenerativeAITextExample/Screens/GenerateContentScreen.swift index 2d1648d5a..5c5e34a0c 100644 --- a/firebaseai/GenerativeAITextExample/Screens/GenerateContentScreen.swift +++ b/firebaseai/GenerativeAITextExample/Screens/GenerateContentScreen.swift @@ -14,7 +14,11 @@ import MarkdownUI import SwiftUI -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import GenerativeAIUIComponents struct GenerateContentScreen: View { diff --git a/firebaseai/GenerativeAITextExample/ViewModels/GenerateContentViewModel.swift b/firebaseai/GenerativeAITextExample/ViewModels/GenerateContentViewModel.swift index a9272ef5b..fe2344ba0 100644 --- a/firebaseai/GenerativeAITextExample/ViewModels/GenerateContentViewModel.swift +++ b/firebaseai/GenerativeAITextExample/ViewModels/GenerateContentViewModel.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import Foundation import OSLog diff --git a/firebaseai/ImagenScreen/ImagenScreen.swift b/firebaseai/ImagenScreen/ImagenScreen.swift index f8e7a088a..830bd3bc7 100644 --- a/firebaseai/ImagenScreen/ImagenScreen.swift +++ b/firebaseai/ImagenScreen/ImagenScreen.swift @@ -14,7 +14,11 @@ import SwiftUI import GenerativeAIUIComponents -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif struct ImagenScreen: View { let firebaseService: FirebaseAI diff --git a/firebaseai/ImagenScreen/ImagenViewModel.swift b/firebaseai/ImagenScreen/ImagenViewModel.swift index d4fc2b43f..826f88660 100644 --- a/firebaseai/ImagenScreen/ImagenViewModel.swift +++ b/firebaseai/ImagenScreen/ImagenViewModel.swift @@ -12,7 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import FirebaseAI +#if canImport(FirebaseAILogic) + import FirebaseAILogic +#else + import FirebaseAI +#endif import Foundation import OSLog import SwiftUI