이번 팀프로젝트는 Ios 프로젝트였는데요, 시작부터 엄청나게 충돌이 일어나고 빌드가 안되고 파일을 못찾고...
난리도 아니였습니다.
ios에 통달한 분이 계셔서 충돌을 해결해주고 구조적으로 충돌안나게끔 관리해주면 좋았겠지만...
없는데 어떻하겠습니까. ㅋㅋㅠ 이미 문제는 일어났고 처리법도 알아내서 포스팅 합니다.
0. 뭐하는 친구인가?
프로젝트의 설정이 적혀있는 파일입니다. 프로젝트 내부에서 생성된 파일들을 파일 유형에 따라 reference를 저장합니다.
파일 네비게이션에 있는 그룹과 파일의 reference를 가지고 있으며, 그룹으로 정렬되있는 정보도 저장하고 있고 그 외 특수한 경우도 저장하고 있습니다. 굳이 비슷한걸 따지자면... 안드로이드가 Activity를 추가하면 매니페스트에 추가가 되지요? 그런 느낌이라고 생각하시면 됩니다. 물론 역할은 더 크고 다양하지만요.
1. 접근법
a. 깃허브 데스크탑 사용
우클릭으로 Revaeal in Finder로 여셔도 되고 Opin Xcode로 보셔도 됩니다.
b. 터미널을 통한 접근
터미널로 프로젝트 폴더까지 이동 후, project_name.xcodeproj 에 cd로 진입한 후 open으로 열으셔도 됩니다.
c. xcode에서 접근
xcode 좌측 네비게이션에서 최상위에 존재하는 프로젝트 파일을 우클릭해
Open with External Editor를 선택해 열으셔도 됩니다.
2. 당했던 에러들
1. Dictionary missing ';' after key-value pair for "objects"
aise_parser_error': [!] Dictionary missing ';' after key-value pair for "objects", found "" (Nanaimo::Reader::ParseError)
원인
힌트는 역시 에러코드에 다 있습니다. project.pbxproj의 큰 구조는 다음과 같습니다.
object 쪽에 ;를 안찍었다는 뜻이겠져? ㅎㅎ
저의 경우는 충돌관리할때 다른 reference의 } 까지 지우는 바람에 생긴 오류였었습니다.
어떻게 알았냐면 rootObject가 저렇게 중괄호를 fold하면 보이지 않았었거든요...ㅎㅎ
해결
중괄호를 command + 좌클릭으로 Fold를 할 수 있는 기능이 xcode에 존재합니다.
전 이번에 처음알게됬네요.... 이걸 사용해서 하위의 reference를 하나씩 닫아보면서 찾았습니다. ㅎ...
2. Build input file cannot be found
원인
분명히 파일이 xcode의 좌측 네비게이션에 존재하고, 빨간색으로 변하지 않았는데도 찾지 못했습니다.
이 경우는 project.pbxproj에 해당 파일이 '중복해서' 등록되어 있을때 발생합니다.
해결
- 해당 문제가 발생한 파일을 다른 디렉토리로 옮긴다
- project.pbxproj를 열어서 해당 파일명.swift로 검색해서 찾은 라인을 다 지운다
- 옮긴 파일을 다시 디렉토리로 옮긴 후 xcode로 드래그해 원위치 시키면 끝!
주의 : 해당 파일이 그룹에 속한 경우
80FE287826B3F80000D8D1B7 /* Utility */ = {
isa = PBXGroup;
children = (
80FE287926B3F80000D8D1B7 /* DateHandling.swift */,
);
path = Utility;
sourceTree = "<group>";
};
위의 경우는 Dateandling.swift가 Utility 그룹에 속하는 경우입니다
이 경우에는 children만 제거해주면 됩니다. 만약 children이 여러개라면 Dateandling.swift으로 주석처리된 부분만 제거해주시면 됩니다.
참고 사이트
https://hcn1519.github.io/articles/2018-06/xcodeconfiguration
https://github.com/CocoaPods/CocoaPods/issues/8906
'Debug Log > swift' 카테고리의 다른 글
Code=3840 "Invalid value around character (0) | 2021.08.04 |
---|---|
Sqlite3 - database is locked (0) | 2021.08.02 |