diff --git a/CHANGELOG.md b/CHANGELOG.md index 3beb9051..2855875d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 2.1.0 (#unreleased) - Feature [#468](https://github.com/SimformSolutionsPvtLtd/audio_waveforms/pull/468) - Add macOS support +- Add Swift Package Manager support for iOS ## 2.0.2 diff --git a/android/build.gradle b/android/build.gradle index a8b70a7b..3000d40e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,14 +2,14 @@ group 'com.simform.audio_waveforms' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.8.20' + ext.kotlin_version = '2.4.0' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.1.0' + classpath 'com.android.tools.build:gradle:9.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -22,22 +22,27 @@ rootProject.allprojects { } apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' + +// AGP 9+ provides Kotlin support unless the consuming app explicitly opts out. +def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int +def builtInKotlin = providers.gradleProperty("android.builtInKotlin") + .map { it.toBoolean() } + .orElse(agpMajor >= 9) + .get() +if (agpMajor < 9 || !builtInKotlin) { + apply plugin: 'kotlin-android' +} android { if (project.android.hasProperty("namespace")) { namespace "com.simform.audio_waveforms" } - compileSdk 34 + compileSdk 36 compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } sourceSets { @@ -49,6 +54,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + dependencies { implementation("androidx.multidex:multidex:2.0.1") implementation "com.google.android.exoplayer:exoplayer:2.17.1" diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift index bcc58195..6a0b13ee 100644 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,9 +6,7 @@ import FlutterMacOS import Foundation import audio_waveforms -import path_provider_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AudioWaveformsPlugin.register(with: registry.registrar(forPlugin: "AudioWaveformsPlugin")) - PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) } diff --git a/ios/Classes/AudioWaveformsPlugin.h b/ios/Classes/AudioWaveformsPlugin.h deleted file mode 100644 index 5946602d..00000000 --- a/ios/Classes/AudioWaveformsPlugin.h +++ /dev/null @@ -1,4 +0,0 @@ -#import - -@interface AudioWaveformsPlugin : NSObject -@end diff --git a/ios/Classes/AudioWaveformsPlugin.m b/ios/Classes/AudioWaveformsPlugin.m deleted file mode 100644 index 92a1dc91..00000000 --- a/ios/Classes/AudioWaveformsPlugin.m +++ /dev/null @@ -1,15 +0,0 @@ -#import "AudioWaveformsPlugin.h" -#if __has_include() -#import -#else -// Support project import fallback if the generated compatibility header -// is not copied when this plugin is created as a library. -// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 -#import "audio_waveforms-Swift.h" -#endif - -@implementation AudioWaveformsPlugin -+ (void)registerWithRegistrar:(NSObject*)registrar { - [SwiftAudioWaveformsPlugin registerWithRegistrar:registrar]; -} -@end diff --git a/ios/audio_waveforms.podspec b/ios/audio_waveforms.podspec index db48a16d..67c1e397 100644 --- a/ios/audio_waveforms.podspec +++ b/ios/audio_waveforms.podspec @@ -13,9 +13,9 @@ A new Flutter project. s.license = { :file => '../LICENSE' } s.author = { 'Your Company' => 'email@example.com' } s.source = { :path => '.' } - s.source_files = 'Classes/**/*' + s.source_files = 'audio_waveforms/Sources/audio_waveforms/**/*' s.dependency 'Flutter' - s.platform = :ios, '8.0' + s.platform = :ios, '13.0' # Flutter.framework does not contain a i386 slice. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } diff --git a/ios/audio_waveforms/Package.swift b/ios/audio_waveforms/Package.swift new file mode 100644 index 00000000..b51df951 --- /dev/null +++ b/ios/audio_waveforms/Package.swift @@ -0,0 +1,25 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "audio_waveforms", + platforms: [ + .iOS("13.0") + ], + products: [ + .library(name: "audio-waveforms", targets: ["audio_waveforms"]) + ], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework") + ], + targets: [ + .target( + name: "audio_waveforms", + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework") + ] + ) + ] +) diff --git a/ios/Classes/AudioPlayer.swift b/ios/audio_waveforms/Sources/audio_waveforms/AudioPlayer.swift similarity index 97% rename from ios/Classes/AudioPlayer.swift rename to ios/audio_waveforms/Sources/audio_waveforms/AudioPlayer.swift index f886574a..145921d9 100644 --- a/ios/Classes/AudioPlayer.swift +++ b/ios/audio_waveforms/Sources/audio_waveforms/AudioPlayer.swift @@ -1,6 +1,6 @@ import Foundation - import AVKit +import Flutter class AudioPlayer: NSObject, AVAudioPlayerDelegate { private var seekToStart = true @@ -9,12 +9,12 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate { private var player: AVAudioPlayer? private var finishMode:FinishMode = FinishMode.stop private var updateFrequency = 200 - var plugin: SwiftAudioWaveformsPlugin + var plugin: AudioWaveformsPlugin var playerKey: String var flutterChannel: FlutterMethodChannel - init(plugin: SwiftAudioWaveformsPlugin, playerKey: String, channel: FlutterMethodChannel) { + init(plugin: AudioWaveformsPlugin, playerKey: String, channel: FlutterMethodChannel) { self.plugin = plugin self.playerKey = playerKey flutterChannel = channel diff --git a/ios/Classes/AudioRecorder.swift b/ios/audio_waveforms/Sources/audio_waveforms/AudioRecorder.swift similarity index 99% rename from ios/Classes/AudioRecorder.swift rename to ios/audio_waveforms/Sources/audio_waveforms/AudioRecorder.swift index 64f2884d..24e4ef2f 100644 --- a/ios/Classes/AudioRecorder.swift +++ b/ios/audio_waveforms/Sources/audio_waveforms/AudioRecorder.swift @@ -1,5 +1,6 @@ import AVFoundation import Accelerate +import Flutter public class AudioRecorder: NSObject, AVAudioRecorderDelegate{ var audioRecorder: AVAudioRecorder? diff --git a/ios/Classes/SwiftAudioWaveformsPlugin.swift b/ios/audio_waveforms/Sources/audio_waveforms/AudioWaveformsPlugin.swift similarity index 98% rename from ios/Classes/SwiftAudioWaveformsPlugin.swift rename to ios/audio_waveforms/Sources/audio_waveforms/AudioWaveformsPlugin.swift index ddcf70f8..1fe8dcb3 100644 --- a/ios/Classes/SwiftAudioWaveformsPlugin.swift +++ b/ios/audio_waveforms/Sources/audio_waveforms/AudioWaveformsPlugin.swift @@ -1,7 +1,7 @@ import Flutter import UIKit -public class SwiftAudioWaveformsPlugin: NSObject, FlutterPlugin { +public class AudioWaveformsPlugin: NSObject, FlutterPlugin { let audioRecorder: AudioRecorder var audioPlayers = [String: AudioPlayer]() @@ -20,7 +20,7 @@ public class SwiftAudioWaveformsPlugin: NSObject, FlutterPlugin { } public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel(name: Constants.methodChannelName, binaryMessenger: registrar.messenger()) - let instance = SwiftAudioWaveformsPlugin(registrar: registrar, flutterChannel: channel) + let instance = AudioWaveformsPlugin(registrar: registrar, flutterChannel: channel) registrar.addMethodCallDelegate(instance, channel: channel) } @@ -216,4 +216,3 @@ public class SwiftAudioWaveformsPlugin: NSObject, FlutterPlugin { } } } - diff --git a/ios/Classes/RecorderBytesStreamEngine.swift b/ios/audio_waveforms/Sources/audio_waveforms/RecorderBytesStreamEngine.swift similarity index 99% rename from ios/Classes/RecorderBytesStreamEngine.swift rename to ios/audio_waveforms/Sources/audio_waveforms/RecorderBytesStreamEngine.swift index 68841c73..564b6265 100644 --- a/ios/Classes/RecorderBytesStreamEngine.swift +++ b/ios/audio_waveforms/Sources/audio_waveforms/RecorderBytesStreamEngine.swift @@ -8,6 +8,7 @@ import Foundation import AVFAudio import Accelerate +import Flutter class RecorderBytesStreamEngine { private var audioEngine = AVAudioEngine() diff --git a/ios/Classes/RecordingSettings.swift b/ios/audio_waveforms/Sources/audio_waveforms/RecordingSettings.swift similarity index 100% rename from ios/Classes/RecordingSettings.swift rename to ios/audio_waveforms/Sources/audio_waveforms/RecordingSettings.swift diff --git a/ios/Classes/Utils.swift b/ios/audio_waveforms/Sources/audio_waveforms/Utils.swift similarity index 100% rename from ios/Classes/Utils.swift rename to ios/audio_waveforms/Sources/audio_waveforms/Utils.swift diff --git a/ios/Classes/WaveformExtractor.swift b/ios/audio_waveforms/Sources/audio_waveforms/WaveformExtractor.swift similarity index 99% rename from ios/Classes/WaveformExtractor.swift rename to ios/audio_waveforms/Sources/audio_waveforms/WaveformExtractor.swift index e922d5eb..00914221 100644 --- a/ios/Classes/WaveformExtractor.swift +++ b/ios/audio_waveforms/Sources/audio_waveforms/WaveformExtractor.swift @@ -1,5 +1,6 @@ import Accelerate import AVFoundation +import Flutter public class WaveformExtractor {