Код: Выделить всё
- name: Build iOS
run: dotnet publish ${{ inputs.project-file }} -c ${{ inputs.build-config }} -f ${{ inputs.dotnet-version-target}}-ios /p:ArchiveOnBuild=true --no-restore
/Users/runner/.dotnet/packs/Microsoft.iOS.Sdk.net8.0_18.0/18.0.8319/tools/msbuild/iOS/Xamarin.Shared.targets(1835,3): error : No valid iOS code signing keys found in keychain. You need to request a codesigning certificate from https://developer.apple.com. [/Users/runner/work/App/App/App/App.csproj::TargetFramework=net8.0-ios]
/Users/runner/.dotnet/packs/Microsoft.iOS.Sdk.net8.0_18.0/18.0.8319/tools/msbuild/iOS/Xamarin.Shared.targets(1835,3): error : [/Users/runner/work/App/App/App/App.csproj::TargetFramework=net8.0-ios]
< /code>
Это мой рабочий процесс CD-IOS.yml (без всех входов из моего cd-build.yml): < /p>
name: iOS Publish
jobs:
publish-ios:
runs-on: macos-latest
steps:
- uses: maxim-lobanov/setup-xcode@v1
name: Set XCode version
with:
xcode-version: ${{ inputs.xcode-version }}
- name: Import iOS Certs
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.dist-cert-p12 }}
p12-password: ${{ secrets.dist-cert-password }}
- name: Download Provisioning Profiles
id: provisioning
uses: apple-actions/download-provisioning-profiles@v1
with:
bundle-id: ${{ inputs.package-name }}
profile-type: 'IOS_APP_STORE'
issuer-id: ${{ secrets.appstore-issuer }}
api-key-id: ${{ secrets.appstore-keyid }}
api-private-key: ${{ secrets.appstore-private-key }}
- name: List Certificates
run: security find-identity -v -p codesigning
- name: List Downloaded Provisioning Profiles
run: ls -lah ~/Library/MobileDevice/Provisioning\ Profiles/
- name: Checkout Repository
uses: actions/checkout@v4
- name: Setup .NET ${{ inputs.dotnet-version }}
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ inputs.dotnet-version }}
- name: Install MAUI Workloads
run: dotnet workload install maui
- name: Restore NuGet Packages
run: dotnet restore ${{ inputs.sln-file }} --configfile ${{ inputs.nuget-config }}
env:
TELERIK_NUGET_KEY: ${{ secrets.telerik-nuget-api-key }}
- name: Version the app
uses: managedcode/MAUIAppVersion@v1
with:
csproj: ${{ inputs.project-file }}
version: ${{ github.run_number }}
displayVersion: ${{ inputs.build-version }}.${{ github.run_number }}
printFile: true
- name: Build iOS
run: dotnet publish ${{ inputs.project-file }} -c ${{ inputs.build-config }} -f ${{ inputs.dotnet-version-target}}-ios /p:ArchiveOnBuild=true --no-restore
- name: Upload app to TestFlight
uses: apple-actions/upload-testflight-build@v1
with:
app-path: ${{ github.workspace }}/${{ inputs.project-folder }}/bin/${{ inputs.build-config }}/${{ inputs.dotnet-version-target}}-ios/ios-arm64/publish/*.ipa}}
issuer-id: ${{ secrets.appstore-issuer }}
api-key-id: ${{ secrets.appstore-keyid }}
api-private-key: ${{ secrets.appstore-private-key }}
< /code>
Шаг загрузка моих профилей подготовки возвращает это: < /p>
Run apple-actions/download-provisioning-profiles@v1
Wrote IOS_APP_STORE profile 'iOS Team Store Provisioning Profile: com.myteam.myapp' to '/Users/runner/Library/MobileDevice/Provisioning Profiles/.mobileprovision'.
Wrote IOS_APP_STORE profile 'GithubActionsMobileApp' to '/Users/runner/Library/MobileDevice/Provisioning Profiles/.mobileprovision'.
< /code>
Второй перечисленный профиль - это правильный профиль, который я хотел бы использовать.Run security find-identity -v -p codesigning
1) "Apple Distribution: My Team Name (TeamID)"
1 valid identities found
< /code>
, который является правильным сертификатом подписи, но я все еще получаю ошибку. Код: < /p>
- name: Install Apple certificate and provisioning profile
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.dist-cert-p12 }}
P12_PASSWORD: ${{ secrets.dist-cert-password }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.provisioning-profile }}
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 > $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode > $PP_PATH
echo "Provisioning Profile saved to $PP_PATH"
echo ls -lah "$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 set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $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
Я попытался извлечь профиль подготовки Uuid и передавать его непосредственно в команду Publish с -P: CodeSignProvision = $ profile_uuid , но это также ничего не делает. Мой профиль подготовки - это профиль дистрибуции App Store Connect, и мой сертификат - тип дистрибуции с именем моей команды в качестве «названия сертификата». Кажется, ничто не имеет никакого эффекта.
Подробнее здесь: https://stackoverflow.com/questions/795 ... keys-found