xcframework 만들기 (첫 번째)

GMO 광고 마케팅의 T.O입니다.
Xcode11은 xcframework를 프레임워크의 새로운 배포 형식으로 배치합니다.
xcframework를 사용하면 여러 플랫폼 (예를 들어 iOS 실기, iOS 시뮬레이터) 의 프레임워크를 통합할 수 있습니다.또한 응용 프로그램에 편입할 때 무의식적으로 각자의 플랫폼을 사용할 수 있다.
다음은 Swift에서 xcframerwork를 만들고 사용하는 절차를 설명합니다.
● 전제
생성된 xcframework는 iOS10 이상 버전의 삽입식 프레임워크입니다.
(iOS13, iPadOS도 지원)
개발 환경으로 Xcode11.0을 사용하고 Swift5를 사용합니다.
●xcframework의 제작 절차
1. 프로젝트 만들기
2.xcframework에서 생성된 구축 설정
3.Objective-C 대응
4. 테스트용 어플리케이션 만들기
이번에는 상술한 절차 중의 것이다
"1. 프로젝트 생성"
"2.xcframework에서 생성된 구축 설정"
에서 설명한 대로 해당 매개변수의 값을 수정합니다.

1. 프로젝트 만들기


먼저 프레임의 템플릿을 선택하여 프로젝트를 만듭니다.
Xcode에서 "File → New → Project."메뉴를 선택하고 템플릿의 선택 화면에서 Cocoa Touch Framework를 선택합니다.

새 항목의 옵션 선택 화면을 표시하고 제품 이름 등을 설정합니다.

iOS10 이후에 사용할 수 있도록 하려면 프로젝트 배포 → iOS 배포 목표 중 "iOS10.0"을 선택합니다.

xcframework를 만들려면'구축 옵션'-'구축 라이브러리'에서'예'를 선택하십시오.

그런 다음 새 파일을 선택하고 템플릿 선택 화면에서 Cocoa Touch Class 를 선택합니다.
프레임 처리를 Swift로 설명합니다.
여기서 아래와 같이 문자를 컨트롤러로 출력합니다.
Ore.swift
import UIKit

public class Ore: NSObject {
    public func oreMethod(){
        print("Hello Ore XCFramework");
    }
}
구축 대상을 프레임워크로 변경합니다(이 예에서는 OreXCframework).제품 > 구축 을 선택합니다.구축 오류가 없는지 확인하십시오.

2.xcframework의 구축 설정


iOS 실기, iOS 시뮬레이터를 위한 프레임워크를 구축하고 이를 xcframework에 통합하여 구축 설정을 합니다.
"File → New → Target"에서 새 대상의 템플릿 선택 화면에서 "Cross-platform → Aggregate"를 선택합니다.

제품 이름을 지정합니다.이 예제는'Aggregate'입니다.

그리고 TARGETS에서 만든'Aggregate'를 선택하고'Build Phases'를 선택하고'+'를 선택하고'New Run Script'를 선택합니다.

실행 스크립트가 생성됩니다.

다음 xcframework 출력 스크립트를 Run Script의 "#Type a script or drag file frour workspace to insert its path"부분에 붙여넣습니다.
이 스크립트를 실행하면 프레임워크의 항목 아래에 출력 디렉터리를 만들 수 있습니다.그리고 Output 디렉터리 아래에서 xcframework를 만드는 데 사용되는 중간 파일,archive 파일,xcframework를 출력합니다.

# 出力先ディレクトリ(プロジェクトの直下)
OUTPUT_DIR=${PROJECT_DIR}/Output

# 中間ファイルの出力先ディレクトリ
DERIVED_DIR=${OUTPUT_DIR}/${CONFIGURATION}-derived

# archiveの出力先ディレクトリ
ARCHIVE_DIR=${OUTPUT_DIR}/${CONFIGURATION}-archive

# xcframeworkの出力先ディレクトリ
XCFRAMEWORK_DIR=${OUTPUT_DIR}/${CONFIGURATION}-xcframework

# 出力先ディレクトリ削除
rm -rf ${OUTPUT_DIR}

# 中間ファイルの出力先ディレクトリ作成
mkdir -p ${DERIVED_DIR}

# アーカイブファイルの出力先ディレクトリ作成
mkdir -p ${ARCHIVE_DIR}

# xcframeworkの出力先ディレクトリ作成
mkdir -p ${XCFRAMEWORK_DIR}

# iOS実機用のarchiveファイル
ARCHIVE_FILE_IOS=${ARCHIVE_DIR}/ios.xcarchive
echo "ARCHIVE_FILE_IOS:${ARCHIVE_FILE_IOS}"

