public void AddDynamicFrameworkToProject(string targetGuid, string frameworkPathInProject) { var fileGuid = FindFileGuidByProjectPath(frameworkPathInProject); if (fileGuid == null) { Debug.LogError("Framework not found: " + frameworkPathInProject); return; } // add file reference as embed framework var embedFrameworkFileData = FindEmbeddedFramework(fileGuid); if (embedFrameworkFileData == null) { embedFrameworkFileData = PBXBuildFileData.CreateFromFramework(fileGuid); BuildFilesAdd(targetGuid, embedFrameworkFileData); } // add "Embed Frameworks" section var embedFrameworksSection = FindEmbeddedFrameworkSection(); if (embedFrameworksSection == null) { embedFrameworksSection = PBXCopyFilesBuildPhaseData.Create("Embed Frameworks", "10"); copyFiles.AddEntry(embedFrameworksSection); } var frameworkAlreadyAdded = false; foreach (var fileEntry in embedFrameworksSection.files) { if (fileEntry == embedFrameworkFileData.guid) { frameworkAlreadyAdded = true; } } if (!frameworkAlreadyAdded) { embedFrameworksSection.files.AddGUID(embedFrameworkFileData.guid); } // add "Embed Frameworks" section to "Build phases" var targetPhases = nativeTargets[targetGuid].phases; if (!targetPhases.Contains(embedFrameworksSection.guid)) { targetPhases.AddGUID(embedFrameworksSection.guid); } foreach (var buildConfigEntry in buildConfigs.GetEntries()) { XCBuildConfigurationData configurationData = buildConfigEntry.Value; configurationData.AddProperty("LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks"); } }
// Returns the guid of the new target internal string AddAppExtension(string mainTarget, string name, string infoPlistPath) { string ext = ".appex"; var newTarget = CreateNewTarget(name, ext, "com.apple.product-type.app-extension"); SetDefaultAppExtensionReleaseBuildFlags(buildConfigs[BuildConfigByName(newTarget.guid, "Release")], infoPlistPath); SetDefaultAppExtensionDebugBuildFlags(buildConfigs[BuildConfigByName(newTarget.guid, "Debug")], infoPlistPath); var sourcesBuildPhase = PBXSourcesBuildPhaseData.Create(); sources.AddEntry(sourcesBuildPhase); newTarget.phases.AddGUID(sourcesBuildPhase.guid); var resourcesBuildPhase = PBXResourcesBuildPhaseData.Create(); resources.AddEntry(resourcesBuildPhase); newTarget.phases.AddGUID(resourcesBuildPhase.guid); var frameworksBuildPhase = PBXFrameworksBuildPhaseData.Create(); frameworks.AddEntry(frameworksBuildPhase); newTarget.phases.AddGUID(frameworksBuildPhase.guid); var copyFilesBuildPhase = PBXCopyFilesBuildPhaseData.Create("Embed App Extensions", "13"); copyFiles.AddEntry(copyFilesBuildPhase); nativeTargets[mainTarget].phases.AddGUID(copyFilesBuildPhase.guid); var containerProxy = PBXContainerItemProxyData.Create(project.project.guid, "1", newTarget.guid, name); containerItems.AddEntry(containerProxy); var targetDependency = PBXTargetDependencyData.Create(newTarget.guid, containerProxy.guid); targetDependencies.AddEntry(targetDependency); nativeTargets[mainTarget].dependencies.AddGUID(targetDependency.guid); var buildAppCopy = PBXBuildFileData.CreateFromFile(FindFileGuidByProjectPath("Products/" + name + ext), false, ""); BuildFilesAdd(mainTarget, buildAppCopy); copyFilesBuildPhase.files.AddGUID(buildAppCopy.guid); AddFile(infoPlistPath, name + "/Supporting Files/Info.plist", PBXSourceTree.Source); return(newTarget.guid); }
public void AddDynamicFrameworkToProject(string targetGuid, string frameworkPathInProject) { var fileGuid = FindFileGuidByProjectPath(frameworkPathInProject); if (fileGuid == null) { Debug.LogError("Framework not found: " + frameworkPathInProject); return; } // add file reference as embed framework var embedFrameworkFileData = FindEmbeddedFramework(fileGuid); if (embedFrameworkFileData == null) { embedFrameworkFileData = PBXBuildFileData.CreateFromFramework(fileGuid); BuildFilesAdd(targetGuid, embedFrameworkFileData); } // add "Embed Frameworks" section var embedFrameworksSection = FindEmbeddedFrameworkSection(targetGuid); if (embedFrameworksSection == null) { embedFrameworksSection = PBXCopyFilesBuildPhaseData.Create("Embed Frameworks", "10"); copyFiles.AddEntry(embedFrameworksSection); } var frameworkAlreadyAdded = false; foreach (var fileEntry in embedFrameworksSection.files) { if (fileEntry == embedFrameworkFileData.guid) { frameworkAlreadyAdded = true; } } if (!frameworkAlreadyAdded) { embedFrameworksSection.files.AddGUID(embedFrameworkFileData.guid); } // add "Embed Frameworks" section to "Build phases" var targetPhases = nativeTargets[targetGuid].phases; if (!targetPhases.Contains(embedFrameworksSection.guid)) { targetPhases.AddGUID(embedFrameworksSection.guid); } CheckRuntimeSearchPath(); }