xcode使用buildscript

时间:2016-11-03 11:13:48

标签: ios xcode xcode8 build-settings

我从第三方获得了一个动态框架,该框架在链接器阶段由于缺少符号而无法在基于 X86_64 的archs上编译,我已经要求他们反复将这个体系结构与他们的框架捆绑在一起,但是他们到目前为止还没有这样做过。

现在我的问题如下,无论如何我都无法使用构建设置添加阶段嵌入式二进制阶段,在构建/链接器进程中,嵌入式二进制文件如何链接到应用程序? /强>

我知道如果他们这样做,我可能不得不从框架中删除arch,但是它无法编译框架。

2 个答案:

答案 0 :(得分:4)

事实证明,嵌入式二进制阶段只不过是将.framework复制到目标bundle Framework文件夹中的xcode,以实现我最终创建一个完全手动添加框架的脚本的意图。

这导致了两个脚本,一个是在构建阶段中的目标依赖项之后添加的,必须在编译源之前

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

这只是我为实现这一目标而快速创建的快速粗略脚本。我只允许这种情况发生我的目标是一个设备,因为这是我的初衷。但它可以删除。

答案 1 :(得分:2)

谢谢@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)/../ out / Build / Products / $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

对于“框架搜索路径”和“标题搜索路径”,您的路径和框架名称当然可以不同。