我已经使用 azure devops 设置了管道。它在本地工作正常,但在天蓝色上运行时它说:
Missing password for user [email protected], and running in non-interactive shell
我注意到azure正在寻找FASTLANE_PASSWORD而不是FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD。 (因为我使用 2FA,所以我提供 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD)。
这是我的快速文件
default_platform(:ios)
xcode_select("/Applications/Xcode_15.3.app")
desc "Deploy to App Store"
lane :appstore do
if is_ci
setup_ci
end
prelane
match(type: "appstore",app_identifier: "xxxxxx", readonly: is_ci)
build_app(scheme: "prod" ,export_method: "app-store",clean:true)
upload_to_app_store(
app_identifier: "xxxxxxxx",
skip_metadata: true,
skip_screenshots: true
)
end
和APPFILE
# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
apple_id("xxxxxxxxxx")
ENV["FASTLANE_USER"] ="xxxxxxxxx"
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] ="xxxxxxxx"
# For more information about the Appfile, see:
# https://docs.fastlane.tools/advanced/#appfile
如有任何帮助,我们将不胜感激。
当运行
fastlane
命令将应用程序部署到本地 Mac 计算机上的 Apple App Store 时,系统会提示我们输入 2FA 的应用程序专用密码。在新代理机器上持续部署的过程中,我们还会被要求提供安全代码,这可能会使 Azure Pipelines 等自动化工具陷入困境。
来自有关持续集成的 fastlane 文档,
:如果您启用了 2 因素身份验证并希望使用与 App Store Connect 通信的任何操作,则需要通过FASTLANE_SESSION
fastlane spaceaut
提供 预生成的会话。
虽然我建议避免处理使用启用 2FA 的帐户所需的交互,例如因为我们想在不支持交互的自动化或 CI 系统上使用太空飞船
为此,我们可以使用扩展任务
AppStoreRelease@1
,它将在代理工作期间安装和使用fastlane工具。
以下是步骤供您参考。
.p8
证书并将密钥内容转换为BASE64编码;
我使用 Windows 机器上运行的 PowerShell 脚本进行编码;
# Define the path to your .p8 file
$p8FilePath = "C:\Users\Alvin\Downloads\AuthKey_xxxxxx.p8"
# Read the contents of the .p8 file
$p8FileContent = Get-Content -Path $p8FilePath -Raw
# Convert the file contents to a byte array
$p8FileBytes = [System.Text.Encoding]::UTF8.GetBytes($p8FileContent)
# Encode the byte array to a base64 string
$p8FileBase64 = [System.Convert]::ToBase64String($p8FileBytes)
# Output the base64 string
Write-Output $p8FileBase64
AppStoreRelease@1
的 AppleAppStoreSvcCnn
管道任务部署应用程序;
- task: AppStoreRelease@1
inputs:
serviceEndpoint: 'AppleAppStoreSvcCnn'
releaseTrack: 'TestFlight'
appIdentifier: 'com.mydomain.myapp'
appType: 'iOS'
ipaPath: '$(Pipeline.Workspace)/**/*.ipa'
appSpecificId: 'xxxxxx'