티스토리 뷰
[1] RELEASE 플래그
보통 앱을 만들면 DEBUG 컴파일러 플래그는 기본으로 추가되어있고
RELEASE 플래그를 직접 추가합니다.
그리고 앱에서 종종 플래그를 사용해서 분기처리를 합니다.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
#if RELEASE
print("릴리즈")
#else
print("릴리즈 아님")
#endif
#if DEBUG
...
}
}
그럼 Local Swift Package 를 앱에 embed 해서 쓰는 경우,
Swift Package 안에서도 앱 빌드세팅의 컴파일러 플래그를 그대로 사용할 수 있을까요?
테스트해보면
#if DEBUG 는 타고 #if RELEASE 는 안탑니다!
DEBUG는 기본이라서 타고 RELEASE는 직접 추가한 것이라서 안타나봐요!
이 경우, #if RELEASE 를 사용하고 싶으면 swiftSettings > define(_:_:) 을 해주면 됩니다.
그럼 RELEASE 플래그가 잘탑니다!
# 테스트 1 (앱 빌드)
아래와 같이 코드를 작성하고 릴리즈 Build Configuration으로 앱 빌드를 해보면
Swift Package 안에 있는 코드도 #if RELEASE 를 타는 것을 확인할 수 있습니다.
# 테스트 2 (패키지 빌드)
뿐만아니라 swiftSettings > define(_:_:) 을 추가한 후, Swift 패키지를 단독 빌드/테스트 할 때도 #if RELEASE 로 잘 들어옵니다.
이상하지만 테스트를 위해 Test의 Build Configuration을 RELEASE 로 바꾸고
아래 테스트를 돌려보면 성공합니다. Build Configuration이 DEBUG면 실패!
[2] define
참고로 define(_:_:) 은 PackageDescription 5.0 부터 사용가능합니다.
또한 저는 RELEASE 플래그를 위해 저렇게 썼지만
define의 condition은 nil로 기본 값이 설정되어있기 때문에
BuildConfiguration 상관없이 Target-specific flag 를 만들어서 사용할 수 도 있다고 합니다. (참고)
Target-specific flags in the manifest: options like cSettings or swiftSettings are used for fine-grained control of compilation flags for particular targets.
유용한 실예제로 어떤 게 있는 지는 잘모르겠네요!
[3] Custom Build Configuration은?
보통 회사에서 Build Configuration을 여러개 두고 쓰는데, 이 경우는 어떨까요?
우선 Swift Package의 BuildConfiguration 은 현재 debug, release 두개의 configuration밖에 못쓰는 것 같아요
Configurations > Duplicate "Debug" Configuration으로 만든 Custom Configuration의 경우,
Swift Package 내에서 DEBUG 를 타고
Configurations > Duplicate "Release" Configuration 만든 Custom Configuration의 경우,
Swift Package 내에서 RELEASE를 탑니다.
그리고 주의해야할 점이 있습니다.
예를들어 Debug Copy로 Inhouse Debug 를 만들고
일부러 왼쪽에서 오른쪽으로 빌드세팅을 바꿔보았어요!
그리고 해당 Build Configuration으로 빌드하면
앱 안의 코드는 #if RELEASE 를 타지만
Swift Package 안의 코드는 #if RELEASE 를 안타고 여전히 #if DEBUG 를 탑니다,,,
이유는 모르겠지만,, 주의!
'🍏 > iOS' 카테고리의 다른 글
[iOS] object_setClass 의 위험성 (0) | 2022.11.04 |
---|---|
[iOS] status bar hidden / navigation bar shrink or overlap (0) | 2022.10.28 |
[iOS] DiffableDataSource 헷갈리는 것 정리 (1) | 2022.06.29 |
[iOS] UITableViewDiffableDataSource의 4가지 apply 메서드 (0) | 2022.06.28 |
[iOS] Edit Menus (UIMenuController) 커스터마이징 (2) | 2022.06.03 |
- Total
- Today
- Yesterday
- flutter dynamic link
- Django Heroku Scheduler
- Flutter Spacer
- Sketch 누끼
- ribs
- github actions
- DRF APIException
- 구글 Geocoding API
- Flutter getter setter
- 장고 Custom Management Command
- Flutter Clipboard
- flutter 앱 출시
- flutter deep link
- ipad multitasking
- METAL
- Watch App for iOS App vs Watch App
- flutter build mode
- Dart Factory
- cocoapod
- 플러터 얼럿
- SerializerMethodField
- Python Type Hint
- Flutter Text Gradient
- drf custom error
- Django Firebase Cloud Messaging
- PencilKit
- Django FCM
- 플러터 싱글톤
- 장고 URL querystring
- Flutter 로딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |