번역 : 프레임 워크, XCFramework를 생성하고 사용하기위한 Swift 5

기술

애플리케이션간에 코드를 공유하고 코드를 모듈화하거나 타사 라이브러리로 배포 할 수있는 iOS 프레임 워크를 빌드하는 방법을 알아 봅니다.
코드 다운로드

업데이트 참고 :이 튜토리얼은 Emad Ghorbaninia에 의해 iOS 14, Xcode 12 및 Swift 5.3으로 업데이트되었습니다. 원본 튜토리얼은 Sam Davies가 작성했습니다.

두 응용 프로그램간에 많은 코드를 공유하거나 프로그램의 일부를 다른 개발자와 공유하고 싶습니까?

iOS SDK가 기능별로 API를 분리하는 것처럼 코드를 모듈화하고 싶을 수도 있습니다. 또는 인기있는 타사 라이브러리처럼 코드를 배포 할 수 있습니다.

이 자습서에서는 iOS 용 사용자 지정 CalendarControl 만들기에서 개발 한 CalendarControl을 재사용 가능한 단일 프레임 워크로 추출합니다. 그 과정에서 다음을 수행 할 수 있습니다.

  • CalendarControl에 대한 새 프레임 워크 프레임 워크를 만듭니다.
  • 기존 코드를 마이그레이션하십시오.
  • 모든 것을 다시 애플리케이션으로 가져옵니다.
  • 바이너리 프레임 워크 XCFramework를 빌드합니다.
  • 휴대용 Swift 패키지로 패키지화하십시오.
  • Swift 패키지에 대한 저장소를 설정하고 게시하십시오.

완료되면 응용 프로그램은 개발자가 개발 한 휴대용 XCFramework를 사용하기 전처럼 작동합니다!

시작하기

이 튜토리얼의 상단 또는 하단에있는 "자료 다운로드"버튼을 사용하여 시작 프로젝트와 최종 프로젝트를 다운로드하십시오. 시작 프로젝트 폴더를 찾으십시오. 1-RWCalendarPickerUI를 찾아 RWCalendarPicker.xcodeproj를 엽니 다.

RWCalendarPicker는 사용자가 작업을 생성하고 기한을 설정할 수 있도록하는 미리 알림과 유사한 체크리스트 애플리케이션입니다.

작동 방식을 이해하기 위해 빌드하고 실행하십시오.
여기에 사진 설명 삽입
RWCalendarPicker의 파일을 확인하여 프로젝트에 익숙해 지십시오. CalendarControl의 코드는 여러 범주로 나뉩니다.

  • Day.swift : 각 요일 개체에 대한 데이터를 포함하는 데이터 모델입니다.
  • MonthMetadata.swift : 몇 달 동안의 데이터 모델.
  • CalendarDateCollectionViewCell.swift : 컬렉션보기의 셀을 사용하여 날짜를 표시합니다. 각 셀은 여기에서 사용자 정의됩니다.
  • CalendarPickerFooterView.swift : 사용자가 다른 달을 선택할 수 있습니다.
  • CalendarPickerHeaderView.swift : 현재 월과 연도를 표시하고 사용자가 선택기를 닫고 요일 레이블을 표시하도록합니다.
  • CalendarPickerViewController.swift : 캘린더의 본문, 모든 관련보기가 여기에 병합됩니다.

CalendarPicker는 매우 편리합니다. 이것 이외의 여러 응용 프로그램에서 사용하는 것이 좋지 않습니까? 구조 프레임 워크 프레임 워크!

프레임 워크 란 무엇입니까?

프레임 워크는 독립적이고 재사용 가능한 코드 및 리소스 블록이므로 여러 애플리케이션으로 가져올 수 있습니다. iOS, tvOS, watchOS 및 macOS 앱간에 공유 할 수도 있습니다. Swift의 액세스 제어와 결합되면 프레임 워크는 코드 모듈간에 강력하고 테스트 가능한 인터페이스를 정의하는 데 도움이 될 수 있습니다.

프레임 워크에는 세 가지 주요 목적이 있습니다.

  • 패키지 코드
  • 모듈 식 코드
  • 코드 재사용

프로그래밍에 다른 언어를 사용하는 경우 노드 모듈, 패키지, gem 또는 jar에 대해 들어 보셨을 것입니다. 프레임 워크는 Apple 생태계의 프레임 워크와 동일합니다. iOS SDK의 일반적인 프레임 워크의 몇 가지 예에는 Foundation, UIKit, SwiftUI, CloudKit 및 Combine이 있습니다.