# iOSシミュレータ用のarchiveファイル
ARCHIVE_FILE_IOS_SIMULATOR=${ARCHIVE_DIR}/iossimulator.xcarchive
echo "ARCHIVE_FILE_IOS_SIMULATOR:${ARCHIVE_FILE_IOS_SIMULATOR}"

# iOS実機用のarchiveファイル作成
xcodebuild archive -scheme ${PROJECT_NAME} -destination="iOS" -archivePath $ARCHIVE_FILE_IOS -derivedDataPath $DERIVED_DIR -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES

# iOSシミュレータ用のarchiveファイル作成
xcodebuild archive -scheme ${PROJECT_NAME} -destination="iOS Simulator" -archivePath $ARCHIVE_FILE_IOS_SIMULATOR -derivedDataPath $DERIVED_DIR -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES

# xcframework作成
xcodebuild -create-xcframework -framework $ARCHIVE_FILE_IOS/Products/Library/Frameworks/${PROJECT_NAME}.framework -framework $ARCHIVE_FILE_IOS_SIMULATOR/Products/Library/Frameworks/${PROJECT_NAME}.framework -output $XCFRAMEWORK_DIR/${PROJECT_NAME}.xcframework

# xcframeworkの出力ディレクトリをFinderで開く
open ${XCFRAMEWORK_DIR}

구축 대상을 Aggregate로 변경합니다.그런 다음 제품 메뉴에서 "구조"를 선택합니다.
구축

구축이 성공하면 검색기나 트리 명령 등을 사용하여 생성된 xcframework를 검사합니다.
실제 프레임 (ios-armv7_arm64 이하) 과 아날로그 프레임 (ios-i386_x86_64-simulator 이하) 을 모두 포함하면 이 단계는 끝납니다.
%tree OreXCFramework.xcframework
OreXCFramework.xcframework
├── Info.plist
├── ios-armv7_arm64
│   └── OreXCFramework.framework
│       ├── Headers
│       │   ├── OreXCFramework-Swift.h
│       │   └── OreXCFramework.h
│       ├── Info.plist
│       ├── Modules
│       │   ├── OreXCFramework.swiftmodule
│       │   │   ├── arm.swiftdoc
│       │   │   ├── arm.swiftinterface
│       │   │   ├── arm64-apple-ios.swiftdoc
│       │   │   ├── arm64-apple-ios.swiftinterface
│       │   │   ├── arm64.swiftdoc
│       │   │   ├── arm64.swiftinterface
│       │   │   ├── armv7-apple-ios.swiftdoc
│       │   │   ├── armv7-apple-ios.swiftinterface
│       │   │   ├── armv7.swiftdoc
│       │   │   └── armv7.swiftinterface
│       │   └── module.modulemap
│       ├── OreXCFramework
│       └── _CodeSignature
│           └── CodeResources
└── ios-i386_x86_64-simulator
    └── OreXCFramework.framework
        ├── Headers
        │   ├── OreXCFramework-Swift.h
        │   └── OreXCFramework.h
        ├── Info.plist
        ├── Modules
        │   ├── OreXCFramework.swiftmodule
        │   │   ├── i386-apple-ios-simulator.swiftdoc
        │   │   ├── i386-apple-ios-simulator.swiftinterface
        │   │   ├── i386.swiftdoc
        │   │   ├── i386.swiftinterface
        │   │   ├── x86_64-apple-ios-simulator.swiftdoc
        │   │   ├── x86_64-apple-ios-simulator.swiftinterface
        │   │   ├── x86_64.swiftdoc
        │   │   └── x86_64.swiftinterface
        │   └── module.modulemap
        ├── OreXCFramework
        └── _CodeSignature
            └── CodeResources

참고 자료


글을 쓸 때 아래의 내용을 참고하였다.
Binary Frameworks in Swift - WWDC 2019 - Videos - Apple Developer
양어장 및 기술 노트Xcode11에 배포된 xcframework 디렉터리 구조
내일은 xcframework 만들기(2차) 입니다.
계속 즐겨주세요GMO 광고 컨설턴트 달력 2019!
Xcode10 이전에는 각 플랫폼에서 사용하는 프레임워크를 하나의 파일로 정리할 수 있었지만 응용 프로그램에서 사용할 때 필요한 플랫폼에 맞는 프레임워크만 잘라내는 스크립트를 실행해야 하기 때문에 절차가 복잡해졌다. 

좋은 웹페이지 즐겨찾기