使用 Xcode Cloud 构建 Kotlin 多平台应用程序

kau*_*lex 5 xcode kotlin kotlin-multiplatform xcode-cloud

随着 Apple 宣布 Xcode Cloud 现已可供所有开发人员使用,我尝试将其设置为 Kotlin 多平台项目。老实说,开始有点困难。目前我在简单的测试操作中面临以下问题:

\n
The operation couldn\xe2\x80\x99t be completed. Unable to locate a Java Runtime.\nPlease visit http://www.java.com for information on installing Java.\nCommand PhaseScriptExecution failed with a nonzero exit code\n
Run Code Online (Sandbox Code Playgroud)\n

所以我阶段就尝试安装一个jdk ci_post_clone.sh。的输出java -version如下:

\n
openjdk version "17.0.2" 2022-01-18\nOpenJDK Runtime Environment (build 17.0.2+8-86)\nOpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)\nInstalled java\n
Run Code Online (Sandbox Code Playgroud)\n

./gradlew -v输出:

\n
\nShowing All Messages\n------------------------------------------------------------\n\nGradle 7.4.2\n\n------------------------------------------------------------\nKotlin:       1.5.31\nGroovy:       3.0.9\nAnt:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021\nJVM:          17.0.2 (Oracle Corporation 17.0.2+8-86)\nOS:           Mac OS X 12.4 x86_64\n
Run Code Online (Sandbox Code Playgroud)\n

尽管如此,我仍然遇到同样的错误。这可能是苹果的限制吗?

\n

有任何想法吗?

\n

MrJ*_*Jre 4

基本上,我们通过 tar 包将 JDK 安装到项目文件夹中,使用ci_post_clone.sh. 我们选择项目文件夹是因为我们可以控制这个目录,这与通过brew安装java相反(您必须将java安装符号链接到系统目录中,这是不允许的(https://developer.apple .com/documentation/xcode/making-dependency-available-to-xcode-cloud

\n
\n

注意\n您可以使用自定义构建脚本执行各种任务,但\xe2\x80\x99 无法使用 sudo 获取管理员权限。

\n
\n

这是我们使用的脚本:

\n
#!/bin/sh\n\nroot_dir=$CI_WORKSPACE_PATH\nrepo_dir=$CI_PRIMARY_REPOSITORY_PATH\njdk_dir="${CI_DERIVED_DATA_PATH}/JDK"\n\ngradle_dir="${repo_dir}/Common"\ncache_dir="${CI_DERIVED_DATA_PATH}/.gradle"\n\njdk_version="20.0.1"\n\n# Check if we stored gradle caches in DerivedData.\nrecover_cache_files() {\n    \n    echo "\\nRecover cache files"\n\n    if [ ! -d $cache_dir ]; then\n        echo " - No valid caches found, skipping"\n        return 0\n    fi\n\n    echo " - Copying gradle cache to ${gradle_dir}"\n    rm -rf "${gradle_dir}/.gradle"\n    cp -r $cache_dir $gradle_dir\n\n    return 0\n}\n\n# Install the JDK\ninstall_jdk_if_needed() {\n\n    echo "\\nInstall JDK if needed"\n\n    if [[ $(uname -m) == "arm64" ]]; then\n        echo " - Detected M1"\n        arch_type="macos-aarch64"\n    else\n        echo " - Detected Intel"\n        arch_type="macos-x64"\n    fi\n\n    # Location of version / arch detection file.\n    detect_loc="${jdk_dir}/.${jdk_version}.${arch_type}"\n\n    if [ -f $detect_loc ]; then\n        echo " - Found a valid JDK installation, skipping install"\n        return 0\n    fi\n\n    echo " - No valid JDK installation found, installing..."\n\n    tar_name="jdk-${jdk_version}_${arch_type}_bin.tar.gz"\n\n    # Download and un-tar JDK to our defined location.\n    curl -OL "https://download.oracle.com/java/20/archive/${tar_name}"\n    tar xzf $tar_name -C $root_dir\n\n    # Move the JDK to our desired location.\n    rm -rf $jdk_dir\n    mkdir -p $jdk_dir\n    mv "${root_dir}/jdk-${jdk_version}.jdk/Contents/Home" $jdk_dir\n\n    # Some cleanup.\n    rm -r "${root_dir}/jdk-${jdk_version}.jdk"\n    rm $tar_name\n\n    # Add the detection file for subsequent builds.\n    touch $detect_loc\n\n    echo " - Set JAVA_HOME in Xcode Cloud to ${jdk_dir}/Home"\n\n    return 0\n}\n\nrecover_cache_files\ninstall_jdk_if_needed\n
Run Code Online (Sandbox Code Playgroud)\n

第一次运行脚本后,日志将打印echo脚本中的最后一个,以指示 Java SDK 所在的位置。JAVA_HOME该值应按照工作流程“编辑”部分内的“环境变量”进行设置。

\n

环境变量

\n

之后,构建将使用 Java SDK 并构建工件。

\n