Swift 용어로 모듈은 함께 배포 된 컴파일 된 코드 세트입니다. 프레임 워크는 모듈 유형 중 하나이고 애플리케이션은 다른 유형입니다.

참고 : 프레임에 대한 자세한 내용은 프레임 이란 ?을 참조하십시오 . .

프레임 워크 만들기

Apple은 Xcode 6에서 Cocoa Touch Framework를 도입했으며 최근에는 Framework로 변경했습니다. 프레임 워크를 만드는 것이 그 어느 때보 다 쉬워졌습니다. 먼저 프레임 워크 용 프로젝트를 생성합니다.

Xcode에서 File▸New▸Project ...를 선택하십시오. 그런 다음 iOS ▸ 프레임 및 라이브러리 ▸ 프레임을 선택하십시오.
여기에 사진 설명 삽입
다음을 클릭하십시오. 그런 다음 제품 이름을 CalendarControl로 설정합니다. 자신의 조직 이름과 조직 식별자를 사용합니다.
여기에 사진 설명 삽입다음을 클릭하십시오. 파일 선택기에서 2-Framework로 프로젝트를 생성하도록 선택합니다. 그런 다음 생성을 클릭합니다.

이제 프로젝트가 있으며 지루하지만 프레임 워크를 만들었습니다!

프레임 워크에 소스 코드 추가

현재 상태는 코드가없는 프레임입니다. 이것은 무가당 순수 초콜릿만큼 유혹적입니다. 이 섹션에서는 기존 파일을 프레임 워크에 추가하여 코드를 소개합니다.

RWCalendarPicker 소스 디렉토리에서 Day.swift를 Xcode의 CalendarControl 프로젝트로 드래그합니다. 참조를 추가하는 대신 파일을 새 프로젝트로 복사하려면 필요에 따라 "프로젝트 복사"를 선택하십시오. 프레임 워크는 독립적 인 자체 코드 (참조가 아님)가 필요합니다.
여기에 사진 설명 삽입Day.swift가 CalendarControl에 대상 멤버십이 있는지 다시 확인하여 최종 프레임에 표시되는지 확인합니다. 이 파일을 선택하고 "File"검사기의 "Target Membership"영역에서 CalendarControl이 선택되어 있는지 확인합니다.

이제 위의 단계에 따라 이러한 파일을 프로젝트에 추가하십시오.

  • MonthMetadata.swift
  • CalendarDateCollectionViewCell.swift
  • CalendarPickerFooterView.swift
  • CalendarPickerHeaderView.swift
  • CalendarPickerViewController.swift

여기에 사진 설명 삽입

참고 : 클래스를 각각의 폴더 그룹으로 나눌 필요는 없지만 이것은 코드를 구성하는 좋은 방법입니다.

"프로젝트"탐색기에서 프로젝트를 선택한 다음 "대상"에서 "CalendarControl"을 선택합니다. 빌드 설정을 엽니 다. 그런 다음 "배포 할 라이브러리 빌드"를 "예"로 설정합니다. 누군가가 Xcode의 모듈 정의로 이동할 때 공개 API를 표시하는 모듈 인터페이스 파일을 생성합니다.
여기에 사진 설명 삽입
프레임 워크 프로젝트를 생성합니다. 빌드 경고 나 오류없이 성공적으로 빌드를 완료했는지 확인하십시오.

프로젝트에 프레임 워크 추가

CalendarControl을 닫습니다. RWCalendarPicker로 돌아갑니다. 이제 달력 프레임을 프레임으로 어셈블 했으므로 마이그레이션 된 파일은 더 이상 주 프로젝트에서 필요하지 않습니다. 다음 파일을 삭제하십시오. 확인 대화 상자에서 휴지통으로 이동을 선택하십시오.

  • Day.swift
  • MonthMetadata.swift
  • CalendarDateCollectionViewCell.swift
  • CalendarPickerFooterView.swift
  • CalendarPickerHeaderView.swift
  • CalendarPickerViewController.swift
    여기에 사진 설명 삽입는 프로젝트를 생성합니다. Xcode가 CalendarPickerViewController가 무엇인지 정확히 알지 못한다고 불평하는 몇 가지 예측 가능한 오류가 표시됩니다. 특히 범위 오류 메시지에 "CalendarPickerViewController를 찾을 수 없음"이 표시됩니다.

CalendarControl 프레임 워크 프로젝트를 추가하면 이러한 문제를 해결할 수 있습니다.

바이너리 파일 삽입

이제 프로젝트 탐색기에서 루트 RWCalendarPicker 노드를 마우스 오른쪽 버튼으로 클릭합니다. "RWCalendarPicker"에 파일을 추가하려면 클릭하십시오.

파일 선택기에서 2-Framework / CalendarControl로 이동하여 CalendarControl.xcodeproj를 선택합니다. 그런 다음 "추가"를 클릭하여 하위 항목으로 추가합니다.
여기에 사진 설명 삽입

참고 : 애플리케이션 프로젝트에 프레임 워크 프로젝트를 추가 할 필요는 없습니다. CalendarControl.framework 출력을 추가 할 수 있습니다.
그러나 프로젝트를 함께 그룹화하면 프레임 워크와 애플리케이션을 동시에 개발하기가 더 쉬워집니다. 프레임 워크 프로젝트에 대한 모든 변경 사항은 자동으로 응용 프로그램에 전파됩니다. 또한 Xcode가 경로를 구문 분석하고 프로젝트를 다시 빌드 할시기를 쉽게 알 수 있습니다.

빌드하고 실행하십시오. 동일한 컴파일 오류가 표시됩니다!

여기에 사진 설명 삽입
이제 두 프로젝트가 함께 있지만 RWCalendarPicker는 여전히 CalendarControl을 얻지 못합니다. 마치 같은 방에 앉아있는 것과 같지만 RWCalendarPicker는 새 프레임을 볼 수 없습니다.

문제를 해결하려면 아래 단계를 따르십시오.

  1. 구성표를 CalendarControl로 변경하고 빌드하십시오.
  2. 그런 다음 CalendarControl 프로젝트를 확장하여 "제품"폴더를 봅니다.
  3. 그 아래에서 CalendarControl.framework를 찾습니다. 이 파일은 바이너리 코드, 헤더, 리소스 및 메타 데이터를 포함하는 프레임 워크 프로젝트의 출력입니다.
  4. 그런 다음 최상위 RWCalendarPicker 노드를 선택하여 프로젝트 편집기를 엽니 다.
  5. RWCalendarPicker 대상을 클릭하십시오. 그런 다음 "일반"탭으로 이동합니다.
  6. "프레임 워크, 라이브러리 및 포함 된 콘텐츠"섹션까지 아래로 스크롤합니다.
  7. 제품 폴더의 CalendarControl.xcodeproj에서 CalendarControl.framework를이 부분으로 끕니다.
    여기에 사진 설명 삽입프레임 워크, 라이브러리 및 임베디드 콘텐츠에이 프레임 워크에 대한 항목을 추가했습니다.

이제 애플리케이션은 프레임 워크와이를 찾을 수있는 위치를 알고 있습니다. 이것이 충분하나요?

RWCalendarPicker 솔루션으로 전환하고 프로젝트를 빌드하십시오. 더 많은 동일한 실수.
여기에 사진 설명 삽입
프레임 워크 개발의 중요한 부분 인 액세스 제어를 놓쳤습니다.

액세스 제어

프레임 워크는 프로젝트의 일부이지만 프로젝트 코드는이를 이해하지 못합니다. 눈에서 멀어지면 마음에서도 멀어진 다.

ItemDetailViewController.swift로 이동하여 파일 상단의 가져 오기 목록에 다음 줄을 추가합니다.

import CalendarControl

결정적으로,이 포함은 여전히 ​​빌드 오류를 해결하지 못합니다. Swift는 액세스 제어를 사용하여 구조가 다른 파일이나 모듈에 표시되는지 여부를 결정할 수 있기 때문입니다.

기본적으로 Swift는 모든 것을 내부적으로 만듭니다. 자체 모듈에서만 볼 수 있습니다.

애플리케이션의 기능을 복원하려면 CalendarControl 클래스의 액세스 제어를 업데이트해야합니다.

약간 지루하지만 액세스 제어를 업데이트하는 프로세스는 프레임 워크 외부에 표시하고 싶지 않은 코드를 숨겨 모듈성을 향상시킵니다. 특정 함수에 액세스 수정자를 갖지 않도록하거나 내부적으로 명시 적으로 선언하여이를 달성 할 수 있습니다.

