티스토리 뷰
Objective-C 프로젝트에서 Swift 코드 사용하기, Swift 프로젝트에서 Objective-C 코드 사용하기
저는 Swift 개발자이고, 회사의 레거시 코드는 Objective-C로 되어있습니다.
그래서 Objective-C 프로젝트와 Swift 프로젝트를 넘나들어야 할 때가 많은데요.
Objective-C 프로젝트에서 제가 작성한 Swift 코드를 사용해야 할 때나 Swift 프로젝트에서 회사의 Objective-C 모듈을 사용해야 할 때,
참고하기 위해 글을 써보려 합니다.
# Swift 프로젝트에서 Objective-C 사용하기
스위프트 프로젝트에서 오브젝티브-C 파일을 생성하면 아래와 같은 팝업을 볼 수 있습니다.
1. Create Bridging Header를 선택했을 경우
파일을 생성한 곳에 AppName-Bridging-Header.h 파일이 생성된 것을 볼 수 있습니다.
이 파일 안에 새로 만든 오브젝티브-C 파일의 헤더 파일을 임포트 해주면 됩니다.
#import "NewObjectiveCFile.h"
2. Don't Create를 선택하거나 팝업이 보이지 않을 경우
AppName-Bridging-Header.h 파일을 직접 생성해서 새로 만든 오브젝티브-C 파일을 임포트 해줍니다.
다만, 이 프로젝트에서 브릿징 헤더 파일을 사용하고 있다는 사실을 명시해주기 위해서
'Project - Target - Build Settings - Objective-C Bridging Header' 에 파일의 위치/AppName-Bridging-Header.h 를 추가합니다.
3. 끝...
너모 간단... 진짜 간단 끝판왕..
이제 어느 파일에서든 오브젝티브-C로 작성된 코드를 사용할 수 있습니다.
# Objective-C 프로젝트에서 Swift 사용하기
'Project - Target - Build Settings - Defines Module'을 Yes로 설정합니다.
추가한 Swift 파일에서 Objective-C에서 사용할 클래스나 함수명 앞에는 @objc를 달아주어야 합니다.
@objc class TestService {
@objc static let shared = TestService()
@objc func sayHello() {
print("Hello!")
}
}
자 이제 스위프트 코드를 사용하고 싶은 오브젝티브-C 파일에서 해당 코드를 호출해 봅시다.
[[TestService shared] sayHello];
// error
Use of undeclared identifier 'TestService'
이 오류는 우리가 헤더 파일을 임포트 하지 않아서 생긴 오류인데요,
그렇다면 우리는 헤더 파일을 새로 생성해야 하느냐!
아닙니다! 우리가 위에서 Defines Module 을 Yes로 설정해 놓았기 때문에 컴파일 하는 과정에서 헤더 파일을 자동으로 생성해줍니다.
따라서 우리는 Xcode가 몰래 만들어 줄 헤더 파일을 임포트 해주기만 하면 됩니다.
#import "AppName-Swift.h"
앱 이름 뒤에 -Swift.h 만 붙인 파일을 임포트 해주고 새로 빌드하면 있던 에러도 사라지는 마법!
끝입니다! 얘도 안 어렵죠?
# 명심해야 할 것
1. Bridging Header의 파일 위치가 Build Settings에 작성한 위치와 동일한 지 확인해주세요!
2. Bridging Header 파일을 삭제할 때에도 Build Settings에 해당 파일이 삭제되었는 지 확인해주세요!
3. 빌드 과정에서 새로 생성되는 헤더 파일은 "AppName-Swift.h" 입니다!! Project File Name 과 Product Name을 다르게 사용하시는 분들의 경우 반드시 "Product Name-Swift.h" 파일을 임포트 해주세요!! (이걸로 한 시간 버림..)
'iOS' 카테고리의 다른 글
Universal Framework 만들기 (0) | 2020.12.13 |
---|---|
[iOS] Dark Mode 해제 (User Interface Style) (5) | 2020.10.19 |
- Total
- Today
- Yesterday
- loadView
- 코르도바 플러그인
- urlsession 모듈화
- passing data between ViewController and View
- ios framework device simulator
- loadView viewDidLoad
- xcode group folder
- User Interface Style
- linux java 설치
- 코르도바 Swift
- urlrequest 공통화
- codable
- UIUserInterfaceStyle
- 코르도바 iOS
- Objective-C 프로젝트에서 Swift
- swift generic
- RxSwift UITetxtField
- swift delegate
- 코르도바 iOS Framework
- Viewcontroller data
- codable date
- ios universal framework
- iOS Dark Mode
- UITextField 글자수 제한하기
- passing data between ViewControllers
- swift json 파싱
- xcode 16
- Swift 프로젝트에서 Objective-C
- urlsession 공통화
- urlrequest 모듈화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |