对不同的构buildscheme使用不同的GoogleService-Info.plist

我正在使用一个构buildschemeprod和一个分段(与2个不同的包标识符),我试图为每个scheme使用一个单独的GoogleService-Info.plist。 有什么办法可以手动selectplist文件来初始化GCM(和goolelogin)? 还是有可能避免使用plist并手动进行设置?

谢谢!

@inidona的答案为我工作。 我把它转换成Swift后

对于Swift 2.3:

let filePath = NSBundle.mainBundle().pathForResource("GoogleService-Info", ofType: "plist") let options = FIROptions(contentsOfFile: filePath) FIRApp.configureWithOptions(options) 

对于Swift 3.0:

 let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")! let options = FIROptions(contentsOfFile: filePath) FIRApp.configure(with: options) 

我想你可以用这种方式来dynamicconfiguration你的GoogleService-Info.plist,并为不同的包标识符使用不同的名称。

ciao安德烈亚斯

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; [FIRApp configureWithOptions:options]; 

选项1:不同的文件名

 #ifdef DEBUG NSLog(@"[FIREBASE] Development mode."); filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Debug" ofType:@"plist"]; #else NSLog(@"[FIREBASE] Production mode."); filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Production" ofType:@"plist"]; #endif FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; [FIRApp configureWithOptions:options]; 

选项2:不同的文件夹

 #ifdef DEBUG NSLog(@"[FIREBASE] Development mode."); filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist" inDirectory:@"Debug"]; #else NSLog(@"[FIREBASE] Production mode."); filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist" inDirectory:@"Release"]; #endif FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; [FIRApp configureWithOptions:options]; 

不要忘记将文件/文件夹添加到项目目标>构build阶段>复制包资源:

在这里输入图像说明

我认为不使用GoogleService-Info.plist.就无法实现GoogleService-Info.plist. 因为在开始将您的iOS应用程序与Google Sign-In组件集成之前,您必须下载依赖项并configuration您的Xcode项目。 而这个过程显示GoogleService-Info.plist有一个很大的因素。

所以这个SO问题的解决scheme和想法可以帮助你解决你的问题。 刚将GoogleService-Info plist的主要副本移出应用程序到2个单独的文件夹中,然后使用每个目标上的“构build阶段”“复制文件”将目标特定的plist导入到资源文件夹中。

也检查这个SO问题 ,它可能会给你更多的信息/想法你的问题。

这里是如何在Xamarin C#中完成的:

 string plistPath = NSBundle.MainBundle.PathForResource ("GoogleService-Info", "plist"); Options options = new Options (plistPath); App.Configure (options); 

请记住包含Firebase名称空间:

 using Firebase.Analytics; 

这是我的解决scheme!

 NSString *filePath; if([self isProduction]){ filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; }else{ filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Sandbox" ofType:@"plist"]; } FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; [FIRApp configureWithOptions:options]; 

就是这样!