Swift에는 5 가지 수준의 액세스 제어가 있습니다. 고유 한 프레임 워크를 만들 때 다음 경험 규칙을 따르십시오.

  • 공개 및 공개 : 애플리케이션 또는 기타 프레임 워크 (예 : 사용자 정의보기)에서 호출하는 코드에 적용 할 수 있습니다.
  • 내부 : 뷰의 사용자 정의 레이어와 같이 프레임 워크의 함수와 클래스간에 사용되는 코드입니다.
  • Fileprivate : 레이아웃의 높이를 계산하는 데 사용되는 보조 기능과 같이 단일 파일에 사용되는 코드입니다.
  • Private : 단일 파일의 클래스 블록 및 동일한 파일의 선언 확장과 같이 선언에 사용 된 코드를 닫는 데 사용됩니다.

CalendarControl이 RWCalendarPicker 응용 프로그램의 일부가되면 내부 액세스는 문제가되지 않습니다. 이제 별도의 모듈에 있으며 애플리케이션 사용을 위해 공개해야합니다. 다음 섹션에서 수행합니다.

참고 : 액세스 제어에 대해 자세히 알아보고 공개와 공개의 차이점을 이해하려면 액세스 제어 파일을 참조하십시오 .

프레임 워크 액세스 수준 업데이트

CalendarPickerViewController.swift를 엽니 다. 다음과 같이 클래스 정의에 public 키워드를 추가하여 클래스를 노출합니다.

public class CalendarPickerViewController: UIViewController  {
    
    

이제 CalendarPickerViewController는 CalendarControl 프레임 워크로 가져온 모든 응용 프로그램 파일에 표시됩니다.

다음으로 public 키워드를 다음에 추가합니다.

  • CalendarPickerViewController.init (baseDate : selectedDateChanged :)
  • CalendarPickerViewController.init (코더 :)
  • CalendarPickerViewController.viewDidLoad ()
  • CalendarPickerViewController.viewWillTransition (to : with :)
  • CalendarPickerViewController.collectionView (_ : numberOfItemsInSection :)
  • CalendarPickerViewController.collectionView (_ : cellForItemAt :)
  • CalendarPickerViewController.collectionView (_ : didSelectItemAt :)
  • CalendarPickerViewController.collectionView (_ : layout : sizeForItemAt :)

참고 : init를 public으로 선언해야하는 이유가 궁금 할 수 있습니다. Apple은 액세스 제어 문서에서 이에 대해 설명합니다.

빌드하고 실행하십시오. 이제 CalendarControl이 있습니다.

축하합니다! 이제 효과적인 독립형 프레임 워크와이를 사용하는 애플리케이션이 있습니다!
여기에 사진 설명 삽입

XCFramework 출시

WWDC 2019에서 XCFramework에 대해 들어 보셨을 것입니다. 예, 맞습니다. 이것은 Xcode를 사용하여 생성 할 수있는 바이너리 프레임 워크의 이름입니다.

2019 년 이전에는 고유 한 바이너리 프레임 워크를 만들 수있는 기회가 단 한 번뿐입니다.

시뮬레이터 및 장치와 같은 여러 아키텍처를 지원하려면 fat 프레임 워크에서 하나의 라이브러리 아래에 이들을 결합해야합니다. 그러나이 기사 이후에는 더 이상 프레임이 더 뚱뚱해질 필요가 없습니다.

액자 보관하기이
섹션에서는 오랜 친구 인 터미널로 작업합니다. oo!

터미널을 열고 다음 명령을 사용하여 프레임 워크 폴더로 이동합니다. 또는 cd 명령 다음에 프로젝트 폴더를 터미널로 드래그 할 수 있습니다.

cd "CreateFrameworkForiOS/starter/2-Framework"

다음으로, 다음 목표를 위해 프레임 워크 아카이브를 시작하십시오.

  • iOS
  • 모의 실험 장치
  • 맥 OS

iOS에서 시작합니다. 터미널에 다음 명령을 입력하십시오.

xcodebuild archive \
-scheme CalendarControl \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath './build/CalendarControl.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

이 명령은 다음 목록을 입력으로 사용하여 프레임 워크의 아카이브를 생성합니다.

