diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 67b6c7e..ec18432 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -24,16 +24,24 @@ jobs: run: ./gradlew :napier:test --stacktrace - name: Run android tests run: ./gradlew :napier:testReleaseUnitTest --stacktrace - - name: Run ios tests - run: ./gradlew :napier:iosX64Test --stacktrace - name: Run jvm tests run: ./gradlew :napier:jvmTest --stacktrace - - name: Run macos tests + - name: Run ios(intel) tests + run: ./gradlew :napier:iosX64Test --stacktrace + - name: Run ios(apple silicon) tests + run: ./gradlew :napier:iosSimulatorArm64Test --stacktrace + - name: Run macos(intel) tests run: ./gradlew :napier:macosX64Test --stacktrace - - name: Run watchos tests + - name: Run macos(apple silicon) tests + run: ./gradlew :napier:macosArm64Test --stacktrace + - name: Run watchos(intel) tests run: ./gradlew :napier:watchosX64Test --stacktrace - - name: Run tvos tests + - name: Run watchos(apple silicon) tests + run: ./gradlew :napier:watchosSimulatorArm64Test --stacktrace + - name: Run tvos(intel) tests run: ./gradlew :napier:tvosX64Test --stacktrace + - name: Run tvos(apple silicon) tests + run: ./gradlew :napier:tvosSimulatorArm64Test --stacktrace - name: Bundle the build report if: failure() diff --git a/README.md b/README.md index c469fbc..5cfc5bb 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ uses the `android.util.Log`(Logcat) ![preview-android][preview-android] -### Darwin(iOS, macOS, watchOS, tvOS) +### Darwin(iOS, macOS, watchOS, tvOS)[Intel/Apple silicon] format: `[Date time][Symbol][Log level][Class name].[Method name] - [Your log]` diff --git a/build.gradle b/build.gradle index 5574cea..e0b739c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,5 @@ // Can't read dependencies.Dep when using kts +// https://github.com/gradle/gradle/issues/9270 import dependencies.Dep buildscript { diff --git a/buildSrc/src/main/kotlin/Variables.kt b/buildSrc/src/main/kotlin/Variables.kt new file mode 100644 index 0000000..86cee30 --- /dev/null +++ b/buildSrc/src/main/kotlin/Variables.kt @@ -0,0 +1,5 @@ +// Run on IntelliJ +val ideaActive = System.getProperty("idea.active") == "true" + +// Run on apple silicon +val isAppleSilicon = System.getProperty("os.arch") == "aarch64" diff --git a/buildSrc/src/main/kotlin/dependencies/Dep.kt b/buildSrc/src/main/kotlin/dependencies/Dep.kt index 413c6b7..fac32c7 100644 --- a/buildSrc/src/main/kotlin/dependencies/Dep.kt +++ b/buildSrc/src/main/kotlin/dependencies/Dep.kt @@ -2,12 +2,12 @@ package dependencies object Dep { - private const val kotlin = "1.5.21" + private const val kotlin = "1.5.30" object GradlePlugin { const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Dep.kotlin}" - const val android = "com.android.tools.build:gradle:4.1.3" + const val android = "com.android.tools.build:gradle:4.2.1" const val crashlytics = "com.google.firebase:firebase-crashlytics-gradle:2.5.2" const val googleService = "com.google.gms:google-services:4.3.5" @@ -33,8 +33,8 @@ object Dep { } object Android { - const val appCompat = "androidx.appcompat:appcompat:1.2.0" - const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.0.4" + const val appCompat = "androidx.appcompat:appcompat:1.3.1" + const val constraintLayout = "androidx.constraintlayout:constraintlayout:2.1.0" } object Firebase { diff --git a/buildSrc/src/main/kotlin/dependencies/Versions.kt b/buildSrc/src/main/kotlin/dependencies/Versions.kt index 232113f..d4f5e1f 100644 --- a/buildSrc/src/main/kotlin/dependencies/Versions.kt +++ b/buildSrc/src/main/kotlin/dependencies/Versions.kt @@ -1,8 +1,8 @@ package dependencies object Versions { - const val versionCode = 18 - const val versionName = "2.0.0" + const val versionCode = 19 + const val versionName = "2.1.0" // android const val androidVersionCode = 1 diff --git a/gradle.properties b/gradle.properties index 09b37b8..05ec979 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,10 @@ kotlin.native.enableDependencyPropagation=false kotlin.mpp.enableGranularSourceSetsMetadata=true kotlin.mpp.enableCompatibilityMetadataVariant=true +# Android +android.useAndroidX=true +android.enableJetifier=true + # Snatype GROUP=aakira diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cba3202..abb8619 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f18b89b..804c75d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -76,4 +76,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 441ae05d1695723ea9a68d3223ef8b6460bbec0f -COCOAPODS: 1.10.1 +COCOAPODS: 1.10.2 diff --git a/macOS/Pods/Pods.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist b/macOS/Pods/Pods.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..3df5044 --- /dev/null +++ b/macOS/Pods/Pods.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,19 @@ + + + + + SchemeUserState + + Pods-macOS (macOS).xcscheme_^#shared#^_ + + orderHint + 1 + + mpp_sample.xcscheme_^#shared#^_ + + orderHint + 3 + + + + diff --git a/macOS/macOS.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist b/macOS/macOS.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist index 9b18e6f..f2282f1 100644 --- a/macOS/macOS.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/macOS/macOS.xcodeproj/xcuserdata/akira.aratani.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,12 +7,12 @@ macOS (iOS).xcscheme_^#shared#^_ orderHint - 0 + 2 macOS (macOS).xcscheme_^#shared#^_ orderHint - 1 + 0 diff --git a/macOS/macOS.xcworkspace/xcuserdata/akira.aratani.xcuserdatad/UserInterfaceState.xcuserstate b/macOS/macOS.xcworkspace/xcuserdata/akira.aratani.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..4b6f495 Binary files /dev/null and b/macOS/macOS.xcworkspace/xcuserdata/akira.aratani.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/mpp-sample/build.gradle.kts b/mpp-sample/build.gradle.kts index 6672a1e..1267d91 100644 --- a/mpp-sample/build.gradle.kts +++ b/mpp-sample/build.gradle.kts @@ -9,8 +9,6 @@ plugins { version = "1.0.0" -val ideaActive = System.getProperty("idea.active") == "true" - kotlin { android() js { @@ -19,11 +17,14 @@ kotlin { jvm() // darwin - macosX64() - if (ideaActive.not()) { - ios() - watchos() + if (isAppleSilicon) { + // apple silicon + macosArm64() + iosSimulatorArm64() + watchosSimulatorArm64() } else { + // intel + macosX64() iosX64() watchosX64() } @@ -53,21 +54,26 @@ kotlin { } } - // apple + // darwin val darwinMain by creating { dependsOn(commonMain) } - val macosX64Main by getting { - dependsOn(darwinMain) - } - if (ideaActive.not()) { - val iosMain by getting { + if (isAppleSilicon) { + // apple silicon + val macosArm64Main by getting { + dependsOn(darwinMain) + } + val iosSimulatorArm64Main by getting { dependsOn(darwinMain) } - val watchosMain by getting { + val watchosSimulatorArm64Main by getting { dependsOn(darwinMain) } } else { + // intel + val macosX64Main by getting { + dependsOn(darwinMain) + } val iosX64Main by getting { dependsOn(darwinMain) } diff --git a/mpp-sample/mpp_sample.podspec b/mpp-sample/mpp_sample.podspec index c0114f1..ebfbb89 100644 --- a/mpp-sample/mpp_sample.podspec +++ b/mpp-sample/mpp_sample.podspec @@ -7,7 +7,6 @@ Pod::Spec.new do |spec| spec.license = '' spec.summary = 'CocoaPods library' - spec.static_framework = true spec.vendored_frameworks = "build/cocoapods/framework/mpp_sample.framework" spec.libraries = "c++" spec.module_name = "#{spec.name}_umbrella" @@ -17,13 +16,8 @@ Pod::Spec.new do |spec| spec.pod_target_xcconfig = { - 'KOTLIN_TARGET[sdk=iphonesimulator*]' => 'ios_x64', - 'KOTLIN_TARGET[sdk=iphoneos*]' => 'ios_arm', - 'KOTLIN_TARGET[sdk=watchsimulator*]' => 'watchos_x64', - 'KOTLIN_TARGET[sdk=watchos*]' => 'watchos_arm', - 'KOTLIN_TARGET[sdk=appletvsimulator*]' => 'tvos_x64', - 'KOTLIN_TARGET[sdk=appletvos*]' => 'tvos_arm64', - 'KOTLIN_TARGET[sdk=macosx*]' => 'macos_x64' + 'KOTLIN_PROJECT_PATH' => ':mpp-sample', + 'PRODUCT_MODULE_NAME' => 'mpp_sample', } spec.script_phases = [ @@ -32,10 +26,15 @@ Pod::Spec.new do |spec| :execution_position => :before_compile, :shell_path => '/bin/sh', :script => <<-SCRIPT + if [ "YES" = "$COCOAPODS_SKIP_KOTLIN_BUILD" ]; then + echo "Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\"" + exit 0 + fi set -ev REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" :mpp-sample:syncFramework \ - -Pkotlin.native.cocoapods.target=$KOTLIN_TARGET \ + "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ + -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ + -Pkotlin.native.cocoapods.archs="$ARCHS" \ -Pkotlin.native.cocoapods.configuration=$CONFIGURATION \ -Pkotlin.native.cocoapods.cflags="$OTHER_CFLAGS" \ -Pkotlin.native.cocoapods.paths.headers="$HEADER_SEARCH_PATHS" \ diff --git a/napier/build.gradle.kts b/napier/build.gradle.kts index 8dd3221..2dde2b8 100644 --- a/napier/build.gradle.kts +++ b/napier/build.gradle.kts @@ -8,8 +8,6 @@ plugins { apply(from = rootProject.file("./gradle/publish.gradle.kts")) -val ideaActive = System.getProperty("idea.active") == "true" - kotlin { android { publishAllLibraryVariants() @@ -21,40 +19,31 @@ kotlin { jvm() // darwin - macosX64() if (ideaActive.not()) { - // darwin - ios { - binaries { - framework() - } - } - watchos { - binaries { - framework() - } - } - tvos { - binaries { - framework() - } - } + // intel + macosX64() + ios() + watchos() + tvos() + + // apple silicon + macosArm64() + iosSimulatorArm64() + watchosSimulatorArm64() + tvosSimulatorArm64() } else { - // darwin - iosX64 { - binaries { - framework() - } - } - watchosX64 { - binaries { - framework() - } - } - tvosX64 { - binaries { - framework() - } + if (isAppleSilicon) { + // apple silicon + macosArm64() + iosSimulatorArm64() + watchosSimulatorArm64() + tvosSimulatorArm64() + } else { + // intel + macosX64() + iosX64() + watchosX64() + tvosX64() } } @@ -109,14 +98,16 @@ kotlin { val darwinTest by creating { dependsOn(commonTest) } - val macosX64Main by getting { - dependsOn(darwinMain) - } - val macosX64Test by getting { - dependsOn(darwinMain) - } + + // darwin if (ideaActive.not()) { - // apple + // intel + val macosX64Main by getting { + dependsOn(darwinMain) + } + val macosX64Test by getting { + dependsOn(darwinTest) + } val iosMain by getting { dependsOn(darwinMain) } @@ -135,26 +126,86 @@ kotlin { val tvosTest by getting { dependsOn(darwinTest) } - } else { - // apple - val iosX64Main by getting { + + // apple silicon + val macosArm64Main by getting { + dependsOn(darwinMain) + } + val macosArm64Test by getting { + dependsOn(darwinTest) + } + val iosSimulatorArm64Main by getting { dependsOn(darwinMain) } - val iosX64Test by getting { + val iosSimulatorArm64Test by getting { dependsOn(darwinTest) } - val watchosX64Main by getting { + val watchosSimulatorArm64Main by getting { dependsOn(darwinMain) } - val watchosX64Test by getting { + val watchosSimulatorArm64Test by getting { dependsOn(darwinTest) } - val tvosX64Main by getting { + val tvosSimulatorArm64Main by getting { dependsOn(darwinMain) } - val tvosX64Test by getting { + val tvosSimulatorArm64Test by getting { dependsOn(darwinTest) } + } else { + if (isAppleSilicon) { + // apple silicon + val macosArm64Main by getting { + dependsOn(darwinMain) + } + val macosArm64Text by getting { + dependsOn(darwinTest) + } + val iosSimulatorArm64Main by getting { + dependsOn(darwinMain) + } + val iosSimulatorArm64Test by getting { + dependsOn(darwinTest) + } + val watchosSimulatorArm64Main by getting { + dependsOn(darwinMain) + } + val watchosSimulatorArm64Test by getting { + dependsOn(darwinTest) + } + val tvosSimulatorArm64Main by getting { + dependsOn(darwinMain) + } + val tvosSimulatorArm64Test by getting { + dependsOn(darwinTest) + } + } else { + // intel + val macosX64Main by getting { + dependsOn(darwinMain) + } + val macosX64Test by getting { + dependsOn(darwinTest) + } + val iosX64Main by getting { + dependsOn(darwinMain) + } + val iosX64Test by getting { + dependsOn(darwinTest) + } + val watchosX64Main by getting { + dependsOn(darwinMain) + } + val watchosX64Test by getting { + dependsOn(darwinTest) + } + val tvosX64Main by getting { + dependsOn(darwinMain) + } + val tvosX64Test by getting { + dependsOn(darwinTest) + } + } } } } diff --git a/napier/src/androidMain/kotlin/io/github/aakira/napier/DebugAntilog.kt b/napier/src/androidMain/kotlin/io/github/aakira/napier/DebugAntilog.kt index d09668b..e4d5f7e 100644 --- a/napier/src/androidMain/kotlin/io/github/aakira/napier/DebugAntilog.kt +++ b/napier/src/androidMain/kotlin/io/github/aakira/napier/DebugAntilog.kt @@ -5,6 +5,7 @@ import android.util.Log import java.io.PrintWriter import java.io.StringWriter import java.util.regex.Pattern +import kotlin.math.min actual class DebugAntilog actual constructor(private val defaultTag: String) : Antilog() { @@ -51,7 +52,7 @@ actual class DebugAntilog actual constructor(private val defaultTag: String) : A var newline = fullMessage.indexOf('\n', i) newline = if (newline != -1) newline else length do { - val end = Math.min(newline, i + MAX_LOG_LENGTH) + val end = min(newline, i + MAX_LOG_LENGTH) val part = fullMessage.substring(i, end) if (priority.toValue() == Log.ASSERT) { Log.wtf(debugTag, part) @@ -67,7 +68,7 @@ actual class DebugAntilog actual constructor(private val defaultTag: String) : A private fun performTag(tag: String): String { val thread = Thread.currentThread().stackTrace - return if (thread != null && thread.size >= CALL_STACK_INDEX) { + return if (thread.size >= CALL_STACK_INDEX) { thread[CALL_STACK_INDEX].run { "${createStackElementTag(className)}\$$methodName" } diff --git a/napier/src/jvmMain/kotlin/io/github/aakira/napier/DebugAntilog.kt b/napier/src/jvmMain/kotlin/io/github/aakira/napier/DebugAntilog.kt index 41f66dd..aeeff44 100644 --- a/napier/src/jvmMain/kotlin/io/github/aakira/napier/DebugAntilog.kt +++ b/napier/src/jvmMain/kotlin/io/github/aakira/napier/DebugAntilog.kt @@ -2,11 +2,7 @@ package io.github.aakira.napier import java.io.PrintWriter import java.io.StringWriter -import java.util.logging.ConsoleHandler -import java.util.logging.Handler -import java.util.logging.Level -import java.util.logging.Logger -import java.util.logging.SimpleFormatter +import java.util.logging.* import java.util.regex.Pattern actual class DebugAntilog( @@ -19,7 +15,7 @@ actual class DebugAntilog( private const val CALL_STACK_INDEX = 8 } - val consoleHandler: ConsoleHandler = ConsoleHandler().apply { + private val consoleHandler: ConsoleHandler = ConsoleHandler().apply { level = Level.ALL formatter = SimpleFormatter() } @@ -81,7 +77,7 @@ actual class DebugAntilog( private fun performTag(defaultTag: String): String { val thread = Thread.currentThread().stackTrace - return if (thread != null && thread.size >= CALL_STACK_INDEX) { + return if (thread.size >= CALL_STACK_INDEX) { thread[CALL_STACK_INDEX].run { "${createStackElementTag(className)}\$$methodName" }