xcode добавить встроенный двоичный файл с помощью buildscript

Мне дали динамический фреймворк от третьей стороны, который не компилирует арки на основе X86_64 на этапе компоновки из-за пропущенных символов, я просил их неоднократно связывать эту архитектуру со своими фреймворками, но они до сих пор не могли этого сделать,

Теперь мой вопрос заключается в следующем: я не могу найти способ добавить встроенный двоичный этап этапа с использованием параметров сборки. Как встроенные двоичные файлы связаны с приложением в процессе сборки / компоновщика?

Я знаю, что если они это сделают, мне, возможно, придется убрать арку из фреймворка, но это не значит, что я не смогу скомпилировать фреймворк.

1 ответ

Решение

Оказывается, что встроенный бинарный этап - это не что иное, как xcode, копирующее.framework в целевую папку Framework пакета, так что для достижения моих конечных намерений я создаю сценарий, который добавляет структуру полностью вручную.

В результате два сценария, один из которых добавляется сразу после целевых зависимостей на этапах сборки, должен быть перед исходными кодами компиляции:

if [[ $PLATFORM_NAME == 'iphoneos' ]]; then

    SOME_FRAMEWORK=$BUILT_PRODUCTS_DIR"/"$PRODUCT_NAME".app/Frameworks/someframework.framework/"
    export LIBRARY_SEARCH_PATHS=$LIBRARY_SEARCH_PATHS" "$SDKROOT"/someframework.framework"
fi

и еще один скрипт и связать двоичный файл с библиотеками, где я копирую и подписываю фреймворк.

if [[ $PLATFORM_NAME == 'iphoneos' ]]; then
    MY_FRAMEWORK=$BUILT_PRODUCTS_DIR"/"$PRODUCT_NAME".app/Frameworks/someframework.framework/"
    mkdir -p $BUILT_PRODUCTS_DIR"/"$PRODUCT_NAME".app/Frameworks"
    cp -Rv $PROJECT_DIR"/someframework.framework" $MY_FRAMEWORK

    CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
    if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then
        CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}"
    fi

    codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" $MY_FRAMEWORK"/<binary of framework>"
fi

это всего лишь быстрый грубый скрипт, который я быстро создал для достижения этой цели. Я только позволю этому случиться, я нацеливаюсь на устройство, так как это были мои первоначальные намерения. но это можно убрать.

Спасибо @RicardoDuarte; Есть мой скрипт для iPhone и симулятора.

Example_To=$BUILT_PRODUCTS_DIR"/"$PRODUCT_NAME".app/Frameworks/Example.framework/"
Example_From=$PROJECT_DIR"/../out/Build/Products/"$CONFIGURATION$EFFECTIVE_PLATFORM_NAME"/Example.framework"

mkdir -p $BUILT_PRODUCTS_DIR"/"$PRODUCT_NAME".app/Frameworks"
cp -Rv $Example_From $Example_To

if [[ $PLATFORM_NAME == 'iphoneos' ]]; then
    CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}"

    if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then
        CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}"
    fi

    codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" $Example_To
fi

Я также добавил путь к фреймворку

$(Project_dir)/../ из /Build/Products/$(КОНФИГУРАЦИЯ)$(EFFECTIVE_PLATFORM_NAME)

"Пути поиска по фреймворку" и "Пути поиска по заголовку", конечно, ваш путь и имя фреймворка могут отличаться.

Другие вопросы по тегам