From bc0d85b160d2578f6537ce671209f9c2456da961 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Thu, 28 Mar 2019 13:08:09 +0700 Subject: [PATCH] Add a sample for CocoaPods interop --- samples/cocoapods/.gitignore | 2 + samples/cocoapods/README.md | 24 + samples/cocoapods/build.sh | 16 + samples/cocoapods/ios-app/Podfile | 6 + samples/cocoapods/ios-app/Podfile.lock | 37 ++ .../ios-app/ios-app.xcodeproj/project.pbxproj | 417 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 9682 bytes .../xcschemes/xcschememanagement.plist | 14 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 45718 bytes .../ios-app/ios-app/AppDelegate.swift | 38 ++ .../AppIcon.appiconset/Contents.json | 98 ++++ .../ios-app/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../ios-app/Base.lproj/Main.storyboard | 69 +++ samples/cocoapods/ios-app/ios-app/Info.plist | 45 ++ .../ios-app/ios-app/ViewController.swift | 21 + .../cocoapods/kotlin-library/build.gradle.kts | 32 ++ .../kotlin-library/gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54413 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + samples/cocoapods/kotlin-library/gradlew | 172 ++++++++ samples/cocoapods/kotlin-library/gradlew.bat | 84 ++++ .../kotlin-library/settings.gradle.kts | 41 ++ .../src/iosMain/kotlin/KotlinLib.kt | 34 ++ samples/gradle.properties | 2 +- 29 files changed, 1221 insertions(+), 1 deletion(-) create mode 100644 samples/cocoapods/.gitignore create mode 100644 samples/cocoapods/README.md create mode 100755 samples/cocoapods/build.sh create mode 100644 samples/cocoapods/ios-app/Podfile create mode 100644 samples/cocoapods/ios-app/Podfile.lock create mode 100644 samples/cocoapods/ios-app/ios-app.xcodeproj/project.pbxproj create mode 100644 samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcuserdata/jetbrains.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 samples/cocoapods/ios-app/ios-app.xcodeproj/xcuserdata/jetbrains.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 samples/cocoapods/ios-app/ios-app.xcworkspace/contents.xcworkspacedata create mode 100644 samples/cocoapods/ios-app/ios-app.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 samples/cocoapods/ios-app/ios-app.xcworkspace/xcuserdata/jetbrains.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 samples/cocoapods/ios-app/ios-app/AppDelegate.swift create mode 100644 samples/cocoapods/ios-app/ios-app/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 samples/cocoapods/ios-app/ios-app/Assets.xcassets/Contents.json create mode 100644 samples/cocoapods/ios-app/ios-app/Base.lproj/LaunchScreen.storyboard create mode 100644 samples/cocoapods/ios-app/ios-app/Base.lproj/Main.storyboard create mode 100644 samples/cocoapods/ios-app/ios-app/Info.plist create mode 100644 samples/cocoapods/ios-app/ios-app/ViewController.swift create mode 100644 samples/cocoapods/kotlin-library/build.gradle.kts create mode 100644 samples/cocoapods/kotlin-library/gradle.properties create mode 100644 samples/cocoapods/kotlin-library/gradle/wrapper/gradle-wrapper.jar create mode 100644 samples/cocoapods/kotlin-library/gradle/wrapper/gradle-wrapper.properties create mode 100755 samples/cocoapods/kotlin-library/gradlew create mode 100644 samples/cocoapods/kotlin-library/gradlew.bat create mode 100644 samples/cocoapods/kotlin-library/settings.gradle.kts create mode 100644 samples/cocoapods/kotlin-library/src/iosMain/kotlin/KotlinLib.kt diff --git a/samples/cocoapods/.gitignore b/samples/cocoapods/.gitignore new file mode 100644 index 00000000000..cb31971741e --- /dev/null +++ b/samples/cocoapods/.gitignore @@ -0,0 +1,2 @@ +ios-app/Pods +kotlin-library/kotlin_library.podspec \ No newline at end of file diff --git a/samples/cocoapods/README.md b/samples/cocoapods/README.md new file mode 100644 index 00000000000..1ca3519956f --- /dev/null +++ b/samples/cocoapods/README.md @@ -0,0 +1,24 @@ +# Using CocoaPods + +This sample demonstrates how to use a CocoaPods library from Kotlin/Native. It uses the the +[AFNetworking](https://cocoapods.org/pods/AFNetworking) library to retrieve a web-page by a +given URL. + +## Configuring the project +1. [Install](https://guides.cocoapods.org/using/getting-started.html#installation) CocoaPods. + It's recommended to use CocoaPods 1.6.1 or higher. + +2. Navigate to the [kotlin-library](kotlin-library) directory and run + ``` + ./gradlew podspec + ``` + A [podspec](https://guides.cocoapods.org/syntax/podspec.html#specification) file for the + Kotlin/Native library will be generated. + +3. Navigate to the [ios-app](ios-app) directory and install the dependencies. The generated + podspec is already added in the Podfile, so just run + ``` + pod install + ``` + +4. Open [ios-app.xcworkspace](ios-app/ios-app.xcworkspace) in Xcode and run the build. \ No newline at end of file diff --git a/samples/cocoapods/build.sh b/samples/cocoapods/build.sh new file mode 100755 index 00000000000..b0a74aece2f --- /dev/null +++ b/samples/cocoapods/build.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd ) + +KOTLIN_DIR="$DIR/kotlin-library" +IOS_DIR="$DIR/ios-app" + +# Prepare Kotlin/Native project to be consumed by CocoaPods. +"$KOTLIN_DIR/gradlew" -p "$KOTLIN_DIR" podspec + +# Run CocoaPods to configure the Xcode project. +pod --project-directory="$IOS_DIR" install + +# Run Xcode to build the app. +xcodebuild -sdk iphonesimulator12.1 -configuration Release -workspace "$IOS_DIR/ios-app.xcworkspace" -scheme ios-app + diff --git a/samples/cocoapods/ios-app/Podfile b/samples/cocoapods/ios-app/Podfile new file mode 100644 index 00000000000..b192a93bd6a --- /dev/null +++ b/samples/cocoapods/ios-app/Podfile @@ -0,0 +1,6 @@ +# Either use_frameworks! or use_modular_headers! must be specified. +use_frameworks! + +target 'ios-app' do + pod 'kotlin_library', :path => '../kotlin-library' +end \ No newline at end of file diff --git a/samples/cocoapods/ios-app/Podfile.lock b/samples/cocoapods/ios-app/Podfile.lock new file mode 100644 index 00000000000..0b33d6c5ee6 --- /dev/null +++ b/samples/cocoapods/ios-app/Podfile.lock @@ -0,0 +1,37 @@ +PODS: + - AFNetworking (3.2.1): + - AFNetworking/NSURLSession (= 3.2.1) + - AFNetworking/Reachability (= 3.2.1) + - AFNetworking/Security (= 3.2.1) + - AFNetworking/Serialization (= 3.2.1) + - AFNetworking/UIKit (= 3.2.1) + - AFNetworking/NSURLSession (3.2.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (3.2.1) + - AFNetworking/Security (3.2.1) + - AFNetworking/Serialization (3.2.1) + - AFNetworking/UIKit (3.2.1): + - AFNetworking/NSURLSession + - kotlin_library (1.0): + - AFNetworking (~> 3.2.0) + +DEPENDENCIES: + - kotlin_library (from `../kotlin-library`) + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - AFNetworking + +EXTERNAL SOURCES: + kotlin_library: + :path: "../kotlin-library" + +SPEC CHECKSUMS: + AFNetworking: b6f891fdfaed196b46c7a83cf209e09697b94057 + kotlin_library: 8f1a944f60ef52dc0300d95269701846baaf153f + +PODFILE CHECKSUM: 6d9fe10c2c0a5a7ce332795392e81cfa991627a6 + +COCOAPODS: 1.6.1 diff --git a/samples/cocoapods/ios-app/ios-app.xcodeproj/project.pbxproj b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..a26d413bfd4 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.pbxproj @@ -0,0 +1,417 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 2C11BACF224B4DCB00D1CC3C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C11BACE224B4DCB00D1CC3C /* AppDelegate.swift */; }; + 2C11BAD1224B4DCB00D1CC3C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C11BAD0224B4DCB00D1CC3C /* ViewController.swift */; }; + 2C11BAD4224B4DCB00D1CC3C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C11BAD2224B4DCB00D1CC3C /* Main.storyboard */; }; + 2C11BAD6224B4DCD00D1CC3C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C11BAD5224B4DCD00D1CC3C /* Assets.xcassets */; }; + 2C11BAD9224B4DCD00D1CC3C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C11BAD7224B4DCD00D1CC3C /* LaunchScreen.storyboard */; }; + 7AEB35573DF5ECC0B96C877C /* Pods_ios_app.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06FDB564DA981DADB5693C07 /* Pods_ios_app.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 06FDB564DA981DADB5693C07 /* Pods_ios_app.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ios_app.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2C11BACB224B4DCB00D1CC3C /* ios-app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ios-app.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2C11BACE224B4DCB00D1CC3C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 2C11BAD0224B4DCB00D1CC3C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 2C11BAD3224B4DCB00D1CC3C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2C11BAD5224B4DCD00D1CC3C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 2C11BAD8224B4DCD00D1CC3C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 2C11BADA224B4DCD00D1CC3C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2C11BAE0224B65DE00D1CC3C /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + 44888DA7148EA4EB17DF765D /* Pods-ios-app.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios-app.debug.xcconfig"; path = "Target Support Files/Pods-ios-app/Pods-ios-app.debug.xcconfig"; sourceTree = ""; }; + A063F818143EBBCD07EA19D4 /* Pods-ios-app.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ios-app.release.xcconfig"; path = "Target Support Files/Pods-ios-app/Pods-ios-app.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2C11BAC8224B4DCB00D1CC3C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AEB35573DF5ECC0B96C877C /* Pods_ios_app.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2C11BAC2224B4DCB00D1CC3C = { + isa = PBXGroup; + children = ( + 2C11BACD224B4DCB00D1CC3C /* ios-app */, + 2C11BACC224B4DCB00D1CC3C /* Products */, + 9C1A5E5C1B80F794B7154EE0 /* Pods */, + B404E0DEAC80D8DB556F0E49 /* Frameworks */, + ); + sourceTree = ""; + }; + 2C11BACC224B4DCB00D1CC3C /* Products */ = { + isa = PBXGroup; + children = ( + 2C11BACB224B4DCB00D1CC3C /* ios-app.app */, + ); + name = Products; + sourceTree = ""; + }; + 2C11BACD224B4DCB00D1CC3C /* ios-app */ = { + isa = PBXGroup; + children = ( + 2C11BACE224B4DCB00D1CC3C /* AppDelegate.swift */, + 2C11BAD0224B4DCB00D1CC3C /* ViewController.swift */, + 2C11BAD2224B4DCB00D1CC3C /* Main.storyboard */, + 2C11BAD5224B4DCD00D1CC3C /* Assets.xcassets */, + 2C11BAD7224B4DCD00D1CC3C /* LaunchScreen.storyboard */, + 2C11BADA224B4DCD00D1CC3C /* Info.plist */, + ); + path = "ios-app"; + sourceTree = ""; + }; + 9C1A5E5C1B80F794B7154EE0 /* Pods */ = { + isa = PBXGroup; + children = ( + 44888DA7148EA4EB17DF765D /* Pods-ios-app.debug.xcconfig */, + A063F818143EBBCD07EA19D4 /* Pods-ios-app.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + B404E0DEAC80D8DB556F0E49 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2C11BAE0224B65DE00D1CC3C /* WebKit.framework */, + 06FDB564DA981DADB5693C07 /* Pods_ios_app.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2C11BACA224B4DCB00D1CC3C /* ios-app */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2C11BADD224B4DCD00D1CC3C /* Build configuration list for PBXNativeTarget "ios-app" */; + buildPhases = ( + F305A4DC70C8B21755898707 /* [CP] Check Pods Manifest.lock */, + 2C11BAC7224B4DCB00D1CC3C /* Sources */, + 2C11BAC8224B4DCB00D1CC3C /* Frameworks */, + 2C11BAC9224B4DCB00D1CC3C /* Resources */, + 042B85E17AFECF20FF11D591 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ios-app"; + productName = "ios-app"; + productReference = 2C11BACB224B4DCB00D1CC3C /* ios-app.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2C11BAC3224B4DCB00D1CC3C /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1010; + LastUpgradeCheck = 1010; + TargetAttributes = { + 2C11BACA224B4DCB00D1CC3C = { + CreatedOnToolsVersion = 10.1; + }; + }; + }; + buildConfigurationList = 2C11BAC6224B4DCB00D1CC3C /* Build configuration list for PBXProject "ios-app" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 2C11BAC2224B4DCB00D1CC3C; + productRefGroup = 2C11BACC224B4DCB00D1CC3C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2C11BACA224B4DCB00D1CC3C /* ios-app */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2C11BAC9224B4DCB00D1CC3C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C11BAD9224B4DCD00D1CC3C /* LaunchScreen.storyboard in Resources */, + 2C11BAD6224B4DCD00D1CC3C /* Assets.xcassets in Resources */, + 2C11BAD4224B4DCB00D1CC3C /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 042B85E17AFECF20FF11D591 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ios-app/Pods-ios-app-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ios-app/Pods-ios-app-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F305A4DC70C8B21755898707 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ios-app-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2C11BAC7224B4DCB00D1CC3C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2C11BAD1224B4DCB00D1CC3C /* ViewController.swift in Sources */, + 2C11BACF224B4DCB00D1CC3C /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2C11BAD2224B4DCB00D1CC3C /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2C11BAD3224B4DCB00D1CC3C /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 2C11BAD7224B4DCD00D1CC3C /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2C11BAD8224B4DCD00D1CC3C /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2C11BADB224B4DCD00D1CC3C /* 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_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 = 12.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 2C11BADC224B4DCD00D1CC3C /* 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_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 = 12.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2C11BADE224B4DCD00D1CC3C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44888DA7148EA4EB17DF765D /* Pods-ios-app.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = "ios-app/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.jetbrains.konan.ios-app"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2C11BADF224B4DCD00D1CC3C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A063F818143EBBCD07EA19D4 /* Pods-ios-app.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = "ios-app/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.jetbrains.konan.ios-app"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2C11BAC6224B4DCB00D1CC3C /* Build configuration list for PBXProject "ios-app" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2C11BADB224B4DCD00D1CC3C /* Debug */, + 2C11BADC224B4DCD00D1CC3C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2C11BADD224B4DCD00D1CC3C /* Build configuration list for PBXNativeTarget "ios-app" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2C11BADE224B4DCD00D1CC3C /* Debug */, + 2C11BADF224B4DCD00D1CC3C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2C11BAC3224B4DCB00D1CC3C /* Project object */; +} diff --git a/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..136ada05267 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000000..18d981003d6 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcuserdata/jetbrains.xcuserdatad/UserInterfaceState.xcuserstate b/samples/cocoapods/ios-app/ios-app.xcodeproj/project.xcworkspace/xcuserdata/jetbrains.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..89d760be5f5d56016775cff4017e79a39ac4c927 GIT binary patch literal 9682 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 literal 0 HcmV?d00001 diff --git a/samples/cocoapods/ios-app/ios-app.xcodeproj/xcuserdata/jetbrains.xcuserdatad/xcschemes/xcschememanagement.plist b/samples/cocoapods/ios-app/ios-app.xcodeproj/xcuserdata/jetbrains.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000000..ef8586899ae --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app.xcodeproj/xcuserdata/jetbrains.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + ios-app.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/samples/cocoapods/ios-app/ios-app.xcworkspace/contents.xcworkspacedata b/samples/cocoapods/ios-app/ios-app.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..1068335b31c --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/samples/cocoapods/ios-app/ios-app.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/samples/cocoapods/ios-app/ios-app.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000000..18d981003d6 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/samples/cocoapods/ios-app/ios-app.xcworkspace/xcuserdata/jetbrains.xcuserdatad/UserInterfaceState.xcuserstate b/samples/cocoapods/ios-app/ios-app.xcworkspace/xcuserdata/jetbrains.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c8005bff1c7807ecb0abd5335c152436b8bfc611 GIT binary patch literal 45718 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 Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/samples/cocoapods/ios-app/ios-app/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/cocoapods/ios-app/ios-app/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..d8db8d65fd7 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/samples/cocoapods/ios-app/ios-app/Assets.xcassets/Contents.json b/samples/cocoapods/ios-app/ios-app/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..da4a164c918 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/samples/cocoapods/ios-app/ios-app/Base.lproj/LaunchScreen.storyboard b/samples/cocoapods/ios-app/ios-app/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000000..bfa36129419 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/cocoapods/ios-app/ios-app/Base.lproj/Main.storyboard b/samples/cocoapods/ios-app/ios-app/Base.lproj/Main.storyboard new file mode 100644 index 00000000000..29d14b9fb3a --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app/Base.lproj/Main.storyboard @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/cocoapods/ios-app/ios-app/Info.plist b/samples/cocoapods/ios-app/ios-app/Info.plist new file mode 100644 index 00000000000..16be3b68112 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app/Info.plist @@ -0,0 +1,45 @@ + + + + + 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 + + + diff --git a/samples/cocoapods/ios-app/ios-app/ViewController.swift b/samples/cocoapods/ios-app/ios-app/ViewController.swift new file mode 100644 index 00000000000..7325dd25b40 --- /dev/null +++ b/samples/cocoapods/ios-app/ios-app/ViewController.swift @@ -0,0 +1,21 @@ +import UIKit +import kotlin_library + +class ViewController: UIViewController { + + @IBOutlet weak var goButton: UIButton! + @IBOutlet weak var urlField: UITextField! + @IBOutlet weak var contentTextView: UITextView! + + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + @IBAction func onGoTouch(_ sender: Any) { + let url = urlField.text! + KotlinLibKt.getAndShow(url: url, contentView: contentTextView) + } +} + diff --git a/samples/cocoapods/kotlin-library/build.gradle.kts b/samples/cocoapods/kotlin-library/build.gradle.kts new file mode 100644 index 00000000000..9f98b1cee62 --- /dev/null +++ b/samples/cocoapods/kotlin-library/build.gradle.kts @@ -0,0 +1,32 @@ +plugins { + id("org.jetbrains.kotlin.multiplatform") + id("org.jetbrains.kotlin.native.cocoapods") +} + +repositories { + jcenter() + maven { setUrl("https://dl.bintray.com/kotlin/kotlin-dev") } + maven { setUrl("https://dl.bintray.com/kotlin/kotlin-eap") } +} + +group = "org.jetbrains.kotlin.sample.native" +version = "1.0" + +kotlin { + // Add a platform switching to have an IDE support. + val buildForDevice = System.getenv("SDK_NAME")?.startsWith("iphoneos") ?: false + if (buildForDevice) { + iosArm64("iOS") + } else { + iosX64("iOS") + } + + cocoapods { + // Configure fields required by CocoaPods. + summary = "Working with AFNetworking from Kotlin/Native using CocoaPods" + homepage = "https://github.com/JetBrains/kotlin-native" + + // Configure a dependency on AFNetworking. It will be added in all macOS and iOS targets. + pod("AFNetworking", "~> 3.2.0") + } +} diff --git a/samples/cocoapods/kotlin-library/gradle.properties b/samples/cocoapods/kotlin-library/gradle.properties new file mode 100644 index 00000000000..270d6aecf68 --- /dev/null +++ b/samples/cocoapods/kotlin-library/gradle.properties @@ -0,0 +1 @@ +org.jetbrains.kotlin.native.home=../../../dist \ No newline at end of file diff --git a/samples/cocoapods/kotlin-library/gradle/wrapper/gradle-wrapper.jar b/samples/cocoapods/kotlin-library/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..91ca28c8b802289c3a438766657a5e98f20eff03 GIT binary patch literal 54413 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/samples/cocoapods/kotlin-library/gradlew.bat b/samples/cocoapods/kotlin-library/gradlew.bat new file mode 100644 index 00000000000..e95643d6a2c --- /dev/null +++ b/samples/cocoapods/kotlin-library/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/cocoapods/kotlin-library/settings.gradle.kts b/samples/cocoapods/kotlin-library/settings.gradle.kts new file mode 100644 index 00000000000..a00d777ee3f --- /dev/null +++ b/samples/cocoapods/kotlin-library/settings.gradle.kts @@ -0,0 +1,41 @@ +pluginManagement { + repositories { + jcenter() + maven { setUrl("https://dl.bintray.com/kotlin/kotlin-dev") } + maven { setUrl("https://dl.bintray.com/kotlin/kotlin-eap") } + } + + resolutionStrategy { + // Workaround to be able to read plugin version from the properties file. + // See: https://stackoverflow.com/questions/52800536/how-to-use-plugin-version-from-gradle-properties-in-gradle-kotlin-dsl. + val kotlinVersion = getRootProperties().getValue("kotlin_version") as String + eachPlugin { + when { + requested.id.id == "org.jetbrains.kotlin.native.cocoapods" || + requested.id.id == "kotlin-native-cocoapods" -> + useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + requested.id.id.startsWith("org.jetbrains.kotlin") -> + useVersion(kotlinVersion) + } + } + } +} + +// Reuse Kotlin version and other properties from the root samples project. +fun getRootProperties() = java.util.Properties().apply { + val rootProjectGradlePropertiesFile = file("${rootProject.projectDir}/../../gradle.properties") + if (!rootProjectGradlePropertiesFile.isFile) { + throw Exception("File $rootProjectGradlePropertiesFile does not exist or is not a file") + } + + rootProjectGradlePropertiesFile.inputStream().use { inputStream -> + load(inputStream) + } +} + +gradle.beforeProject { + getRootProperties().forEach { key, value -> + if (!project.hasProperty(key as String)) + project.extra[key] = value + } +} diff --git a/samples/cocoapods/kotlin-library/src/iosMain/kotlin/KotlinLib.kt b/samples/cocoapods/kotlin-library/src/iosMain/kotlin/KotlinLib.kt new file mode 100644 index 00000000000..3c35250e9b9 --- /dev/null +++ b/samples/cocoapods/kotlin-library/src/iosMain/kotlin/KotlinLib.kt @@ -0,0 +1,34 @@ +import cocoapods.AFNetworking.AFHTTPResponseSerializer +import cocoapods.AFNetworking.AFHTTPSessionManager +import platform.Foundation.* +import platform.UIKit.NSDocumentTypeDocumentAttribute +import platform.UIKit.NSHTMLTextDocumentType +import platform.UIKit.UITextView +import platform.UIKit.create +import kotlin.Any +import kotlin.String +import kotlin.to +import kotlin.toString + +/** + * Retrieves the content by the given URL and shows it at the given WebKitView + */ +fun getAndShow(url: String, contentView: UITextView) { + val manager = AFHTTPSessionManager() + manager.responseSerializer = AFHTTPResponseSerializer() + val onSuccess = { _: NSURLSessionDataTask?, response: Any? -> + val html = NSAttributedString.create( + data = response as NSData, + options = mapOf(NSDocumentTypeDocumentAttribute as Any? to NSHTMLTextDocumentType), + documentAttributes = null, + error = null + )!! + contentView.attributedText = html + } + val onError = { _: NSURLSessionDataTask?, error: NSError? -> + NSLog("Cannot get ${url}.") + NSLog(error.toString()) + } + + manager.GET(url, null, onSuccess, onError) +} \ No newline at end of file diff --git a/samples/gradle.properties b/samples/gradle.properties index 7eac8dd49ac..c258c3de2e0 100644 --- a/samples/gradle.properties +++ b/samples/gradle.properties @@ -2,7 +2,7 @@ org.gradle.parallel=true # Pin Kotlin version: -kotlin_version=1.3.21 +kotlin_version=1.3.30-eap-113 # Use custom Kotlin/Native home: org.jetbrains.kotlin.native.home=../../dist