Как мы можем настроить CI для приложения iOS с помощью расширений приложений
Я пробовал несколько вещей в Azure DevOps (VSTS) для создания CI для приложения iOS, но оказалось, что Azure DevOps не поддерживает приложения с расширениями приложений. Так ли это на самом деле?
В нашем проекте я использую расширение службы уведомлений OneSignal, которое зависит от основной цели. Поэтому, когда Xcode задача пытается подписать приложение ошибка происходит, связанный с идентификаторами сборки в качестве основной цели Xcode имеет иной идентификатор сборки, чем идентификатор сборки OneSignalNotificationServiceExtension в.
❌ ошибка: профиль подготовки "MainTargetName" имеет идентификатор приложения "com.xyz.-", который не соответствует идентификатору пакета "com.xyz.-.OneSignalNotificationServiceExtension". (в целевой OneSignalNotificationServiceExtension из проекта ProjectName)
Я использую задачу сертификата Apple для установки сертификатов на размещенный агент Microsoft и аналогичным образом использую задачу профиля подготовки для установки профилей обеспечения. Похоже, что у задачи Xcode есть ограничение, заключающееся в том, что она не может получить несколько профилей подготовки, поэтому она может обслуживать эти приложения iOS с помощью расширения приложения.
- task: InstallAppleCertificate@2
displayName: 'Install Certificates'
inputs:
certSecureFile: '3Certificates.p12'
certPwd: '$(P12Password)'
keychain: 'temp'
- task: InstallAppleProvisioningProfile@1
displayName: 'Install MainTarget provisioning profile'
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: 'MainTarget.mobileprovision'
- task: InstallAppleProvisioningProfile@1
displayName: 'Install OneSignal provisioning profile'
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: 'OneSignal.mobileprovision'
- task: CmdLine@2
displayName: 'CocoaPods install'
inputs:
script: |
cd $(Build.SourcesDirectory)
echo "Pod installation"
pod install
- task: Xcode@5
displayName: 'Xcode Build'
inputs:
actions: 'build'
xcWorkspacePath: 'CICD.xcworkspace'
scheme: 'CICD'
xcodeVersion: 'specifyPath'
xcodeDeveloperDir: '/Applications/Xcode_11.2.1.app'
packageApp: true
exportOptions: 'plist'
exportOptionsPlist: 'CICD/Info.plist'
signingOption: 'manual'
signingIdentity: '$(MY_CERTIFICATE_SIGN_IDENTITY)'
provisioningProfileUuid: '$(MainTarget_ProfileUUID)'
provisioningProfileName: '$(MainTarget_ProfileName)'
Сообщите мне, если я что-то упустил.
3 ответа
Мне удалось заставить его работать простым способом.
- скомпилируйте свой проект с помощью XCode
- заархивируйте его и экспортируйте для своих целей (для меня это была загрузка Testflight)
- в папке, которую вы экспортируете .ipa, вы найдете "export-options.plist"
- в конвейере Azure, Задача сборки XCode укажите этот файл в: «список параметров экспорта»
(вам нужно будет добавить файл в свое репо и зафиксировать / нажать)
и тада! источник, который привел меня туда: https://blog.bitrise.io/new-export-options-plist-in-xcode-9
К сожалению, для приложения iOS с расширением App в Azure нет прямого пути.
- Чтобы он заработал, вам нужно внести в проект несколько изменений, рекомендованных по этой ссылке .
- После этого вы сможете создать и заархивировать приложение, используя
xcodebuild
Документы. потому что у вас будет переменная, указывающая на каждый профиль подготовки. - На вашем MAC попробуйте команду xocdebuild в терминале и запишите полные команды для получения определенного файла.
- Использовать
CmdLine@2
задача в конвейере с этими командами для создания, архивирования и экспорта вашего IPA.
Примечание. Я опубликовал Gist, посвященный конвейеру для такого приложения iOS.
- task: InstallAppleCertificate@2
displayName: 'Install Certificates'
inputs:
certSecureFile: '3Certificates.p12'
certPwd: '$(P12Password)'
keychain: 'temp'
- task: InstallAppleProvisioningProfile@1
displayName: 'Install MainTarget provisioning profile'
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: 'MainTarget.mobileprovision'
- task: InstallAppleProvisioningProfile@1
displayName: 'Install OneSignal provisioning profile'
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: 'OneSignal.mobileprovision'
- task: CmdLine@2
displayName: 'CocoaPods install'
inputs:
script: |
cd $(Build.SourcesDirectory)
echo "Pod installation"
pod install
- task: CmdLine@2
inputs:
script: |
echo "Build iOS app"
cd $(Build.SourcesDirectory)
/usr/bin/xcodebuild -sdk $(sdkOption) -configuration $(configurationOption) -workspace $(workspaceName) -scheme "$(schemeName)" build -allowProvisioningUpdates CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY="$(signingIdentity)" APP_PROFILE="$(APP_PROFILE_ID)" EXTENSION_PROFILE="$(APP_EXT_PROFILE_ID)"
displayName: 'Xcode Buid'
- task: CmdLine@2
inputs:
script: |
echo "Archive the iOS app"
cd $(Build.SourcesDirectory)
/usr/bin/xcodebuild -sdk $(sdkOption) -configuration $(configurationOption) -workspace $(workspaceName) -scheme "$(schemeName)" archive -allowProvisioningUpdates CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY="$(signingIdentity)" APP_PROFILE="$(APP_PROFILE_ID)" EXTENSION_PROFILE="$(APP_EXT_PROFILE_ID)" -archivePath $(ArchivePath)
displayName: 'Xcode Archive'
- task: CmdLine@2
inputs:
script: |
/usr/bin/xcodebuild -exportArchive -archivePath $(ArchivePath) -exportOptionsPlist $(Build.SourcesDirectory)/MyApplication-Info.plist -exportPath $(ExportIpaPath)
displayName: 'Xcode Export'
Пожалуйста, проверьте эту проблему, вы можете попробовать создать приложение ios в командной строке и передать имя приложения расширения в качестве параметра.
Что-то типа: xcodebuild ... -scheme "YourExtension" -CODE_SIGN_IDENTITY=xxx PROVISIONING_PROFILE=xxx CONFIGURATION_BUILD_DIR=xxx
Дополнительные сведения о том, как создавать проекты из командной строки, см. Здесь.