private void SetDefaultAppExtensionReleaseBuildFlags(XCBuildConfiguration config, string infoPlistPath) { config.AddProperty("ALWAYS_SEARCH_USER_PATHS", "NO"); config.AddProperty("CLANG_CXX_LANGUAGE_STANDARD", "gnu++0x"); config.AddProperty("CLANG_CXX_LIBRARY", "libc++"); config.AddProperty("CLANG_ENABLE_MODULES", "YES"); config.AddProperty("CLANG_ENABLE_OBJC_ARC", "YES"); config.AddProperty("CLANG_WARN_BOOL_CONVERSION", "YES"); config.AddProperty("CLANG_WARN_CONSTANT_CONVERSION", "YES"); config.AddProperty("CLANG_WARN_DIRECT_OBJC_ISA_USAGE", "YES_ERROR"); config.AddProperty("CLANG_WARN_EMPTY_BODY", "YES"); config.AddProperty("CLANG_WARN_ENUM_CONVERSION", "YES"); config.AddProperty("CLANG_WARN_INT_CONVERSION", "YES"); config.AddProperty("CLANG_WARN_OBJC_ROOT_CLASS", "YES_ERROR"); config.AddProperty("CLANG_WARN_UNREACHABLE_CODE", "YES"); config.AddProperty("CLANG_WARN__DUPLICATE_METHOD_MATCH", "YES"); config.AddProperty("COPY_PHASE_STRIP", "YES"); config.AddProperty("ENABLE_NS_ASSERTIONS", "NO"); config.AddProperty("ENABLE_STRICT_OBJC_MSGSEND", "YES"); config.AddProperty("GCC_C_LANGUAGE_STANDARD", "gnu99"); config.AddProperty("GCC_WARN_64_TO_32_BIT_CONVERSION", "YES"); config.AddProperty("GCC_WARN_ABOUT_RETURN_TYPE", "YES_ERROR"); config.AddProperty("GCC_WARN_UNDECLARED_SELECTOR", "YES"); config.AddProperty("GCC_WARN_UNINITIALIZED_AUTOS", "YES_AGGRESSIVE"); config.AddProperty("GCC_WARN_UNUSED_FUNCTION", "YES"); config.AddProperty("INFOPLIST_FILE", infoPlistPath); config.AddProperty("IPHONEOS_DEPLOYMENT_TARGET", "8.0"); config.AddProperty("LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"); config.AddProperty("MTL_ENABLE_DEBUG_INFO", "NO"); config.AddProperty("PRODUCT_NAME", "$(TARGET_NAME)"); config.AddProperty("SKIP_INSTALL", "YES"); config.AddProperty("VALIDATE_PRODUCT", "YES"); }
// name should be either release or debug public static XCBuildConfiguration Create(string name) { var res = new XCBuildConfiguration(); res.guid = PBXGUID.Generate(); res.m_Properties["isa"] = "XCBuildConfiguration"; res.m_Properties["name"] = name; return(res); }
// Returns the guid of the new target internal string AddAppExtension(string mainTarget, string name, string infoPlistPath) { string ext = ".appex"; string fullName = name + ext; var productFileRef = PBXFileReference.CreateFromFile("Products/" + fullName, "Products/" + fullName, PBXSourceTree.Group); var releaseBuildConfig = XCBuildConfiguration.Create("Release"); buildConfigs.AddEntry(releaseBuildConfig); SetDefaultAppExtensionReleaseBuildFlags(releaseBuildConfig, infoPlistPath); var debugBuildConfig = XCBuildConfiguration.Create("Debug"); buildConfigs.AddEntry(debugBuildConfig); SetDefaultAppExtensionDebugBuildFlags(debugBuildConfig, infoPlistPath); var buildConfigList = XCConfigurationList.Create(); configs.AddEntry(buildConfigList); buildConfigList.buildConfig.Add(releaseBuildConfig.guid); buildConfigList.buildConfig.Add(debugBuildConfig.guid); var newTarget = PBXNativeTarget.Create(name, productFileRef.guid, "com.apple.product-type.app-extension", buildConfigList.guid); nativeTargets.AddEntry(newTarget); project.project.targets.Add(newTarget.guid); var sourcesBuildPhase = PBXSourcesBuildPhase.Create(); sources.AddEntry(sourcesBuildPhase); newTarget.phase.Add(sourcesBuildPhase.guid); var resourcesBuildPhase = PBXResourcesBuildPhase.Create(); resources.AddEntry(resourcesBuildPhase); newTarget.phase.Add(resourcesBuildPhase.guid); var frameworksBuildPhase = PBXFrameworksBuildPhase.Create(); frameworks.AddEntry(frameworksBuildPhase); newTarget.phase.Add(frameworksBuildPhase.guid); var copyFilesBuildPhase = PBXCopyFilesBuildPhase.Create("Embed App Extensions", "13"); copyFiles.AddEntry(copyFilesBuildPhase); nativeTargets[mainTarget].phase.Add(copyFilesBuildPhase.guid); var containerProxy = PBXContainerItemProxy.Create(project.project.guid, "1", newTarget.guid, name); containerItems.AddEntry(containerProxy); var targetDependency = PBXTargetDependency.Create(newTarget.guid, containerProxy.guid); targetDependencies.AddEntry(targetDependency); nativeTargets[mainTarget].dependencies.Add(targetDependency.guid); AddFile(fullName, "Products/" + fullName, PBXSourceTree.Build); var buildAppCopy = PBXBuildFile.CreateFromFile(FindFileGuidByProjectPath("Products/" + fullName), false, ""); BuildFilesAdd(mainTarget, buildAppCopy); copyFilesBuildPhase.file.Add(buildAppCopy.guid); AddFile(infoPlistPath, name + "/Supporting Files/Info.plist", PBXSourceTree.Group); return(newTarget.guid); }