为什么我的 Github 操作在尝试构建 IPA 时失败(不使用 fastlane)
Why does my Github Action fail when trying to build an IPA (Not using fastlane)
我正在尝试对 CI/CD 使用 GitHub 操作,当我尝试创建 IPA 文件时,我在尝试查找配置文件时失败了。
我将文件存储在 Github 的机密部分,它们似乎可以正确加载。
env:
BUILD_CERTIFICATE_BASE64: ***
P12_PASSWORD: ***
BUILD_PROVISION_PROFILE_BASE64: ***
KEYCHAIN_PASSWORD: ***
1 identity imported.
我创建了一个 ExportOptions.plist 文件并尝试打印出来以确保 GitHub 能够正确读取它。
{
"method" => "ad-hoc"
"provisioningProfiles" => {
"com.strykeout.Demo_CICD" => "PROFILE UUID"
}
"signingCertificate" => "iPhone Distribution: Nathan (XXXXXXX)"
"signingStyle" => "manual"
"teamID" => "XXXXXXXX"
}
2022-01-31 22:55:17.741 xcodebuild[1633:7990] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path "/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/Demo_CICD_2022-01-31_22-55-17.740.xcdistributionlogs".
error: exportArchive: "Demo_CICD.app" requires a provisioning profile.
** EXPORT FAILED **
Error Domain=IDEProvisioningErrorDomain Code=9 ""Demo_CICD.app" requires a provisioning profile." UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription="Demo_CICD.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
它似乎找不到导出选项的 provisioningProfiles 部分,但它显然在那里。
这是完整的工作流程:
name: Archive Workflow
on:
push:
branches: [ main ]
jobs:
build:
name: Archive File on merge to Main
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install the Apple certificate and provisioning profile
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
- name: Build archive
env:
scheme: ${{ 'Demo_CICD' }}
run: |
xcodebuild \
-configuration Release \
-scheme $scheme \
-archivePath ./demo/Demo_CICD.xcarchive \
archive
- name: Build IPA
run: |
plutil -p exportOptions.plist
xcodebuild \
-configuration Release \
-exportArchive \
-archivePath ./demo/Demo_CICD.xcarchive \
-exportPath /demo/demoIPA.ipa \
-exportOptionsPlist exportOptions.plist
我知道我的问题是什么了:
显然 Xcode 正在将我的应用程序包 ID 从 demo_cicd 更新为 demo-cicd(下划线已更改为连字符),因此与 exportOptions Plist 不匹配它现在正在工作。
我正在尝试对 CI/CD 使用 GitHub 操作,当我尝试创建 IPA 文件时,我在尝试查找配置文件时失败了。
我将文件存储在 Github 的机密部分,它们似乎可以正确加载。
env:
BUILD_CERTIFICATE_BASE64: ***
P12_PASSWORD: ***
BUILD_PROVISION_PROFILE_BASE64: ***
KEYCHAIN_PASSWORD: ***
1 identity imported.
我创建了一个 ExportOptions.plist 文件并尝试打印出来以确保 GitHub 能够正确读取它。
{
"method" => "ad-hoc"
"provisioningProfiles" => {
"com.strykeout.Demo_CICD" => "PROFILE UUID"
}
"signingCertificate" => "iPhone Distribution: Nathan (XXXXXXX)"
"signingStyle" => "manual"
"teamID" => "XXXXXXXX"
}
2022-01-31 22:55:17.741 xcodebuild[1633:7990] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path "/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/Demo_CICD_2022-01-31_22-55-17.740.xcdistributionlogs".
error: exportArchive: "Demo_CICD.app" requires a provisioning profile.
** EXPORT FAILED **
Error Domain=IDEProvisioningErrorDomain Code=9 ""Demo_CICD.app" requires a provisioning profile." UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription="Demo_CICD.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
它似乎找不到导出选项的 provisioningProfiles 部分,但它显然在那里。
这是完整的工作流程:
name: Archive Workflow
on:
push:
branches: [ main ]
jobs:
build:
name: Archive File on merge to Main
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install the Apple certificate and provisioning profile
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
- name: Build archive
env:
scheme: ${{ 'Demo_CICD' }}
run: |
xcodebuild \
-configuration Release \
-scheme $scheme \
-archivePath ./demo/Demo_CICD.xcarchive \
archive
- name: Build IPA
run: |
plutil -p exportOptions.plist
xcodebuild \
-configuration Release \
-exportArchive \
-archivePath ./demo/Demo_CICD.xcarchive \
-exportPath /demo/demoIPA.ipa \
-exportOptionsPlist exportOptions.plist
我知道我的问题是什么了:
显然 Xcode 正在将我的应用程序包 ID 从 demo_cicd 更新为 demo-cicd(下划线已更改为连字符),因此与 exportOptions Plist 不匹配它现在正在工作。