Skip to content
Snippets Groups Projects
Commit 06522dad authored by Kateryna Kostiuk's avatar Kateryna Kostiuk
Browse files

build: support arm64 simulator

- Migrate to XCFramework to ensure compatibility
across all build targets

Gitlab: #422
Change-Id: Id1e96252ba3383129862e7178973b81e9eb8b0c0
parent 7b929a86
No related branches found
No related tags found
No related merge requests found
# Evil DS_Store # Evil DS_Store
.DS_Store .DS_Store
# Dependency lib # Dependency lib
fat/ fat/
DEPS/ DEPS/
xcframework/
# Xcode UserData # Xcode UserData
Ring/Ring.xcodeproj/project.xcworkspace/xcshareddata/ Ring/Ring.xcodeproj/project.xcworkspace/xcshareddata/
......
# Jami iOS # Jami iOS
This repository is for the porting of Jami to iOS. This repository contains the iOS client implementation of Jami.
## Requirements ## Requirements
...@@ -9,41 +9,64 @@ This repository is for the porting of Jami to iOS. ...@@ -9,41 +9,64 @@ This repository is for the porting of Jami to iOS.
- Homebrew (instructions could be found on https://brew.sh) - Homebrew (instructions could be found on https://brew.sh)
- Carthage (brew install carthage) - Carthage (brew install carthage)
## Buil instructions ## Build instructions
Supported archs are: arm64 Supported archs are: arm64 for iPhoneOS and arm64, x86_64 for iPhoneSimulator
Minimum supported version is: 14.5 Minimum supported version is: 14.5
- clone the project 1. Clone the project
```bash ```bash
git clone https://review.jami.net/jami-project git clone https://review.jami.net/jami-project
``` ```
- init repositories 2. Initialize repositories
```bash ```bash
cd jami-project && ./build.py --init cd jami-project && ./build.py --init
``` ```
- install dependencies 3. Install dependencies
```bash ```bash
./build.py --dependencies --distribution IOS ./build.py --dependencies --distribution IOS
``` ```
- build daemon and contributions 4. Build daemon and contributions (choose one option):
```bash **Option A: For iPhone device only**
cd client-ios && ./compile-ios.sh --platform=iPhoneOS ```bash
``` cd client-ios && ./compile-ios.sh --platform=iPhoneOS
```
**Option B: For simulator only**
```bash
cd client-ios && ./compile-ios.sh --platform=iPhoneSimulator
```
**Option C: For both iPhone device and simulator**
```bash
cd client-ios && ./compile-ios.sh --platform=all
```
- build client dependencies **Additional options:**
```
--release Build in release mode with optimizations
--arch=ARCH Specify a specific architecture for simulator builds (arm64 or x86_64)
Note: This option is only used when building for iPhoneSimulator
--help Display detailed help information
```
5. Build client dependencies
```bash ```bash
cd Ring && ./fetch-dependencies.sh cd Ring && ./fetch-dependencies.sh
``` ```
## XCFrameworks
The build process automatically generates XCFrameworks from the compiled static libraries. These XCFrameworks are located in the `xcframework` directory and include both device (arm64) and simulator (arm64, x86_64) architectures when built with `--platform=all`.
## Update translations ## Update translations
Update translations using the Transifex: Update translations using the Transifex:
......
This diff is collapsed.
...@@ -5,46 +5,101 @@ export MIN_IOS_VERSION=14.5 ...@@ -5,46 +5,101 @@ export MIN_IOS_VERSION=14.5
IOS_TARGET_PLATFORM=iPhoneSimulator IOS_TARGET_PLATFORM=iPhoneSimulator
RELEASE=0 RELEASE=0
# Display help information
show_help() {
echo "Usage: $0 [options]"
echo ""
echo "Build Jami for iOS platforms"
echo ""
echo "Options:"
echo " --platform=PLATFORM Specify the target platform (iPhoneOS, iPhoneSimulator, all)"
echo " iPhoneOS: Build for physical iPhone devices (arm64)"
echo " iPhoneSimulator: Build for iPhone simulators (arm64, x86_64)"
echo " all: Build for both devices and simulators"
echo " --arch=ARCH Specify a specific architecture for simulator builds (arm64 or x86_64)"
echo " Note: This option is only used when building for iPhoneSimulator"
echo " --release Build in release mode with optimizations"
echo " --help Display this help message"
echo ""
echo "Examples:"
echo " $0 --platform=iPhoneOS # Build for iPhone devices"
echo " $0 --platform=iPhoneSimulator # Build for all simulator architectures"
echo " $0 --platform=iPhoneSimulator --arch=arm64 # Build only for arm64 simulator"
echo " $0 --platform=iPhoneSimulator --arch=x86_64 # Build only for x86_64 simulator"
echo " $0 --platform=all --release # Build for all platforms in release mode"
exit 0
}
# Process command line arguments
while test -n "$1" while test -n "$1"
do do
case "$1" in case "$1" in
--platform=*) --platform=*)
IOS_TARGET_PLATFORM="${1#--platform=}" IOS_TARGET_PLATFORM="${1#--platform=}"
;; ;;
--host=*) --arch=*)
HOST="${1#--host=}" ARCH_ARG="${1#--arch=}"
# Convert simple architecture names to compiler triplets
case "$ARCH_ARG" in
arm64)
ARCH="aarch64-apple-darwin_ios"
;;
x86_64)
ARCH="x86_64-apple-darwin_ios"
;;
*)
# Assume it's already a compiler triplet
ARCH="$ARCH_ARG"
;;
esac
;; ;;
--release) --release)
RELEASE=1 RELEASE=1
;;
--help)
show_help
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;; ;;
esac esac
shift shift
done done
if test -z "$HOST" if [ "$IOS_TARGET_PLATFORM" = "all" ]
then then
if [ "$IOS_TARGET_PLATFORM" = "all" ] ARCHS_PLATFORMS=("arm64:iPhoneOS" "arm64:iPhoneSimulator" "x86_64:iPhoneSimulator")
then elif [ "$IOS_TARGET_PLATFORM" = "iPhoneSimulator" ]
ARCHS=("arm64" "x86_64") then
elif [ "$IOS_TARGET_PLATFORM" = "iPhoneSimulator" ] # For simulator, check if a specific architecture was requested
then if [ -n "$ARCH" ]
ARCHS=("x86_64")
elif [ "$IOS_TARGET_PLATFORM" = "iPhoneOS" ]
then then
ARCHS=("arm64") case "$ARCH" in
aarch64-*)
ARCHS_PLATFORMS=("arm64:iPhoneSimulator")
;;
x86_64-*)
ARCHS_PLATFORMS=("x86_64:iPhoneSimulator")
;;
*)
echo "Warning: Unrecognized host architecture for simulator: $ARCH"
echo "Using default simulator architectures"
ARCHS_PLATFORMS=("arm64:iPhoneSimulator" "x86_64:iPhoneSimulator")
;;
esac
else
# No specific architecture requested, build for all simulator architectures
ARCHS_PLATFORMS=("arm64:iPhoneSimulator" "x86_64:iPhoneSimulator")
fi fi
else elif [ "$IOS_TARGET_PLATFORM" = "iPhoneOS" ]
ARCHS=("${HOST%%-*}") then
case "$HOST" in # For device builds, always use arm64 regardless of --arch
aarch64-*) if [ -n "$ARCH" ] && [[ "$ARCH" != aarch64-* ]]; then
IOS_TARGET_PLATFORM="iPhoneOS" echo "Warning: --arch parameter is ignored for iPhoneOS builds (always uses arm64)"
ARCHS=("arm64") fi
;; ARCHS_PLATFORMS=("arm64:iPhoneOS")
x86_64-*)
IOS_TARGET_PLATFORM="iPhoneSimulator"
ARCHS=("x86_64")
;;
esac
fi fi
IOS_TOP_DIR="$(pwd)" IOS_TOP_DIR="$(pwd)"
...@@ -55,10 +110,6 @@ if [ -z "$DAEMON_DIR" ]; then ...@@ -55,10 +110,6 @@ if [ -z "$DAEMON_DIR" ]; then
fi fi
if [ ! -d "$DAEMON_DIR" ]; then if [ ! -d "$DAEMON_DIR" ]; then
echo 'Daemon not found.' echo 'Daemon not found.'
echo 'If you cloned the daemon in a custom location override' \
'use DAEMON_DIR to point to it'
echo "You can also use our meta repo which contains both:
https://review.jami.net/admin/repos/jami-project"
exit 1 exit 1
fi fi
...@@ -76,25 +127,29 @@ if [ -z "$NPROC" ]; then ...@@ -76,25 +127,29 @@ if [ -z "$NPROC" ]; then
NPROC=$(sysctl -n hw.ncpu || echo -n 1) NPROC=$(sysctl -n hw.ncpu || echo -n 1)
fi fi
export IOS_TARGET_PLATFORM echo "Building for ${ARCHS_PLATFORMS[@]}"
echo "Building for $IOS_TARGET_PLATFORM for $ARCHS"
cd "$DAEMON_DIR" cd "$DAEMON_DIR"
for ARCH in "${ARCHS[@]}" for ARCH_PLATFORM in "${ARCHS_PLATFORMS[@]}"
do do
mkdir -p "contrib/native-$ARCH" # Split the architecture and platform
cd "contrib/native-$ARCH" ARCH="${ARCH_PLATFORM%%:*}"
IOS_TARGET_PLATFORM="${ARCH_PLATFORM#*:}"
export IOS_TARGET_PLATFORM
echo "Building for $IOS_TARGET_PLATFORM with architecture $ARCH"
BUILD_DIR="$ARCH-$IOS_TARGET_PLATFORM"
mkdir -p "contrib/native-$BUILD_DIR"
cd "contrib/native-$BUILD_DIR"
if [ "$ARCH" = "arm64" ] if [ "$ARCH" = "arm64" ]
then then
HOST=aarch64-apple-darwin_ios HOST=aarch64-apple-darwin_ios
IOS_TARGET_PLATFORM="iPhoneOS"
else else
HOST="$ARCH"-apple-darwin_ios HOST="$ARCH"-apple-darwin_ios
IOS_TARGET_PLATFORM="iPhoneSimulator"
fi fi
export IOS_TARGET_PLATFORM
SDKROOT=$(xcode-select -print-path)/Platforms/${IOS_TARGET_PLATFORM}.platform/Developer/SDKs/${IOS_TARGET_PLATFORM}${SDK_VERSION}.sdk SDKROOT=$(xcode-select -print-path)/Platforms/${IOS_TARGET_PLATFORM}.platform/Developer/SDKs/${IOS_TARGET_PLATFORM}${SDK_VERSION}.sdk
...@@ -109,7 +164,25 @@ do ...@@ -109,7 +164,25 @@ do
CC="xcrun -sdk $SDK clang" CC="xcrun -sdk $SDK clang"
CXX="xcrun -sdk $SDK clang++" CXX="xcrun -sdk $SDK clang++"
SDKROOT="$SDKROOT" ../bootstrap --host="$HOST" --disable-libav --disable-plugin --disable-libarchive --enable-ffmpeg CONTRIB_FOLDER="$DAEMON_DIR/contrib/$BUILD_DIR"
# Parameters for pjproject build
if [ "$IOS_TARGET_PLATFORM" = "iPhoneSimulator" ]; then
MIN_IOS="-mios-simulator-version-min=$MIN_IOS_VERSION"
else
MIN_IOS="-miphoneos-version-min=$MIN_IOS_VERSION"
fi
DEVPATH=$(xcrun --sdk $SDK --show-sdk-platform-path)/Developer
export DEVPATH
export MIN_IOS
# Print DEVPATH and MIN_IOS
echo "DEVPATH: $DEVPATH"
echo "MIN_IOS: $MIN_IOS"
# Pass IOS_TARGET_PLATFORM to bootstrap so it can be used in rules.mak files
SDKROOT="$SDKROOT" ../bootstrap --host="$HOST" --disable-libav --disable-plugin --disable-libarchive --enable-ffmpeg --prefix="$CONTRIB_FOLDER"
echo "Building contrib" echo "Building contrib"
make fetch make fetch
...@@ -135,8 +208,8 @@ do ...@@ -135,8 +208,8 @@ do
LDFLAGS="$CFLAGS" LDFLAGS="$CFLAGS"
./autogen.sh || exit 1 ./autogen.sh || exit 1
mkdir -p "build-ios-$ARCH" mkdir -p "build-ios-$BUILD_DIR"
cd "build-ios-$ARCH" cd "build-ios-$BUILD_DIR"
JAMI_CONF="--host=$HOST \ JAMI_CONF="--host=$HOST \
--without-dbus \ --without-dbus \
...@@ -145,7 +218,8 @@ do ...@@ -145,7 +218,8 @@ do
--enable-static \ --enable-static \
--without-natpmp \ --without-natpmp \
--disable-shared \ --disable-shared \
--prefix=$IOS_TOP_DIR/DEPS/$ARCH" --prefix=$IOS_TOP_DIR/DEPS/$BUILD_DIR \
--with-contrib=$CONTRIB_FOLDER"
if [ "$RELEASE" = "0" ] if [ "$RELEASE" = "0" ]
then then
...@@ -167,17 +241,18 @@ do ...@@ -167,17 +241,18 @@ do
make -j"$NPROC" || exit 1 make -j"$NPROC" || exit 1
make install || exit 1 make install || exit 1
rsync -ar "$DAEMON_DIR/contrib/$HOST/lib/"*.a "$IOS_TOP_DIR/DEPS/$ARCH/lib/" # Use the specified contrib folder for copying libraries and headers
rsync -ar "$CONTRIB_FOLDER/lib/"*.a "$IOS_TOP_DIR/DEPS/$BUILD_DIR/lib/"
# copy headers for extension # copy headers for extension
rsync -ar "$DAEMON_DIR/contrib/$HOST/include/opendht" "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/opendht" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/msgpack.hpp "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/msgpack.hpp" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/gnutls "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/gnutls" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/json "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/json" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/msgpack "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/msgpack" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/yaml-cpp "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/yaml-cpp" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/libavutil "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/libavutil" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
rsync -ar $DAEMON_DIR/contrib/$HOST/include/fmt "$IOS_TOP_DIR/DEPS/$ARCH/include/" rsync -ar "$CONTRIB_FOLDER/include/fmt" "$IOS_TOP_DIR/DEPS/$BUILD_DIR/include/"
cd "$IOS_TOP_DIR/DEPS/$ARCH/lib/" cd "$IOS_TOP_DIR/DEPS/$BUILD_DIR/lib/"
for i in *.a ; do mv "$i" "${i/-$HOST.a/.a}" ; done for i in *.a ; do mv "$i" "${i/-$HOST.a/.a}" ; done
cd "$DAEMON_DIR" cd "$DAEMON_DIR"
...@@ -185,26 +260,166 @@ done ...@@ -185,26 +260,166 @@ done
cd "$IOS_TOP_DIR" cd "$IOS_TOP_DIR"
FAT_DIR="$IOS_TOP_DIR/fat" # Create XCFrameworks
mkdir -p "$FAT_DIR" XCFRAMEWORK_DIR="$IOS_TOP_DIR/xcframework"
mkdir -p "$XCFRAMEWORK_DIR"
if ((${#ARCHS[@]} == "2")) # Copy headers to a common location
then mkdir -p "$XCFRAMEWORK_DIR/include"
mkdir -p "$FAT_DIR/lib" if [ -d "$IOS_TOP_DIR/DEPS/${ARCHS_PLATFORMS[0]%%:*}-${ARCHS_PLATFORMS[0]#*:}/include/" ]; then
echo "Making fat lib for ${ARCHS[0]} and ${ARCHS[1]}" rsync -ar --delete "$IOS_TOP_DIR/DEPS/${ARCHS_PLATFORMS[0]%%:*}-${ARCHS_PLATFORMS[0]#*:}/include/"* "$XCFRAMEWORK_DIR/include"
LIBFILES="$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/"*.a
for f in $LIBFILES
do
libFile=${f##*/}
echo "Processing $libFile lib…"
#There is only 2 ARCH max… So let's make it simple
lipo -create "$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/$libFile" \
"$IOS_TOP_DIR/DEPS/${ARCHS[1]}/lib/$libFile" \
-output "$FAT_DIR/lib/$libFile"
done
else else
echo "No need for fat lib" echo "Warning: No include directory found for ${ARCHS_PLATFORMS[0]}"
rsync -ar --delete "$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/"*.a "$FAT_DIR/lib" fi
echo "Creating XCFrameworks..."
# Get list of all libraries from the first build directory
BUILD_DIRS=()
for ARCH_PLATFORM in "${ARCHS_PLATFORMS[@]}"
do
BUILD_DIRS+=("${ARCH_PLATFORM%%:*}-${ARCH_PLATFORM#*:}")
done
# Group build directories by platform
DEVICE_BUILDS=()
SIMULATOR_BUILDS=()
for BUILD_DIR in "${BUILD_DIRS[@]}"
do
if [[ "$BUILD_DIR" == *-iPhoneOS ]]; then
DEVICE_BUILDS+=("$BUILD_DIR")
elif [[ "$BUILD_DIR" == *-iPhoneSimulator ]]; then
SIMULATOR_BUILDS+=("$BUILD_DIR")
fi
done
# Function to create Info.plist for frameworks
create_info_plist() {
local framework_path="$1"
local framework_name="$2"
cat > "$framework_path/Info.plist" << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${framework_name}</string>
<key>CFBundleIdentifier</key>
<string>com.jami.${framework_name}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${framework_name}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>MinimumOSVersion</key>
<string>${MIN_IOS_VERSION}</string>
</dict>
</plist>
EOF
}
# Function to create framework for a platform
create_framework() {
local PLATFORM_DIR="$1"
local FRAMEWORK_NAME="$2"
local LIB_FILE="$3"
local SDK="$4"
mkdir -p "$PLATFORM_DIR/lib"
# Check if library exists in any of the builds for this platform
local LIB_PATHS=()
local BUILDS=("${@:5}")
for BUILD in "${BUILDS[@]}"; do
if [ -f "$IOS_TOP_DIR/DEPS/$BUILD/lib/$LIB_FILE" ]; then
LIB_PATHS+=("$IOS_TOP_DIR/DEPS/$BUILD/lib/$LIB_FILE")
echo "Found $LIB_FILE in $BUILD" >&2
fi
done
if [ ${#LIB_PATHS[@]} -gt 0 ]; then
if [ ${#LIB_PATHS[@]} -gt 1 ]; then
# Multiple libraries found, use lipo to combine them
echo "Combining multiple $SDK libraries for $FRAMEWORK_NAME" >&2
lipo -create "${LIB_PATHS[@]}" -output "$PLATFORM_DIR/lib/$LIB_FILE"
else
# Only one library found
cp "${LIB_PATHS[0]}" "$PLATFORM_DIR/lib/$LIB_FILE"
fi
# Print architectures in the library for debugging
echo "Architectures in $FRAMEWORK_NAME for $SDK:" >&2
lipo -info "$PLATFORM_DIR/lib/$LIB_FILE" >&2
else
# Create a dummy library
echo "Creating dummy $SDK library for $FRAMEWORK_NAME" >&2
echo "void dummy_function() {}" > "$TEMP_DIR/dummy.c"
xcrun -sdk $SDK clang -c "$TEMP_DIR/dummy.c" -o "$TEMP_DIR/dummy.o"
ar -rc "$PLATFORM_DIR/lib/$LIB_FILE" "$TEMP_DIR/dummy.o"
fi
# Create framework structure
mkdir -p "$PLATFORM_DIR/$FRAMEWORK_NAME.framework"
cp "$PLATFORM_DIR/lib/$LIB_FILE" "$PLATFORM_DIR/$FRAMEWORK_NAME.framework/$FRAMEWORK_NAME"
create_info_plist "$PLATFORM_DIR/$FRAMEWORK_NAME.framework" "$FRAMEWORK_NAME"
printf "%s" "-framework $PLATFORM_DIR/$FRAMEWORK_NAME.framework"
}
# Process each library
LIBFILES="$IOS_TOP_DIR/DEPS/${BUILD_DIRS[0]}/lib/"*.a
for f in $LIBFILES
do
libFile=${f##*/}
FRAMEWORK_NAME="${libFile%.a}"
echo "Processing $FRAMEWORK_NAME for XCFramework..."
# Create temporary directory
TEMP_DIR="$IOS_TOP_DIR/temp"
mkdir -p "$TEMP_DIR"
# Create frameworks for each platform
DEVICE_FRAMEWORK=$(create_framework "$TEMP_DIR/device" "$FRAMEWORK_NAME" "$libFile" "iphoneos" "${DEVICE_BUILDS[@]}")
SIM_FRAMEWORK=$(create_framework "$TEMP_DIR/simulator" "$FRAMEWORK_NAME" "$libFile" "iphonesimulator" "${SIMULATOR_BUILDS[@]}")
# Create XCFramework
xcrun xcodebuild -create-xcframework $DEVICE_FRAMEWORK $SIM_FRAMEWORK -output "$XCFRAMEWORK_DIR/$FRAMEWORK_NAME.xcframework"
echo "Created $FRAMEWORK_NAME.xcframework"
# Clean up temporary directories
rm -rf "$TEMP_DIR"
done
# Special check for libvpx.xcframework, because vpx disabled for arm64 simulator
if [ ! -d "$XCFRAMEWORK_DIR/libvpx.xcframework" ]; then
echo "libvpx.xcframework not found, creating it manually..."
# Create temporary directory
TEMP_DIR="$IOS_TOP_DIR/temp_vpx"
mkdir -p "$TEMP_DIR"
# Create frameworks for each platform
DEVICE_FRAMEWORK=$(create_framework "$TEMP_DIR/device" "libvpx" "libvpx.a" "iphoneos" "${DEVICE_BUILDS[@]}")
SIM_FRAMEWORK=$(create_framework "$TEMP_DIR/simulator" "libvpx" "libvpx.a" "iphonesimulator" "${SIMULATOR_BUILDS[@]}")
# Create XCFramework
xcrun xcodebuild -create-xcframework $DEVICE_FRAMEWORK $SIM_FRAMEWORK -output "$XCFRAMEWORK_DIR/libvpx.xcframework"
echo "Created libvpx.xcframework"
# Clean up temporary directories
rm -rf "$TEMP_DIR"
fi fi
rsync -ar --delete "$IOS_TOP_DIR/DEPS/${ARCHS[0]}/include/"* "$FAT_DIR/include" echo "XCFrameworks created in $XCFRAMEWORK_DIR"
echo "Headers copied to $XCFRAMEWORK_DIR/include"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment