목차
티스토리 뷰
안녕하세요🐾
프레임워크란 무엇일까요? (급전개)
iOS에서 가장 대표적인 프레임워크는 UIKit입니다.
개발자들은 UIKit을 통해 코드를 덜 작성하면서 원하는 기능을 개발을 할 수 있어 생산성을 높일 수 있습니다.
커스텀 프레임워크를 개발하는 목적도 다르지 않습니다.
프로젝트의 주요 요구 기능을 모듈로 나누어 프레임워크화 했다면, 이를 이용하는 개발자는 원시 코드에 대한 이해 과정 없이 프레임워크에 대한 API만 숙지하면 원하는 기능을 빠르고 편리하게 구현할 수 있습니다.
저 역시 위와 같은 이유로 프로젝트 진행 중 커스텀 프레임워크에 대한 필요성을 느끼고 무지한 배경지식을 채우고자 스터디 하게되었습니다. 만약 틀린 부분이 있다면 알려주세요!
1. 프레임워크(Framework) 생성
Xcode - New - Project - iOS 탭 - Framework를 찾아 선택한 뒤 프로젝트를 생성해주세요.
2. 설정
2.1 프로젝트 설정
생성이 완료되면 프레임워크 프로젝트를 설정해봅시다.
먼저 왼쪽 네비게이터 영역을 보시면, ${FrameworkName} 폴더 안에 헤더 파일이 하나 들어있네요.
앞으로 프레임워크에서 제공하는 기능 구현은 이 폴더 안에 .swift 파일들을 추가하여 구현하면 됩니다.
Deployment Target은 제공하려는 프레임워크 기능의 스펙에 맞게 변경해주면 됩니다.
이제 마지막으로 .xcframework 파일을 만들기 위한 빌드 타겟을 하나 생성해야 합니다.
.xcframework는 여러 .framework들을 묶어 한번 더 Bundling 한 컨테이너 묶음입니다.
나는 .framework를 만들어야 하는데 왜 .xcframework를 만들어야해?
라는 궁금증이 생기신다면 긴 사연이 있습니다...
[System] Framework와 CPU Architecture에 대한 고찰 을 참고해주세요!
2.2 xcframework 생성을 위한 빌드 타겟 생성
프로젝트 설정 화면에서 하단의 + 버튼을 눌러줍니다.
Other - Aggregate 선택
적당한 이름을 입력한 후 Finish를 선택합니다.
타겟 생성이 완료되었네요.
이제 이 타겟에다가 스크립트 코드를 넣어줄 예정입니다.
타겟 선택 후 Build Phases - +버튼 - New Run Script Phase 선택
아래의 스크립트 코드를 새로 생성한 Run Script Phase에 입력합니다.
# Build Device and Simulator versions
xcodebuild archive -scheme "${PROJECT_NAME}" -archivePath "${BUILD_DIR}/iphoneos.xcarchive" -sdk iphoneos SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild archive -scheme "${PROJECT_NAME}" -archivePath "${BUILD_DIR}/iphonesimulator.xcarchive" -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework \
-framework "${BUILD_DIR}/iphoneos.xcarchive/Products/Library/Frameworks/"${PROJECT_NAME}".framework" \
-framework "${BUILD_DIR}/iphonesimulator.xcarchive/Products/Library/Frameworks/"${PROJECT_NAME}".framework" \
-output "${BUILD_DIR}/"${PROJECT_NAME}".xcframework"
# Copy the xcframework to the project directory
cp -R "${BUILD_DIR}/"${PROJECT_NAME}".xcframework" "${PROJECT_DIR}"
# Open the project directory in Finder
open "${PROJECT_DIR}"
모든 설정이 끝났습니다.
앞으로는 아래와 같이 타겟을 변경했는지 확인 후 빌드를 진행하시면 됩니다.
3. 코드 작성 및 빌드
프레임워크에 들어갈 간단한 코드를 아래와 같이 작성하였습니다.
// Created by Assum on 2023/05/18.
public class Assum {
// MARK: - Init
// private 접근 제어로 외부에서 생성자 생성 방지
private init() {}
// MARK: - Functions
public static func sayHelloWorld() {
print("hello world")
}
}
Assum 클래스 안에 정적 메소드가 하나 있습니다.
제가 원하는 이 프레임워크의 API 사용 방법은 사용자가 Assum 클래스의 객체 생성과정 없이 Assum.sayHelloWorld() 로 직접 접근하여 사용하도록 유도하는 것이기 때문에 생성자 접근 제어를 private으로 막아두었습니다.
이제 빌드를 돌려볼까요~?
빌드가 완료되면 설정에서 입력한 Run Script Phase의 스크립트 코드로 인해 생성된 xcframework 파일이
프로젝트 루트 디렉토리에 생성되어 자동으로 오픈되어 나타납니다.
만약 이렇게 프레임워크 파일을 생성하는 방식이 마음에 들지 않는다면 아래의 글을 펼쳐주세요.
스크립트 코드 하단에 아래와 같이 입력된 코드들을 삭제 합니다.
# Copy the xcframework to the project directory
cp -R "${BUILD_DIR}/"${PROJECT_NAME}".xcframework" "${PROJECT_DIR}"
# Open the project directory in Finder
open "${PROJECT_DIR}"
삭제를 했다면 다시 프로젝트 빌드 후,
Xcode - Product - Show Build Folder in Finder - Product 폴더에
들어가면 존재하는 .xcframework 파일을 사용하셔도 됩니다.
4. 프레임워크 사용
프레임워크를 사용할 프로젝트에서 사전에 생성한 ${PROJECT_NAME}.xcframework 파일을 드래그하여 추가합니다.
프로젝트 설정 - General - Frameworks, Libraries, and Embedded Content 에서 추가한 프레임워크의 속성을 Embed & Sign 으로 바꾸어주세요.
이제 ViewController.swift 에서 테스트 코드를 출력해보면 아래와 같이 출력이 됩니다.
가볍게 커스텀 프레임워크의 생성부터 사용까지 알아보았습니다.
읽어주셔서 감사합니다.
'iOS > Swift' 카테고리의 다른 글
[iOS] Code Snippet(코드 스니펫), 코드 즐겨찾기 (0) | 2023.06.14 |
---|---|
[iOS] SwiftLint 적용하기 (0) | 2023.06.05 |
[iOS] Moya 적용하기 (0) | 2023.06.01 |
[iOS] 커스텀 뷰 만들기 (0) | 2023.05.25 |
[iOS] 커스텀 프레임워크(라이브러리) 소스코드 숨기기 (0) | 2023.05.23 |
- Total
- Today
- Yesterday
- swift nimble
- iOS 테스트 코드
- iOS Nimble
- swift quick
- iOS 단위테스트
- XCTest
- ios 구글 로그인 sdk
- ios mvvm
- Firebase Distribution
- swift google sdk
- ios reactorkit
- swift google login
- XCFramework
- ios google
- swift reactorkit
- nimble
- iOS Unit Tes
- iOS 유닛테스트
- swift 구글 sdk
- Framework
- iOS Framework
- ios google signin
- swift xctest
- ios xcframework
- swift framework
- swift google login sdk
- swift 구글 로그인
- Quick
- iOS Quick
- swift google signin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |