🔥 Package.resolved 파일로 버전 정하기
Swift 패키지 매니저는 의존성을 해결한 결과를 패키지 맨 위 경로에 있는 Package.resolved
파일에 적어둡니다. 이 파일이 이미 있으면 패키지 매니저가 각 패키지의 최신 버전을 새로 찾는 대신 의존성을 해결할 때 이 파일을 사용해요. swift package update
명령어를 실행하면 모든 의존성이 최신 버전으로 업데이트되고 Package.resolved
파일도 그에 맞게 바뀝니다.
패키지 매니저는 항상 정해진 버전을 기록할 거예요. 어떤 사람들은 Package.resolved 파일을 패키지의 .gitignore 파일에 넣기로 할 수도 있어요. 이 파일을 깃에 올리면 팀원들이 함께 의존성 버전을 정할 수 있죠. 반면 이 파일을 gitignore하면 각자 swift package update
명령어를 실행하는 시점에 따라 새 버전을 가져올지 결정하게 되고, 새로 참여한 사람은 각 의존성의 최신 버전으로 시작하게 될 거예요. 패키지 A(예: 라이브러리 패키지)가 다른 패키지 B에서 사용되는 경우, 패키지 A의 Package.resolved
파일은 패키지 A를 사용하는 패키지 B에 영향을 주지 않습니다.
swift package resolve
명령어는 Package.swift
파일의 현재 버전 제한과 Package.resolved
파일의 정해진 버전을 고려해 의존성을 해결하고, 그래프를 해결할 수 없으면 오류를 냅니다. 이전에 Package.resolved
파일에 적혀 있던 버전이 있는 패키지는 그 버전들이 여전히 사용 가능하다면 resolve 명령어가 그 버전으로 해결할 거예요. 정해진 버전 파일이 바뀌면(예: 팀원이 새 버전의 파일을 올렸기 때문에) 다음 resolve 명령어는 해당 파일과 맞추려고 패키지를 업데이트해요. resolve 명령어가 잘 끝나면 받아온 모든 의존성 버전과 정해진 버전 파일에 적힌 버전이 똑같아집니다. 대부분의 경우 Package.swift
파일이나 Package.resolved
파일이 바뀌지 않는 한 resolve 명령어는 아무것도 변경하지 않아요.
거의 모든 Swift 패키지 매니저 명령어는 실행 전에 알아서 swift package resolve
기능을 호출하고, 의존성을 해결할 수 없으면 오류를 내면서 취소됩니다.
이 그림은 Package.swift
와 Package.resolved
파일을 가지고 의존성을 정하는 swift package resolve
명령어의 흐름을 보여줘요. 의존성을 정할 수 있으면 해당 버전의 의존성을 받아오고, 그렇지 않으면 오류를 낸답니다. 이렇게 해서 패키지의 의존성 버전을 안정적으로 관리할 수 있어요.