swift-klib-plugin icon indicating copy to clipboard operation
swift-klib-plugin copied to clipboard

Unable to sync project on Linux host

Open LandryNorris opened this issue 2 years ago • 6 comments

When I open a project that uses this gradle plugin on my Linux machine, the project fails to sync with Execution failed for task ':foo:swiftklibAttributesIosSimulatorArm64'. I am using version 0.4.0.

Expected: The project should sync, but skip building for ios, like the KMM plugin does

Actual: I see the following Exception on sync

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':foo:swiftklibAttributesIosX64'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:148)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:146)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:134)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:78)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
	at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'xcrun''
	at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:241)
	at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:218)
	at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:386)
	at org.gradle.process.internal.ExecHandleRunner.lambda$run$3(ExecHandleRunner.java:102)
	at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
	at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:101)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'xcrun'
	at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
	at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
	at org.gradle.process.internal.ExecHandleRunner.startProcess(ExecHandleRunner.java:122)
	at org.gradle.process.internal.ExecHandleRunner.lambda$run$0(ExecHandleRunner.java:80)
	at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
	at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:79)
	... 5 more
Caused by: java.io.IOException: Cannot run program "xcrun" (in directory "/home/user/IdeaProjects/foo"): error=2, No such file or directory
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
	at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
	... 10 more
Caused by: java.io.IOException: error=2, No such file or directory
	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
	... 12 more

LandryNorris avatar Oct 22 '23 21:10 LandryNorris

I tried to disable any task containing "swift", but I get the following error on sync: :foo:iosArm64Main: cinterop file: /home/user/IdeaProjects/foo/build/classes/kotlin/iosArm64/main/cinterop/foo-cinterop-Attributes.klib does not exist

LandryNorris avatar Oct 22 '23 21:10 LandryNorris

Same issue with windows system FAILURE: Build completed with 3 failures.

1: Task failed with an exception.

  • What went wrong: Execution failed for task ':shared:swiftklibKCryptoIosArm64'.

A problem occurred starting process 'command 'xcodebuild''

2: Task failed with an exception.

  • What went wrong: Execution failed for task ':shared:swiftklibKCryptoIosSimulatorArm64'.

A problem occurred starting process 'command 'xcodebuild''

3: Task failed with an exception.

  • What went wrong: Execution failed for task ':shared:swiftklibKCryptoIosX64'.

A problem occurred starting process 'command 'xcodebuild''

AshikAzeez avatar Apr 30 '24 11:04 AshikAzeez

for now you can temporarily comment out the whole swiftklib{} block as well as the plugin usage in the plugins{} block in the build.gradle file when you are on machines other than mac

TelephoneTan avatar Jun 22 '24 06:06 TelephoneTan

I suppose we should disable swiftklib tasks in case host platform is not macOS. I will try to come up with the solution soon.

IlyaGulya avatar Jul 21 '24 10:07 IlyaGulya

Hello, we are probably encountering the same issue.

Using the Klib plugin in our KPM project causes that the Android build on Linux and Windows fails.

Our hypothesis for the reason behind it is that the plugin activates for Android, even though it shouldn't since we only use the exposed Swift class in the actual classes on the iOS integration part.

heyshowshana avatar Jul 26 '24 10:07 heyshowshana

I guess removing swift-klib mentions in gradle is currently the only options, huh...

abdallahmehiz avatar Aug 10 '24 09:08 abdallahmehiz

@LandryNorris @heyshowshana @abdallahmehiz I've merged a fix. It's available in https://github.com/ttypic/swift-klib-plugin/releases/tag/v0.6.4 release, please let me know if issue persists or no.

IlyaGulya avatar Oct 13 '24 17:10 IlyaGulya

This week'll be a bit busy with work, but I'll check it out as soon as I get the chance.

LandryNorris avatar Oct 15 '24 20:10 LandryNorris

I got the chance to test this. It looks like I had to also add HostManager.hostIsMac to the place that registers the cinterop, which makes sense, since now the cinterop isn't created (not sure if it would be good to recommend that in the docs). After adding that and updating to 0.6.4, the project syncs just fine on a Linux host. I don't have a windows machine to test with, so can't speak for windows. I'll close the issue since it syncs and runs now on my Linux machine.

LandryNorris avatar Oct 16 '24 02:10 LandryNorris

Hmm, I will think about what to do with cinterops. Maybe they will become a part of plugin DSL. Thanks for the feedback!

IlyaGulya avatar Oct 16 '24 11:10 IlyaGulya