Example #1
0
        public override void Convert()
        {
            var inputProject = new XmlDocument();

            var xml = File.ReadAllText(TemplatePath);

            xml = xml.Replace("#FILES#", GetFileList());
            inputProject.LoadXmlWithoutNetworkAccess(xml);

            switch (Flavor)
            {
            case MacFlavors.Modern:
                inputProject.SetTargetFrameworkIdentifier("Xamarin.Mac");
                inputProject.SetTargetFrameworkVersion("v2.0");
                inputProject.RemoveNode("UseXamMacFullFramework");
                inputProject.AddAdditionalDefines("MOBILE;XAMMAC");
                inputProject.AddReference("Mono.Security");
                break;

            case MacFlavors.Full:
                inputProject.AddAdditionalDefines("XAMMAC_4_5");
                break;

            default:
                throw new NotImplementedException(Flavor.ToString());
            }
            inputProject.SetOutputPath("bin\\$(Platform)\\$(Configuration)" + FlavorSuffix);
            inputProject.SetIntermediateOutputPath("obj\\$(Platform)\\$(Configuration)" + FlavorSuffix);
            inputProject.SetAssemblyName(inputProject.GetAssemblyName() + FlavorSuffix);

            Harness.Save(inputProject, ProjectPath);
        }
Example #2
0
        public static void AddProjectDefines(
            XmlDocument project, MonoNativeLinkMode link,
            string platform, string config)
        {
            switch (link)
            {
            case MonoNativeLinkMode.Static:
                project.AddAdditionalDefines("MONO_NATIVE_STATIC", platform, config);
                project.RemoveDefines("MONO_NATIVE_DYNAMIC; MONO_NATIVE_SYMLINK", platform, config);
                break;

            case MonoNativeLinkMode.Dynamic:
                project.AddAdditionalDefines("MONO_NATIVE_DYNAMIC", platform, config);
                project.RemoveDefines("MONO_NATIVE_STATIC; MONO_NATIVE_SYMLINK", platform, config);
                break;

            case MonoNativeLinkMode.Symlink:
                project.AddAdditionalDefines("MONO_NATIVE_SYMLINK", platform, config);
                project.RemoveDefines("MONO_NATIVE_MONO_NATIVE_STATIC; MONO_NATIVE_DYNAMIC", platform, config);
                break;

            default:
                throw new Exception($"Unknown MonoNativeLinkMode: {link}");
            }
        }
Example #3
0
        public static void AddProjectDefines(
            XmlDocument project, MonoNativeFlavor flavor,
            string platform = null, string config = null)
        {
            switch (flavor)
            {
            case MonoNativeFlavor.Compat:
                if (platform != null)
                {
                    project.AddAdditionalDefines("MONO_NATIVE_COMPAT", platform, config);
                }
                else
                {
                    project.AddAdditionalDefines("MONO_NATIVE_COMPAT");
                }
                break;

            case MonoNativeFlavor.Unified:
                if (platform != null)
                {
                    project.AddAdditionalDefines("MONO_NATIVE_UNIFIED", platform, config);
                }
                else
                {
                    project.AddAdditionalDefines("MONO_NATIVE_UNIFIED");
                }
                break;

            default:
                throw new Exception($"Unknown MonoNativeFlavor: {flavor}");
            }
        }
Example #4
0
        void CreateWatchOSContainerProject()
        {
            var csproj = new XmlDocument();

            csproj.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSContainerTemplate, "Container.csproj"));

            csproj.FindAndReplace("%CONTAINER_PATH%", Path.GetFullPath(Harness.WatchOSContainerTemplate).Replace('/', '\\') + "\\");
            csproj.FindAndReplace("%WATCHAPP_CSPROJ%", Path.GetFileName(WatchOSAppProjectPath));
            csproj.SetProjectReferenceValue(Path.GetFileName(WatchOSAppProjectPath), "Name", Path.GetFileNameWithoutExtension(WatchOSAppProjectPath));
            WatchOSGuid = "{" + Harness.NewStableGuid().ToString().ToUpper() + "}";
            csproj.SetProjectGuid(WatchOSGuid);
            csproj.FixInfoPListInclude(Suffix);
            if (MonoNativeInfo != null)
            {
                csproj.AddAdditionalDefines("MONO_NATIVE_WATCH");
                MonoNativeHelper.AddProjectDefines(csproj, MonoNativeInfo.Flavor);
                MonoNativeHelper.RemoveSymlinkMode(csproj);
            }
            Harness.Save(csproj, WatchOSProjectPath);

            XmlDocument info_plist        = new XmlDocument();
            var         target_info_plist = Path.Combine(TargetDirectory, $"Info{Suffix}.plist");

            info_plist.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSContainerTemplate, "Info.plist"));
            info_plist.SetCFBundleIdentifier(BundleIdentifier);
            info_plist.SetCFBundleName(Name);
            info_plist.SetMinimumOSVersion("9.0");
            Harness.Save(info_plist, target_info_plist);
        }
