Вот адаптация Swift 3 ответа Кабреры :
let bundle = Bundle.main
let path = bundle.path(forResource: "GoogleService-Info", ofType: "plist")!
let options = FIROptions.init(contentsOfFile: path)
FIRApp.configure(withName: "Secondary", options: options!)
let secondary_app = FIRApp.init(named: "Secondary")
let second_auth = FIRAuth(app : secondary_app!)
second_auth?.createUser(withEmail: self.username.text!, password: self.password.text!)
{
(user,error) in
print(user!.email!)
print(FIRAuth.auth()?.currentUser?.email ?? "default")
}
Можно добавить пространства имен в коде и всем этом, но Вы можете эффективно подстановочный знак пространство имен. Попробуйте следующую идиому XPath.
//*[local-name()='PropertyGroup']
//*[local-name()='MSBuildCommunityTasksPath']
имя () обычно работает также, как в:
//*[name()='PropertyGroup']
//*[name()='MSBuildCommunityTasksPath']
Править: Пространства имен являются большими, и я не предполагаю, что они не важны, но wildcarding их пригождается, чиня опытный код, одноразовые настольные инструменты, экспериментируя с XSLT, и т.д. Сбалансируйте свою потребность в удобстве против приемлемого риска для задачи под рукой. К вашему сведению, если потребуется, можно также разделить или повторно присвоить пространства имен.
Ваша проблема с пространством имен (xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"). Вы получаете нулевые узлы, потому что Вы не квалифицируете его с пространством имен. При удалении атрибута xmlns "//, PropertyGroup" XPath будет работать. Как Вы запрашиваете с пространством имен, обычно включает искажение значения по умолчанию xmlns к идентификатору (так как каждый не указан на атрибуте), и выбирающий как "//myXMLNStoken:PropertyGroup".
Теги в документе заканчиваются в пространстве имен "по умолчанию", созданном атрибутом xmlns без префикса. К сожалению, один только XPath не может элементы запроса в пространстве имен по умолчанию. Я на самом деле не уверен в семантических деталях, но необходимо явно присоединить префикс к тому пространству имен с помощью любого инструмента, размещает XPath.
Может быть более короткий способ сделать это в.NET, но единственный способ, которым я видел, через NameSpaceManager. После явного добавления пространства имен можно запросить использование менеджера по пространству имен, как будто все теги в namespaced элементе имеют тот префикс (я выбрал 'msbuild'):
using System;
using System.Xml;
public class XPathNamespace {
public static void Main(string[] args) {
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
<!-- $Id: FxCop.proj 114 2006-03-14 06:32:46Z pwelter34 $ -->
<PropertyGroup>
<MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\bin\Debug</MSBuildCommunityTasksPath>
</PropertyGroup>
<Import Project=""$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\MSBuild.Community.Tasks.Targets""/>
<Target Name=""DoFxCop"">
<FxCop
TargetAssemblies=""$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll""
RuleLibraries=""@(FxCopRuleAssemblies)""
AnalysisReportFileName=""Test.html""
DependencyDirectories=""$(MSBuildCommunityTasksPath)""
FailOnError=""True""
ApplyOutXsl=""True""
OutputXslFileName=""C:\Program Files\Microsoft FxCop 1.32\Xml\FxCopReport.xsl""
/>
</Target>
</Project>");
XmlNamespaceManager namespaceManager = new
XmlNamespaceManager(xmlDocument.NameTable);
namespaceManager.AddNamespace("msbuild", "http://schemas.microsoft.com/developer/msbuild/2003");
foreach (XmlNode n in xmlDocument.SelectNodes("//msbuild:MSBuildCommunityTasksPath", namespaceManager)) {
Console.WriteLine(n.InnerText);
}
}
}