header-img
Info :
  1. A. 전체 과정
  2. B. 각 과정 상세 - 1
  3. C. 각 과정 상세 - 2
  4. D. 각 과정 상세 - 3
  5. E. 각 과정 상세 - 4
  6. F. 각 과정 상세 - 5
  7. Z. 레퍼런스

A. 전체 과정

  1. 프레임워크 > Targets > Build Phases 이동 후 new Target
  2. Aggregate 추가
  3. Run script phase 추가
  4. 쉘 코드 추가
  5. 빌드 테스트

 

B. 각 과정 상세 - 1

null

  1. Project Navigator에서 SDK Point Home 선택
  2. 만약 프로젝트에 X 쳐놓은 SdkPointHomeXCFramework 타겟이 있다면 아래 과정 생략 후 F 단계로 이동.
  3. 없다면 Project 선택 후 왼쪽 아래 + 버튼 클릭

 

C. 각 과정 상세 - 2

null

  1. Other → Aggregate → Next 순으로 추가
  2. Team은 None, Product name은 원하는 이름으로 추가

 

D. 각 과정 상세 - 3

null

  1. 만든 타겟 선택
  2. Build Phases 선택
  3. + 버튼 클릭
  4. New Run Script Phase
  5. 스크린샷의 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

null

빌드 타겟을 방금 만든 타겟으로 설정 후 run했을 때 성공적으로 run이 된다면 아래와 같은 새로운 항목들이 생기게 됨.

null

노란 줄이 그어진 것들이 방금 실행으로 새로 생긴 것들임.

XCFramework 폴더 안에 archives가 각 아카이빙으로 생긴 것들이고 xcframeworks 아래 생긴 프로젝트명.xcframework가 실제 생성된 XCFramework임.

 

Z. 레퍼런스

더보기
CS/iOS, Swift