Xcode 10: nie można dołączyć błędu DB

Podczas aktualizacji do Xcode 10 nie można zbudować statycznej biblioteki docelowej iOS. Sposób, w jaki próbuję go zbudować jest następujący:

xcodebuild -target TargetName -configuration Release clean build

Z Xcode 9 Wszystko działa płynnie, ale gdy Xcode 10 jest używany do budowania, dostaję następujący błąd (po czystym działa płynnie):

Uwaga: używanie nowego systemu budowania

Uwaga: planowanie budowy

Uwaga: konstruowanie opisu kompilacji błąd informacji o systemie: nie można dołączyć DB: błąd: dostęp do bazy build "/Users / uerceg / random-path/build/XCBuildData / build.db": baza danych jest zablokowane możliwe, że istnieją dwie równoległe Kompilacje działające w tym samym lokalizacja systemu plików.

** BUILD FAILED * *

** BUILD FAILED * *

Następujące polecenia build nie powiodły się: PhaseScriptExecution MultiPlatform\ Build /Users/uerceg/random-path/build/Library.build/Release-iphoneos/LibraryTarget.build/Script-9DE7C9021AE68FA5001556E5.sh (1 failure)

To prawdopodobnie niezwiązane, ale zauważyłem, że nowe Xcode 10 build flagi systemu zduplikowane Copy Bundle Resource Info.pliki plist jako błędy, więc upewniłem się, że nie ma zduplikowanych wpisów, ale prawdopodobnie ten błąd nie jest związany z tym faktem.

Czy ktoś wie, co może być nie tak?
Author: uerceg, 2018-07-03

8 answers

Wygląda na to, że udało mi się to rozwiązać. Miałem /bin/sh skrypt w Build Phases, który próbował zbudować statyczną bibliotekę fat. W skrypcie miałem OBJROOT ustawioną ścieżkę tak:

OBJROOT="${OBJROOT}"

Wydaje się, że Xcode 10 i nowy system budowania zmienił kilka ścieżek po drodze i ta linia była źródłem problemu. Należy go dostosować do:

OBJROOT="${OBJROOT}/DependentBuilds"

Po tym, xcodebuild udaje się zbudować ten cel bez problemów z nowym systemem budowania wprowadzonym w Xcode 10.

Nie doszedłem do tego rozwiązanie przeze mnie, wielkie podziękowania dla Matta Gallaghera i jego posta tutaj: https://github.com/mattgallagher/CwlSignal/issues/24#issuecomment-396931001


Zgodnie z życzeniem @TMin w komentarzu, oto jak wygląda mój skrypt:

set -e

# If we're already inside this script then die
if [ -n "$RW_MULTIPLATFORM_BUILD_IN_PROGRESS" ]; then
exit 0
fi
export RW_MULTIPLATFORM_BUILD_IN_PROGRESS=1

RW_FRAMEWORK_NAME=${PROJECT_NAME}
RW_INPUT_STATIC_LIB="lib${PROJECT_NAME}.a"
RW_FRAMEWORK_LOCATION="${BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework"

function build_static_library {
    echo "1"
    echo "${BUILD_DIR}"
    # Will rebuild the static library as specified
    #     build_static_library sdk
    xcrun xcodebuild -project "${PROJECT_FILE_PATH}" \
    -target "${TARGET_NAME}" \
    -configuration "${CONFIGURATION}" \
    -sdk "${1}" \
    ONLY_ACTIVE_ARCH=NO \
    BUILD_DIR="${BUILD_DIR}" \
    OBJROOT="${OBJROOT}" \
    BUILD_ROOT="${BUILD_ROOT}" \
    SYMROOT="${SYMROOT}" $ACTION
}

function make_fat_library {
    # Will smash 2 static libs together
    #     make_fat_library in1 in2 out
    xcrun lipo -create "${1}" "${2}" -output "${3}"
}

# 1 - Extract the platform (iphoneos/iphonesimulator) from the SDK name
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]; then
RW_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi

# 2 - Extract the version from the SDK
if [[ "$SDK_NAME" =~ ([0-9]+.*$) ]]; then
RW_SDK_VERSION=${BASH_REMATCH[1]}
else
echo "Could not find sdk version from SDK_NAME: $SDK_NAME"
exit 1
fi

# 3 - Determine the other platform
if [ "$RW_SDK_PLATFORM" == "iphoneos" ]; then
RW_OTHER_PLATFORM=iphonesimulator
else
RW_OTHER_PLATFORM=iphoneos
fi

# 4 - Find the build directory
if [[ "$BUILT_PRODUCTS_DIR" =~ (.*)$RW_SDK_PLATFORM$ ]]; then
RW_OTHER_BUILT_PRODUCTS_DIR="${BASH_REMATCH[1]}${RW_OTHER_PLATFORM}"
else
echo "Could not find other platform build directory."
exit 1
fi

# Build the other platform.
build_static_library "${RW_OTHER_PLATFORM}${RW_SDK_VERSION}"

