From 4add7da40cf8fe9cbe808a0cc3438cc23bd736bd Mon Sep 17 00:00:00 2001 From: Martin Bektchiev Date: Mon, 1 Jul 2019 13:47:01 +0300 Subject: [PATCH] feat: UIKit for Mac * Bundle frameworks as `.xcframework` * Produce iOS and macOS specific `.dSYM`s --- tns-core-modules-widgets/build.ios.sh | 4 +- tns-core-modules-widgets/ios/build.sh | 57 ++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/tns-core-modules-widgets/build.ios.sh b/tns-core-modules-widgets/build.ios.sh index 79736026c..e509ddc26 100755 --- a/tns-core-modules-widgets/build.ios.sh +++ b/tns-core-modules-widgets/build.ios.sh @@ -16,7 +16,7 @@ cd ios cd .. echo "Copy ios/TNSWidgets/build/*.framework dist/package/platforms/ios" -cp -R ios/TNSWidgets/build/TNSWidgets.framework dist/package/platforms/ios +cp -R ios/TNSWidgets/build/TNSWidgets.xcframework dist/package/platforms/ios cp ios/TNSWidgets/build/*.framework.dSYM.zip dist/package/platforms/ios @@ -28,7 +28,7 @@ fi if [ "$SKIP_PACK" ] then - echo "SKIP pack" + echo "SKIP pack" else echo "Copy NPM artefacts" cp .npmignore LICENSE README.md package.json dist/package diff --git a/tns-core-modules-widgets/ios/build.sh b/tns-core-modules-widgets/ios/build.sh index af6a21e49..121ea76ac 100755 --- a/tns-core-modules-widgets/ios/build.sh +++ b/tns-core-modules-widgets/ios/build.sh @@ -3,19 +3,26 @@ echo "Set exit on simple errors" set -e +OUTPUT_DIR="$PWD/TNSWidgets/build" +rm -rf $OUTPUT_DIR" + echo "Build for iphonesimulator" -xcodebuild -project TNSWidgets/TNSWidgets.xcodeproj -scheme TNSWidgets -sdk iphonesimulator -configuration Release clean build BUILD_DIR=$(PWD)/TNSWidgets/build -quiet +xcodebuild -project TNSWidgets/TNSWidgets.xcodeproj -scheme TNSWidgets -sdk iphonesimulator -configuration Release clean build BUILD_DIR="$OUTPUT_DIR" -quiet echo "Build for iphoneos" -xcodebuild -project TNSWidgets/TNSWidgets.xcodeproj -scheme TNSWidgets -sdk iphoneos -configuration Release clean build BUILD_DIR=$(PWD)/TNSWidgets/build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -quiet +xcodebuild -project TNSWidgets/TNSWidgets.xcodeproj -scheme TNSWidgets -sdk iphoneos -configuration Release clean build BUILD_DIR="$OUTPUT_DIR" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -quiet -function buildFatFramework() { +echo "Build for uikitformac" +xcodebuild -project TNSWidgets/TNSWidgets.xcodeproj -scheme TNSWidgets -destination 'variant=Mac Catalyst,arch=x86_64' -configuration Release clean build BUILD_DIR="$OUTPUT_DIR" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -quiet + +function buildFatFramework_iOS() { + set -e FRAMEWORK_NAME=$1 RELATIVE_DIR=$2 SRC_IPHONEOS=TNSWidgets/build/Release-iphoneos/$RELATIVE_DIR/$FRAMEWORK_NAME.framework SRC_SIMULATOR=TNSWidgets/build/Release-iphonesimulator/$RELATIVE_DIR/$FRAMEWORK_NAME.framework DEST=TNSWidgets/build/$FRAMEWORK_NAME.framework - echo; echo "Build fat framework at $DEST" + echo; echo "Build fat iOS framework at $DEST" rm -rf $DEST mkdir $DEST @@ -43,4 +50,44 @@ function buildFatFramework() { fi } -buildFatFramework TNSWidgets . +function buildXCFramework() { + set -e + FRAMEWORK_NAME=$1 + RELATIVE_DIR=$2 + + SRC_IPHONEOS=TNSWidgets/build/Release-iphoneos/$RELATIVE_DIR/$FRAMEWORK_NAME.framework + SRC_SIMULATOR=TNSWidgets/build/Release-iphonesimulator/$RELATIVE_DIR/$FRAMEWORK_NAME.framework + SRC_MACOS=TNSWidgets/build/Release-uikitformac/$RELATIVE_DIR/$FRAMEWORK_NAME.framework + OUTPUT_DIR=TNSWidgets/build + XCFRAMEWORK_PATH=$OUTPUT_DIR/$FRAMEWORK_NAME.xcframework + IOS_DSYM=$OUTPUT_DIR/$FRAMEWORK_NAME.ios.framework.dSYM + MACOS_DSYM=$OUTPUT_DIR/$FRAMEWORK_NAME.macos.framework.dSYM + + echo; echo "Building macOS/iOS xcframework at $XCFRAMEWORK_PATH" + xcodebuild -create-xcframework -framework "$SRC_IPHONEOS" -framework "$SRC_SIMULATOR" -framework "$SRC_MACOS" -output "$XCFRAMEWORK_PATH" + if [ -d $SRC_IPHONEOS.dSYM ]; then + echo; echo "Building iOS dSYM at $IOS_DSYM" + + cp -r $SRC_IPHONEOS.dSYM $IOS_DSYM + rm "$IOS_DSYM/Contents/Resources/DWARF/$FRAMEWORK_NAME" + lipo -create -output "$IOS_DSYM/Contents/Resources/DWARF/$FRAMEWORK_NAME" \ + "$SRC_SIMULATOR.dSYM/Contents/Resources/DWARF/$FRAMEWORK_NAME" \ + "$SRC_IPHONEOS.dSYM/Contents/Resources/DWARF/$FRAMEWORK_NAME" + file $IOS_DSYM/Contents/Resources/DWARF/$FRAMEWORK_NAME + + echo "Archiving dSYM at $FRAMEWORK_NAME.ios.framework.dSYM" + (cd $OUTPUT_DIR && zip -qr $FRAMEWORK_NAME.ios.framework.dSYM.zip $FRAMEWORK_NAME.ios.framework.dSYM) + + + echo; echo "Copying macOS dSYM at $MACOS_DSYM" + cp -r $SRC_MACOS.dSYM $MACOS_DSYM + + echo "Archiving dSYM at $FRAMEWORK_NAME.macox.framework.dSYM" + (cd $OUTPUT_DIR && zip -qr $FRAMEWORK_NAME.macos.framework.dSYM.zip $FRAMEWORK_NAME.macos.framework.dSYM) + else + echo "info: $SRC_IPHONEOS.dSYM doesn't exist. Skipping dSYM archives." + fi +} + +buildXCFramework TNSWidgets . +