  1. -scheme CalendarControl : 보관에이 구성표를 사용합니다.
  2. -configuration 릴리스 : 릴리스 구성을 사용하여 빌드합니다.
  3. -destination'generic / platform = iOS ': 아키텍처 유형입니다.
  4. -archivePath : 지정된 이름의 폴더 경로에 아카이브 파일을 저장합니다.
  5. SKIP_INSTALL : 프레임 워크를 아카이브에 설치하려면 NO로 설정하십시오.
  6. BUILD_LIBRARIES_FOR_DISTRIBUTION : 배포 용 라이브러리가 빌드되고 인터페이스 파일이 생성되었는지 확인합니다.

다음으로 타겟 시뮬레이터입니다. 다음 명령을 터미널에 추가하여 보관합니다.

xcodebuild archive \
-scheme CalendarControl \
-configuration Release \
-destination 'generic/platform=iOS Simulator' \
-archivePath './build/CalendarControl.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

이러한 명령 옵션은 iOS 옵션과 동일하지만 차이점은 다음과 같습니다.

  1. -destination'generic / platform = iOS Simulator ': 여기에서 아키텍처 유형을 설정합니다.
  2. -archivePath : 지정된 이름의 폴더 경로에 아카이브를 생성합니다.

마지막으로 macOS 용 새 아카이브를 생성합니다. 터미널에 다음 명령을 추가하십시오.

xcodebuild archive \
-scheme CalendarControl \
-configuration Release \
-destination 'platform=macOS,arch=x86_64,variant=Mac Catalyst' \
-archivePath './build/CalendarControl.framework-catalyst.xcarchive' \
SKIP_INSTALL=NO \
BUILD_LIBRARIES_FOR_DISTRIBUTION=YES

다음 차이점을 제외하고이 명령은 다른 명령과 동일합니다.

  1. -destination'platform = macOS, arch = x86_64, variant = Mac Catalyst ': 여기에서 아키텍처 유형을 나타냅니다.
  2. -archivePath : 지정된 이름의 폴더 경로에 아카이브를 생성합니다.
    아래의 파인더와 스크린 샷에서 볼 수 있듯이 프레임에서 세 가지 아카이브 파일을 생성했습니다.
    여기에 사진 설명 삽입

XCFramework 생성

이제 바이너리 프레임 워크 XCFramework를 만듭니다. 터미널에 다음 명령을 추가하십시오.

xcodebuild -create-xcframework \
-framework './build/CalendarControl.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/CalendarControl.framework' \
-framework './build/CalendarControl.framework-iphoneos.xcarchive/Products/Library/Frameworks/CalendarControl.framework' \
-framework './build/CalendarControl.framework-catalyst.xcarchive/Products/Library/Frameworks/CalendarControl.framework' \
-output './build/CalendarControl.xcframework'

이 명령은 이전에 생성 된 아카이브를 사용하여 빌드 폴더에 XCFramework를 추가합니다.

XCFramework에 포함 된 내용을 보려면 빌드 폴더를 확인하십시오.
여기에 사진 설명 삽입
조용하게 하다! 이제 첫 번째 XCFramework를 완료했습니다.

여기에 사진 설명 삽입

XCFramework를 프로젝트에 통합

이제 다음과 같이 RWCalendarPicker 프로젝트에서 CalendarControl 참조를 제거
여기에 사진 설명 삽입
해야합니다. 더 이상 프레임 워크의 소스 코드에 액세스 할 필요가 없기 때문에 이렇게하십시오. XCFramework를 프로젝트 대상의 "Framework, Libraries 및 Embedded Content"섹션으로 끌어옵니다 : 빌드
여기에 사진 설명 삽입
및 실행. 이전과 동일한 클래스에 액세스 할 수 있지만 이번에는 프레임 워크가 바이너리 일뿐입니다.

XCFramework를 Swift 패키지로 배포

WWDC 2020에서 Apple은 Swift 패키지에서 XCFramework를 쉽게 배포 할 수 있다고 발표했습니다. 대단하지 않나요?

참고 : Swift Packages 또는 Swift Package Manager에 익숙하지 않은 경우 iOS 용 Swift Package Manager 에서 자세히 알아볼 수 있습니다.

XCFramework 배포를위한 Swift 패키지가 있어야합니다. 다음 섹션에서 하나를 만듭니다. 그런 다음 GitHub에 프레임 워크를 게시하여 프레임 워크를 공유 할 수 있습니다.

Swift 패키지 준비

시작 프로젝트 파일에는 이미 간단한 Swift 패키지가 있습니다. / starter / 3-SwiftPackage / CalendarControl로 이동하여 Package.swift를 엽니 다.
여기에 사진 설명 삽입
이 클래스는 Swift 패키지 목록입니다. CalendarControl을 Swift 패키지로 만들려면 수정해야합니다.

아래 단계에 따라 목록을 올바른 값으로 채우십시오.

