티스토리 뷰
개요
현재 회사에서는 여러 개의 iOS 앱을 운영중이다. 근데 이 앱들마다 따로 존재하지만 같은 목적으로 사용되는 똑같은 코드들이 있었다.
로그를 위한 Logger, 유틸성 객체나 extension들을 모아둔 코드 등인데, 모듈화를 진행하면서 local spm으로 분리해놓은 상태였다.
문제는 이걸 각 프로젝트마다 소스 파일을 복붙해서 가지고 있고 Local Path를 통해 의존성을 추가해서 사용하고 있다는 것이다. 공통으로 관리되어야 함에도 각 프로젝트마다 따로 관리되고 있다는게 불편했다.
레포에 올려두고 사용하고 싶은데 회사 레포이다보니 Private이라 일반적인 방법으로는 불가능하기 때문에 다른 해결 방법을 찾아보았다.
방법 1. (👎)
dependencies: [
.package(url: "https://user:password@github.com/user/private-repo.git", from: "1.0.0")
]
특정 계정에 강하게 묶여있는 데다가 중요한 정보가 노출되어야 하는 문제가 있다.
방법 2. (🤷♂️)
dependencies: [
.package(url: "https://<token>:x-oauth-basic@github.com/user/private-repo.git", from: "1.0.0")
]
OAuth 토큰을 이용하는 방법 (안써봄)
방법 3. ⭐️
dependencies: [
.package(url: "git@github.com:user/private-repo.git", from: "1.0.0")
]
ssh key를 이용하는 방법
계정 혹은 repository 별로 ssh key를 설정할 수 있다. repository 별로 ssh key를 설정한다면 보안 측면에서는 더 좋을것.
아래는 계정에 ssh key를 추가하는 방법이다.
우선 컴퓨터에 ssh key pair를 만들어야 하는데, 이미 생성된 key가 있는지 확인한다.
$ cat ~/.ssh/id_rsa.pub
cat: /Users/UserName/.ssh/id_rsa.pub: No such file or directory
~/.ssh/id_rsa.pub 파일이 없다면 아직 한번도 ssh key를 생성하지 않은 상태이다. (ssh key를 생성할때 기본 이름이 id_rsa 이다)
ssh-keygen 터미널에 ssh key pair 생성 커맨드를 입력한다.
Enter file in which to save the key (/Users/UserName/.ssh/id_rsa): key를 저장할 파일 경로를 입력
→ 그냥 엔터를 쳐서 기본 위치에 기본 파일명으로 만든다.
Enter passphrase (empty for no passphrase): key에 대한 비밀번호를 입력
→ 보통 그냥 엔터를 처서 넘어간다. empty for no passphrase ~
이렇게 기본 위치(/Users/UserName/.ssh/id_rsa)에 파일이 생성되며 키가 만들어진다.
ssh를 사용할 때 기본적으로 ssh 사용자ID@서버명 (User@HostName)
이렇게 사용한다.
Github, Bitbucket 에서 https가 아닌 ssh로 clone할 때 Github과 Bitbucket의 각 부분을 확인할 수 있다.
이를 참고해서 ~/.ssh/ 경로에 config 파일을 생성해서 아래와 같이 작성한다.
Host 호스트 # 각 호스트의 구분자 정도로 보면 될 것 같다.
HostName 서버명 # ex: github.com, bitbucket.org, ...
User 사용자명 # ex: git, ...
IdentityFile ~/.ssh/파일이름 # 타겟 ssh key 파일 경로
# 예시
Host BitbucketPersonal
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa
# 예시
Host GithubPersonal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_git_personal
작성이 완료 되었으면 이제 bitbucket(혹은 github에) 공개키를 제공해줘야 한다.
계정의 Personal settings로 가서 SSH keys에서 Add Key 로 키를 추가한다.
터미널에서 cat ~/.ssh/id_rsa.pub | pbcopy
커맨드를 입력해서 앞서 만들었던 공개키(id_rsa.pub)를 클립보드에 복사하고 Key 입력칸에 붙여넣어준다.
Label은 비워놔도 되지만 키를 구분하기 위해 나는 회사맥북 id_rsa
정도로 입력해주었다.
키 추가가 완료되면 터미널에서 ssh -T git@bitbucket.org
를 통해 확인해본다.
만약 The authenticity of host @@@ can’t be established.
라는 메시지가 뜨면, 이는 bitbucket에 ssh url을 이용해서 처음 접근할때(~/.ssh/known_hosts에 정보가 없을때) 알려진 호스트로 추가하기 위해 경고 메시지가 뜨는 것이다.
다른 메시지는 https://support.atlassian.com/bitbucket-cloud/docs/troubleshoot-ssh-issues/ 참고
아래의 ssh_dispatch_run_fatal ~~~ Broken pipe
메시지는 파이프 연결 끊김 증상으로 서버 연결이 끊겼다는 메시지인데,
바로 다시 ssh -T git@bitbucket.org
커맨드를 입력하면
잘 된다.
이제 ssh url을 통해서 private repository 에서 패키지를 가져올 수 있다.
dependencies: [
.package(url: "git@github.com:user/private-repo.git", from: "1.0.0")
]
추가로, 만약 ssh-keygen으로 키 생성할 때 passphrase를 입력한다면 빈번하게 이 비밀번호를 입력해야 하는데, config 파일에서 키체인을 사용하도록 설정한다면 최초에만 비밀번호를 물어본다.
Host BitbucketPersonal
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa
UseKeychain yes # passphrase를 키체인에 저장!
참고자료
Using SSH keys to authenticate with private GitHub repositories in Swift Package Manager
How to use Swift Package Manager with private repos?
'iOS' 카테고리의 다른 글
iOS Localizable.strings, Android strings.xml 구글 스프레드 시트로 관리하기 (0) | 2022.04.07 |
---|---|
디버그 상태에서 인스턴스 깊게 들여다보기 (0) | 2022.02.11 |
iOS UISplitViewController 사용 시 고려할 것들 (0) | 2022.01.27 |
[번역] UISplitViewController (0) | 2022.01.24 |
[번역] WatchKit - Life Cycles (0) | 2022.01.20 |
- Total
- Today
- Yesterday
- watchOS life cycle
- Localizable
- 철학의 역사
- spm
- 생활코딩
- 읏샷샤 화이팅 앗샷샤 화이팅
- statusBarStyle
- UISplitViewController
- Android
- private repository
- 에피큐어
- 클론코딩
- opentutorial
- iOS App Life Cycle
- iPadOS
- 프론트엔드 공부
- watchKit
- 에피쿠로스
- iPad
- bitbucket
- SplitViewController
- StatusBar
- lldb
- Xcode
- split view controller
- watchOS
- ios
- 냉철
- strings.xml
- 스토아학파
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |