From 566be2de8248cbc7a1a3838758c5e55407e6e91c Mon Sep 17 00:00:00 2001 From: Geordie J Date: Mon, 24 Jul 2017 20:13:25 +0200 Subject: [PATCH 1/7] Clean up --- JNISwift/JNISwift.xcodeproj/project.pbxproj | 261 ------------------ .../contents.xcworkspacedata | 7 - JNISwift/build.sh | 8 - Package.swift | 11 +- Sources/JNISwift/JNIMethods.swift | 10 - Sources/JNISwift/SwiftJNI.swift | 7 +- 6 files changed, 9 insertions(+), 295 deletions(-) delete mode 100644 JNISwift/JNISwift.xcodeproj/project.pbxproj delete mode 100644 JNISwift/JNISwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 JNISwift/build.sh diff --git a/JNISwift/JNISwift.xcodeproj/project.pbxproj b/JNISwift/JNISwift.xcodeproj/project.pbxproj deleted file mode 100644 index 98fa8a6..0000000 --- a/JNISwift/JNISwift.xcodeproj/project.pbxproj +++ /dev/null @@ -1,261 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXFileReference section */ - 032F84951F18BC2300E24174 /* jni.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jni.h; sourceTree = ""; }; - 032F84961F18BC2300E24174 /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; - 032F84971F18BC2300E24174 /* jni.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jni.c; sourceTree = ""; }; - 032F84991F18BC2300E24174 /* JNI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNI.swift; sourceTree = ""; }; - 032F849A1F18BC2300E24174 /* JNIClassManipulation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNIClassManipulation.swift; sourceTree = ""; }; - 032F849B1F18BC2300E24174 /* JNIExceptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNIExceptions.swift; sourceTree = ""; }; - 032F849C1F18BC2300E24174 /* JNIMethods.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNIMethods.swift; sourceTree = ""; }; - 032F849D1F18BC2300E24174 /* JNIObjects.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNIObjects.swift; sourceTree = ""; }; - 032F849E1F18BC2300E24174 /* JNIRefs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNIRefs.swift; sourceTree = ""; }; - 032F849F1F18BC2300E24174 /* JNIStrings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JNIStrings.swift; sourceTree = ""; }; - 032F84A01F18BC2300E24174 /* SwiftJNI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftJNI.swift; sourceTree = ""; }; - 032F84A21F18BD1E00E24174 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Package.swift; path = ../Package.swift; sourceTree = ""; }; - 032F84A31F18BD1E00E24174 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; - 032F84A41F18BDE000E24174 /* build.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = build.sh; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXGroup section */ - 032F84871F18BBF700E24174 = { - isa = PBXGroup; - children = ( - 032F84A41F18BDE000E24174 /* build.sh */, - 032F84A21F18BD1E00E24174 /* Package.swift */, - 032F84A31F18BD1E00E24174 /* README.md */, - 032F84921F18BC2300E24174 /* Sources */, - ); - sourceTree = ""; - }; - 032F84921F18BC2300E24174 /* Sources */ = { - isa = PBXGroup; - children = ( - 032F84931F18BC2300E24174 /* CJNI */, - 032F84981F18BC2300E24174 /* JNISwift */, - ); - name = Sources; - path = ../Sources; - sourceTree = ""; - }; - 032F84931F18BC2300E24174 /* CJNI */ = { - isa = PBXGroup; - children = ( - 032F84941F18BC2300E24174 /* include */, - 032F84971F18BC2300E24174 /* jni.c */, - ); - path = CJNI; - sourceTree = ""; - }; - 032F84941F18BC2300E24174 /* include */ = { - isa = PBXGroup; - children = ( - 032F84951F18BC2300E24174 /* jni.h */, - 032F84961F18BC2300E24174 /* module.modulemap */, - ); - path = include; - sourceTree = ""; - }; - 032F84981F18BC2300E24174 /* JNISwift */ = { - isa = PBXGroup; - children = ( - 032F84991F18BC2300E24174 /* JNI.swift */, - 032F849A1F18BC2300E24174 /* JNIClassManipulation.swift */, - 032F849B1F18BC2300E24174 /* JNIExceptions.swift */, - 032F849C1F18BC2300E24174 /* JNIMethods.swift */, - 032F849D1F18BC2300E24174 /* JNIObjects.swift */, - 032F849E1F18BC2300E24174 /* JNIRefs.swift */, - 032F849F1F18BC2300E24174 /* JNIStrings.swift */, - 032F84A01F18BC2300E24174 /* SwiftJNI.swift */, - ); - path = JNISwift; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXLegacyTarget section */ - 032F848C1F18BBF700E24174 /* JNISwift */ = { - isa = PBXLegacyTarget; - buildArgumentsString = build.sh; - buildConfigurationList = 032F848F1F18BBF700E24174 /* Build configuration list for PBXLegacyTarget "JNISwift" */; - buildPhases = ( - ); - buildToolPath = /bin/bash; - buildWorkingDirectory = ""; - dependencies = ( - ); - name = JNISwift; - passBuildSettingsInEnvironment = 1; - productName = JNISwift; - }; -/* End PBXLegacyTarget section */ - -/* Begin PBXProject section */ - 032F84881F18BBF700E24174 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0830; - ORGANIZATIONNAME = flowkey; - TargetAttributes = { - 032F848C1F18BBF700E24174 = { - CreatedOnToolsVersion = 8.3.3; - DevelopmentTeam = FTSYMMN5B5; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = 032F848B1F18BBF700E24174 /* Build configuration list for PBXProject "JNISwift" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 032F84871F18BBF700E24174; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 032F848C1F18BBF700E24174 /* JNISwift */, - ); - }; -/* End PBXProject section */ - -/* Begin XCBuildConfiguration section */ - 032F848D1F18BBF700E24174 /* 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++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - 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; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - }; - name = Debug; - }; - 032F848E1F18BBF700E24174 /* 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++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - 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; - MTL_ENABLE_DEBUG_INFO = NO; - }; - name = Release; - }; - 032F84901F18BBF700E24174 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUGGING_SYMBOLS = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = FTSYMMN5B5; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 032F84911F18BBF700E24174 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = FTSYMMN5B5; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 032F848B1F18BBF700E24174 /* Build configuration list for PBXProject "JNISwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 032F848D1F18BBF700E24174 /* Debug */, - 032F848E1F18BBF700E24174 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 032F848F1F18BBF700E24174 /* Build configuration list for PBXLegacyTarget "JNISwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 032F84901F18BBF700E24174 /* Debug */, - 032F84911F18BBF700E24174 /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; -/* End XCConfigurationList section */ - }; - rootObject = 032F84881F18BBF700E24174 /* Project object */; -} diff --git a/JNISwift/JNISwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/JNISwift/JNISwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index e6bd6f1..0000000 --- a/JNISwift/JNISwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/JNISwift/build.sh b/JNISwift/build.sh deleted file mode 100644 index 14e21f3..0000000 --- a/JNISwift/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -export PATH=$PATH:~/.swiftyrobot - -# ensure working dir is local to this script (when being called by another script) -cd "$(dirname "$0")" - -# build Swift Package with Swifty Robot -sr build | sed 's/\/root\/host_fs//g' -exit ${PIPESTATUS[0]} diff --git a/Package.swift b/Package.swift index a0a0192..b6e22ba 100644 --- a/Package.swift +++ b/Package.swift @@ -1,13 +1,14 @@ -// swift-tools-version:3.1 +// swift-tools-version:4.0 import PackageDescription let package = Package( name: "JNISwift", + products: [ + .library(name: "JNISwift", type: .dynamic, targets: ["JNISwift"]) + ], targets: [ - Target(name: "JNISwift", dependencies: ["CJNI"]), - Target(name: "CJNI", dependencies: []) + .target(name: "JNISwift", dependencies: ["CJNI"]), + .target(name: "CJNI", dependencies: []) ] ) - -products.append(Product(name: "JNISwift", type: .Library(.Dynamic), modules: ["JNISwift"])) diff --git a/Sources/JNISwift/JNIMethods.swift b/Sources/JNISwift/JNIMethods.swift index 71cfc7c..0cc1fe0 100644 --- a/Sources/JNISwift/JNIMethods.swift +++ b/Sources/JNISwift/JNIMethods.swift @@ -1,15 +1,5 @@ import CJNI -#if os(Android) -@discardableResult -@_silgen_name("__android_log_write") -public func androidPrint(_ prio: Int32, _ tag: UnsafePointer, _ text: UnsafePointer) -> Int32 - -func print(_ string: String) { - androidPrint(5, "SwiftJNI", string) -} -#endif - struct InvalidParameters: Error {} public protocol JavaParameterConvertible { diff --git a/Sources/JNISwift/SwiftJNI.swift b/Sources/JNISwift/SwiftJNI.swift index cad396a..ceac581 100644 --- a/Sources/JNISwift/SwiftJNI.swift +++ b/Sources/JNISwift/SwiftJNI.swift @@ -11,10 +11,9 @@ public func JNI_OnLoad(jvm: UnsafeMutablePointer, reserved: UnsafeMutabl jni = localJNI // set the global for use elsewhere - #if !os(Android) && swift(>=4) - // FIXME: Only available in Swift 4.0 - DispatchQueue.setThreadDetachCallback(JNI_DetachCurrentThread) - #endif + // #if !os(Android) && swift(>=4) + // DispatchQueue.setThreadDetachCallback(JNI_DetachCurrentThread) + // #endif return JNI_VERSION_1_6 } From dcd231182a70153d2f552e2050fa6b99d57bda76 Mon Sep 17 00:00:00 2001 From: Geordie J Date: Tue, 25 Jul 2017 17:42:04 +0200 Subject: [PATCH 2/7] Add / correct the last header annotations in jni.h --- JNISwift.xcodeproj/project.pbxproj | 7 ++-- Sources/CJNI/include/jni.h | 58 +++++++++++++++--------------- Sources/JNISwift/SwiftJNI.swift | 2 -- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/JNISwift.xcodeproj/project.pbxproj b/JNISwift.xcodeproj/project.pbxproj index 7ef22c8..938e0a3 100644 --- a/JNISwift.xcodeproj/project.pbxproj +++ b/JNISwift.xcodeproj/project.pbxproj @@ -42,7 +42,6 @@ OBJ_19 /* JNIRefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIRefs.swift; sourceTree = ""; }; OBJ_20 /* JNIStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIStrings.swift; sourceTree = ""; }; OBJ_21 /* SwiftJNI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftJNI.swift; sourceTree = ""; }; - OBJ_23 /* JNISwift */ = {isa = PBXFileReference; lastKnownFileType = folder; path = JNISwift; sourceTree = SOURCE_ROOT; }; OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; OBJ_9 /* jni.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jni.c; sourceTree = ""; }; /* End PBXFileReference section */ @@ -107,16 +106,14 @@ name = Products; sourceTree = BUILT_PRODUCTS_DIR; }; - OBJ_5 /* */ = { + OBJ_5 = { isa = PBXGroup; children = ( OBJ_6 /* Package.swift */, OBJ_7 /* Sources */, OBJ_22 /* Tests */, - OBJ_23 /* JNISwift */, OBJ_24 /* Products */, ); - name = ""; sourceTree = ""; }; OBJ_7 /* Sources */ = { @@ -189,7 +186,7 @@ knownRegions = ( en, ); - mainGroup = OBJ_5 /* */; + mainGroup = OBJ_5; productRefGroup = OBJ_24 /* Products */; projectDirPath = ""; projectRoot = ""; diff --git a/Sources/CJNI/include/jni.h b/Sources/CJNI/include/jni.h index 47dc543..8390d1d 100644 --- a/Sources/CJNI/include/jni.h +++ b/Sources/CJNI/include/jni.h @@ -383,7 +383,7 @@ struct JNINativeInterface jstring (* _Nonnull NewString)(JNIEnv * _Nonnull, const jchar * _Nonnull, jsize); jsize (* _Nonnull GetStringLength)(JNIEnv * _Nonnull, jstring); - const jchar *(* _Nonnull GetStringChars)(JNIEnv * _Nonnull, jstring, jboolean * _Nullable); + const jchar * _Nullable(* _Nonnull GetStringChars)(JNIEnv * _Nonnull, jstring, jboolean * _Nullable); void (* _Nonnull ReleaseStringChars)(JNIEnv * _Nonnull, jstring, const jchar * _Nonnull); jstring (* _Nonnull NewStringUTF)(JNIEnv * _Nonnull, const char * _Nonnull); jsize (* _Nonnull GetStringUTFLength)(JNIEnv * _Nonnull, jstring); @@ -413,14 +413,14 @@ struct JNINativeInterface jfloat * _Nullable (* _Nonnull GetFloatArrayElements)(JNIEnv * _Nonnull, jfloatArray, jboolean * _Nonnull); jdouble * _Nullable (* _Nonnull GetDoubleArrayElements)(JNIEnv * _Nonnull, jdoubleArray, jboolean * _Nonnull); - void (* _Nonnull ReleaseBooleanArrayElements)(JNIEnv * _Nonnull, jbooleanArray, jboolean *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseByteArrayElements)(JNIEnv * _Nonnull, jbyteArray, jbyte *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseCharArrayElements)(JNIEnv * _Nonnull, jcharArray, jchar *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseShortArrayElements)(JNIEnv * _Nonnull, jshortArray, jshort *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseIntArrayElements)(JNIEnv * _Nonnull, jintArray, jint *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseLongArrayElements)(JNIEnv * _Nonnull, jlongArray, jlong *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseFloatArrayElements)(JNIEnv * _Nonnull, jfloatArray, jfloat *, jint) CF_SWIFT_NAME(ReleaseArrayElements); - void (* _Nonnull ReleaseDoubleArrayElements)(JNIEnv * _Nonnull, jdoubleArray, jdouble *, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseBooleanArrayElements)(JNIEnv * _Nonnull, jbooleanArray, jboolean * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseByteArrayElements)(JNIEnv * _Nonnull, jbyteArray, jbyte * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseCharArrayElements)(JNIEnv * _Nonnull, jcharArray, jchar * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseShortArrayElements)(JNIEnv * _Nonnull, jshortArray, jshort * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseIntArrayElements)(JNIEnv * _Nonnull, jintArray, jint * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseLongArrayElements)(JNIEnv * _Nonnull, jlongArray, jlong * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseFloatArrayElements)(JNIEnv * _Nonnull, jfloatArray, jfloat * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); + void (* _Nonnull ReleaseDoubleArrayElements)(JNIEnv * _Nonnull, jdoubleArray, jdouble * _Nullable, jint) CF_SWIFT_NAME(ReleaseArrayElements); void (* _Nonnull GetBooleanArrayRegion)(JNIEnv * _Nonnull, jbooleanArray, jsize, jsize, jboolean * _Nonnull); void (* _Nonnull GetByteArrayRegion)(JNIEnv * _Nonnull, jbyteArray, jsize, jsize, jbyte * _Nonnull); @@ -441,7 +441,7 @@ struct JNINativeInterface void (* _Nonnull SetFloatArrayRegion)(JNIEnv * _Nonnull, jfloatArray, jsize, jsize, const jfloat * _Nonnull) CF_SWIFT_NAME(SetArrayRegion); void (* _Nonnull SetDoubleArrayRegion)(JNIEnv * _Nonnull, jdoubleArray, jsize, jsize, const jdouble * _Nonnull) CF_SWIFT_NAME(SetArrayRegion); - jint (* _Nonnull RegisterNatives)(JNIEnv * _Nonnull, jclass, const JNINativeMethod *, jint); + jint (* _Nonnull RegisterNatives)(JNIEnv * _Nonnull, jclass, const JNINativeMethod * _Nonnull, jint); jint (* _Nonnull UnregisterNatives)(JNIEnv * _Nonnull, jclass); jint (* _Nonnull MonitorEnter)(JNIEnv * _Nonnull, jobject); jint (* _Nonnull MonitorExit)(JNIEnv * _Nonnull, jobject); @@ -450,11 +450,11 @@ struct JNINativeInterface void (* _Nonnull GetStringRegion)(JNIEnv * _Nonnull, jstring, jsize, jsize, jchar * _Nonnull); void (* _Nonnull GetStringUTFRegion)(JNIEnv * _Nonnull, jstring, jsize, jsize, char * _Nonnull); - void *(* _Nonnull GetPrimitiveArrayCritical)(JNIEnv * _Nonnull, jarray, jboolean * _Nonnull); - void (* _Nonnull ReleasePrimitiveArrayCritical)(JNIEnv * _Nonnull, jarray, void *, jint); + void * _Nullable(* _Nonnull GetPrimitiveArrayCritical)(JNIEnv * _Nonnull, jarray, jboolean * _Nonnull); + void (* _Nonnull ReleasePrimitiveArrayCritical)(JNIEnv * _Nonnull, jarray, void * _Nullable, jint); - const jchar *(* _Nonnull GetStringCritical)(JNIEnv * _Nonnull, jstring, jboolean * _Nonnull); - void (* _Nonnull ReleaseStringCritical)(JNIEnv * _Nonnull, jstring, const jchar * _Nonnull); + const jchar * _Nullable(* _Nonnull GetStringCritical)(JNIEnv * _Nonnull, jstring, jboolean * _Nonnull); + void (* _Nonnull ReleaseStringCritical)(JNIEnv * _Nonnull, jstring, const jchar * _Nullable); jweak (* _Nonnull NewWeakGlobalRef)(JNIEnv * _Nonnull, jobject); void (* _Nonnull DeleteWeakGlobalRef)(JNIEnv * _Nonnull, jweak); @@ -1332,15 +1332,15 @@ struct _JNIEnv */ struct JNIInvokeInterface { - void *reserved0; - void *reserved1; - void *reserved2; + void * _Null_unspecified reserved0; + void * _Null_unspecified reserved1; + void * _Null_unspecified reserved2; jint (* _Nonnull DestroyJavaVM)(JavaVM * _Nonnull); - jint (* _Nonnull AttachCurrentThread)(JavaVM *, JNIEnv **, void * _Nullable); + jint (* _Nonnull AttachCurrentThread)(JavaVM * _Nonnull, JNIEnv * _Nullable * _Nullable, void * _Nullable); jint (* _Nonnull DetachCurrentThread)(JavaVM * _Nonnull); - jint (* _Nonnull GetEnv)(JavaVM *, void **, jint); - jint (* _Nonnull AttachCurrentThreadAsDaemon)(JavaVM *, JNIEnv **, void * _Nonnull); + jint (* _Nonnull GetEnv)(JavaVM * _Nonnull, void * _Nullable * _Nullable, jint); + jint (* _Nonnull AttachCurrentThreadAsDaemon)(JavaVM * _Nonnull, JNIEnv * _Nullable * _Nullable, void * _Nullable); }; /* @@ -1348,7 +1348,7 @@ struct JNIInvokeInterface */ struct _JavaVM { - const struct JNIInvokeInterface *functions; + const struct JNIInvokeInterface * _Nonnull functions; #if defined(__cplusplus) jint DestroyJavaVM() @@ -1376,9 +1376,9 @@ struct _JavaVM struct JavaVMAttachArgs { - jint version; /* must be >= JNI_VERSION_1_2 */ - const char *name; /* NULL or name of thread as modified UTF-8 str */ - jobject group; /* global ref of a ThreadGroup object, or NULL */ + jint version; /** must be >= JNI_VERSION_1_2 */ + const char * _Nullable name; /** NULL or name of thread as modified UTF-8 str */ + jobject group; /** global ref of a ThreadGroup object, or NULL */ }; typedef struct JavaVMAttachArgs JavaVMAttachArgs; @@ -1388,8 +1388,8 @@ typedef struct JavaVMAttachArgs JavaVMAttachArgs; */ typedef struct JavaVMOption { - const char *optionString; - void *extraInfo; + const char * _Nullable optionString; + void * _Nullable extraInfo; } JavaVMOption; typedef struct JavaVMInitArgs @@ -1397,7 +1397,7 @@ typedef struct JavaVMInitArgs jint version; /* use JNI_VERSION_1_2 or later */ jint nOptions; - JavaVMOption *options; + JavaVMOption * _Nonnull options; jboolean ignoreUnrecognized; } JavaVMInitArgs; @@ -1423,8 +1423,8 @@ jint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize* _Nonnull); * Prototypes for functions exported by loadable shared libs. These are * called by JNI, not provided by JNI. */ -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved); -JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved); +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * _Nonnull vm, void * _Null_unspecified reserved); +JNIEXPORT void JNICALL JNI_OnUnload(JavaVM * _Nonnull vm, void * _Null_unspecified reserved); #ifdef __cplusplus } diff --git a/Sources/JNISwift/SwiftJNI.swift b/Sources/JNISwift/SwiftJNI.swift index ceac581..a227edd 100644 --- a/Sources/JNISwift/SwiftJNI.swift +++ b/Sources/JNISwift/SwiftJNI.swift @@ -11,9 +11,7 @@ public func JNI_OnLoad(jvm: UnsafeMutablePointer, reserved: UnsafeMutabl jni = localJNI // set the global for use elsewhere - // #if !os(Android) && swift(>=4) // DispatchQueue.setThreadDetachCallback(JNI_DetachCurrentThread) - // #endif return JNI_VERSION_1_6 } From 64a2600acb34cbc7daddd603422065317acf8685 Mon Sep 17 00:00:00 2001 From: Geordie J Date: Fri, 28 Jul 2017 14:54:48 +0200 Subject: [PATCH 3/7] Rename to JNI --- JNI.xcodeproj/project.pbxproj | 929 ++++++++++-------- .../xcschemes/JNI-Package.xcscheme | 20 +- .../xcshareddata/xcschemes/JNI.xcscheme | 86 -- .../xcschemes/xcschememanagement.plist | 2 +- Package.swift | 6 +- Sources/CJNI/cjni.c | 1 + Sources/CJNI/jni.c | 4 - Sources/JNI/JNI.swift | 2 +- 8 files changed, 530 insertions(+), 520 deletions(-) delete mode 100644 JNI.xcodeproj/xcshareddata/xcschemes/JNI.xcscheme create mode 100644 Sources/CJNI/cjni.c delete mode 100644 Sources/CJNI/jni.c diff --git a/JNI.xcodeproj/project.pbxproj b/JNI.xcodeproj/project.pbxproj index bf35349..ed4024e 100644 --- a/JNI.xcodeproj/project.pbxproj +++ b/JNI.xcodeproj/project.pbxproj @@ -1,418 +1,517 @@ // !$*UTF8*$! { - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 03B38DF51F1FCA9B00B9CDA9 /* Array+JavaParameterConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03B38DF41F1FC98800B9CDA9 /* Array+JavaParameterConvertible.swift */; }; - 03B38DF61F1FCA9F00B9CDA9 /* JavaParameterConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03B38DF31F1FC98800B9CDA9 /* JavaParameterConvertible.swift */; }; - OBJ_32 /* JNI.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_14 /* JNI.swift */; }; - OBJ_33 /* JNIClassManipulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_15 /* JNIClassManipulation.swift */; }; - OBJ_34 /* JNIExceptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_16 /* JNIExceptions.swift */; }; - OBJ_35 /* JNIMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* JNIMethods.swift */; }; - OBJ_36 /* JNIObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* JNIObjects.swift */; }; - OBJ_37 /* JNIRefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* JNIRefs.swift */; }; - OBJ_38 /* JNIStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* JNIStrings.swift */; }; - OBJ_39 /* SwiftJNI.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* SwiftJNI.swift */; }; - OBJ_41 /* CJNI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "JNISwift::CJNI::Product" /* CJNI.framework */; }; - OBJ_48 /* jni.c in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_9 /* jni.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 5C1D2F2E1F1E277B0006682E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = OBJ_1 /* Project object */; - proxyType = 1; - remoteGlobalIDString = "JNISwift::CJNI"; - remoteInfo = CJNI; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 03B38DF31F1FC98800B9CDA9 /* JavaParameterConvertible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JavaParameterConvertible.swift; sourceTree = ""; }; - 03B38DF41F1FC98800B9CDA9 /* Array+JavaParameterConvertible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+JavaParameterConvertible.swift"; sourceTree = ""; }; - "JNISwift::CJNI::Product" /* CJNI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CJNI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - "JNISwift::JNISwift::Product" /* JNISwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = JNISwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - OBJ_11 /* jni.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jni.h; sourceTree = ""; }; - OBJ_12 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = module.modulemap; path = "/Users/geordiejay/dev/flowkey/smartphone/RNPlayerComponent/NativePlayerIOS/FlowkeyPlayerSDL/Packages/UIKit/Packages/swift-jni/Sources/CJNI/include/module.modulemap"; sourceTree = ""; }; - OBJ_14 /* JNI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNI.swift; sourceTree = ""; }; - OBJ_15 /* JNIClassManipulation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIClassManipulation.swift; sourceTree = ""; }; - OBJ_16 /* JNIExceptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIExceptions.swift; sourceTree = ""; }; - OBJ_17 /* JNIMethods.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIMethods.swift; sourceTree = ""; }; - OBJ_18 /* JNIObjects.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIObjects.swift; sourceTree = ""; }; - OBJ_19 /* JNIRefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIRefs.swift; sourceTree = ""; }; - OBJ_20 /* JNIStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIStrings.swift; sourceTree = ""; }; - OBJ_21 /* SwiftJNI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftJNI.swift; sourceTree = ""; }; - OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; - OBJ_9 /* jni.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jni.c; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - OBJ_40 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 0; - files = ( - OBJ_41 /* CJNI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - OBJ_49 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - OBJ_10 /* include */ = { - isa = PBXGroup; - children = ( - OBJ_11 /* jni.h */, - OBJ_12 /* module.modulemap */, - ); - path = include; - sourceTree = ""; - }; - OBJ_13 /* JNI */ = { - isa = PBXGroup; - children = ( - 03B38DF41F1FC98800B9CDA9 /* Array+JavaParameterConvertible.swift */, - 03B38DF31F1FC98800B9CDA9 /* JavaParameterConvertible.swift */, - OBJ_14 /* JNI.swift */, - OBJ_15 /* JNIClassManipulation.swift */, - OBJ_16 /* JNIExceptions.swift */, - OBJ_17 /* JNIMethods.swift */, - OBJ_18 /* JNIObjects.swift */, - OBJ_19 /* JNIRefs.swift */, - OBJ_20 /* JNIStrings.swift */, - OBJ_21 /* SwiftJNI.swift */, - ); - name = JNI; - path = Sources/JNI; - sourceTree = SOURCE_ROOT; - }; - OBJ_22 /* Tests */ = { - isa = PBXGroup; - children = ( - ); - name = Tests; - sourceTree = SOURCE_ROOT; - }; - OBJ_24 /* Products */ = { - isa = PBXGroup; - children = ( - "JNISwift::JNISwift::Product" /* JNISwift.framework */, - "JNISwift::CJNI::Product" /* CJNI.framework */, - ); - name = Products; - sourceTree = BUILT_PRODUCTS_DIR; - }; - OBJ_5 = { - isa = PBXGroup; - children = ( - OBJ_6 /* Package.swift */, - OBJ_7 /* Sources */, - OBJ_22 /* Tests */, - OBJ_24 /* Products */, - ); - sourceTree = ""; - }; - OBJ_7 /* Sources */ = { - isa = PBXGroup; - children = ( - OBJ_8 /* CJNI */, - OBJ_13 /* JNI */, - ); - name = Sources; - sourceTree = SOURCE_ROOT; - }; - OBJ_8 /* CJNI */ = { - isa = PBXGroup; - children = ( - OBJ_9 /* jni.c */, - OBJ_10 /* include */, - ); - name = CJNI; - path = Sources/CJNI; - sourceTree = SOURCE_ROOT; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - "JNISwift::CJNI" /* CJNI */ = { - isa = PBXNativeTarget; - buildConfigurationList = OBJ_44 /* Build configuration list for PBXNativeTarget "CJNI" */; - buildPhases = ( - OBJ_47 /* Sources */, - OBJ_49 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CJNI; - productName = CJNI; - productReference = "JNISwift::CJNI::Product" /* CJNI.framework */; - productType = "com.apple.product-type.framework"; - }; - "JNISwift::JNISwift" /* JNI */ = { - isa = PBXNativeTarget; - buildConfigurationList = OBJ_28 /* Build configuration list for PBXNativeTarget "JNI" */; - buildPhases = ( - OBJ_31 /* Sources */, - OBJ_40 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - OBJ_42 /* PBXTargetDependency */, - ); - name = JNI; - productName = JNISwift; - productReference = "JNISwift::JNISwift::Product" /* JNISwift.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - OBJ_1 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 9999; - }; - buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "JNI" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = OBJ_5; - productRefGroup = OBJ_24 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - "JNISwift::JNISwift" /* JNI */, - "JNISwift::CJNI" /* CJNI */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - OBJ_31 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 0; - files = ( - OBJ_32 /* JNI.swift in Sources */, - 03B38DF51F1FCA9B00B9CDA9 /* Array+JavaParameterConvertible.swift in Sources */, - OBJ_33 /* JNIClassManipulation.swift in Sources */, - OBJ_34 /* JNIExceptions.swift in Sources */, - OBJ_35 /* JNIMethods.swift in Sources */, - OBJ_36 /* JNIObjects.swift in Sources */, - OBJ_37 /* JNIRefs.swift in Sources */, - OBJ_38 /* JNIStrings.swift in Sources */, - OBJ_39 /* SwiftJNI.swift in Sources */, - 03B38DF61F1FCA9F00B9CDA9 /* JavaParameterConvertible.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - OBJ_47 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 0; - files = ( - OBJ_48 /* jni.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - OBJ_42 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = "JNISwift::CJNI" /* CJNI */; - targetProxy = 5C1D2F2E1F1E277B0006682E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - OBJ_29 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = JNISwift.xcodeproj/JNISwift_Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; - OTHER_LDFLAGS = "$(inherited)"; - OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = JNISwift; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGET_NAME = JNISwift; - }; - name = Debug; - }; - OBJ_3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - MACOSX_DEPLOYMENT_TARGET = 10.10; - ONLY_ACTIVE_ARCH = YES; - OTHER_SWIFT_FLAGS = "-DXcode"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - USE_HEADERMAP = NO; - }; - name = Debug; - }; - OBJ_30 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = JNISwift.xcodeproj/JNISwift_Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; - OTHER_LDFLAGS = "$(inherited)"; - OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = JNISwift; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGET_NAME = JNISwift; - }; - name = Release; - }; - OBJ_4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_OPTIMIZATION_LEVEL = s; - MACOSX_DEPLOYMENT_TARGET = 10.10; - OTHER_SWIFT_FLAGS = "-DXcode"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - USE_HEADERMAP = NO; - }; - name = Release; - }; - OBJ_45 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEFINES_MODULE = NO; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = JNISwift.xcodeproj/CJNI_Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; - OTHER_LDFLAGS = "$(inherited)"; - OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = CJNI; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGET_NAME = CJNI; - }; - name = Debug; - }; - OBJ_46 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEFINES_MODULE = NO; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = JNISwift.xcodeproj/CJNI_Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; - OTHER_LDFLAGS = "$(inherited)"; - OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = CJNI; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - TARGET_NAME = CJNI; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - OBJ_2 /* Build configuration list for PBXProject "JNI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - OBJ_3 /* Debug */, - OBJ_4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - OBJ_28 /* Build configuration list for PBXNativeTarget "JNI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - OBJ_29 /* Debug */, - OBJ_30 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - OBJ_44 /* Build configuration list for PBXNativeTarget "CJNI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - OBJ_45 /* Debug */, - OBJ_46 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; -/* End XCConfigurationList section */ - }; - rootObject = OBJ_1 /* Project object */; + archiveVersion = "1"; + objectVersion = "46"; + objects = { + "JNI::CJNI" = { + isa = "PBXNativeTarget"; + buildConfigurationList = "OBJ_47"; + buildPhases = ( + "OBJ_50", + "OBJ_52", + ); + dependencies = ( + ); + name = "CJNI"; + productName = "CJNI"; + productReference = "JNI::CJNI::Product"; + productType = "com.apple.product-type.framework"; + }; + "JNI::CJNI::Product" = { + isa = "PBXFileReference"; + path = "CJNI.framework"; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + "JNI::JNI" = { + isa = "PBXNativeTarget"; + buildConfigurationList = "OBJ_29"; + buildPhases = ( + "OBJ_32", + "OBJ_43", + ); + dependencies = ( + "OBJ_45", + ); + name = "JNI"; + productName = "JNI"; + productReference = "JNI::JNI::Product"; + productType = "com.apple.product-type.framework"; + }; + "JNI::JNI::Product" = { + isa = "PBXFileReference"; + path = "JNI.framework"; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + "OBJ_1" = { + isa = "PBXProject"; + attributes = { + LastUpgradeCheck = "9999"; + }; + buildConfigurationList = "OBJ_2"; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = "English"; + hasScannedForEncodings = "0"; + knownRegions = ( + "en", + ); + mainGroup = "OBJ_5"; + productRefGroup = "OBJ_25"; + projectDirPath = "."; + targets = ( + "JNI::JNI", + "JNI::CJNI", + ); + }; + "OBJ_10" = { + isa = "PBXGroup"; + children = ( + "OBJ_11", + "OBJ_12", + ); + name = "include"; + path = "include"; + sourceTree = ""; + }; + "OBJ_11" = { + isa = "PBXFileReference"; + path = "jni.h"; + sourceTree = ""; + }; + "OBJ_12" = { + isa = "PBXFileReference"; + name = "module.modulemap"; + path = "/Users/geordiejay/dev/flowkey/smartphone/RNPlayerComponent/NativePlayerIOS/FlowkeyPlayerSDL/UIKit/swift-jni/Sources/CJNI/include/module.modulemap"; + sourceTree = ""; + }; + "OBJ_13" = { + isa = "PBXGroup"; + children = ( + "OBJ_14", + "OBJ_15", + "OBJ_16", + "OBJ_17", + "OBJ_18", + "OBJ_19", + "OBJ_20", + "OBJ_21", + "OBJ_22", + "OBJ_23", + ); + name = "JNI"; + path = "Sources/JNI"; + sourceTree = "SOURCE_ROOT"; + }; + "OBJ_14" = { + isa = "PBXFileReference"; + path = "Array+JavaParameterConvertible.swift"; + sourceTree = ""; + }; + "OBJ_15" = { + isa = "PBXFileReference"; + path = "JNI.swift"; + sourceTree = ""; + }; + "OBJ_16" = { + isa = "PBXFileReference"; + path = "JNIClassManipulation.swift"; + sourceTree = ""; + }; + "OBJ_17" = { + isa = "PBXFileReference"; + path = "JNIExceptions.swift"; + sourceTree = ""; + }; + "OBJ_18" = { + isa = "PBXFileReference"; + path = "JNIMethods.swift"; + sourceTree = ""; + }; + "OBJ_19" = { + isa = "PBXFileReference"; + path = "JNIObjects.swift"; + sourceTree = ""; + }; + "OBJ_2" = { + isa = "XCConfigurationList"; + buildConfigurations = ( + "OBJ_3", + "OBJ_4", + ); + defaultConfigurationIsVisible = "0"; + defaultConfigurationName = "Debug"; + }; + "OBJ_20" = { + isa = "PBXFileReference"; + path = "JNIRefs.swift"; + sourceTree = ""; + }; + "OBJ_21" = { + isa = "PBXFileReference"; + path = "JNIStrings.swift"; + sourceTree = ""; + }; + "OBJ_22" = { + isa = "PBXFileReference"; + path = "JavaParameterConvertible.swift"; + sourceTree = ""; + }; + "OBJ_23" = { + isa = "PBXFileReference"; + path = "SwiftJNI.swift"; + sourceTree = ""; + }; + "OBJ_24" = { + isa = "PBXGroup"; + children = ( + ); + name = "Tests"; + path = ""; + sourceTree = "SOURCE_ROOT"; + }; + "OBJ_25" = { + isa = "PBXGroup"; + children = ( + "JNI::JNI::Product", + "JNI::CJNI::Product", + ); + name = "Products"; + path = ""; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + "OBJ_29" = { + isa = "XCConfigurationList"; + buildConfigurations = ( + "OBJ_30", + "OBJ_31", + ); + defaultConfigurationIsVisible = "0"; + defaultConfigurationName = "Debug"; + }; + "OBJ_3" = { + isa = "XCBuildConfiguration"; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = "YES"; + COMBINE_HIDPI_IMAGES = "YES"; + COPY_PHASE_STRIP = "NO"; + DEBUG_INFORMATION_FORMAT = "dwarf"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = "YES"; + GCC_OPTIMIZATION_LEVEL = "0"; + MACOSX_DEPLOYMENT_TARGET = "10.10"; + ONLY_ACTIVE_ARCH = "YES"; + OTHER_SWIFT_FLAGS = ( + "-DXcode", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = "macosx"; + SUPPORTED_PLATFORMS = ( + "macosx", + "iphoneos", + "iphonesimulator", + "appletvos", + "appletvsimulator", + "watchos", + "watchsimulator", + ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "SWIFT_PACKAGE"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + USE_HEADERMAP = "NO"; + }; + name = "Debug"; + }; + "OBJ_30" = { + isa = "XCBuildConfiguration"; + buildSettings = { + ENABLE_TESTABILITY = "YES"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = "JNI.xcodeproj/JNI_Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + ); + OTHER_SWIFT_FLAGS = ( + "$(inherited)", + "-Xcc", + "-fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap", + ); + PRODUCT_BUNDLE_IDENTIFIER = "JNI"; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = "YES"; + SWIFT_VERSION = "4.0"; + TARGET_NAME = "JNI"; + }; + name = "Debug"; + }; + "OBJ_31" = { + isa = "XCBuildConfiguration"; + buildSettings = { + ENABLE_TESTABILITY = "YES"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = "JNI.xcodeproj/JNI_Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + ); + OTHER_SWIFT_FLAGS = ( + "$(inherited)", + "-Xcc", + "-fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap", + ); + PRODUCT_BUNDLE_IDENTIFIER = "JNI"; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = "YES"; + SWIFT_VERSION = "4.0"; + TARGET_NAME = "JNI"; + }; + name = "Release"; + }; + "OBJ_32" = { + isa = "PBXSourcesBuildPhase"; + files = ( + "OBJ_33", + "OBJ_34", + "OBJ_35", + "OBJ_36", + "OBJ_37", + "OBJ_38", + "OBJ_39", + "OBJ_40", + "OBJ_41", + "OBJ_42", + ); + }; + "OBJ_33" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_14"; + }; + "OBJ_34" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_15"; + }; + "OBJ_35" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_16"; + }; + "OBJ_36" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_17"; + }; + "OBJ_37" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_18"; + }; + "OBJ_38" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_19"; + }; + "OBJ_39" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_20"; + }; + "OBJ_4" = { + isa = "XCBuildConfiguration"; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = "YES"; + COMBINE_HIDPI_IMAGES = "YES"; + COPY_PHASE_STRIP = "YES"; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_OPTIMIZATION_LEVEL = "s"; + MACOSX_DEPLOYMENT_TARGET = "10.10"; + OTHER_SWIFT_FLAGS = ( + "-DXcode", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = "macosx"; + SUPPORTED_PLATFORMS = ( + "macosx", + "iphoneos", + "iphonesimulator", + "appletvos", + "appletvsimulator", + "watchos", + "watchsimulator", + ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "SWIFT_PACKAGE"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + USE_HEADERMAP = "NO"; + }; + name = "Release"; + }; + "OBJ_40" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_21"; + }; + "OBJ_41" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_22"; + }; + "OBJ_42" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_23"; + }; + "OBJ_43" = { + isa = "PBXFrameworksBuildPhase"; + files = ( + "OBJ_44", + ); + }; + "OBJ_44" = { + isa = "PBXBuildFile"; + fileRef = "JNI::CJNI::Product"; + }; + "OBJ_45" = { + isa = "PBXTargetDependency"; + target = "JNI::CJNI"; + }; + "OBJ_47" = { + isa = "XCConfigurationList"; + buildConfigurations = ( + "OBJ_48", + "OBJ_49", + ); + defaultConfigurationIsVisible = "0"; + defaultConfigurationName = "Debug"; + }; + "OBJ_48" = { + isa = "XCBuildConfiguration"; + buildSettings = { + DEFINES_MODULE = "NO"; + ENABLE_TESTABILITY = "YES"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = "JNI.xcodeproj/CJNI_Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + ); + OTHER_SWIFT_FLAGS = ( + "$(inherited)", + ); + PRODUCT_BUNDLE_IDENTIFIER = "CJNI"; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = "YES"; + TARGET_NAME = "CJNI"; + }; + name = "Debug"; + }; + "OBJ_49" = { + isa = "XCBuildConfiguration"; + buildSettings = { + DEFINES_MODULE = "NO"; + ENABLE_TESTABILITY = "YES"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = "JNI.xcodeproj/CJNI_Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", + ); + OTHER_LDFLAGS = ( + "$(inherited)", + ); + OTHER_SWIFT_FLAGS = ( + "$(inherited)", + ); + PRODUCT_BUNDLE_IDENTIFIER = "CJNI"; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = "YES"; + TARGET_NAME = "CJNI"; + }; + name = "Release"; + }; + "OBJ_5" = { + isa = "PBXGroup"; + children = ( + "OBJ_6", + "OBJ_7", + "OBJ_24", + "OBJ_25", + ); + path = ""; + sourceTree = ""; + }; + "OBJ_50" = { + isa = "PBXSourcesBuildPhase"; + files = ( + "OBJ_51", + ); + }; + "OBJ_51" = { + isa = "PBXBuildFile"; + fileRef = "OBJ_9"; + }; + "OBJ_52" = { + isa = "PBXFrameworksBuildPhase"; + files = ( + ); + }; + "OBJ_6" = { + isa = "PBXFileReference"; + explicitFileType = "sourcecode.swift"; + path = "Package.swift"; + sourceTree = ""; + }; + "OBJ_7" = { + isa = "PBXGroup"; + children = ( + "OBJ_8", + "OBJ_13", + ); + name = "Sources"; + path = ""; + sourceTree = "SOURCE_ROOT"; + }; + "OBJ_8" = { + isa = "PBXGroup"; + children = ( + "OBJ_9", + "OBJ_10", + ); + name = "CJNI"; + path = "Sources/CJNI"; + sourceTree = "SOURCE_ROOT"; + }; + "OBJ_9" = { + isa = "PBXFileReference"; + path = "cjni.c"; + sourceTree = ""; + }; + }; + rootObject = "OBJ_1"; } diff --git a/JNI.xcodeproj/xcshareddata/xcschemes/JNI-Package.xcscheme b/JNI.xcodeproj/xcshareddata/xcschemes/JNI-Package.xcscheme index 55091cd..f067174 100644 --- a/JNI.xcodeproj/xcshareddata/xcschemes/JNI-Package.xcscheme +++ b/JNI.xcodeproj/xcshareddata/xcschemes/JNI-Package.xcscheme @@ -14,10 +14,10 @@ buildForAnalyzing = "YES"> + BlueprintIdentifier = "JNI::JNI" + BuildableName = "JNI.framework" + BlueprintName = "JNI" + ReferencedContainer = "container:JNI.xcodeproj"> + ReferencedContainer = "container:JNI.xcodeproj"> @@ -61,10 +61,10 @@ + BlueprintIdentifier = "JNI::JNI" + BuildableName = "JNI.framework" + BlueprintName = "JNI" + ReferencedContainer = "container:JNI.xcodeproj"> diff --git a/JNI.xcodeproj/xcshareddata/xcschemes/JNI.xcscheme b/JNI.xcodeproj/xcshareddata/xcschemes/JNI.xcscheme deleted file mode 100644 index 1dfd20b..0000000 --- a/JNI.xcodeproj/xcshareddata/xcschemes/JNI.xcscheme +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/JNI.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist b/JNI.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist index 6566254..f212055 100644 --- a/JNI.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist +++ b/JNI.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist @@ -3,7 +3,7 @@ SchemeUserState - JNISwift-Package.xcscheme + JNI-Package.xcscheme SuppressBuildableAutocreation diff --git a/Package.swift b/Package.swift index 710d861..80d2aaf 100644 --- a/Package.swift +++ b/Package.swift @@ -5,10 +5,10 @@ import PackageDescription let package = Package( name: "JNI", products: [ - .library(name: "JNI", type: .dynamic, targets: ["CJNI", "JNI"]) + .library(name: "JNI", type: .dynamic, targets: ["JNI", "CJNI"]) ], targets: [ - .target(name: "JNI", dependencies: ["CJNI"]), - .target(name: "CJNI") + .target(name: "CJNI"), + .target(name: "JNI", dependencies: ["CJNI"]) ] ) diff --git a/Sources/CJNI/cjni.c b/Sources/CJNI/cjni.c new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Sources/CJNI/cjni.c @@ -0,0 +1 @@ + diff --git a/Sources/CJNI/jni.c b/Sources/CJNI/jni.c deleted file mode 100644 index 82acb49..0000000 --- a/Sources/CJNI/jni.c +++ /dev/null @@ -1,4 +0,0 @@ -// Stub method to avoid no debug symbol warning from compiler. -int swiftpm_cjni_anchor() { - return 0; -} diff --git a/Sources/JNI/JNI.swift b/Sources/JNI/JNI.swift index 3101980..2b704c1 100644 --- a/Sources/JNI/JNI.swift +++ b/Sources/JNI/JNI.swift @@ -1,4 +1,4 @@ -import CJNI +@_exported import CJNI // "_exported" so we don't have to import both CJNI and JNI all the time public class JNI { /// Our reference to the Java Virtual Machine, to be set on init From 8996ab603098b056de13964ee94fc2475af776ab Mon Sep 17 00:00:00 2001 From: Geordie J Date: Fri, 28 Jul 2017 15:18:30 +0200 Subject: [PATCH 4/7] Clean up JNIMethods --- JNI.xcodeproj/project.pbxproj | 930 ++++++++---------- .../JNI/Array+JavaParameterConvertible.swift | 5 + Sources/JNI/JNIMethods.swift | 37 +- Sources/JNI/JavaParameterConvertible.swift | 3 +- Sources/JNI/SwiftJNI.swift | 17 +- 5 files changed, 442 insertions(+), 550 deletions(-) diff --git a/JNI.xcodeproj/project.pbxproj b/JNI.xcodeproj/project.pbxproj index ed4024e..5d912cf 100644 --- a/JNI.xcodeproj/project.pbxproj +++ b/JNI.xcodeproj/project.pbxproj @@ -1,517 +1,419 @@ // !$*UTF8*$! { - archiveVersion = "1"; - objectVersion = "46"; - objects = { - "JNI::CJNI" = { - isa = "PBXNativeTarget"; - buildConfigurationList = "OBJ_47"; - buildPhases = ( - "OBJ_50", - "OBJ_52", - ); - dependencies = ( - ); - name = "CJNI"; - productName = "CJNI"; - productReference = "JNI::CJNI::Product"; - productType = "com.apple.product-type.framework"; - }; - "JNI::CJNI::Product" = { - isa = "PBXFileReference"; - path = "CJNI.framework"; - sourceTree = "BUILT_PRODUCTS_DIR"; - }; - "JNI::JNI" = { - isa = "PBXNativeTarget"; - buildConfigurationList = "OBJ_29"; - buildPhases = ( - "OBJ_32", - "OBJ_43", - ); - dependencies = ( - "OBJ_45", - ); - name = "JNI"; - productName = "JNI"; - productReference = "JNI::JNI::Product"; - productType = "com.apple.product-type.framework"; - }; - "JNI::JNI::Product" = { - isa = "PBXFileReference"; - path = "JNI.framework"; - sourceTree = "BUILT_PRODUCTS_DIR"; - }; - "OBJ_1" = { - isa = "PBXProject"; - attributes = { - LastUpgradeCheck = "9999"; - }; - buildConfigurationList = "OBJ_2"; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = "English"; - hasScannedForEncodings = "0"; - knownRegions = ( - "en", - ); - mainGroup = "OBJ_5"; - productRefGroup = "OBJ_25"; - projectDirPath = "."; - targets = ( - "JNI::JNI", - "JNI::CJNI", - ); - }; - "OBJ_10" = { - isa = "PBXGroup"; - children = ( - "OBJ_11", - "OBJ_12", - ); - name = "include"; - path = "include"; - sourceTree = ""; - }; - "OBJ_11" = { - isa = "PBXFileReference"; - path = "jni.h"; - sourceTree = ""; - }; - "OBJ_12" = { - isa = "PBXFileReference"; - name = "module.modulemap"; - path = "/Users/geordiejay/dev/flowkey/smartphone/RNPlayerComponent/NativePlayerIOS/FlowkeyPlayerSDL/UIKit/swift-jni/Sources/CJNI/include/module.modulemap"; - sourceTree = ""; - }; - "OBJ_13" = { - isa = "PBXGroup"; - children = ( - "OBJ_14", - "OBJ_15", - "OBJ_16", - "OBJ_17", - "OBJ_18", - "OBJ_19", - "OBJ_20", - "OBJ_21", - "OBJ_22", - "OBJ_23", - ); - name = "JNI"; - path = "Sources/JNI"; - sourceTree = "SOURCE_ROOT"; - }; - "OBJ_14" = { - isa = "PBXFileReference"; - path = "Array+JavaParameterConvertible.swift"; - sourceTree = ""; - }; - "OBJ_15" = { - isa = "PBXFileReference"; - path = "JNI.swift"; - sourceTree = ""; - }; - "OBJ_16" = { - isa = "PBXFileReference"; - path = "JNIClassManipulation.swift"; - sourceTree = ""; - }; - "OBJ_17" = { - isa = "PBXFileReference"; - path = "JNIExceptions.swift"; - sourceTree = ""; - }; - "OBJ_18" = { - isa = "PBXFileReference"; - path = "JNIMethods.swift"; - sourceTree = ""; - }; - "OBJ_19" = { - isa = "PBXFileReference"; - path = "JNIObjects.swift"; - sourceTree = ""; - }; - "OBJ_2" = { - isa = "XCConfigurationList"; - buildConfigurations = ( - "OBJ_3", - "OBJ_4", - ); - defaultConfigurationIsVisible = "0"; - defaultConfigurationName = "Debug"; - }; - "OBJ_20" = { - isa = "PBXFileReference"; - path = "JNIRefs.swift"; - sourceTree = ""; - }; - "OBJ_21" = { - isa = "PBXFileReference"; - path = "JNIStrings.swift"; - sourceTree = ""; - }; - "OBJ_22" = { - isa = "PBXFileReference"; - path = "JavaParameterConvertible.swift"; - sourceTree = ""; - }; - "OBJ_23" = { - isa = "PBXFileReference"; - path = "SwiftJNI.swift"; - sourceTree = ""; - }; - "OBJ_24" = { - isa = "PBXGroup"; - children = ( - ); - name = "Tests"; - path = ""; - sourceTree = "SOURCE_ROOT"; - }; - "OBJ_25" = { - isa = "PBXGroup"; - children = ( - "JNI::JNI::Product", - "JNI::CJNI::Product", - ); - name = "Products"; - path = ""; - sourceTree = "BUILT_PRODUCTS_DIR"; - }; - "OBJ_29" = { - isa = "XCConfigurationList"; - buildConfigurations = ( - "OBJ_30", - "OBJ_31", - ); - defaultConfigurationIsVisible = "0"; - defaultConfigurationName = "Debug"; - }; - "OBJ_3" = { - isa = "XCBuildConfiguration"; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = "YES"; - COMBINE_HIDPI_IMAGES = "YES"; - COPY_PHASE_STRIP = "NO"; - DEBUG_INFORMATION_FORMAT = "dwarf"; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_NS_ASSERTIONS = "YES"; - GCC_OPTIMIZATION_LEVEL = "0"; - MACOSX_DEPLOYMENT_TARGET = "10.10"; - ONLY_ACTIVE_ARCH = "YES"; - OTHER_SWIFT_FLAGS = ( - "-DXcode", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = "macosx"; - SUPPORTED_PLATFORMS = ( - "macosx", - "iphoneos", - "iphonesimulator", - "appletvos", - "appletvsimulator", - "watchos", - "watchsimulator", - ); - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "SWIFT_PACKAGE"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - USE_HEADERMAP = "NO"; - }; - name = "Debug"; - }; - "OBJ_30" = { - isa = "XCBuildConfiguration"; - buildSettings = { - ENABLE_TESTABILITY = "YES"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = "JNI.xcodeproj/JNI_Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - ); - OTHER_SWIFT_FLAGS = ( - "$(inherited)", - "-Xcc", - "-fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap", - ); - PRODUCT_BUNDLE_IDENTIFIER = "JNI"; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = "YES"; - SWIFT_VERSION = "4.0"; - TARGET_NAME = "JNI"; - }; - name = "Debug"; - }; - "OBJ_31" = { - isa = "XCBuildConfiguration"; - buildSettings = { - ENABLE_TESTABILITY = "YES"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = "JNI.xcodeproj/JNI_Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - ); - OTHER_SWIFT_FLAGS = ( - "$(inherited)", - "-Xcc", - "-fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap", - ); - PRODUCT_BUNDLE_IDENTIFIER = "JNI"; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = "YES"; - SWIFT_VERSION = "4.0"; - TARGET_NAME = "JNI"; - }; - name = "Release"; - }; - "OBJ_32" = { - isa = "PBXSourcesBuildPhase"; - files = ( - "OBJ_33", - "OBJ_34", - "OBJ_35", - "OBJ_36", - "OBJ_37", - "OBJ_38", - "OBJ_39", - "OBJ_40", - "OBJ_41", - "OBJ_42", - ); - }; - "OBJ_33" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_14"; - }; - "OBJ_34" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_15"; - }; - "OBJ_35" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_16"; - }; - "OBJ_36" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_17"; - }; - "OBJ_37" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_18"; - }; - "OBJ_38" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_19"; - }; - "OBJ_39" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_20"; - }; - "OBJ_4" = { - isa = "XCBuildConfiguration"; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = "YES"; - COMBINE_HIDPI_IMAGES = "YES"; - COPY_PHASE_STRIP = "YES"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_OPTIMIZATION_LEVEL = "s"; - MACOSX_DEPLOYMENT_TARGET = "10.10"; - OTHER_SWIFT_FLAGS = ( - "-DXcode", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = "macosx"; - SUPPORTED_PLATFORMS = ( - "macosx", - "iphoneos", - "iphonesimulator", - "appletvos", - "appletvsimulator", - "watchos", - "watchsimulator", - ); - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "SWIFT_PACKAGE"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - USE_HEADERMAP = "NO"; - }; - name = "Release"; - }; - "OBJ_40" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_21"; - }; - "OBJ_41" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_22"; - }; - "OBJ_42" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_23"; - }; - "OBJ_43" = { - isa = "PBXFrameworksBuildPhase"; - files = ( - "OBJ_44", - ); - }; - "OBJ_44" = { - isa = "PBXBuildFile"; - fileRef = "JNI::CJNI::Product"; - }; - "OBJ_45" = { - isa = "PBXTargetDependency"; - target = "JNI::CJNI"; - }; - "OBJ_47" = { - isa = "XCConfigurationList"; - buildConfigurations = ( - "OBJ_48", - "OBJ_49", - ); - defaultConfigurationIsVisible = "0"; - defaultConfigurationName = "Debug"; - }; - "OBJ_48" = { - isa = "XCBuildConfiguration"; - buildSettings = { - DEFINES_MODULE = "NO"; - ENABLE_TESTABILITY = "YES"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = "JNI.xcodeproj/CJNI_Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - ); - OTHER_SWIFT_FLAGS = ( - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "CJNI"; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = "YES"; - TARGET_NAME = "CJNI"; - }; - name = "Debug"; - }; - "OBJ_49" = { - isa = "XCBuildConfiguration"; - buildSettings = { - DEFINES_MODULE = "NO"; - ENABLE_TESTABILITY = "YES"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Sources/CJNI/include", - ); - INFOPLIST_FILE = "JNI.xcodeproj/CJNI_Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - ); - OTHER_SWIFT_FLAGS = ( - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "CJNI"; - PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = "YES"; - TARGET_NAME = "CJNI"; - }; - name = "Release"; - }; - "OBJ_5" = { - isa = "PBXGroup"; - children = ( - "OBJ_6", - "OBJ_7", - "OBJ_24", - "OBJ_25", - ); - path = ""; - sourceTree = ""; - }; - "OBJ_50" = { - isa = "PBXSourcesBuildPhase"; - files = ( - "OBJ_51", - ); - }; - "OBJ_51" = { - isa = "PBXBuildFile"; - fileRef = "OBJ_9"; - }; - "OBJ_52" = { - isa = "PBXFrameworksBuildPhase"; - files = ( - ); - }; - "OBJ_6" = { - isa = "PBXFileReference"; - explicitFileType = "sourcecode.swift"; - path = "Package.swift"; - sourceTree = ""; - }; - "OBJ_7" = { - isa = "PBXGroup"; - children = ( - "OBJ_8", - "OBJ_13", - ); - name = "Sources"; - path = ""; - sourceTree = "SOURCE_ROOT"; - }; - "OBJ_8" = { - isa = "PBXGroup"; - children = ( - "OBJ_9", - "OBJ_10", - ); - name = "CJNI"; - path = "Sources/CJNI"; - sourceTree = "SOURCE_ROOT"; - }; - "OBJ_9" = { - isa = "PBXFileReference"; - path = "cjni.c"; - sourceTree = ""; - }; - }; - rootObject = "OBJ_1"; + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + OBJ_33 /* Array+JavaParameterConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_14 /* Array+JavaParameterConvertible.swift */; }; + OBJ_34 /* JNI.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_15 /* JNI.swift */; }; + OBJ_35 /* JNIClassManipulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_16 /* JNIClassManipulation.swift */; }; + OBJ_36 /* JNIExceptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* JNIExceptions.swift */; }; + OBJ_37 /* JNIMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* JNIMethods.swift */; }; + OBJ_38 /* JNIObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* JNIObjects.swift */; }; + OBJ_39 /* JNIRefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* JNIRefs.swift */; }; + OBJ_40 /* JNIStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* JNIStrings.swift */; }; + OBJ_41 /* JavaParameterConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_22 /* JavaParameterConvertible.swift */; }; + OBJ_42 /* SwiftJNI.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_23 /* SwiftJNI.swift */; }; + OBJ_44 /* CJNI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "JNI::CJNI::Product" /* CJNI.framework */; }; + OBJ_51 /* cjni.c in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_9 /* cjni.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 5C2714A61F2B6DC70026BBA9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = OBJ_1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = "JNI::CJNI"; + remoteInfo = CJNI; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + "JNI::CJNI::Product" /* CJNI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CJNI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + "JNI::JNI::Product" /* JNI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = JNI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + OBJ_11 /* jni.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jni.h; sourceTree = ""; }; + OBJ_12 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = module.modulemap; path = "/Users/geordiejay/dev/flowkey/smartphone/RNPlayerComponent/NativePlayerIOS/FlowkeyPlayerSDL/UIKit/swift-jni/Sources/CJNI/include/module.modulemap"; sourceTree = ""; }; + OBJ_14 /* Array+JavaParameterConvertible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+JavaParameterConvertible.swift"; sourceTree = ""; }; + OBJ_15 /* JNI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNI.swift; sourceTree = ""; }; + OBJ_16 /* JNIClassManipulation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIClassManipulation.swift; sourceTree = ""; }; + OBJ_17 /* JNIExceptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIExceptions.swift; sourceTree = ""; }; + OBJ_18 /* JNIMethods.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIMethods.swift; sourceTree = ""; }; + OBJ_19 /* JNIObjects.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIObjects.swift; sourceTree = ""; }; + OBJ_20 /* JNIRefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIRefs.swift; sourceTree = ""; }; + OBJ_21 /* JNIStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JNIStrings.swift; sourceTree = ""; }; + OBJ_22 /* JavaParameterConvertible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JavaParameterConvertible.swift; sourceTree = ""; }; + OBJ_23 /* SwiftJNI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftJNI.swift; sourceTree = ""; }; + OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; + OBJ_9 /* cjni.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = cjni.c; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + OBJ_43 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 0; + files = ( + OBJ_44 /* CJNI.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_52 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + OBJ_10 /* include */ = { + isa = PBXGroup; + children = ( + OBJ_11 /* jni.h */, + OBJ_12 /* module.modulemap */, + ); + path = include; + sourceTree = ""; + }; + OBJ_13 /* JNI */ = { + isa = PBXGroup; + children = ( + OBJ_14 /* Array+JavaParameterConvertible.swift */, + OBJ_15 /* JNI.swift */, + OBJ_16 /* JNIClassManipulation.swift */, + OBJ_17 /* JNIExceptions.swift */, + OBJ_18 /* JNIMethods.swift */, + OBJ_19 /* JNIObjects.swift */, + OBJ_20 /* JNIRefs.swift */, + OBJ_21 /* JNIStrings.swift */, + OBJ_22 /* JavaParameterConvertible.swift */, + OBJ_23 /* SwiftJNI.swift */, + ); + name = JNI; + path = Sources/JNI; + sourceTree = SOURCE_ROOT; + }; + OBJ_24 /* Tests */ = { + isa = PBXGroup; + children = ( + ); + name = Tests; + sourceTree = SOURCE_ROOT; + }; + OBJ_25 /* Products */ = { + isa = PBXGroup; + children = ( + "JNI::JNI::Product" /* JNI.framework */, + "JNI::CJNI::Product" /* CJNI.framework */, + ); + name = Products; + sourceTree = BUILT_PRODUCTS_DIR; + }; + OBJ_5 /* */ = { + isa = PBXGroup; + children = ( + OBJ_6 /* Package.swift */, + OBJ_7 /* Sources */, + OBJ_24 /* Tests */, + OBJ_25 /* Products */, + ); + name = ""; + sourceTree = ""; + }; + OBJ_7 /* Sources */ = { + isa = PBXGroup; + children = ( + OBJ_8 /* CJNI */, + OBJ_13 /* JNI */, + ); + name = Sources; + sourceTree = SOURCE_ROOT; + }; + OBJ_8 /* CJNI */ = { + isa = PBXGroup; + children = ( + OBJ_9 /* cjni.c */, + OBJ_10 /* include */, + ); + name = CJNI; + path = Sources/CJNI; + sourceTree = SOURCE_ROOT; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + "JNI::CJNI" /* CJNI */ = { + isa = PBXNativeTarget; + buildConfigurationList = OBJ_47 /* Build configuration list for PBXNativeTarget "CJNI" */; + buildPhases = ( + OBJ_50 /* Sources */, + OBJ_52 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CJNI; + productName = CJNI; + productReference = "JNI::CJNI::Product" /* CJNI.framework */; + productType = "com.apple.product-type.framework"; + }; + "JNI::JNI" /* JNI */ = { + isa = PBXNativeTarget; + buildConfigurationList = OBJ_29 /* Build configuration list for PBXNativeTarget "JNI" */; + buildPhases = ( + OBJ_32 /* Sources */, + OBJ_43 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + OBJ_45 /* PBXTargetDependency */, + ); + name = JNI; + productName = JNI; + productReference = "JNI::JNI::Product" /* JNI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + OBJ_1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 9999; + }; + buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "JNI" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = OBJ_5 /* */; + productRefGroup = OBJ_25 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + "JNI::JNI" /* JNI */, + "JNI::CJNI" /* CJNI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + OBJ_32 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 0; + files = ( + OBJ_33 /* Array+JavaParameterConvertible.swift in Sources */, + OBJ_34 /* JNI.swift in Sources */, + OBJ_35 /* JNIClassManipulation.swift in Sources */, + OBJ_36 /* JNIExceptions.swift in Sources */, + OBJ_37 /* JNIMethods.swift in Sources */, + OBJ_38 /* JNIObjects.swift in Sources */, + OBJ_39 /* JNIRefs.swift in Sources */, + OBJ_40 /* JNIStrings.swift in Sources */, + OBJ_41 /* JavaParameterConvertible.swift in Sources */, + OBJ_42 /* SwiftJNI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_50 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 0; + files = ( + OBJ_51 /* cjni.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + OBJ_45 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = "JNI::CJNI" /* CJNI */; + targetProxy = 5C2714A61F2B6DC70026BBA9 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + OBJ_3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "-DXcode"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + OBJ_30 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = JNI.xcodeproj/JNI_Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = JNI; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGET_NAME = JNI; + }; + name = Debug; + }; + OBJ_31 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = JNI.xcodeproj/JNI_Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -fmodule-map-file=$(SRCROOT)/Sources/CJNI/include/module.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = JNI; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGET_NAME = JNI; + }; + name = Release; + }; + OBJ_4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_OPTIMIZATION_LEVEL = s; + MACOSX_DEPLOYMENT_TARGET = 10.10; + OTHER_SWIFT_FLAGS = "-DXcode"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + OBJ_48 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEFINES_MODULE = NO; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = JNI.xcodeproj/CJNI_Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = CJNI; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGET_NAME = CJNI; + }; + name = Debug; + }; + OBJ_49 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEFINES_MODULE = NO; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/Sources/CJNI/include", + ); + INFOPLIST_FILE = JNI.xcodeproj/CJNI_Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = CJNI; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGET_NAME = CJNI; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + OBJ_2 /* Build configuration list for PBXProject "JNI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_3 /* Debug */, + OBJ_4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + OBJ_29 /* Build configuration list for PBXNativeTarget "JNI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_30 /* Debug */, + OBJ_31 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + OBJ_47 /* Build configuration list for PBXNativeTarget "CJNI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_48 /* Debug */, + OBJ_49 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = OBJ_1 /* Project object */; } diff --git a/Sources/JNI/Array+JavaParameterConvertible.swift b/Sources/JNI/Array+JavaParameterConvertible.swift index a703c89..119ebbe 100644 --- a/Sources/JNI/Array+JavaParameterConvertible.swift +++ b/Sources/JNI/Array+JavaParameterConvertible.swift @@ -38,4 +38,9 @@ extension Array where Element == JavaParameterConvertible { let returnTypeString = "L" + returnType.replacingFullstopsWithSlashes() + ";" return "(" + self.argumentSignature() + ")" + returnTypeString } + + func methodSignature(customReturnType: String) -> String { + let returnTypeString = customReturnType.replacingFullstopsWithSlashes() + return "(" + self.argumentSignature() + ")" + returnTypeString + } } diff --git a/Sources/JNI/JNIMethods.swift b/Sources/JNI/JNIMethods.swift index 0fe28d4..a7e5837 100644 --- a/Sources/JNI/JNIMethods.swift +++ b/Sources/JNI/JNIMethods.swift @@ -1,73 +1,52 @@ import CJNI -struct InvalidParameters: Error {} +struct InvalidMethodID: Error {} extension JNI { - // MARK: Static Methods public func callStatic(_ methodName: String, on javaClass: JavaClass, arguments: [JavaParameterConvertible] = []) throws { let methodSignature = arguments.methodSignature(returnType: nil) - - guard let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) - else { throw InvalidParameters() } + let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) jni.CallStaticVoidMethod(javaClass: javaClass, method: methodID, parameters: arguments.asJavaParameters()) } public func callStatic(_ methodName: String, on javaClass: JavaClass, arguments: [JavaParameterConvertible] = []) throws -> T { let methodSignature = arguments.methodSignature(returnType: T.self) - - guard let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) - else { throw InvalidParameters() } + let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) return try T.fromStaticMethod(calling: methodID, on: javaClass, args: arguments.asJavaParameters()) } - public func callStatic(_ methodName: String, on javaClass: JavaClass, arguments: [JavaParameterConvertible] = [], returningObjectType objectType: String) throws -> JavaObject { - let methodSignature = arguments.methodSignature(returnType: objectType) - guard let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) else { - throw InvalidParameters() - } + let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) return try jni.CallStaticObjectMethod(methodID, on: javaClass, parameters: arguments.asJavaParameters()) } - // MARK: Instance/Object Methods public func call(_ methodName: String, on object: JavaObject, arguments: [JavaParameterConvertible] = []) throws { let methodSignature = arguments.methodSignature(returnType: nil) - - guard let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) else { - throw InvalidParameters() - } + let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) return try jni.CallVoidMethod(methodID, on: object, parameters: arguments.asJavaParameters()) } - public func call(_ methodName: String, on object: JavaObject, arguments: [JavaParameterConvertible] = [], returningObjectType objectType: String) throws -> JavaObject { - let methodSignature = arguments.methodSignature(returnType: objectType) - guard let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) else { - throw InvalidParameters() - } + let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) return try jni.CallObjectMethod(methodID, on: object, parameters: arguments.asJavaParameters()) } - public func call(_ methodName: String, on object: JavaObject, with arguments: [JavaParameterConvertible]) throws -> [String] { - let argumentsSignature = arguments.reduce("", { $0 + type(of: $1).asJNIParameterString }) - let methodSignature = "(" + argumentsSignature + ")" + "[" + String.asJNIParameterString - - guard let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) else { throw InvalidParameters() } + let methodSignature = arguments.methodSignature(customReturnType: "[" + String.asJNIParameterString) + let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) let returnedArray = try jni.CallObjectMethod(methodID, on: object, parameters: arguments.asJavaParameters()) return try jni.GetStrings(from: returnedArray) } - } diff --git a/Sources/JNI/JavaParameterConvertible.swift b/Sources/JNI/JavaParameterConvertible.swift index a99c174..9e4e837 100644 --- a/Sources/JNI/JavaParameterConvertible.swift +++ b/Sources/JNI/JavaParameterConvertible.swift @@ -39,7 +39,8 @@ extension Int: JavaParameterConvertible { } extension String: JavaParameterConvertible { - public static var asJNIParameterString: String { return "Ljava/lang/String;" } + private static let javaClassname = "java/lang/String" + public static let asJNIParameterString = "L\(javaClassname);" public func toJavaParameter() -> JavaParameter { let stringAsObject = jni.NewStringUTF(self) diff --git a/Sources/JNI/SwiftJNI.swift b/Sources/JNI/SwiftJNI.swift index 5eb2239..6955252 100644 --- a/Sources/JNI/SwiftJNI.swift +++ b/Sources/JNI/SwiftJNI.swift @@ -65,19 +65,25 @@ extension JNI { return result } - public func GetMethodID(for object: JavaObject, methodName: String, methodSignature: String) throws -> JavaMethodID? { + public func GetMethodID(for object: JavaObject, methodName: String, methodSignature: String) throws -> JavaMethodID { let _env = self._env let objectClass = _env.pointee.pointee.GetObjectClass(_env, object) try checkAndThrowOnJNIError() - let result = _env.pointee.pointee.GetMethodID(_env, objectClass!, methodName, methodSignature) + guard let result = _env.pointee.pointee.GetMethodID(_env, objectClass!, methodName, methodSignature) else { + throw InvalidMethodID() + } + try checkAndThrowOnJNIError() return result } - public func GetStaticMethodID(for javaClass: JavaClass, methodName: String, methodSignature: String) throws -> JavaMethodID? { + public func GetStaticMethodID(for javaClass: JavaClass, methodName: String, methodSignature: String) throws -> JavaMethodID { let _env = self._env - let result = _env.pointee.pointee.GetStaticMethodID(_env, javaClass, methodName, methodSignature) + guard let result = _env.pointee.pointee.GetStaticMethodID(_env, javaClass, methodName, methodSignature) else { + throw InvalidMethodID() + } + try checkAndThrowOnJNIError() return result } @@ -285,8 +291,7 @@ public struct JavaCallback { guard let javaClass = jni.GetObjectClass(obj: globalJobj), - let methodIDwithoutError = try? jni.GetMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature), - let methodID = methodIDwithoutError + let methodID = try? jni.GetMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) else { // XXX: We should throw here and keep throwing til it gets back to Java fatalError("Failed to make JavaCallback") From 4ed9f9b7612fb8472c9a27769cd314229ebc451b Mon Sep 17 00:00:00 2001 From: Geordie J Date: Fri, 28 Jul 2017 15:20:54 +0200 Subject: [PATCH 5/7] Remove methodSignature(returnType: JavaObjectClassName) --- Sources/JNI/Array+JavaParameterConvertible.swift | 5 ----- Sources/JNI/JNIMethods.swift | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Sources/JNI/Array+JavaParameterConvertible.swift b/Sources/JNI/Array+JavaParameterConvertible.swift index 119ebbe..f389183 100644 --- a/Sources/JNI/Array+JavaParameterConvertible.swift +++ b/Sources/JNI/Array+JavaParameterConvertible.swift @@ -34,11 +34,6 @@ extension Array where Element == JavaParameterConvertible { return "(" + self.argumentSignature() + ")" + returnTypeString } - func methodSignature(returnType: JavaObjectClassName) -> String { - let returnTypeString = "L" + returnType.replacingFullstopsWithSlashes() + ";" - return "(" + self.argumentSignature() + ")" + returnTypeString - } - func methodSignature(customReturnType: String) -> String { let returnTypeString = customReturnType.replacingFullstopsWithSlashes() return "(" + self.argumentSignature() + ")" + returnTypeString diff --git a/Sources/JNI/JNIMethods.swift b/Sources/JNI/JNIMethods.swift index a7e5837..14d060e 100644 --- a/Sources/JNI/JNIMethods.swift +++ b/Sources/JNI/JNIMethods.swift @@ -20,7 +20,7 @@ extension JNI { } public func callStatic(_ methodName: String, on javaClass: JavaClass, arguments: [JavaParameterConvertible] = [], returningObjectType objectType: String) throws -> JavaObject { - let methodSignature = arguments.methodSignature(returnType: objectType) + let methodSignature = arguments.methodSignature(customReturnType: "L" + objectType + ";") let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) return try jni.CallStaticObjectMethod(methodID, on: javaClass, parameters: arguments.asJavaParameters()) @@ -36,7 +36,7 @@ extension JNI { } public func call(_ methodName: String, on object: JavaObject, arguments: [JavaParameterConvertible] = [], returningObjectType objectType: String) throws -> JavaObject { - let methodSignature = arguments.methodSignature(returnType: objectType) + let methodSignature = arguments.methodSignature(customReturnType: "L" + objectType + ";") let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) return try jni.CallObjectMethod(methodID, on: object, parameters: arguments.asJavaParameters()) From 5314ceea6ca8a33725cfb807894223909f0c174f Mon Sep 17 00:00:00 2001 From: Geordie J Date: Fri, 28 Jul 2017 16:26:28 +0200 Subject: [PATCH 6/7] Remove JavaObjectClassName --- Sources/JNI/Array+JavaParameterConvertible.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Sources/JNI/Array+JavaParameterConvertible.swift b/Sources/JNI/Array+JavaParameterConvertible.swift index f389183..6f571da 100644 --- a/Sources/JNI/Array+JavaParameterConvertible.swift +++ b/Sources/JNI/Array+JavaParameterConvertible.swift @@ -7,8 +7,6 @@ import CJNI -typealias JavaObjectClassName = String - private extension String { func replacingFullstopsWithSlashes() -> String { let replacedCharacters = self.characters.map { ($0 == ".") ? "/" : $0 } From 4b18b6c9b45dcfd5e8c4c7165044daff6d2d648b Mon Sep 17 00:00:00 2001 From: Geordie J Date: Wed, 2 Aug 2017 19:28:57 +0200 Subject: [PATCH 7/7] Add more type conformances (Double, Int) to JavaParameterConvertible - add JavaParameterConvertible.fromMethod() to complement .fromStaticMethod() - add JNIObject type to help constructing java objects from Swift and calling their methods --- .../JNI/Array+JavaParameterConvertible.swift | 2 +- Sources/JNI/JNIClassManipulation.swift | 4 +- Sources/JNI/JNIMethods.swift | 9 ++- Sources/JNI/JNIObjects.swift | 65 ++++++++++++++++--- Sources/JNI/JNIRefs.swift | 8 +-- Sources/JNI/JavaParameterConvertible.swift | 35 +++++++++- Sources/JNI/SwiftJNI.swift | 57 +++++++++++----- 7 files changed, 145 insertions(+), 35 deletions(-) diff --git a/Sources/JNI/Array+JavaParameterConvertible.swift b/Sources/JNI/Array+JavaParameterConvertible.swift index 6f571da..1e0318a 100644 --- a/Sources/JNI/Array+JavaParameterConvertible.swift +++ b/Sources/JNI/Array+JavaParameterConvertible.swift @@ -7,7 +7,7 @@ import CJNI -private extension String { +extension String { func replacingFullstopsWithSlashes() -> String { let replacedCharacters = self.characters.map { ($0 == ".") ? "/" : $0 } return String(String.CharacterView(replacedCharacters)) diff --git a/Sources/JNI/JNIClassManipulation.swift b/Sources/JNI/JNIClassManipulation.swift index 9f52706..e6bba2d 100644 --- a/Sources/JNI/JNIClassManipulation.swift +++ b/Sources/JNI/JNIClassManipulation.swift @@ -6,9 +6,9 @@ public extension JNI { // return env.pointee.pointee.DefineClass(env, name, loader, buffer, bufferLength)! // } - public func FindClass(name: String) -> JavaClass { + public func FindClass(name: String) -> JavaClass? { let env = self._env - return env.pointee.pointee.FindClass(env, name)! + return env.pointee.pointee.FindClass(env, name) } public func FromReflectedMethod(method: JavaObject) -> JavaMethodID { diff --git a/Sources/JNI/JNIMethods.swift b/Sources/JNI/JNIMethods.swift index 14d060e..3661719 100644 --- a/Sources/JNI/JNIMethods.swift +++ b/Sources/JNI/JNIMethods.swift @@ -9,7 +9,7 @@ extension JNI { let methodSignature = arguments.methodSignature(returnType: nil) let methodID = try jni.GetStaticMethodID(for: javaClass, methodName: methodName, methodSignature: methodSignature) - jni.CallStaticVoidMethod(javaClass: javaClass, method: methodID, parameters: arguments.asJavaParameters()) + try jni.CallStaticVoidMethod(javaClass: javaClass, method: methodID, parameters: arguments.asJavaParameters()) } public func callStatic(_ methodName: String, on javaClass: JavaClass, arguments: [JavaParameterConvertible] = []) throws -> T { @@ -35,6 +35,13 @@ extension JNI { return try jni.CallVoidMethod(methodID, on: object, parameters: arguments.asJavaParameters()) } + public func call(_ methodName: String, on object: JavaObject, arguments: [JavaParameterConvertible] = []) throws -> T { + let methodSignature = arguments.methodSignature(returnType: T.self) + let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) + + return try T.fromMethod(calling: methodID, on: object, args: arguments.asJavaParameters()) + } + public func call(_ methodName: String, on object: JavaObject, arguments: [JavaParameterConvertible] = [], returningObjectType objectType: String) throws -> JavaObject { let methodSignature = arguments.methodSignature(customReturnType: "L" + objectType + ";") let methodID = try jni.GetMethodID(for: object, methodName: methodName, methodSignature: methodSignature) diff --git a/Sources/JNI/JNIObjects.swift b/Sources/JNI/JNIObjects.swift index 029d398..0063f0c 100644 --- a/Sources/JNI/JNIObjects.swift +++ b/Sources/JNI/JNIObjects.swift @@ -1,20 +1,67 @@ import CJNI -public extension JNI { +/// Designed to simplify calling a constructor and methods on a JavaClass +/// Subclass this and add the methods appropriate to the object you are constructing. +open class JNIObject { + public let javaClass: JavaClass + public let instance: JavaObject - public func AllocObject(targetClass: JavaClass) -> JavaObject { - let env = self._env - return env.pointee.pointee.AllocObject(env, targetClass)! - } + public init?(_ className: String, arguments: [JavaParameterConvertible] = []) { + let className = className.replacingFullstopsWithSlashes() + + guard + let javaClassLocalRef = jni.FindClass(name: className), + let javaClass = jni.NewGlobalRef(javaClassLocalRef) + else { + assertionFailure("Couldn't find class named \(className)") + return nil + } + + self.javaClass = javaClass + + guard + let instanceLocalRef = try? jni.callConstructor(on: javaClass, arguments: arguments), + let instance = jni.NewGlobalRef(instanceLocalRef) + else { + assertionFailure("Couldn't call constructor of \(className)") + return nil + } + + self.instance = instance + } + + public func call(methodName: String, arguments: [JavaParameterConvertible] = []) throws { + try jni.call(methodName, on: self.instance, arguments: arguments) + } - public func NewObject(targetClass: JavaClass, _ methodID: JavaMethodID, _ args: JavaParameter...) -> JavaObject { - return self.NewObject(targetClass: targetClass, methodID, args) + public func call(methodName: String, arguments: [JavaParameterConvertible] = []) throws -> T { + return try jni.call(methodName, on: self.instance, arguments: arguments) + } + + public func callStatic(methodName: String, arguments: [JavaParameterConvertible] = []) throws { + try jni.callStatic(methodName, on: self.javaClass, arguments: arguments) + } +} + +extension JNI { + func callConstructor(on targetClass: JavaClass, arguments: [JavaParameterConvertible] = []) throws -> JavaObject { + let methodID = try jni.GetMethodID(for: targetClass, methodName: "", methodSignature: arguments.methodSignature(returnType: nil)) + + // There's no reason for this to fail if the methodID was correct: + return jni.NewObject(targetClass: targetClass, methodID, arguments.asJavaParameters())! + } +} + +public extension JNI { + public func AllocObject(targetClass: JavaClass) -> JavaObject? { + let env = self._env + return env.pointee.pointee.AllocObject(env, targetClass) } - public func NewObject(targetClass: JavaClass, _ methodID: JavaMethodID, _ args: [JavaParameter]) -> JavaObject { + public func NewObject(targetClass: JavaClass, _ methodID: JavaMethodID, _ args: [JavaParameter]) -> JavaObject? { let env = self._env var mutableArgs = args - return env.pointee.pointee.NewObject(env, targetClass, methodID, &mutableArgs)! + return env.pointee.pointee.NewObject(env, targetClass, methodID, &mutableArgs) } public func GetObjectClass(obj: JavaObject) -> JavaClass? { diff --git a/Sources/JNI/JNIRefs.swift b/Sources/JNI/JNIRefs.swift index 39e019c..b434b6c 100644 --- a/Sources/JNI/JNIRefs.swift +++ b/Sources/JNI/JNIRefs.swift @@ -1,9 +1,9 @@ import CJNI public extension JNI { - public func NewGlobalRef(obj: JavaObject) -> JavaObject { + public func NewGlobalRef(_ object: JavaObject) -> JavaObject? { let env = self._env - return env.pointee.pointee.NewGlobalRef(env, obj)! + return env.pointee.pointee.NewGlobalRef(env, object) } public func DeleteGlobalRef(globalRef: JavaObject) { @@ -11,9 +11,9 @@ public extension JNI { env.pointee.pointee.DeleteGlobalRef(env, globalRef) } - public func NewLocalRef(ref: JavaObject) -> JavaObject { + public func NewLocalRef(ref: JavaObject) -> JavaObject? { let env = self._env - return env.pointee.pointee.NewLocalRef(env, ref)! + return env.pointee.pointee.NewLocalRef(env, ref) } public func DeleteLocalRef(localRef: JavaObject) { diff --git a/Sources/JNI/JavaParameterConvertible.swift b/Sources/JNI/JavaParameterConvertible.swift index 9e4e837..e08018c 100644 --- a/Sources/JNI/JavaParameterConvertible.swift +++ b/Sources/JNI/JavaParameterConvertible.swift @@ -6,10 +6,13 @@ // import CJNI + public protocol JavaParameterConvertible { typealias JavaMethod = ((JavaParameterConvertible...) throws -> Self) static var asJNIParameterString: String { get } func toJavaParameter() -> JavaParameter + + static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> Self static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> Self } @@ -20,8 +23,12 @@ extension Bool: JavaParameterConvertible { return JavaParameter(bool: (self) ? 1 : 0) } + public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> Bool { + return try jni.CallBooleanMethod(methodID, on: object, parameters: args) == JNI_TRUE + } + public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> Bool { - return jni.CallStaticBooleanMethod(javaClass: javaClass, method: methodID, parameters: args) == 1 + return try jni.CallStaticBooleanMethod(javaClass: javaClass, method: methodID, parameters: args) == JNI_TRUE } } @@ -32,12 +39,33 @@ extension Int: JavaParameterConvertible { return JavaParameter(int: JavaInt(self)) } + public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> Int { + let result = try jni.CallIntMethod(methodID, on: object, parameters: args) + return Int(result) + } + public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> Int { let result = try jni.CallStaticIntMethod(methodID, on: javaClass, parameters: args) return Int(result) } } +extension Double: JavaParameterConvertible { + public static var asJNIParameterString: String { return "D" } + + public func toJavaParameter() -> JavaParameter { + return JavaParameter(double: JavaDouble(self)) + } + + public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> Double { + return try jni.CallDoubleMethod(methodID, on: object, parameters: args) + } + + public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> Double { + return try jni.CallStaticDoubleMethod(methodID, on: javaClass, parameters: args) + } +} + extension String: JavaParameterConvertible { private static let javaClassname = "java/lang/String" public static let asJNIParameterString = "L\(javaClassname);" @@ -47,6 +75,11 @@ extension String: JavaParameterConvertible { return JavaParameter(object: stringAsObject) } + public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> String { + let jObject = try jni.CallObjectMethod(methodID, on: object, parameters: args) + return jni.GetString(from: jObject) + } + public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> String { let jObject = try jni.CallStaticObjectMethod(methodID, on: javaClass, parameters: args) return jni.GetString(from: jObject) diff --git a/Sources/JNI/SwiftJNI.swift b/Sources/JNI/SwiftJNI.swift index 6955252..108b0da 100644 --- a/Sources/JNI/SwiftJNI.swift +++ b/Sources/JNI/SwiftJNI.swift @@ -49,22 +49,8 @@ extension JNI { return string } - // MARK: References - - public func NewGlobalRef(object: JavaObject) -> JavaObject? { - let _env = self._env - let result = _env.pointee.pointee.NewGlobalRef(_env, object) - return result - } - // MARK: Classes and Methods - public func FindClass(className: String) -> JavaClass? { - let _env = self._env - let result = _env.pointee.pointee.FindClass(_env, className) - return result - } - public func GetMethodID(for object: JavaObject, methodName: String, methodSignature: String) throws -> JavaMethodID { let _env = self._env let objectClass = _env.pointee.pointee.GetObjectClass(_env, object) @@ -95,6 +81,30 @@ extension JNI { try checkAndThrowOnJNIError() } + public func CallBooleanMethod(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaBoolean { + let _env = self._env + var methodArgs = parameters + let result = _env.pointee.pointee.CallBooleanMethod(_env, object, method, &methodArgs) + try checkAndThrowOnJNIError() + return result + } + + public func CallIntMethod(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaInt { + let _env = self._env + var methodArgs = parameters + let result = _env.pointee.pointee.CallIntMethod(_env, object, method, &methodArgs) + try checkAndThrowOnJNIError() + return result + } + + public func CallDoubleMethod(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaDouble { + let _env = self._env + var methodArgs = parameters + let result = _env.pointee.pointee.CallDoubleMethod(_env, object, method, &methodArgs) + try checkAndThrowOnJNIError() + return result + } + public func CallObjectMethod(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaObject { let _env = self._env var methodArgs = parameters @@ -103,6 +113,8 @@ extension JNI { return result } + // MARK: Static methods + public func CallStaticObjectMethod(_ method: JavaMethodID, on javaClass: JavaClass, parameters: [JavaParameter]) throws -> JavaObject { let _env = self._env var methodArgs = parameters @@ -127,16 +139,27 @@ extension JNI { return result } - public func CallStaticBooleanMethod(javaClass: JavaClass, method: JavaMethodID, parameters: [JavaParameter]) -> JavaBoolean { + public func CallStaticDoubleMethod(_ method: JavaMethodID, on javaClass: JavaClass, parameters: [JavaParameter]) throws -> JavaDouble { let _env = self._env var methodArgs = parameters - return _env.pointee.pointee.CallStaticBooleanMethodA(_env, javaClass, method, &methodArgs) + let result = _env.pointee.pointee.CallStaticDoubleMethodA(_env, javaClass, method, &methodArgs) + try checkAndThrowOnJNIError() + return result } - public func CallStaticVoidMethod(javaClass: JavaClass, method: JavaMethodID, parameters: [JavaParameter]) { + public func CallStaticBooleanMethod(javaClass: JavaClass, method: JavaMethodID, parameters: [JavaParameter]) throws -> JavaBoolean { + let _env = self._env + var methodArgs = parameters + let result = _env.pointee.pointee.CallStaticBooleanMethodA(_env, javaClass, method, &methodArgs) + try checkAndThrowOnJNIError() + return result + } + + public func CallStaticVoidMethod(javaClass: JavaClass, method: JavaMethodID, parameters: [JavaParameter]) throws { let _env = self._env var methodArgs = parameters _env.pointee.pointee.CallStaticVoidMethodA(_env, javaClass, method, &methodArgs) + try checkAndThrowOnJNIError() } // MARK: Arrays