xi-editor / xi-mac

The xi-editor mac frontend.
Apache License 2.0
3.02k stars 147 forks source link

no such module 'ArgumentParser' #499

Open windowshome opened 3 years ago

windowshome commented 3 years ago

/Users/xuwei/Desktop/xi-mac/Sources/XiCLICore/Xi.swift:15:8: error: no such module 'ArgumentParser' import ArgumentParser ^

BUILD FAILED

The following build commands failed: CompileSwift normal x86_64 CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler (2 failures)

zeroly commented 3 years ago

https://github.com/xi-editor/xi-mac/issues/494#issuecomment-643482196

Lyrillind commented 3 years ago

494 (comment)

It's not working.

afterhill commented 3 years ago

confirmed not working under latest "Big Sur" + xcode 12.3

Lyrillind commented 3 years ago

I finally find a way to build successfully on macOS 11.2.2 with Xcode 12.4.

STEP 1

Run commands as follows in xi-editor/rust directory:

cargo build --release --target "x86_64-apple-darwin"

xcrun --sdk macosx lipo -create "target/x86_64-apple-darwin/release/xi-core" -output "xi-core"

cargo build --release -p xi-syntect-plugin --target "x86_64-apple-darwin"

xcrun --sdk macosx lipo -create "target/x86_64-apple-darwin/release/xi-syntect-plugin" -output "xi-syntect-plugin"

now we have xi-core and xi-syntect-plugin file.

STEP 2

Modify build-rust-xcode.sh file.

comment following lines at 74 and 75

build_target xi-core ""
build_target xi-syntect-plugin "-p xi-syntect-plugin"

add line after mkdir -p at line 78

cp "xi-core" "${BUILT_PRODUCTS_DIR}/xi-core"

change line 80 as follows

mv "xi-syntect-plugin" "${BUILT_PRODUCTS_DIR}/plugins/syntect/bin/"

save file.

STEP 3

run command

xcodebuild -scheme XiEditor -configuration Release build

Now we got the build app in derived data folder.


The root cause of failure while building is because the build-rust-xcode.sh is always error.

So instead running it, I run the command mannually in terminal and leave a little command in it to run so will not break the xcode build phases.

wongjiahau commented 3 years ago

@Lyrillind I failed at Step 3 with the following error:

mv: xi-syntect-plugin: No such file or directory
Command ExternalBuildToolExecution failed with a nonzero exit code

** BUILD FAILED **

I'm using macOS 11.2.3 with Xcode 12.4.

This is my build-rust-xcode.sh after following Step 2:

#!/bin/bash

# When building from Xcode we want to ensure that `cargo` is in PATH.
# as a convenience, add the default cargo install location
export PATH="$PATH:${HOME}/.cargo/bin"

# Users can optionally set cargo path in xi-mac/.env
if [[ -f "${SRCROOT}/.env" ]]; then
    source "${SRCROOT}/.env"
    if ! [[ -z "$CARGO_PATH" ]]; then
        export PATH="$CARGO_PATH:$PATH"
    else
        echo "warning: ${SRCROOT}/.env file found, but CARGO_PATH not set."
    fi
fi

if ! [[ -x "$(command -v cargo)" ]]; then
    echo 'error: Unable to find cargo command. If cargo is not installed visit rustup.rs, otherwise set CARGO_PATH in xi-mac/.env' >&2
    exit 127
fi

set -e

function build_target () {
    TARGET_NAME="$1"
    CARGO_PROJECT_FLAG="$2"
    cd "${SRCROOT}/xi-editor/rust"
    if [[ ${ACTION:-build} = "build" ]]; then
        if [[ $PLATFORM_NAME = "" ]]; then
            # default for building with xcodebuild
            PLATFORM_NAME="macosx"
        fi

        if [[ $PLATFORM_NAME = "macosx" ]]; then
            RUST_TARGET_OS="darwin"
        else
            RUST_TARGET_OS="ios"
        fi

        for ARCH in $ARCHS
        do
            if [[ $(lipo -info "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}" 2>&1) != *"${ARCH}"* ]]; then
                rm -f "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}"
            fi
        done

        if [[ $CONFIGURATION = "Debug" ]]; then
            RUST_CONFIGURATION="debug"
            RUST_CONFIGURATION_FLAG=""
        else
            RUST_CONFIGURATION="release"
            RUST_CONFIGURATION_FLAG="--release"
        fi

        EXECUTABLES=()
        for ARCH in $ARCHS
        do
            RUST_ARCH=$ARCH
            if [[ $RUST_ARCH = "arm64" ]]; then
                RUST_ARCH="aarch64"
            fi
            cargo build $RUST_CONFIGURATION_FLAG $CARGO_PROJECT_FLAG --target "${RUST_ARCH}-apple-${RUST_TARGET_OS}"
            EXECUTABLES+=("target/${RUST_ARCH}-apple-${RUST_TARGET_OS}/${RUST_CONFIGURATION}/${TARGET_NAME}")
        done

        mkdir -p "${BUILT_PRODUCTS_DIR}"
        xcrun --sdk $PLATFORM_NAME lipo -create "${EXECUTABLES[@]}" -output "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}"
    elif [[ $ACTION = "clean" ]]; then
        cargo clean
        rm -f "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}"
    fi
}

# build_target xi-core ""
# build_target xi-syntect-plugin "-p xi-syntect-plugin"

# move syntect plugin into plugins dir
mkdir -p "${BUILT_PRODUCTS_DIR}/plugins/syntect/bin"

mv "xi-syntect-plugin" "${BUILT_PRODUCTS_DIR}/plugins/syntect/bin/"
cp "${SRCROOT}/xi-editor/rust/syntect-plugin/manifest.toml" "${BUILT_PRODUCTS_DIR}/plugins/syntect/"

# workaround for https://github.com/travis-ci/travis-ci/issues/6522
set +e
Lyrillind commented 3 years ago

@wongjiahau

  1. check the xi-core and xi-syntect-plugin file after STEP 1.
  2. missing cp "xi-core" "${BUILT_PRODUCTS_DIR}/xi-core" in sh file described in STEP 2
xaocon commented 3 years ago

Now we got the build app in derived data folder.

In case anyone else is unfamiliar with what this means it's in (at least for me) ~/Library/Developer/Xcode/DerivedData/.

Yiniau commented 3 years ago

run open XiEditor.xcodeproj, and use the Product > Build option on the top menu or just command + B

this work for me, macOS 11.2.3; Xcode 12.5.1

jido commented 2 years ago

run open XiEditor.xcodeproj, and use the Product > Build option on the top menu or just command + B

this work for me, macOS 11.2.3; Xcode 12.5.1

Thanks, that worked for me (had to reinstall arm64 Rust on M1).