# If we're currently building for iphonesimulator, then need to rebuild
#   to ensure that we get both i386 and x86_64
if [ "$RW_SDK_PLATFORM" == "iphonesimulator" ]; then
build_static_library "${SDK_NAME}"
fi

# Join the 2 static libs into 1 and push into the .framework
make_fat_library "${BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}" \
"${RW_OTHER_BUILT_PRODUCTS_DIR}/${RW_INPUT_STATIC_LIB}" \
"${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk"

# Ensure that the framework is present in both platform's build directories
cp -a "${RW_FRAMEWORK_LOCATION}/Versions/A/${RW_FRAMEWORK_NAME}Sdk" \
"${RW_OTHER_BUILT_PRODUCTS_DIR}/static/${RW_FRAMEWORK_NAME}Sdk.framework/Versions/A/${RW_FRAMEWORK_NAME}Sdk"

# Copy the framework to the project directory
ditto "${RW_FRAMEWORK_LOCATION}" "${SRCROOT}/Frameworks/static/${RW_FRAMEWORK_NAME}Sdk.framework"

Problem jest w build_static_library metodzie w tej linii:

OBJROOT="${OBJROOT}" \

Zmiana linii na:

OBJROOT="${OBJROOT}/DependantBuilds" \

Rozwiązuje problem dla mnie.

 75
Author: uerceg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 12:02:50

Otwórz Plik Xcode->Ustawienia Projektu

Build System - > Legacy Build System

Konfiguracja Xcode wersji 10.0 ustawienia projektu mogą rozwiązać problem.

 51
Author: sharon ouyang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 12:41:20

Jeśli używasz build script do budowania bibliotek submodule, tak jak ja. Musisz również wyłączyć nowy system budowania w skrypcie budowania jawnie za pomocą -UseModernBuildSystem=NO w poleceniu xcodebuild.

Na przykład:

xcodebuild -configuration "${CONFIGURATION}" -project "${PROJECT_NAME}.xcodeproj" -target "${TARGET_NAME}" -sdk "${OTHER_SDK_TO_BUILD}" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}" -UseModernBuildSystem=NO
 20
Author: Shih Ken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 08:40:14

Użyj tego skryptu będzie to działa dobrze z nowym systemem budowania

# Step 1 search RECURSION and if detected stop "*/

if [ "true" == ${ALREADYINVOKED:-false} ]
then
echo "RECURSION: Detected, stopping"
else
export ALREADYINVOKED="true"

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# Step 2. Build Device and Simulator versions

xcodebuild -target logger ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

xcodebuild -target logger-configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 -arch x86_64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

# Step 3. Create universal binary file using lipo
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}universal.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"

# Last touch. copy the header files. Just for convenience
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"

fi

Przed Xcode 10 build system używa jednego wątku, ale w Xcode 10 używa nowego systemu build z wieloma wątkami, więc za każdym razem, gdy uruchamiasz swój build Xcode uruchom ten skrypt

 xcodebuild -target logger ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}".

Wywoła jeszcze raz dla build so on, który utworzy rekurencję

Nie zapomnij zakończyć skryptu (fi) jego końcem warunku IF

Krok 1 polega na wykryciu rekurencji i ich zatrzymaniu

 0
Author: Raj Maurya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-17 07:45:27

Jeśli chcesz zachować domyślny system kompilacji Xcode 10, ale nadal uruchamiasz kompilację poza IDE( na przykład w komputerze CI), po prostu Zamień swój parametr -target na parametr -scheme w Komendzie xcodebuild, taki jak:

xcodebuild -scheme SchemeName -configuration Release clean build

Dziękitemu postowi z 2015 roku, który mówi o bardzo podobnym problemie i dał mi wskazówkę, aby rozwiązać ten problem. Jak mówi ten sam autor,

Zaryzykowałbym przypuszczenie, że xcodebuild bez planu idzie niesłusznie przez "nowoczesny system budowania", podając wspomniany błąd

 0
Author: Delfín,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-03 11:28:44

Mam te same problemy i spróbuj wszystkiego z podpowiedzi, ale ten błąd nadal trwa. Czasami projekt jest zbudowany, następnym razem nie ma i błąd. A rozwiązaniem, które mi pomaga, jest edycja scheme i wyłączenie Paralelize Build. Potem wszystko działa dobrze.

 0
Author: Dmytro Turkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-24 13:08:15

Dodanie czystych danych pochodnych krok w moich skryptach budowania (przed kompilacją Xcode) wydaje się rozwiązać problem dla mnie.

Nie wiem, czy to jest powiązane, ale mój projekt używa Realm (zainstalowany z CocoaPods). To jest problem z GitHub, który zainspirował " fix " - > https://github.com/realm/realm-cocoa/issues/5812 .

 0
Author: Adam Waite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-19 10:08:19

Napotkałem ten problem podczas uruchamiania swift run <your_proj>.

Szybką poprawkę można uzyskać, usuwając plik build.db wraz z jego plikami i katalogami. To może wydawać się błahostką, ale u mnie zadziałało.

 0
Author: Benjamin Wen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-28 02:38:03