l -*_*c l 17 git swift-package-manager
如何使用存储在私有存储库中的依赖项的 Swift 包管理器?
添加一个username
和password
可以在功能上工作:
let package = Package(
name: "MyPackage",
dependencies: [
.package(url: "https://username:password@gitlab.com/me/MyPackage.git", .branch("develop"))
]
)
Run Code Online (Sandbox Code Playgroud)
但是,该username:password
方法存在问题,包括(但不限于)Package.swift
指定用户名,以及将纯文本凭据放入存储库。
理想情况下,解决方案应该是:
l -*_*c l 23
我最终为“unix”类型系统找到的一种解决方案是使用 SSH git
URL 并将Host
配置添加到~/.ssh/config
. 这种方法适用于 macOS/Linux 命令行和 Xcode。
使用 ssh 表单作为Package.swift
.
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "Example",
dependencies: [
.package(url: "git@gitlab.com.myteam:abc/private-repo.git", .branch("develop") ),
],
)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,gitlab.com.myteam
对应于一个Host
in~/.ssh/config
### GITLAB WorkTeamOne
Host gitlab.com.workteam
HostName gitlab.com
User git
IdentityFile ~/.ssh/my_work_key_rsa
UseKeychain yes # for macOS keychain
AddKeysToAgent yes # for macOS keychain
PreferredAuthentications publickey
### GITLAB Hobby
Host gitlab.com.hobby
HostName gitlab.com
User git
IdentityFile ~/.ssh/my_hobby_key_rsa
UseKeychain yes # for macOS keychain
AddKeysToAgent yes # for macOS keychain
PreferredAuthentications publickey
Run Code Online (Sandbox Code Playgroud)
SSH 密钥对可以根据需要为账户生成并应用于个人的在线 git 服务。
ssh-keygen \
-b 4096 \
-t rsa \
-C "my_work_username@example.com" \
-f ~/.ssh/my_work_key_rsa
Run Code Online (Sandbox Code Playgroud)
每个团队成员都可以设置一个单独的、对应的Host
ssh 配置。的Host
将是相同的,但是,实际的公共/私有密钥对(a)的特定于用户,(b)中,可以分开管理从任何代码开发和(c)的可自动安装后使用。
Ted*_*Ted 17
将 spm 与私有存储库一起使用时
vpn
或访问proxies
,ssh
请注意,Xcode 保留自己的文件夹.ssh
和known_hosts
。
你可以在里面看到
~/Library/Preferences/com.apple.dt.Xcode.plist
Run Code Online (Sandbox Code Playgroud)
它看起来像这样
在 ci 环境中,这并不令人愉快,您可能会收到以下错误:
xcodebuild:错误:无法解析包依赖:服务器 SSH 指纹验证失败。
xcodebuild:错误:无法解析包依赖项:身份验证失败,因为凭据被拒绝
出现未知错误。无法连接到本地主机:连接被拒绝 (-1)
您实际上可以~/.ssh
通过以下方式之一告诉 Xcode 使用 ssh 密钥和已知主机的标准位置:
一种。这适用于基于容器的 ci,如圆 ci
sudo defaults write com.apple.dt.Xcode IDEPackageSupportUseBuiltinSCM YES
Run Code Online (Sandbox Code Playgroud)
湾 这适用于裸机
/usr/libexec/Plistbuddy -c "Add :IDEPackageSupportUseBuiltinSCM bool 1" ~/Library/Preferences/com.apple.dt.Xcode.plist
Run Code Online (Sandbox Code Playgroud)
C。如果上述方法对您不起作用,请尝试添加-scmProvider system
xcodebuild 命令
gym(
...
use_system_scm: true
)
Run Code Online (Sandbox Code Playgroud)
scan(
...
use_system_scm: true
)
Run Code Online (Sandbox Code Playgroud)
fastlane run spm --use_system_scm true
Run Code Online (Sandbox Code Playgroud)
xcodebuild -scmProvider system
Run Code Online (Sandbox Code Playgroud)
确保您的私人回购主机已添加到 ~/.ssh/known_hosts
一种。用于比特桶
for ip in $(dig @8.8.8.8 bitbucket.org +short); do ssh-keyscan bitbucket.org,$ip; ssh-keyscan $ip; done 2>/dev/null >> ~/.ssh/known_hosts || true
Run Code Online (Sandbox Code Playgroud)
湾 对于 github
for ip in $(dig @8.8.8.8 github.com +short); do ssh-keyscan github.com,$ip; ssh-keyscan $ip; done 2>/dev/null >> ~/.ssh/known_hosts || true
Run Code Online (Sandbox Code Playgroud)
C。其他
ssh-keyscan your-host.com >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
通过.netrc
使用extractions/netrc@v1 action
.
Build:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- uses: extractions/netrc@v1
with:
machine: github.com
username: user
password: ${{ secrets.SWIFT_PACKAGE_MANAGER_PAT }}
- uses: extractions/netrc@v1
with:
machine: api.github.com
username: user
password: ${{ secrets.SWIFT_PACKAGE_MANAGER_PAT }}
Run Code Online (Sandbox Code Playgroud)
此后,xcodebuild
将在访问私有存储库时使用 PAT。
我尝试使用GITHUB_TOKEN
,但似乎它仅限于当前的存储库。因此,我为有权访问私有存储库的 GitHub 帐户创建了一个 PAT,并将其添加到存储库机密中。
归档时间: |
|
查看次数: |
9888 次 |
最近记录: |