  1. 플랫폼 :
platforms: [
  .macOS(.v10_15), .iOS(.v14), .tvOS(.v14)
],

이 코드는 실행할 수있는 플랫폼을 나타냅니다.

  1. 생성물
products: [
  .library(
    name: "CalendarControl",
    targets: ["CalendarControl"]),
],

포장으로 제공되는 제품입니다. 라이브러리의 코드 (다른 Swift 프로젝트의 코드로 가져올 수 있음) 또는 실행 파일 (운영 체제에서 실행할 수 있음) 일 수 있습니다. 제품은 다른 패키지로 내보낼 수있는 대상입니다.
3. 목표

targets: [
  .binaryTarget(
    name: "CalendarControl",
    path: "./Sources/CalendarControl.xcframework")
]

목표는 코드 모듈을 독립적으로 빌드하는 것입니다. 여기에서 XCFramework의 경로를 추가 할 수 있습니다.

참고 : 매니페스트의 첫 번째 줄에는 Swift 패키지 관리자에게 패키지를 빌드하는 데 필요한 최소 Swift 컴파일러 버전을 알려주는 형식화 된 주석이 포함되어야합니다.

마지막으로 XCFramework를 프로젝트에 추가하고 Sources :
여기에 사진 설명 삽입
Congratulations! Swift 패키지를 배포 할 준비가되었습니다.
여기에 사진 설명 삽입

큰 이진 합계 계산 체크섬

CalendarControl의 경우는 아니지만 특히 큰 프레임은 특별한주의가 필요합니다. 더 큰 바이너리 파일을 처리하는 방법에 대해 자세히 알아 보려면 아래 스포일러를여십시오.

큰 바이너리 프레임 워크가있는 경우 (Apple에서 제안한대로) 저장소에 추가하면 안됩니다. 대신 다음과 같이 호스트에 업로드하고 매니페스트 대상에 URL을 추가 할 수 있습니다.

targets: [
  .binaryTarget(
    name: "CalendarControl",
    url: "https://example.com/CalendarControl.xcframework.zip",
    checksum: "4d4053074fd8b92f9f2f339c48980b99")
]

여기에는 세 가지 입력이 있습니다.

  1. 이름 : 패키지의 이름입니다.
  2. URL : XCFramework 압축 파일 URL.
  3. 체크섬 : Swift 패키지는 프레임 워크 zip 파일이이 체크섬을 확인하여 생성 된 압축 파일과 동일한 지 확인합니다.

체크섬을 계산하려면 아래 단계를 따르십시오.
여기에 사진 설명 삽입

