mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-11-24 09:54:33 +01:00
IOS project WIP
This commit is contained in:
parent
ff7acc9558
commit
7949fcd7ed
@ -0,0 +1,4 @@
|
||||
package com.shabinder.common.models
|
||||
|
||||
actual interface PlatformActions {
|
||||
}
|
@ -7,7 +7,7 @@ import org.koin.dsl.module
|
||||
import com.squareup.sqldelight.drivers.native.NativeSqliteDriver
|
||||
|
||||
@Suppress("RedundantNullableReturnType")
|
||||
actual fun databaseModule(): Module {
|
||||
actual fun databaseModule() = module {
|
||||
single {
|
||||
val driver = NativeSqliteDriver(Database.Schema, "Database.db")
|
||||
SpotiFlyerDatabase(Database(driver))
|
||||
|
@ -29,18 +29,19 @@ kotlin {
|
||||
|
||||
cocoapods {
|
||||
// Configure fields required by CocoaPods.
|
||||
summary = "SpotiFlyer Native Module"
|
||||
summary = "SpotiFlyer-DI Native Module"
|
||||
homepage = "https://github.com/Shabinder/SpotiFlyer"
|
||||
authors = "Shabinder Singh"
|
||||
// You can change the name of the produced framework.
|
||||
// By default, it is the name of the Gradle project.
|
||||
frameworkName = "SpotiFlyer"
|
||||
ios.deploymentTarget = "13.5"
|
||||
frameworkName = "SpotiFlyer-DI"
|
||||
ios.deploymentTarget = "9.0"
|
||||
|
||||
// Dependencies
|
||||
pod("TagLibIOS") {
|
||||
version = "~> 0.3"
|
||||
}
|
||||
//podfile = project.file("spotiflyer-ios/Podfile")
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
@ -5,14 +5,14 @@ Pod::Spec.new do |spec|
|
||||
spec.source = { :git => "Not Published", :tag => "Cocoapods/#{spec.name}/#{spec.version}" }
|
||||
spec.authors = 'Shabinder Singh'
|
||||
spec.license = ''
|
||||
spec.summary = 'SpotiFlyer Native Module'
|
||||
spec.summary = 'SpotiFlyer-DI Native Module'
|
||||
|
||||
spec.static_framework = true
|
||||
spec.vendored_frameworks = "build/cocoapods/framework/SpotiFlyer.framework"
|
||||
spec.vendored_frameworks = "build/cocoapods/framework/SpotiFlyer-DI.framework"
|
||||
spec.libraries = "c++"
|
||||
spec.module_name = "#{spec.name}_umbrella"
|
||||
|
||||
spec.ios.deployment_target = '13.5'
|
||||
spec.ios.deployment_target = '9.0'
|
||||
|
||||
spec.dependency 'TagLibIOS', '~> 0.3'
|
||||
|
||||
|
@ -27,7 +27,10 @@ import com.shabinder.common.database.SpotiFlyerDatabase
|
||||
import com.shabinder.common.models.TrackDetails
|
||||
import com.shabinder.common.models.methods
|
||||
import com.shabinder.database.Database
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
|
@ -1,25 +1,6 @@
|
||||
package com.shabinder.common.di
|
||||
|
||||
import com.shabinder.common.models.AllPlatforms
|
||||
import com.shabinder.common.models.TrackDetails
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
||||
actual fun queryActiveTracks() {}
|
||||
|
||||
actual fun openPlatform(packageID: String, platformLink: String) {}
|
||||
|
||||
actual fun shareApp() {}
|
||||
|
||||
actual fun giveDonation() {}
|
||||
|
||||
actual val dispatcherIO: CoroutineDispatcher = Dispatchers.Default
|
||||
|
||||
actual val isInternetAvailable: Boolean
|
||||
get() = runBlocking { isInternetAccessible() }
|
||||
|
||||
actual val currentPlatform: AllPlatforms = AllPlatforms.Native
|
||||
|
||||
actual suspend fun downloadTracks(
|
||||
list: List<TrackDetails>,
|
||||
|
@ -1,14 +1,25 @@
|
||||
package com.shabinder.common.di
|
||||
|
||||
import co.touchlab.kermit.Kermit
|
||||
import cocoapods.TagLibIOS.TLAudio
|
||||
import com.shabinder.common.database.SpotiFlyerDatabase
|
||||
import com.shabinder.common.models.TrackDetails
|
||||
import com.shabinder.database.Database
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import platform.Foundation.*
|
||||
import platform.Foundation.NSCachesDirectory
|
||||
import platform.Foundation.NSDirectoryEnumerationSkipsHiddenFiles
|
||||
import platform.Foundation.NSFileManager
|
||||
import platform.Foundation.NSMusicDirectory
|
||||
import platform.Foundation.NSURL
|
||||
import platform.Foundation.NSURLConnection
|
||||
import platform.Foundation.NSURLRequest
|
||||
import platform.Foundation.NSUserDomainMask
|
||||
import platform.Foundation.URLByAppendingPathComponent
|
||||
import platform.Foundation.sendSynchronousRequest
|
||||
import platform.Foundation.writeToFile
|
||||
import platform.UIKit.UIImage
|
||||
import platform.UIKit.UIImageJPEGRepresentation
|
||||
import cocoapods.TagLibIOS.TLAudio
|
||||
|
||||
actual class Dir actual constructor(
|
||||
private val logger: Kermit,
|
||||
@ -87,7 +98,7 @@ actual class Dir actual constructor(
|
||||
|
||||
private suspend fun loadFreshImage(url: String):UIImage? {
|
||||
return try {
|
||||
val nsURL = NSURL(url)
|
||||
val nsURL = NSURL(string = url)
|
||||
val data = NSURLConnection.sendSynchronousRequest(NSURLRequest.requestWithURL(nsURL),null,null)
|
||||
if (data != null) {
|
||||
UIImage.imageWithData(data)?.also {
|
||||
|
@ -18,9 +18,69 @@ plugins {
|
||||
id("multiplatform-setup")
|
||||
id("android-setup")
|
||||
id("kotlin-parcelize")
|
||||
//kotlin("native.cocoapods")
|
||||
}
|
||||
|
||||
// Required be cocoapods
|
||||
version = "1.0"
|
||||
|
||||
kotlin {
|
||||
|
||||
/*IOS Target Can be only built on Mac*/
|
||||
if(HostOS.isMac){
|
||||
val sdkName: String? = System.getenv("SDK_NAME")
|
||||
val isiOSDevice = sdkName.orEmpty().startsWith("iphoneos")
|
||||
if (isiOSDevice) {
|
||||
iosArm64("ios"){
|
||||
binaries {
|
||||
framework {
|
||||
baseName = "SpotiFlyer"
|
||||
linkerOpts.add("-lsqlite3")
|
||||
export(project(":common:database"))
|
||||
export(project(":common:main"))
|
||||
export(project(":common:list"))
|
||||
export(project(":common:dependency-injection"))
|
||||
export(project(":common:data-models"))
|
||||
export(Decompose.decompose)
|
||||
export(MVIKotlin.mvikotlin)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
iosX64("ios"){
|
||||
binaries {
|
||||
framework {
|
||||
baseName = "SpotiFlyer"
|
||||
linkerOpts.add("-lsqlite3")
|
||||
export(project(":common:database"))
|
||||
export(project(":common:main"))
|
||||
export(project(":common:list"))
|
||||
export(project(":common:dependency-injection"))
|
||||
export(project(":common:data-models"))
|
||||
export(Decompose.decompose)
|
||||
export(MVIKotlin.mvikotlin)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*cocoapods {
|
||||
// Configure fields required by CocoaPods.
|
||||
summary = "SpotiFlyer Native Module"
|
||||
homepage = "https://github.com/Shabinder/SpotiFlyer"
|
||||
authors = "Shabinder Singh"
|
||||
// You can change the name of the produced framework.
|
||||
// By default, it is the name of the Gradle project.
|
||||
frameworkName = "SpotiFlyer"
|
||||
ios.deploymentTarget = "11.0"
|
||||
|
||||
*//*pod("dependency_injection"){
|
||||
version = "1.0"
|
||||
source = path(rootProject.file("common/dependency-injection"))
|
||||
}*//*
|
||||
}*/
|
||||
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
@ -36,4 +96,29 @@ kotlin {
|
||||
}
|
||||
}
|
||||
}
|
||||
sourceSets {
|
||||
named("iosMain") {
|
||||
dependencies {
|
||||
api(project(":common:dependency-injection"))
|
||||
api(project(":common:data-models"))
|
||||
api(project(":common:database"))
|
||||
api(project(":common:list"))
|
||||
api(project(":common:main"))
|
||||
api(Decompose.decompose)
|
||||
api(MVIKotlin.mvikotlin)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val packForXcode by tasks.creating(Sync::class) {
|
||||
group = "build"
|
||||
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
|
||||
val targetName = "ios"
|
||||
val framework = kotlin.targets.getByName<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget>(targetName).binaries.getFramework(mode)
|
||||
inputs.property("mode", mode)
|
||||
dependsOn(framework.linkTask)
|
||||
val targetDir = File(buildDir, "xcode-frameworks")
|
||||
from(framework.outputDirectory)
|
||||
into(targetDir)
|
||||
}
|
||||
|
46
common/root/root.podspec
Normal file
46
common/root/root.podspec
Normal file
@ -0,0 +1,46 @@
|
||||
Pod::Spec.new do |spec|
|
||||
spec.name = 'root'
|
||||
spec.version = '1.0'
|
||||
spec.homepage = 'https://github.com/Shabinder/SpotiFlyer'
|
||||
spec.source = { :git => "Not Published", :tag => "Cocoapods/#{spec.name}/#{spec.version}" }
|
||||
spec.authors = 'Shabinder Singh'
|
||||
spec.license = ''
|
||||
spec.summary = 'SpotiFlyer Native Module'
|
||||
|
||||
spec.static_framework = true
|
||||
spec.vendored_frameworks = "build/cocoapods/framework/SpotiFlyer.framework"
|
||||
spec.libraries = "c++"
|
||||
spec.module_name = "#{spec.name}_umbrella"
|
||||
|
||||
spec.ios.deployment_target = '11.0'
|
||||
|
||||
|
||||
|
||||
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'
|
||||
}
|
||||
|
||||
spec.script_phases = [
|
||||
{
|
||||
:name => 'Build root',
|
||||
:execution_position => :before_compile,
|
||||
:shell_path => '/bin/sh',
|
||||
:script => <<-SCRIPT
|
||||
set -ev
|
||||
REPO_ROOT="$PODS_TARGET_SRCROOT"
|
||||
"$REPO_ROOT/../../gradlew" -p "$REPO_ROOT" :common:root:syncFramework \
|
||||
-Pkotlin.native.cocoapods.target=$KOTLIN_TARGET \
|
||||
-Pkotlin.native.cocoapods.configuration=$CONFIGURATION \
|
||||
-Pkotlin.native.cocoapods.cflags="$OTHER_CFLAGS" \
|
||||
-Pkotlin.native.cocoapods.paths.headers="$HEADER_SEARCH_PATHS" \
|
||||
-Pkotlin.native.cocoapods.paths.frameworks="$FRAMEWORK_SEARCH_PATHS"
|
||||
SCRIPT
|
||||
}
|
||||
]
|
||||
end
|
@ -42,8 +42,7 @@ import com.shabinder.common.uikit.colorOffWhite
|
||||
import com.shabinder.common.uikit.showToast
|
||||
import com.shabinder.database.Database
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
||||
private val koin = initKoin(enableNetworkLogs = true).koin
|
||||
|
||||
@ -96,11 +95,8 @@ private fun spotiFlyerRoot(componentContext: ComponentContext): SpotiFlyerRoot =
|
||||
override val dispatcherIO = Dispatchers.IO
|
||||
|
||||
override val isInternetAvailable: Boolean
|
||||
get() {
|
||||
var result = false
|
||||
val job = GlobalScope.launch { result = isInternetAccessible() }
|
||||
while (job.isActive) {/*TODO Better Way*/}
|
||||
return result
|
||||
get() = runBlocking {
|
||||
isInternetAccessible()
|
||||
}
|
||||
|
||||
override val currentPlatform = AllPlatforms.Jvm
|
||||
|
@ -41,4 +41,5 @@ kotlin.native.disableCompilerDaemon=true
|
||||
kotlin.mpp.stability.nowarn=true
|
||||
kotlin.mpp.enableGranularSourceSetsMetadata=true
|
||||
kotlin.native.enableDependencyPropagation=false
|
||||
kotlin.native.cacheKind=none
|
||||
#org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
|
Loading…
Reference in New Issue
Block a user