Example #5
0
        void CreateWatchOSAppProject()
        {
            var csproj = new XmlDocument();
            var suffix = Suffix + "-app";

            csproj.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSAppTemplate, "App.csproj"));
            csproj.FindAndReplace("%WATCHAPP_PATH%", Path.GetFullPath(Harness.WatchOSAppTemplate).Replace('/', '\\') + "\\");
            csproj.FindAndReplace("%WATCHEXTENSION_CSPROJ%", Path.GetFileName(WatchOSExtensionProjectPath));
            csproj.SetProjectReferenceValue(Path.GetFileName(WatchOSExtensionProjectPath), "Project", WatchOSExtensionGuid);
            csproj.SetProjectReferenceValue(Path.GetFileName(WatchOSExtensionProjectPath), "Name", Path.GetFileNameWithoutExtension(WatchOSExtensionProjectPath));
            WatchOSAppGuid = "{" + Harness.NewStableGuid().ToString().ToUpper() + "}";
            csproj.SetProjectGuid(WatchOSAppGuid);
            csproj.FixInfoPListInclude(suffix);
            if (MonoNativeInfo != null)
            {
                csproj.AddAdditionalDefines("MONO_NATIVE_WATCH");
                MonoNativeHelper.AddProjectDefines(csproj, MonoNativeInfo.Flavor);
                MonoNativeHelper.RemoveSymlinkMode(csproj);
            }
            Harness.Save(csproj, WatchOSAppProjectPath);

            XmlDocument info_plist        = new XmlDocument();
            var         target_info_plist = Path.Combine(TargetDirectory, $"Info{Suffix}-app.plist");

            info_plist.LoadWithoutNetworkAccess(Path.Combine(Harness.WatchOSAppTemplate, "Info.plist"));
            info_plist.SetCFBundleIdentifier(BundleIdentifier + ".watchkitapp");
            info_plist.SetPListStringValue("WKCompanionAppBundleIdentifier", BundleIdentifier);
            info_plist.SetPListStringValue("CFBundleName", Name);
            info_plist.SetMinimumOSVersion(GetMinimumOSVersion(info_plist.GetMinimumOSVersion()));
            Harness.Save(info_plist, target_info_plist);
        }
Example #6
0
        void CreateTodayContainerProject()
        {
            var csproj = new XmlDocument();
            var suffix = Suffix;

            csproj.LoadWithoutNetworkAccess(Path.Combine(Harness.TodayContainerTemplate, "TodayContainer.csproj"));
            csproj.SetOutputPath("bin\\$(Platform)\\$(Configuration)" + suffix, false);
            csproj.SetIntermediateOutputPath("obj\\$(Platform)\\$(Configuration)" + suffix);
            csproj.SetProjectReferenceValue("TodayExtension.csproj", "Name", Path.GetFileNameWithoutExtension(TodayExtensionProjectPath));
            csproj.SetProjectReferenceValue("TodayExtension.csproj", "Project", TodayExtensionGuid);
            csproj.SetProjectReferenceInclude("TodayExtension.csproj", TodayExtensionProjectPath.Replace('/', '\\'));
            csproj.FixCompileInclude("Main.cs", Path.Combine(Harness.TodayContainerTemplate, "Main.cs").Replace('/', '\\'));
            csproj.FixInfoPListInclude(suffix);
            TodayContainerGuid = "{" + Harness.NewStableGuid().ToString().ToUpper() + "}";
            ProjectGuid        = TodayContainerGuid;
            csproj.SetProjectGuid(TodayContainerGuid);
            if (MonoNativeInfo != null)
            {
                MonoNativeInfo.AddProjectDefines(csproj);
                csproj.AddAdditionalDefines("MONO_NATIVE_TODAY");
            }
            Harness.Save(csproj, TodayContainerProjectPath);

            XmlDocument info_plist        = new XmlDocument();
            var         target_info_plist = Path.Combine(TargetDirectory, $"Info{suffix}.plist");

            info_plist.LoadWithoutNetworkAccess(Path.Combine(Harness.TodayContainerTemplate, "Info.plist"));
            info_plist.SetCFBundleIdentifier(BundleIdentifier);
            info_plist.SetCFBundleName(Name);
            info_plist.SetMinimumOSVersion(GetMinimumOSVersion("8.0"));
            Harness.Save(info_plist, target_info_plist);
        }
