如何构建一个胖框架,其中包括构建Mac Catalyst应用所需的架构?
答案 0 :(得分:3)
Apple引入了(未记录?)新目标:x86_64-apple-ios13.0-macabi
如何为此目标进行构建取决于您的框架构建环境。
1)XCFramework
如果您的框架是Xcode项目:
2)外部版本
如果您要在Xcode之外构建框架,例如一个C库,而不是为x86_64和iphonesimulator构建,而是为新目标x86_64-apple-ios13.0-macabi和macosx构建。
使用make的C Lib示例:
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/
注意:您必须/不能将x86_64-apple-ios
和x86_64-apple-ios13.0-macabi
的切片添加到fat lib中。两者都是x86_64。对于x86_64-apple-ios13.0-macabi
仅使用一个。