From eb528c3d6542ab02f838dc5946c6c412c3d4a68e Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 28 Sep 2018 17:04:23 +0300 Subject: [PATCH] MPP mobile wizard: generate also Xcode (r) project for iOS #KT-27178 Fixed --- ...nGradleMobileMultiplatformModuleBuilder.kt | 30 +- .../xcode/XcodeProjectConfigurator.kt | 859 ++++++++++++++++++ 2 files changed, 881 insertions(+), 8 deletions(-) create mode 100644 idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/xcode/XcodeProjectConfigurator.kt diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleMobileMultiplatformModuleBuilder.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleMobileMultiplatformModuleBuilder.kt index 4381c4e3d03..3c8eaa37afd 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleMobileMultiplatformModuleBuilder.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleMobileMultiplatformModuleBuilder.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.module.Module import com.intellij.openapi.vfs.VirtualFile +import org.jetbrains.kotlin.idea.configuration.xcode.XcodeProjectConfigurator import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder import java.io.BufferedWriter @@ -84,6 +85,10 @@ class KotlinGradleMobileMultiplatformModuleBuilder : fun hello(): String = "Hello from ${"$"}{Platform.name}" + class Proxy { + fun proxyHello() = hello() + } + fun main(args: Array) { println(hello()) } @@ -143,6 +148,11 @@ class KotlinGradleMobileMultiplatformModuleBuilder : fun testMe() { assertTrue(Sample().checkMe() > 0) } + + @Test + fun testProxy() { + assertTrue(Proxy().proxyHello().isNotEmpty()) + } } """.trimIndent() ) @@ -262,6 +272,8 @@ sdk.dir=PleaseSpecifyAndroidSdkPathHere androidLocalProperties, androidManifest, androidStrings, androidStyles, androidActivityMain ).forEach(BufferedWriter::close) } + + XcodeProjectConfigurator().createSkeleton(rootDir) } @@ -296,10 +308,12 @@ sdk.dir=PleaseSpecifyAndroidSdkPathHere kotlin { targets { - // For ARM, preset should be changed to presets.android_arm32 or presets.android_arm64 fromPreset(presets.android, '$jvmTargetName') - // For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64 - fromPreset(presets.iosX64, '$nativeTargetName') + // This preset is for iPhone emulator + // Switch here to presets.iosArm64 (or iosArm32) to build library for iPhone device + fromPreset(presets.iosX64, '$nativeTargetName') { + compilations.main.outputKinds('FRAMEWORK') + } } sourceSets { $commonSourceName { @@ -331,11 +345,11 @@ sdk.dir=PleaseSpecifyAndroidSdkPathHere } } - // Please set configuration.build.dir in gradle.properties before running this task. - // In this directory, you will get a native framework capable to be included into Xсode (с) project. - // Alternatively, you can directly run this task from Xсode (с). - // Example of Xcode (c) project can be found here: - // https://github.com/JetBrains/kotlin-mpp-example/tree/master/iosApp + // This task attaches native framework built from ios module to Xcode project + // (see iosApp directory). Don't run this task directly, + // Xcode runs this task itself during its build process. + // Before opening the project from iosApp directory in Xcode, + // make sure all Gradle infrastructure exists (gradle.wrapper, gradlew). task copyFramework { def buildType = project.findProperty("kotlin.build.type") ?: "DEBUG" def target = project.findProperty("kotlin.target") ?: "ios" diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/xcode/XcodeProjectConfigurator.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/xcode/XcodeProjectConfigurator.kt new file mode 100644 index 00000000000..e8f95e46ebc --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/xcode/XcodeProjectConfigurator.kt @@ -0,0 +1,859 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.configuration.xcode + +import com.intellij.openapi.vfs.VirtualFile +import java.io.BufferedWriter + +class XcodeProjectConfigurator { + + private fun VirtualFile.bufferedWriter() = getOutputStream(this).bufferedWriter() + + fun createSkeleton(rootDir: VirtualFile) { + val iosDir = rootDir.createChildDirectory(this, "iosApp") + val sourceDir = iosDir.createChildDirectory(this, "iosApp") + val storyboardDir = sourceDir.createChildDirectory(this, "Base.lproj") + val testDir = iosDir.createChildDirectory(this, "iosAppTests") + val projectDir = iosDir.createChildDirectory(this, "iosApp.xcodeproj") + + val tests = testDir.createChildData(this, "iosAppTests.swift").bufferedWriter() + val testInfo = testDir.createChildData(this, "Info.plist").bufferedWriter() + val appDelegate = sourceDir.createChildData(this, "AppDelegate.swift").bufferedWriter() + val viewController = sourceDir.createChildData(this, "ViewController.swift").bufferedWriter() + val sourceInfo = sourceDir.createChildData(this, "Info.plist").bufferedWriter() + val launchScreen = storyboardDir.createChildData(this, "LaunchScreen.storyboard").bufferedWriter() + val mainScreen = storyboardDir.createChildData(this, "Main.storyboard").bufferedWriter() + val project = projectDir.createChildData(this, "project.pbxproj").bufferedWriter() + + try { + tests.write( + """ +import XCTest +import app + +class iosAppTests: XCTestCase { + func testExample() { + assert(Sample().checkMe() == 7) + } +} + """.trimIndent() + ) + appDelegate.write( + """ +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + return true + } + + func applicationWillResignActive(_ application: UIApplication) {} + + func applicationDidEnterBackground(_ application: UIApplication) {} + + func applicationWillEnterForeground(_ application: UIApplication) {} + + func applicationDidBecomeActive(_ application: UIApplication) {} + + func applicationWillTerminate(_ application: UIApplication) {} +} + """.trimIndent() + ) + viewController.write( + """ +import UIKit +import app + +class ViewController: UIViewController { + override func viewDidLoad() { + super.viewDidLoad() + label.text = Proxy().proxyHello() + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + } + @IBOutlet weak var label: UILabel! +} + """.trimIndent() + ) + testInfo.write( + """ + + + + + CFBundleDevelopmentRegion + ${'$'}(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + ${'$'}(EXECUTABLE_NAME) + CFBundleIdentifier + ${'$'}(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${'$'}(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + + """.trimIndent() + ) + sourceInfo.write( + """ + + + + + CFBundleDevelopmentRegion + ${'$'}(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + ${'$'}(EXECUTABLE_NAME) + CFBundleIdentifier + ${'$'}(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${'$'}(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + + """.trimIndent() + ) + launchScreen.write( + """ + + + + + + + + + + + + + + + + + + + + + + + + + + """.trimIndent() + ) + mainScreen.write( + """ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + """.trimIndent() + ) + project.fillProject() + } finally { + listOf( + tests, testInfo, appDelegate, viewController, sourceInfo, launchScreen, mainScreen, project + ).forEach(BufferedWriter::close) + } + } + + private fun BufferedWriter.fillProject() { + write( + """ +// !${'$'}*UTF8*${'$'}! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + F861D7E1207FA40F0085E80D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F861D7E0207FA40F0085E80D /* AppDelegate.swift */; }; + F861D7E3207FA40F0085E80D /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F861D7E2207FA40F0085E80D /* ViewController.swift */; }; + F861D7E6207FA40F0085E80D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F861D7E4207FA40F0085E80D /* Main.storyboard */; }; + F861D7EB207FA4100085E80D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F861D7E9207FA4100085E80D /* LaunchScreen.storyboard */; }; + F861D7F6207FA4100085E80D /* iosAppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F861D7F5207FA4100085E80D /* iosAppTests.swift */; }; + F861D80C207FA4200085E80D /* app.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F861D805207FA4200085E80D /* app.framework */; }; + F861D80D207FA4200085E80D /* app.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F861D805207FA4200085E80D /* app.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F861D7F2207FA4100085E80D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F861D7D5207FA40F0085E80D /* Project object */; + proxyType = 1; + remoteGlobalIDString = F861D7DC207FA40F0085E80D; + remoteInfo = iosApp; + }; + F861D80A207FA4200085E80D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F861D7D5207FA40F0085E80D /* Project object */; + proxyType = 1; + remoteGlobalIDString = F861D804207FA4200085E80D; + remoteInfo = app; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + F861D811207FA4200085E80D /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F861D80D207FA4200085E80D /* app.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + F861D7DD207FA40F0085E80D /* iosApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iosApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F861D7E0207FA40F0085E80D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + F861D7E2207FA40F0085E80D /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + F861D7E5207FA40F0085E80D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + F861D7EA207FA4100085E80D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + F861D7EC207FA4100085E80D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F861D7F1207FA4100085E80D /* iosAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iosAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + F861D7F5207FA4100085E80D /* iosAppTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosAppTests.swift; sourceTree = ""; }; + F861D7F7207FA4100085E80D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F861D805207FA4200085E80D /* app.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = app.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F861D813207FA4520085E80D /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; name = app; path = ../app; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F861D7DA207FA40F0085E80D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F861D80C207FA4200085E80D /* app.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F861D7EE207FA4100085E80D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F861D7D4207FA40F0085E80D = { + isa = PBXGroup; + children = ( + F861D813207FA4520085E80D /* app */, + F861D7DF207FA40F0085E80D /* iosApp */, + F861D7F4207FA4100085E80D /* iosAppTests */, + F861D7DE207FA40F0085E80D /* Products */, + ); + sourceTree = ""; + }; + F861D7DE207FA40F0085E80D /* Products */ = { + isa = PBXGroup; + children = ( + F861D7DD207FA40F0085E80D /* iosApp.app */, + F861D7F1207FA4100085E80D /* iosAppTests.xctest */, + F861D805207FA4200085E80D /* app.framework */, + ); + name = Products; + sourceTree = ""; + }; + F861D7DF207FA40F0085E80D /* iosApp */ = { + isa = PBXGroup; + children = ( + F861D7E0207FA40F0085E80D /* AppDelegate.swift */, + F861D7E2207FA40F0085E80D /* ViewController.swift */, + F861D7E4207FA40F0085E80D /* Main.storyboard */, + F861D7E9207FA4100085E80D /* LaunchScreen.storyboard */, + F861D7EC207FA4100085E80D /* Info.plist */, + ); + path = iosApp; + sourceTree = ""; + }; + F861D7F4207FA4100085E80D /* iosAppTests */ = { + isa = PBXGroup; + children = ( + F861D7F5207FA4100085E80D /* iosAppTests.swift */, + F861D7F7207FA4100085E80D /* Info.plist */, + ); + path = iosAppTests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F861D7DC207FA40F0085E80D /* iosApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = F861D7FA207FA4100085E80D /* Build configuration list for PBXNativeTarget "iosApp" */; + buildPhases = ( + F861D7D9207FA40F0085E80D /* Sources */, + F861D7DA207FA40F0085E80D /* Frameworks */, + F861D7DB207FA40F0085E80D /* Resources */, + F861D811207FA4200085E80D /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F861D80B207FA4200085E80D /* PBXTargetDependency */, + ); + name = iosApp; + productName = iosApp; + productReference = F861D7DD207FA40F0085E80D /* iosApp.app */; + productType = "com.apple.product-type.application"; + }; + F861D7F0207FA4100085E80D /* iosAppTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F861D7FD207FA4100085E80D /* Build configuration list for PBXNativeTarget "iosAppTests" */; + buildPhases = ( + F861D7ED207FA4100085E80D /* Sources */, + F861D7EE207FA4100085E80D /* Frameworks */, + F861D7EF207FA4100085E80D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + F861D7F3207FA4100085E80D /* PBXTargetDependency */, + ); + name = iosAppTests; + productName = iosAppTests; + productReference = F861D7F1207FA4100085E80D /* iosAppTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + F861D804207FA4200085E80D /* app */ = { + isa = PBXNativeTarget; + buildConfigurationList = F861D80E207FA4200085E80D /* Build configuration list for PBXNativeTarget "app" */; + buildPhases = ( + F861D812207FA4320085E80D /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = app; + productName = app; + productReference = F861D805207FA4200085E80D /* app.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F861D7D5207FA40F0085E80D /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; + TargetAttributes = { + F861D7DC207FA40F0085E80D = { + CreatedOnToolsVersion = 9.3; + }; + F861D7F0207FA4100085E80D = { + CreatedOnToolsVersion = 9.3; + TestTargetID = F861D7DC207FA40F0085E80D; + }; + F861D804207FA4200085E80D = { + CreatedOnToolsVersion = 9.3; + }; + }; + }; + buildConfigurationList = F861D7D8207FA40F0085E80D /* Build configuration list for PBXProject "iosApp" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = F861D7D4207FA40F0085E80D; + productRefGroup = F861D7DE207FA40F0085E80D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F861D7DC207FA40F0085E80D /* iosApp */, + F861D7F0207FA4100085E80D /* iosAppTests */, + F861D804207FA4200085E80D /* app */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F861D7DB207FA40F0085E80D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F861D7EB207FA4100085E80D /* LaunchScreen.storyboard in Resources */, + F861D7E6207FA40F0085E80D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F861D7EF207FA4100085E80D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + F861D812207FA4320085E80D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${"$"}SRCROOT/../gradlew\" -p \"${"$"}SRCROOT/../app\" copyFramework \\\n-Pconfiguration.build.dir=\"${"$"}CONFIGURATION_BUILD_DIR\" \\\n-Pkotlin.build.type=\"${"$"}KOTLIN_BUILD_TYPE\" \\\n-Pkotlin.target=\"${"$"}KOTLIN_TARGET\""; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F861D7D9207FA40F0085E80D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F861D7E3207FA40F0085E80D /* ViewController.swift in Sources */, + F861D7E1207FA40F0085E80D /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F861D7ED207FA4100085E80D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F861D7F6207FA4100085E80D /* iosAppTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F861D7F3207FA4100085E80D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F861D7DC207FA40F0085E80D /* iosApp */; + targetProxy = F861D7F2207FA4100085E80D /* PBXContainerItemProxy */; + }; + F861D80B207FA4200085E80D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F861D804207FA4200085E80D /* app */; + targetProxy = F861D80A207FA4200085E80D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + F861D7E4207FA40F0085E80D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F861D7E5207FA40F0085E80D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + F861D7E9207FA4100085E80D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F861D7EA207FA4100085E80D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + F861D7F8207FA4100085E80D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "${'$'}(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = "-v"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + F861D7F9207FA4100085E80D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.3; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = "-v"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F861D7FB207FA4100085E80D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = iosApp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "${'$'}(inherited)", + "@executable_path/Frameworks", + ); + OTHER_LDFLAGS = "-v"; + PRODUCT_BUNDLE_IDENTIFIER = com.example.iosApp; + PRODUCT_NAME = "${'$'}(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = "arm64 armv7"; + }; + name = Debug; + }; + F861D7FC207FA4100085E80D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = iosApp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "${'$'}(inherited)", + "@executable_path/Frameworks", + ); + OTHER_LDFLAGS = "-v"; + PRODUCT_BUNDLE_IDENTIFIER = com.example.iosApp; + PRODUCT_NAME = "${'$'}(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = "arm64 armv7"; + }; + name = Release; + }; + F861D7FE207FA4100085E80D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "${'$'}(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = iosAppTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "${'$'}(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.iosAppTests; + PRODUCT_NAME = "${'$'}(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "${'$'}(BUILT_PRODUCTS_DIR)/iosApp.app/iosApp"; + }; + name = Debug; + }; + F861D7FF207FA4100085E80D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "${'$'}(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = iosAppTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "${'$'}(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.iosAppTests; + PRODUCT_NAME = "${'$'}(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "${'$'}(BUILT_PRODUCTS_DIR)/iosApp.app/iosApp"; + }; + name = Release; + }; + F861D80F207FA4200085E80D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + INSTALL_PATH = "${'$'}(LOCAL_LIBRARY_DIR)/Frameworks"; + KOTLIN_BUILD_TYPE = DEBUG; + KOTLIN_TARGET = ""; + "KOTLIN_TARGET[sdk=iphoneos*]" = ios; + "KOTLIN_TARGET[sdk=iphonesimulator*]" = ios; + LD_RUNPATH_SEARCH_PATHS = ( + "${'$'}(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.app; + PRODUCT_NAME = "${'$'}(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + F861D810207FA4200085E80D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + INSTALL_PATH = "${'$'}(LOCAL_LIBRARY_DIR)/Frameworks"; + KOTLIN_BUILD_TYPE = RELEASE; + KOTLIN_TARGET = ""; + "KOTLIN_TARGET[sdk=iphoneos*]" = ios; + "KOTLIN_TARGET[sdk=iphonesimulator*]" = ios; + LD_RUNPATH_SEARCH_PATHS = ( + "${'$'}(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.app; + PRODUCT_NAME = "${'$'}(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F861D7D8207FA40F0085E80D /* Build configuration list for PBXProject "iosApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F861D7F8207FA4100085E80D /* Debug */, + F861D7F9207FA4100085E80D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F861D7FA207FA4100085E80D /* Build configuration list for PBXNativeTarget "iosApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F861D7FB207FA4100085E80D /* Debug */, + F861D7FC207FA4100085E80D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F861D7FD207FA4100085E80D /* Build configuration list for PBXNativeTarget "iosAppTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F861D7FE207FA4100085E80D /* Debug */, + F861D7FF207FA4100085E80D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F861D80E207FA4200085E80D /* Build configuration list for PBXNativeTarget "app" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F861D80F207FA4200085E80D /* Debug */, + F861D810207FA4200085E80D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F861D7D5207FA40F0085E80D /* Project object */; +} + """.trimIndent() + ) + } +} \ No newline at end of file