Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strange can't compile assets - 1 error on iOS due to missing simulator #683

Open
darronschall opened this issue Apr 25, 2024 · 6 comments
Open
Assignees

Comments

@darronschall
Copy link
Contributor

darronschall commented Apr 25, 2024

My build server runs ./gradlew iosSimulatorArm64Test as a GitHub action. When I added moko-resources into a new (almost empty) project, I started running into a strange can't compile assets - 1 that took a little while to debug. This error was not happening locally for me, just on the build server.

I'm not sure this is a moko-resources issue, but I'll document it here for future reference.

The error was:

> Task :shared:compileKotlinIosSimulatorArm64
can't compile assets - 1



FAILURE: Build failed with an exception.

> Task :shared:compileKotlinIosSimulatorArm64 FAILED
* What went wrong:
Execution failed for task ':shared:compileKotlinIosSimulatorArm64'.
> Assets compilation failed: 

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org/./

... which I saw was coming from https://github.com/icerockdev/moko-resources/blob/590fc8f2eacbe5aca4992df83aa7473b[…]rock/gradle/generator/apple/action/PackResourcesToKLibAction.kt

After remoting into the server, I tried the command with debugging info: ./gradlew iosSimulatorArm64Test --debug --stacktrace

There was a lot of output, but this was the relevant part:

2024-04-23T11:17:11.252-0400 [ERROR] [org.gradle.api.Task] can't compile assets - 1
2024-04-23T11:17:11.252-0400 [INFO] [org.gradle.api.Task] <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>com.apple.actool.compilation-results</key>
        <dict>
                <key>output-files</key>
                <array/>
        </dict>
        <key>com.apple.actool.errors</key>
        <array>
                <dict>
                        <key>description</key>
                        <string>The operation couldn't be completed. Failed to locate any simulator runtime matching options: {
    BuildVersionString = 21E210;
    Platforms =     (
        "com.apple.platform.iphonesimulator"
    );
    VersionString = "17.4";
}</string>
                        <key>failure-reason</key>
                        <string>Failed to locate any simulator runtime matching options: {
    BuildVersionString = 21E210;
    Platforms =     (
        "com.apple.platform.iphonesimulator"
    );
    VersionString = "17.4";
}</string>
                </dict>
        </array>
</dict>
</plist>

That was able to point me in the right direction.

Running xcrun simctl list devices available showed that I had no 17.4 sims on the build server.

So, I tried to create one: xcrun simctl create "iPhone 15 (17.4)" "iPhone 15" iOS17.4 ... but that failed with: Invalid runtime: iOS17.4

Opening Xcode on the Mac mini and installing iOS 17.4 SDK, then creating a simulator, did the trick. (Previously, the highest SDK available I had installed on this particular Mac Mini build server was 17.2)

Again, what's interesting is that ./gradlew iosSimulatorArm64Test worked just fine before moko-resources was included in the project (the tests were run with one of the existing simulators).

The task only started failing because the xcrun actool Assets.xcassets --compile . --platform iphoneos --minimum-deployment-target 9.0 command was looking for the 17.4 simulator which wasn't installed... I'm not 100% sure why that is, or if there's something the moko-resources plugin can do to pick the same simulator as the multiplatform plugin to avoid erroring?

Anyway, I thought this was worth sharing. I'm not sure it's a bug... but it took a bit of digging to figure out so I wanted to share my findings here should anyone else encounter the same thing in the future. 👋

@Alex009 Alex009 added this to the 0.24.0 milestone Apr 25, 2024
@Alex009
Copy link
Member

Alex009 commented Apr 26, 2024

@darronschall in 0.24.0 we now have iosMinimumDeploymentTarget property that passed in actool here

so maybe you configure that minimum target is 17.4? in gradle

@Alex009
Copy link
Member

Alex009 commented Apr 26, 2024

@ExNDY here need to change info to error

@ExNDY
Copy link
Contributor

ExNDY commented Apr 26, 2024

task.logger.info(input)
changed in #674

@darronschall
Copy link
Contributor Author

darronschall commented Apr 26, 2024

For this particular project, I have the iOS Deployment Target set in Xcode to 16.0. I'm not sure why actool was looking for a 17.4 sim... I couldn't find a 17.4 reference in any of the project source files.

@Alex009
Copy link
Member

Alex009 commented Apr 27, 2024

@darronschall i tell not about deployment target in xcode, but about iosMinimalDeploymentTarget in gradle configuration. did you change it?

@darronschall
Copy link
Contributor Author

@Alex009 Ah, I see. No, I did not supply a value. I'm using a very minimal configuration:

multiplatformResources {
    resourcesPackage = "com.myapp.resources"
}

@Alex009 Alex009 removed this from the 0.24.0 milestone May 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants