R.swift icon indicating copy to clipboard operation
R.swift copied to clipboard

Can't archive app (macCatalyst): Command PhaseScriptExecution failed with a nonzero exit code

Open antfisher opened this issue 2 years ago • 8 comments

Archiving build for macCatalyst is always failed with error:

PhaseScriptExecution R.swift\ generate\ resources\ for\ application\----/Users/-------/Library/Developer/Xcode/DerivedData/-----cgdjxjbhuvkkviehgyewavizhdoh/Build/Intermediates.noindex/ArchiveIntermediates/----/IntermediateBuildFilesPath/----.build/Release-maccatalyst/----.build/Script-C28EBBAA297DAB5B00847376.sh (in target '----' from project '----')
    cd /Users/--------/WorkProjects/----
    /bin/sh -c /Users/-------/Library/Developer/Xcode/DerivedData/-----cgdjxjbhuvkkviehgyewavizhdoh/Build/Intermediates.noindex/ArchiveIntermediates/----/IntermediateBuildFilesPath/----.build/Release-maccatalyst/----.build/Script-C28EBBAA297DAB5B00847376.sh

sandbox-exec: execvp() of '//Users/--------/Library/Developer/Xcode/DerivedData/-----cgdjxjbhuvkkviehgyewavizhdoh/Build/Intermediates.noindex/ArchiveIntermediates/----/BuildProductsPath/Release/rswift' failed: No such file or directory
Command PhaseScriptExecution failed with a nonzero exit code

R.swift installed using SPM. M1 pro mac used. The issue is reproducible only for archive builds and only for macCatalyst.

Update: After some research, I found that the reason for the issue is a wrong path to rswift executable. :)

#if canImport(XcodeProjectPlugin)
import XcodeProjectPlugin

extension RswiftGeneratePublicResources: XcodeBuildToolPlugin {
    func createBuildCommands(context: XcodePluginContext, target: XcodeTarget) throws -> [Command] {

        let resourcesDirectoryPath = context.pluginWorkDirectory
            .appending(subpath: target.displayName)
            .appending(subpath: "Resources")

        try FileManager.default.createDirectory(atPath: resourcesDirectoryPath.string, withIntermediateDirectories: true)

        let rswiftPath = resourcesDirectoryPath.appending(subpath: "R.generated.swift")

        let description: String
        if let product = target.product {
            description = "\(product.kind) \(target.displayName)"
        } else {
            description = target.displayName
        }

        return [
            .buildCommand(
                displayName: "R.swift generate resources for \(description)",
                executable: try context.tool(named: "rswift").path,
                arguments: [
                    "generate", rswiftPath.string,
                    "--target", target.displayName,
                    "--input-type", "xcodeproj",
                    "--bundle-source", "finder",
                    "--access-level", "public",
                ],
                outputFiles: [rswiftPath]
            ),
        ]
    }
}

#endif

As you can see, the path to the executable is produced with context.tool(named: "rswift").path. And it generates something like this: ...DerivedData/APP_NAME/Build/Intermediates.noindex/.../BuildProductsPath/Release/rswift And an executable can be found with this path, but only while building for ios. When archiving for MacCatalyst the right path should be: ...DerivedData/APP_NAME/Build/Intermediates.noindex/.../BuildProductsPath/Release-maccatalyst/rswift

So it seems like it is an SPM bug

antfisher avatar Jan 22 '23 17:01 antfisher

From the error message, this looks similar to: https://github.com/mac-cain13/R.swift/issues/798

tomlokhorst avatar Feb 04 '23 13:02 tomlokhorst

@antfisher were you able to get past this?

deloitteshalem avatar Feb 08 '23 18:02 deloitteshalem

I think it's different to #798 and I am unable to get around this. Here is the sample project with R.swift failing on Archive for Mac Catalyst.

rswift-catalyst.zip

marekpridal avatar Feb 11 '23 18:02 marekpridal

From the error message, this looks similar to: #798

Seems like it is different.

@antfisher were you able to get past this?

@deloitteshalem No. But I've updated my first post. Now it should be easier to create a temporary fix.

antfisher avatar Feb 16 '23 11:02 antfisher

Thank you both for doing some more research and providing an example project.

This indeed sounds like an SPM bug.

I'm not quite sure what to do about it. I could try to create some hack to manipulate the path if I can somehow detect that the project is build for MacCatalyst. But a better approach would be to report the bug at SPM, and wait for a bug fix there.

tomlokhorst avatar Mar 05 '23 13:03 tomlokhorst

I'm having the same issue too.

Zeta611 avatar Mar 12 '23 17:03 Zeta611

I'm encountering the same issue. Does anyone know of any workarounds?

kyoji2 avatar Sep 14 '23 11:09 kyoji2

I'm encountering the same issue. Does anyone know of any workarounds?

Since the problem is specifically related to SPM, the first thing that comes to mind is to try an alternative way to install R.swift, for example, using Cocoapods or manually adding the R.swift library to your project.

antfisher avatar Sep 15 '23 18:09 antfisher