Example #7
0
        protected override void Convert(XmlDocument inputProject)
        {
            switch (MacFlavor)
            {
            case MacFlavors.Modern:
                inputProject.SetTargetFrameworkIdentifier("Xamarin.Mac");
                inputProject.SetTargetFrameworkVersion("v2.0");
                inputProject.RemoveNode("UseXamMacFullFramework");
                inputProject.AddAdditionalDefines("MOBILE;XAMMAC");
                inputProject.AddReference("Mono.Security");
                break;

            case MacFlavors.Full:
                inputProject.AddAdditionalDefines("XAMMAC_4_5");
                break;
            }

            base.Convert(inputProject);
        }
Example #8
0
        protected virtual void ProcessProject()
        {
            if (SupportsBitcode)
            {
                inputProject.CloneConfiguration("iPhone", "Release", "Release-bitcode");
                inputProject.AddExtraMtouchArgs("--bitcode:full", "iPhone", "Release-bitcode");
                inputProject.SetMtouchUseLlvm(true, "iPhone", "Release-bitcode");
            }

            if (!IsMultiArchitecture && IsExe)
            {
                inputProject.DeleteConfiguration("iPhone", "Debug32");
                inputProject.DeleteConfiguration("iPhone", "Debug64");
            }

            inputProject.SetOutputPath("bin\\$(Platform)\\$(Configuration)" + Suffix);
            inputProject.SetIntermediateOutputPath("obj\\$(Platform)\\$(Configuration)" + Suffix);

            if (ShouldSetTargetFrameworkIdentifier)
            {
                inputProject.SetTargetFrameworkIdentifier(TargetFrameworkIdentifier);
            }

            inputProject.SetAssemblyReference(DefaultAssemblyReference, TargetFrameworkIdentifier);

            foreach (var r in ReferenceToRemove)
            {
                inputProject.RemoveReferences(r);
            }

            var newProperties = NewPropertiesToAdd;

            foreach (var k in newProperties.Keys)
            {
                inputProject.SetTopLevelPropertyGroupValue(k, newProperties[k]);
            }

            inputProject.FixProjectReferences(Suffix, FixProjectReference);
            inputProject.SetAssemblyReference("OpenTK", "OpenTK-1.0");
            inputProject.SetProjectTypeGuids(IsBindingProject ? BindingsProjectTypeGuids : ProjectTypeGuids);
            inputProject.SetImport("$(MSBuildExtensionsPath)\\Xamarin\\" + (IsBindingProject ? BindingsImports : Imports));
            inputProject.FixTestLibrariesReferences(Platform);
            if (!string.IsNullOrEmpty(AdditionalDefines))
            {
                inputProject.AddAdditionalDefines(AdditionalDefines);
            }
        }
        public override void Convert()
        {
            var inputProject = new XmlDocument();

            var xml = File.ReadAllText(TemplatePath);

            xml = xml.Replace("#FILES#", GetFileList());
            inputProject.LoadXmlWithoutNetworkAccess(xml);

            // The csproj template is Xamarin.Mac/Full, so make it Modern instead
            inputProject.SetTargetFrameworkIdentifier("Xamarin.Mac");
            inputProject.SetTargetFrameworkVersion("v2.0");
            inputProject.RemoveNode("UseXamMacFullFramework");
            inputProject.AddAdditionalDefines("MOBILE;XAMMAC");
            inputProject.AddReference("Mono.Security");

            Harness.Save(inputProject, ProjectPath);
        }
Example #10
0
        public void Convert()
        {
            var inputProject = new XmlDocument();

            var xml = File.ReadAllText(TemplatePath);

            inputProject.LoadXmlWithoutNetworkAccess(xml);
            inputProject.SetAssemblyName(inputProject.GetAssemblyName() + FlavorSuffix);
            inputProject.AddAdditionalDefines(Flavor == MonoNativeFlavor.Compat ? "MONO_NATIVE_COMPAT" : "MONO_NATIVE_UNIFIED");
            inputProject.ResolveAllPaths(TemplatePath);

            var template_info_plist = inputProject.GetInfoPListInclude().Replace('\\', '/');
            var target_info_plist   = Path.Combine(Path.GetDirectoryName(ProjectPath), "Info" + FlavorSuffix + ".plist");

            SetInfoPListMinimumOSVersion(template_info_plist, target_info_plist);
            inputProject.FixInfoPListInclude(FlavorSuffix, newName: target_info_plist);

            inputProject.Save(ProjectPath, log);
        }