How to build a Fat Framework that includes Mac Catalyst?

后端 未结 1 1911
忘掉有多难
忘掉有多难 2021-02-15 13:44

How does one build a fat framework that includes the architectures necessary to build to Mac Catalyst apps?

1条回答
  •  名媛妹妹
    2021-02-15 14:45

    Apple has introduced a (undocumented?) new target: x86_64-apple-ios13.0-macabi

    How to build for this target depends on your frameworks build environment.

    1) XCFramework

    In case your framework is an Xcode project:

    • Select the target in Xcode
    • Select the "General" tab
    • Under "Deployment Info", tick the "Mac" checkbox:
    • build

    2) External Build

    In case you are building your framework outside Xcode, e.g. a C lib, instead of building for x86_64 & iphonesimulator, build for the new target x86_64-apple-ios13.0-macabi & macosx.

    Example for C Lib using make:

    MIN_IOS_VERSION="10.0"
    LIB_NAME= "theNameOfYourLib"
    
    # The build function
    build()
    {
    ARCH=$1
    TARGET=$2
    HOST=$3
    SDK=$4
    SDK_PATH=`xcrun -sdk ${SDK} --show-sdk-path`
    
    export PREFIX=build/${ARCH}
    export CFLAGS="-arch ${ARCH} -isysroot ${SDK_PATH} -miphoneos-version-min=${MIN_IOS_VERSION} -std=c99 -target ${TARGET}"
    export LDFLAGS="-arch ${ARCH}"
    export CC="$(xcrun --sdk ${SDK} -f clang) -arch ${ARCH} -isysroot ${SDK_PATH}"
    
    PKG_CONFIG_ALLOW_CROSS=1 PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig ./configure --host=${HOST} --prefix=$PREFIX
    
    make
    make install
    }
    
    # Build for all required architectures
    
    build "armv7" "armv7-apple-ios" "arm-apple-darwin" "iphoneos" # MIN_IOS_VERSION must be one of arm7 supported ones to. Else remove this line.
    build "arm64" "aarch64-apple-ios" "arm-apple-darwin" "iphoneos"
    # build "x86_64" "x86_64-apple-ios" "x86_64-apple-darwin" "iphonesimulator" #obsolete due to x86_64-apple-ios13.0-macabi
    build "x86_64" "x86_64-apple-ios13.0-macabi" "x86_64-apple-darwin" "macosx"
    build "i386" "i386-apple-ios" "i386-apple-darwin" "iphonesimulator" # same as arm7:  MIN_IOS_VERSION must be one of arm7 supported ones.
    
    # Now find all the artefacts created above (e.g. build/arm64/lib/${LIB_NAME}.a,  build/x86_64/lib/${LIB_NAME}.a ...) and merge them together to a fat lib using lipo
    
    OUTPUT_DIR="fatLib"
    lipo -create -output $OUTPUT_DIR/lib/${LIB_NAME}.a build/x86_64/lib/${LIB_NAME}.a build/arm64/lib/${LIB_NAME}.a build/armv7/lib/${LIB_NAME}.a build/i386/lib/${LIB_NAME}.a
    
    # You may also need the header files
    cp -R build/armv7/include/* $OUTPUT_DIR/include/
    

    Note: You must/can not add slices for x86_64-apple-ios and x86_64-apple-ios13.0-macabito the fat lib. Both are x86_64. Use only the one for x86_64-apple-ios13.0-macabi.

    0 讨论(0)
提交回复
热议问题