[TIL / 25.03.06] 컨플릭트 지옥에 갇히게 되,,, (feat. project.pbxproj)

2025. 3. 6. 23:35·Git, Github

 

어제까지만 해도 서로 맞지 않는 Main.storyboard에 대한 Conflict를 해결하느라 땀 좀 뺐는데,,

저거 말고도 사실 꾸준히 괴롭혀오는 파일이 있음,, project.pbxproj라는 파일인데

 

project.pbxproj란?

- Xcode를 켜고 프로젝트를 열면 좌측 네비게이터를 보면 파일들이 유저가 만든대로 정리가 되어있다. 이 파일들을 누르면 해당 파일의 내용을 에디터로 수정할 수 있게 해주는데, 이는 해당 파일(project.pbxproj)이 프로젝트의 모든 구조적 정보를 저장해놓는 데이터베이스 역할을 하기 때문이다. 파일 참조 관리, 빌드 설정, 단계, 그룹 구조, 의존성 관리 등 전반적인 중요한 설정에 관한 정보가 담겨있다. 이 파일이 Xcode 프로젝트 파일(.xcodeproj) 패키지 내부에 위치한 파일이라는 점도 중요하다.

 

그럼 사실.. 협업을 하는 팀원들은 각자 작업을 하다보면 빌드 환경 자체도 다르고 그러다보니 pbxproj 내 내용이 서로 다를 수 밖에 없다. 컴퓨터 메모리 내 주소 자체도 다를 수 밖에 없고. 서로 다른 파일을 건드리고 이를 병합할 땐 서로 다른 점만 추가하면 되니 conflict가 날 일이 없지만, 이번 소규모 팀 프로젝트의 경우 같은 파일을 건드리는 경우가 좀 많았다. 따라서 충돌(conflict) 또한 날 수 밖에 없었다. 

 

머지를 하게 되면.. project.pbxproj에 대한 overwritten..하면서 충돌이 났다는 내용을 보여주는데 이를 fork 앱에서 resolve하게 되면 이런 창이 뜬다.

 

 

아주 난리가 난다.. 다행히 얼추 보면 어떤 내용인지 짐작할 수 있다. ImageCell이라는 내용.. 그리고 이게 메모리 내 어떤 주소에 있어서 참조되고 있는지 등등.

하지만 서로 가지고 있는 정보가 다르기에 이를 해결하려면 부딪히는 부분을 완화시켜야 한다. 양쪽에서 내 프로젝트에 필요한 부분들을 잘 보고 선택을 해줘야 기존 내가 작업한 부분과 새롭게 들여올 부분을 온전히 합쳐 해결할 수 있다.

혼자 쭉 읽어보며 선택을 해주고난 결과가..

 

 

ViewController가 죽었다. 이에 관련된 설정을 일부 잘못 건드린 것 같다..

다행히 필요없는 파일이었고 잘 해결할 수 있었다.

 

project.pbxproj 파일 외에도 같은 코드파일을 건드려서 충돌이 나기 마련이고, 스토리보드의 경우 특히 해결하기 번거로운 점이 있었다. 우선 지금까지 충돌이 난다면 기존 local changes를 stash해두고 원격 레포에서 최신화된 내용을 Merge한 후 충돌이 나는 파일에 대해서 Resolve하는 방식을 고수해왔다. 다만, branch를 유연하게 쓸 줄 안다면 일부만 적재적소에 맞게 변환할 수 있다는 점을 알게 되었고 앞으로는 이를 좀 더 알아보고 써보도록 한다.

 

오늘 인상깊었던 점

아무것도 아직 시도해보지 않았고 직접 다 해결하는 방식으로 했지만, 튜터님께 여쭤보고 관련된 말씀을 나누시던 중 인상 깊었던 내용이다. Tuist라는 라이브러리가 최근 트렌드인데, 이것이 모듈화에 좋아서 단순히 인기가 많은 줄 알았다. 다만, 사실 이 Tuist는 저 Xcode 프로젝트 파일로 실행할 필요가 없게 만들기에 project.pbxproj 쪽에서 문제를 일으킬 일이 없다는 것이다. 마냥 모듈화를 쓰는게 아니라 이런 협업에서 나오는 고민까지 해결해줄 수 있다는 점이 인상깊었다.

 


 

오늘 배운 점이 굉장히 많다. 다만 앞에선 협업 시 컨플릭트를 어떻게 했는지 기록하기 위해 중점을 한곳에 뒀다.

내일은 코드베이스 UI 구현하던 내가 이번 프로젝트를 통해 스토리보드와 어떻게 자연스럽게 연결하는지에 대해 포스팅하겠다.

 

넘 피곤한데 모르던 부분이 강화되는 기분이라 썩 좋다 !!

'Git, Github' 카테고리의 다른 글

[TIL / 25.03.25] 제목은 gitignore 트러블슈팅으로 하겠습니다,, 근데 이제 cherry-pick, rebase를 곁들인  (0) 2025.03.25
[TIL / 25.03.04] 팀원분들을 위한 Git, Github 튜토리얼  (0) 2025.03.04
'Git, Github' 카테고리의 다른 글
  • [TIL / 25.03.25] 제목은 gitignore 트러블슈팅으로 하겠습니다,, 근데 이제 cherry-pick, rebase를 곁들인
  • [TIL / 25.03.04] 팀원분들을 위한 Git, Github 튜토리얼
subkyu-ios
subkyu-ios
subkyu-ios 님의 블로그 입니다.
  • subkyu-ios
    subkyu-ios 님의 블로그
    subkyu-ios
  • 전체
    오늘
    어제
    • 분류 전체보기 (49) N
      • iOS (33) N
        • Swift (33) N
      • 내일배움캠프 (7)
      • Git, Github (3)
      • Algorithm (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Wil
    stackview
    사전캠프
    KPT
    github
    알고리즘
    til
    tabman
    협업
    algorithm
    본캠프
    프로그래머스
    내일배움캠프
    의존성 주입
    회고
    UIKit
    Swift
    트러블슈팅
    TableView
    ios
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
subkyu-ios
[TIL / 25.03.06] 컨플릭트 지옥에 갇히게 되,,, (feat. project.pbxproj)
상단으로

티스토리툴바