我正在尝试在 Azure devOps 上创建一个管道,以使用此 yaml 文件将 iOS 应用程序(使用电容器/类星体框架构建)发布到应用程序商店
parameters:
- name: environment
displayName: Configuration based on env
type: string
default: DEV
values:
- PROD
- DEV
stages:
- stage: __default
jobs:
- job: Job
pool:
vmImage: macOS-12
strategy:
maxParallel: 1
steps:
- task: NodeTool@0
displayName: install node version
inputs:
versionSource: 'spec'
versionSpec: '16.0.0'
- task: CmdLine@2
displayName: install dependencies
inputs:
script: |
npm i -g @quasar/cli
npm install
cd src-capacitor
npm install
- task: CocoaPods@0
displayName: install cocoapods
inputs:
workingDirectory: 'src-capacitor/ios/App'
forceRepoUpdate: false
- task: CmdLine@2
displayName: npm build
inputs:
script: 'quasar build -m capacitor -T ios --skip-pkg'
- task: InstallAppleCertificate@2
displayName: install apple signing certificate
inputs:
certSecureFile: 'devTest.p12'
certPwd: '0000'
keychain: 'temp'
- task: InstallAppleProvisioningProfile@1
displayName: install apple provisioning profile
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: 'testDev.mobileprovision'
- task: Xcode@5
displayName: Uncheck "Based on dependency analysis" for "[CP] Embed Pods Frameworks"
inputs:
buildAction: 'modify'
xcodeProjPath: 'src-capacitor/ios/App.xcodeproj'
buildSettings: |
"TARGETED_DEVICE_FAMILY[$(Default Platforms)]"="iphoneos"
"buildSettings[$(SCHEME_NAME)][ENABLE_BITCODE]"="NO"
"buildSettings[$(SCHEME_NAME)][SWIFT_VERSION]"="5.0" # Example settings, adjust as needed
# Add a setting to disable dependency analysis for the script phase:
"buildSettings[\"Embed Pods Frameworks\"][BASED_ON_DEPENDENCY_ANALYSIS]"="NO"
sdk: 'iphoneos'
- task: CmdLine@2
displayName: 'Ensure proper integration of Capacitor modules'
inputs:
script: |
echo "Ensuring proper integration of Capacitor modules..."
cd src-capacitor/ios/App # Navigate to the iOS project directory
pod install # Install CocoaPods dependencies
npx cap sync ios # Sync Capacitor iOS configuration and dependencies
- task: Xcode@5
displayName: 'Building IPA File'
inputs:
actions: 'build archive'
- task: CmdLine@2
displayName: Naming ipa file
inputs:
script: >
appversion=$(cat package.json | head | grep -w "version" | awk '{print $2}' |cut -c 2-6)
mv /Users/runner/work/1/s/output/App.ipa /Users/runner/work/1/s/output/myapp_DEV_${appversion}.ipa
- task: CopyFiles@2
displayName: 'Copy Files to: $(build.artifactStagingDirectory)'
inputs:
SourceFolder: '/Users/runner/work/1/s/output'
Contents: '*.ipa'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'ios'
publishLocation: 'Container'
但是管道在构建 IPA 文件时失败:
构建失败**
运行脚本构建阶段“[CP] Embed Pods Frameworks”将在每次构建期间运行,因为它没有指定任何输出。要解决此警告,请将输出依赖项添加到脚本阶段,或者通过取消选中脚本阶段中的“基于依赖项分析”将其配置为在每个构建中运行。 (在项目“App”的目标“App”中)
** 存档失败 **
##[错误]错误:/usr/bin/xcodebuild 失败,返回代码:65
问题是 xcode 没有返回任何其他错误。
从您提供的 YAML 中,我注意到您正在使用默认配置
nosign
(不要编码符号)作为 Xcode@5上的
signingOption
(签名样式)任务。
要构建和存档 IPA 文件,您需要在 Xcode@5 任务上提供以下签名证书。
signingIdentity
(签名身份):由InstallAppleCertificate@2
任务(安装Apple证书)安装/生成。此任务将自动设置变量“APPLE_CERTIFICATE_SIGNING_IDENTITY
”以供使用。
provisioningProfileUuid
(配置文件 UUID):它由 InstallAppleProvisioningProfile@1
任务(安装 Apple 配置文件)安装/生成。此任务将自动设置变量“APPLE_PROV_PROFILE_UUID
”以供使用。
然后在 Xcode@5 任务中,您可以进行如下配置:
steps:
. . .
- task: Xcode@5
displayName: 'Building IPA File'
inputs:
actions: 'build archive'
signingOption: manual
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
欲了解更多详情,您可以参考“签署您的 Apple iOS、macOS、tvOS 或 watchOS 应用程序”。