  1. 프레임 워크를 압축 한 다음 zip 파일을 Swift Package 폴더에 복사합니다.
  2. 터미널에서 Swift Package 폴더로 이동합니다.
  3. 다음 명령을 실행하고 체크섬을 생성하십시오.
swift package compute-checksum CalendarControl.xcframework.zip

XCFramework 체크섬이 여기에 있습니다. 이것을 목록에 복사 할 수 있습니다.

Swift 패키지 게시

Xcode를 사용하면 소프트웨어 패키지를 쉽게 배포 할 수 있습니다. 다음으로 생성 한 CalendarControl Swift 패키지를 게시합니다.

Xcode를 사용하여 Swift Package 프로젝트를 엽니 다. 그런 다음 메뉴 모음에서 Source Control▸New Git Repositories ...를 선택합니다.
여기에 사진 설명 삽입
이렇게하면 컴퓨터에 Git 저장소가 생성되고 처음으로 코드를 커밋합니다.

다른 사람이 사용할 수 있도록 패키지를 게시하려면 먼저 공개적으로 게시해야합니다. 가장 쉬운 방법은 GitHub에 게시하는 것입니다.

GitHub 계정이없는 경우 github.com 에서 무료로 만들 있습니다. 그런 다음 아직 수행하지 않은 경우 Xcode 메뉴에서 Xcode ▸ 기본 설정을 선택하여 GitHub 계정을 Xcode에 추가하십시오. 계정을 선택하십시오.

이제 +를 클릭하여 새 계정을 추가하십시오. GitHub를 선택하고 필요에 따라 자격 증명을 입력합니다.
여기에 사진 설명 삽입
소스 제어 탐색기를 열고 CalendarControl 패키지를 선택하십시오. 그런 다음 마우스 오른쪽 버튼을 클릭하거나 Control- 클릭하여 컨텍스트 메뉴를 엽니 다.

다음으로 새 "CalendarControl"원격 ...을 선택합니다. 가시성을 "비공개"로 변경하거나 기본 설정을 수락 할 수 있습니다. 그런 다음 생성을 클릭합니다.

여기에 사진 설명 삽입
그러면 GitHub에 새 저장소가 생성되고 자동으로 코드가 푸시됩니다.

다음으로 패키지에 대한 레이블을 생성하여 프레임 워크의 버전을 설정합니다. 컨텍스트 메뉴에서 "Mark Primary ..."를 선택하십시오. 버전 1.0.0으로 표시하고 만들기를 클릭합니다.
여기에 사진 설명 삽입
마지막으로 Xcode 메뉴 모음에서 Source Control▸Push ...를 선택합니다. 태그 포함을 선택해야합니다. 그런 다음 "푸시"를 클릭합니다.

그러면 SwiftPM이 읽을 수있는 GitHub로 태그가 푸시됩니다. 이제 패키지 버전 1.0.0이 출시되었습니다. :]
여기에 사진 설명 삽입

Swift 패키지 사용

이제 RWCalendarPicker 프로젝트에서 Swift 패키지를 사용할 때입니다.

RWCalendarPicker를 다시 엽니 다. 가져온 CalendarControl 프레임 워크를 프로젝트 대상에서 제거합니다.
여기에 사진 설명 삽입
다음으로 Swift Package Manager를 사용하여 프로젝트에 Swift Package를 추가하는 방법을 배웁니다.

SPM을 사용하여 패키지 종속성 추가

파일 ▸ 스위프트 패키지 ▸ 패키지 종속성 추가 ...를 선택하십시오. Git 저장소 URL을 붙여 넣습니다. 다음을 클릭하십시오.

GitHub 설정에 따라 여기에서 SSH 키를 확인해야 할 수 있습니다. 그런 다음 "규칙"에서 버전 1.0.0에 대해 "다음 전공으로"가 선택되어 있는지 확인하십시오. 다음을 클릭하십시오.

메이저 및 마이너 버전 제어에 대해 자세히 알아 보려면 semver.org를 방문하십시오. Xcode가 패키지를 추출한 후 CalendarControl 제품이 선택되어 RWCalendarPicker 대상에 추가되었는지 확인합니다. 그런 다음 마침을 선택합니다.
여기에 사진 설명 삽입
빌드하고 실행하십시오. 모든 것이 이전과 같이 실행되는지 확인하십시오.
여기에 사진 설명 삽입
우수한! 이제 프로젝트 내에서 사용되는 원격 Swift 패키지가 있습니다.

여기에 사진 설명 삽입

그럼 어디로 갈까요?

이 튜토리얼의 상단 또는 하단에있는 "자료 다운로드"버튼을 사용하여 프로젝트의 전체 버전을 다운로드 할 수 있습니다.

이 자습서에서는 다음 방법을 배웠습니다.

  1. RWCalendarPicker에서 CalendarControl을 추출하고 새 프레임을 만듭니다.
  2. RWCalendarPicker에서 CalendarControl 프레임 워크를 사용합니다.
  3. 바이너리 프레임 워크를 만들고 RWCalendarPicker에서 XCFramework를 사용합니다.
  4. Swift 패키지를 게시하고 RWCalendarPicker에서 사용합니다.

잘 했어!

여기에서이 주제에 대한 WWDC 2019 및 2020 비디오를 시청하십시오.

#pic_center = 600x

참고

https://www.raywenderlich.com/17753301-creating-a-framework-for-ios

https://developer.apple.com/documentation/xcode/creating_a_standalone_swift_package_with_xcode

추천

출처blog.csdn.net/zgpeace/article/details/115057441