Как мы можем настроить 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 нет прямого пути.

  1. Чтобы он заработал, вам нужно внести в проект несколько изменений, рекомендованных по этой ссылке .
  2. После этого вы сможете создать и заархивировать приложение, используя xcodebuild Документы. потому что у вас будет переменная, указывающая на каждый профиль подготовки.
  3. На вашем MAC попробуйте команду xocdebuild в терминале и запишите полные команды для получения определенного файла.
  4. Использовать 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

Дополнительные сведения о том, как создавать проекты из командной строки, см. Здесь.

Другие вопросы по тегам