Storyboard의 컴파일 과정 알아보기

Ryan (Geonhee) Son·2021년 9월 26일
0

Study Stack

목록 보기
32/34

  • ibtool이 storyboard 파일을 storyboardc 파일로 컴파일 (c: compiled).
  • storyboardc 파일은 view와 view의 관계 (IBAction, Segue 등)가 정의된 스토리보드를 바이너리 파일인 nib로 컴파일하며 스토리보드 내 view들의 고유 NIB 식별자 등의 정보를 Information Property List에 기록

스토리보드 소스 파일

Xcode를 통해 확인할 수 있는 스토리보드 파일의 구성은 아래와 같습니다.

Interface Builder - Storyboard

스토리보드 파일을 클릭하면 볼 수 있는 흔한 화면 구성입니다. 화면과 화면 간의 관계를 시각적으로 표현하고 있어 화면 구성을 이해하기 용이합니다.

Source Code

스토리보드 파일을 우클릭하여 Open As, Source Code을 순차적으로 클릭하며 진입하면 다음과 같이 XML 형식으로 표현된 스토리보드를 확인하실 수 있습니다. 스토리보드의 내용을 수정하여 커밋하면 이 소스코드가 변경된다는 것을 gif diff 명령을 통해 확인하신 적이 있으실 것입니다.

번외 - XIB

XML Interface builder 또는 Xcode Interface builder라고 불리는 XIB 파일도 마찬가지로 XML 형식으로 작성되어 있습니다. 스토리보드의 document type이 "com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB", XIB 파일의 document type이 "com.apple.InterfaceBuilder3.CocoaTouch.XIB"으로 둘 모두 유사한 파일 형식임을 유추할 수 있습니다.

Build phase

빌드 완료 시 XIB 파일은 바이너리 형식으로 변환되어 Next step Interface Builder를 의미하는 NIB 파일로 컴파일됩니다. NIB 형식으로는 사람이 읽고 이해할 수 있는 형태를 벗어나서 git과 같은 방식으로 소스 컨트롤을 하기 제한되어 XML 형식의 XIB가 도입되었다고 하네요.

출처: 달망이 개발일기

빌드 후 앱 번들 패키지를 열어보시면 아래와 같이 구성되어 있는 것을 확인하실 수 있습니다. 개별 XIB로 작업한 내용은 스토리보드와 관계없이 NIB 파일로 컴파일되어 앱 번들 최상위 폴더에서 확인할 수 있네요.

다음은 메인 소스가 위치할 것으로 예상되는 Base.lproj를 열었을 때 확인할 수 있는 구성입니다. 스토리보드 파일이었던 LaunchScreenMain이 있네요.

미리 말씀드렸듯이 컴파일된 storyboardc 패키지는 view와 view의 관계 (IBAction, Segue 등)로 이루어진 NIB 파일들을 가지고 있습니다.

의미 없어보이는 BYZ-38-t0r-view-8bC-Xf-vdC와 같은 문자열도 의미가 있습니다. 다음 코드 일부를 통해 특정 ViewController의 최상위 view의 id를 지칭하는 것임을 파악할 수 있습니다.

마찬가지로 스토리보드의 요소인 UINavigationController, UIViewController들도 모두 무작위처럼 보이는 id를 키값을 가지고있으며 이러한 내용이 storyboardc 파일에 동봉된 info.plist 프로퍼티 리스트를 통해 확인할 수 있습니다.

// Main.storyboard
...
<viewController id="BYZ-38-t0r" customClass="OpenMarketItemListViewController" customModule="OpenMarket" customModuleProvider="target" sceneMemberID="viewController">
    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
...

참고자료

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글