A. ์ ์ฒด ๊ณผ์
- ํ๋ ์์ํฌ > Targets > Build Phases ์ด๋ ํ new Target
- Aggregate ์ถ๊ฐ
- Run script phase ์ถ๊ฐ
- ์ ์ฝ๋ ์ถ๊ฐ
- ๋น๋ ํ ์คํธ
B. ๊ฐ ๊ณผ์ ์์ธ - 1
- Project Navigator์์ SDK Point Home ์ ํ
- ๋ง์ฝ ํ๋ก์ ํธ์ X ์ณ๋์ SdkPointHomeXCFramework ํ๊ฒ์ด ์๋ค๋ฉด ์๋ ๊ณผ์ ์๋ต ํ F ๋จ๊ณ๋ก ์ด๋.
- ์๋ค๋ฉด Project ์ ํ ํ ์ผ์ชฝ ์๋ + ๋ฒํผ ํด๋ฆญ
C. ๊ฐ ๊ณผ์ ์์ธ - 2
- Other → Aggregate → Next ์์ผ๋ก ์ถ๊ฐ
- Team์ None, Product name์ ์ํ๋ ์ด๋ฆ์ผ๋ก ์ถ๊ฐ
D. ๊ฐ ๊ณผ์ ์์ธ - 3
- ๋ง๋ ํ๊ฒ ์ ํ
- Build Phases ์ ํ
- + ๋ฒํผ ํด๋ฆญ
- New Run Script Phase
- ์คํฌ๋ฆฐ์ท์ Run Script ๋ถ๋ถ์ด ์๊ธฐ๊ฒ ๋จ
E. ๊ฐ ๊ณผ์ ์์ธ - 4
Runscript์ ์ฝ๋ ๋ถ๋ถ์ ์๋ ์ฝ๋ ์ถ๊ฐ
env > env.txt
instruments -s devices > devices.txt
#! /bin/sh -e
# This script demonstrates archive and create action on frameworks and libraries
# Based on script by @author Boris Bielik
# Release dir path
OUTPUT_DIR_PATH="${PROJECT_DIR}/XCFramework"
function archivePathSimulator {
local DIR=${OUTPUT_DIR_PATH}/archives/"${1}-SIMULATOR"
echo "${DIR}"
}
function archivePathDevice {
local DIR=${OUTPUT_DIR_PATH}/archives/"${1}-DEVICE"
echo "${DIR}"
}
# Archive takes 3 params
#
# 1st == SCHEME
# 2nd == destination
# 3rd == archivePath
function archive {
echo "โธ Starts archiving the scheme: ${1} for destination: ${2};\\nโธ Archive path: ${3}.xcarchive"
xcodebuild clean archive \\
-project "${PROJECT_NAME}.xcodeproj" \\
-scheme ${1} \\
-configuration ${CONFIGURATION} \\
-destination "${2}" \\
-archivePath "${3}" \\
SKIP_INSTALL=NO \\
OBJROOT="${OBJROOT}/DependentBuilds" \\
BUILD_LIBRARY_FOR_DISTRIBUTION=YES | xcpretty
}
# Builds archive for iOS simulator & device
function buildArchive {
SCHEME=${1}
archive $SCHEME "generic/platform=iOS Simulator" $(archivePathSimulator $SCHEME)
archive $SCHEME "generic/platform=iOS" $(archivePathDevice $SCHEME)
}
# Creates xc framework
function createXCFramework {
FRAMEWORK_ARCHIVE_PATH_POSTFIX=".xcarchive/Products/Library/Frameworks"
FRAMEWORK_SIMULATOR_DIR="$(archivePathSimulator $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"
FRAMEWORK_DEVICE_DIR="$(archivePathDevice $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"
xcodebuild -create-xcframework \\
-framework ${FRAMEWORK_SIMULATOR_DIR}/${1}.framework \\
-framework ${FRAMEWORK_DEVICE_DIR}/${1}.framework \\
-output ${OUTPUT_DIR_PATH}/xcframeworks/${1}.xcframework
}
### Static Libraries cant be turned into frameworks
function createXCFrameworkForStaticLibrary {
LIBRARY_ARCHIVE_PATH_POSTFIX=".xcarchive/Products/usr/local/lib"
LIBRARY_SIMULATOR_DIR="$(archivePathSimulator $1)${LIBRARY_ARCHIVE_PATH_POSTFIX}"
LIBRARY_DEVICE_DIR="$(archivePathDevice $1)${LIBRARY_ARCHIVE_PATH_POSTFIX}"
xcodebuild -create-xcframework \\
-library ${LIBRARY_SIMULATOR_DIR}/libStaticLibrary.a \\
-library ${LIBRARY_DEVICE_DIR}/libStaticLibrary.a \\
-output ${OUTPUT_DIR_PATH}/xcframeworks/${1}.xcframework
}
echo "#####################"
echo "โธ Cleaning the dir: ${OUTPUT_DIR_PATH}"
rm -rf $OUTPUT_DIR_PATH
#### Static Library ####
#LIBRARY="${PROJECT_NAME}"
#echo "โธ Archive $LIBRARY"
#buildArchive ${LIBRARY}
#echo "โธ Create $FRAMEWORK.xcframework"
#createXCFrameworkForStaticLibrary ${LIBRARY}
#### Dynamic Framework ####
DYNAMIC_FRAMEWORK="${PROJECT_NAME}"
echo "โธ Archive $DYNAMIC_FRAMEWORK"
buildArchive ${DYNAMIC_FRAMEWORK}
echo "โธ Create $DYNAMIC_FRAMEWORK.xcframework"
createXCFramework ${DYNAMIC_FRAMEWORK}
F. ๊ฐ ๊ณผ์ ์์ธ - 5
๋น๋ ํ๊ฒ์ ๋ฐฉ๊ธ ๋ง๋ ํ๊ฒ์ผ๋ก ์ค์ ํ runํ์ ๋ ์ฑ๊ณต์ ์ผ๋ก run์ด ๋๋ค๋ฉด ์๋์ ๊ฐ์ ์๋ก์ด ํญ๋ชฉ๋ค์ด ์๊ธฐ๊ฒ ๋จ.
๋ ธ๋ ์ค์ด ๊ทธ์ด์ง ๊ฒ๋ค์ด ๋ฐฉ๊ธ ์คํ์ผ๋ก ์๋ก ์๊ธด ๊ฒ๋ค์.
XCFramework ํด๋ ์์ archives๊ฐ ๊ฐ ์์นด์ด๋น์ผ๋ก ์๊ธด ๊ฒ๋ค์ด๊ณ xcframeworks ์๋ ์๊ธด ํ๋ก์ ํธ๋ช .xcframework๊ฐ ์ค์ ์์ฑ๋ XCFramework์.
Z. ๋ ํผ๋ฐ์ค
'CS > iOS, Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] Framework์ ์ข ์์ฑ ์ถ๊ฐ ์ ์์ ํ๊ฒฝ ์ธํ (0) | 2023.04.06 |
---|---|
[iOS] framework ์์ ํ๊ฒฝ ๋ง๋ค๊ธฐ (0) | 2023.04.06 |
[iOS] XCFramework private repository์ cocoapod์ผ๋ก ๋ฐฐํฌํ๊ธฐ (0) | 2023.04.06 |
[iOS] Private Repository์ CocoaPod Framework ์ฌ๋ฆฌ๊ธฐ (0) | 2023.04.06 |
[iOS] framework ๊ธฐ๋ณธ (0) | 2023.02.14 |