gpt4 book ai didi

ios - 如何配置 Azure Pipelines 以构建使用 OneSignal 的 iOS 项目?

转载 作者:行者123 更新时间:2023-12-01 19:32:33 31 4
gpt4 key购买 nike

我正在尝试让 Azure Pipelines 与我们的 iOS 项目一起工作。我已经建立了一个更简单的项目,并且在更简单的项目上一切正常,但是我们的主应用程序使用 OneSignal 进行通知。这意味着有一个额外的目标和不同的配置文件。在阅读了我能找到的与配置文件以及如何配置 yaml 文件有关的所有内容后,我不知所措。

我能找到的最好的信息是here

我的 YAML 文件目前如下所示:

pool:
vmImage: 'macOS-10.14'

variables:
- group: ios-pipeline
- name: configuration
value: 'Release'
- name: sdk
value: 'iphoneos'


steps:

- task: InstallAppleCertificate@2
inputs:
certSecureFile: '$(p12FileName)'
certPwd: '$(p12Password)'
keychain: 'temp'
deleteCert: true

- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: '$(oneSignalProvProfile)'

- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: '$(provisioningProfile)'

- task: CocoaPods@0
inputs:
forceRepoUpdate: false

- task: Xcode@5
inputs:
actions: 'build'
xcWorkspacePath: '**/PROJECT_NAME.xcworkspace'
scheme: 'SCHEME_NAME'
packageApp: true
exportOptions: 'plist'
exportOptionsPlist: '**/DevOpsOptions.plist'
signingOption: 'auto'
teamId: 'OUR_TEAM_ID'

构建任务中的 plist 文件引用包含以下内容:
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>provisioningProfiles</key>
<dict>
<key>APP_BUNDLE_ID.OneSignalNotificationServiceExtension</key>
<string>THE UUID FOR THIS PROFILE</string>
<key>APP_BUNDLE_ID</key>
<string>THE UUID FOR THIS PROFILE</string>
</dict>
<key>signingCertificate</key>
<string>iOS Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>OUR_TEAM_ID</string>
</dict>
</plist>

尝试运行此配置时出现以下错误:
❌  error: No profiles for 'MAIN_APP_BUNDLE_ID' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'MAIN_APP_BUNDLE_ID'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild. (in target 'MAIN_APP_BUNDLE_ID' from project 'PROJECT_NAME')



❌ error: No profiles for 'OneSignalNotificationServiceExtension_BUNDLE_ID' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'OneSignalNotificationServiceExtension_BUNDLE_ID'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild. (in target 'OneSignalNotificationServiceExtension_BUNDLE_ID' from project 'PROJECT_NAME')

我还尝试使用手动签名选项:
- task: Xcode@5
inputs:
actions: 'build'
xcWorkspacePath: '**/WORKSPACE_NAME.xcworkspace'
scheme: 'SCHEME_NAME'
packageApp: true
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

当我使用此构建任务时,我收到一条错误消息,指出没有为 OneSignalExtension 安装配置文件。我是在这里鞭打一匹死马还是有人设法让这个(或类似的东西)工作?感谢任何人都可以给我的任何帮助!

最佳答案

我想我最好将我的解决方案发布到我的问题上,因为这是一段相当长的旅程!我尝试了很多不同的配置,但最后这是我学到的:

  • 当完成构建/签名过程需要不同的配置文件时,我无法让 Xcode 托管配置文件工作。
  • 我从我们的 Apple Dev 帐户中清除了所有过期的配置文件/证书,并确保只有一个 Apple Developer 证书和一个 Apple Distribution 证书。我这样做是为了确保只有一种可能的方式来签署我们的应用程序,虽然不是绝对必要的,但它允许我消除证书作为问题的一部分。
  • 我导出了两个证书并给了他们一个密码,稍后将添加到 Azure 上的库中。
  • 我为包含 Apple 分发证书的主应用程序创建了一个手动配置文件。我为 OneSignal 应用 ID 创建了另一个配置文件,同样包括分发证书。
  • 我获得了每个配置文件的 UUID,并将每个文件名更改为 UUID.mobileprovision。
  • 听从建议here ,我创建了一个 provs.plist 文件,其中包含以下内容:
     <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>provisioningProfiles</key>
    <dict>
    <key>YOUR_APP_ID.OneSignalNotificationServiceExtension</key>
    <string>UUID_FOR_ONE_SIGNAL_PROV_PROFILE</string>
    <key>YOUR_APP_ID</key>
    <string>UUID_FOR_APP_PROV_PROFILE</string>
    </dict>
    <key>signingCertificate</key>
    <string>iOS Distribution</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>method</key>
    <string>app-store</string>
    <key>teamID</key>
    <string>YOUR_TEAM_ID</string>
    </dict>
    </plist>
  • 在 Azure Pipelines 上,我将两个证书和两个配置文件都上传到了库的安全文件部分。我还上传了 provs.plist 文件。
  • 我在名为 ios-pipeline 的库中创建了一个变量组,其中包含配置文件和证书的变量名称,以及证书的密码。

    Screenshot of Library variables group
  • 回到 XCode,在主项目检查器中,我将主目标和 OneSignal 目标的签名更改为手动。我必须导入我之前创建的配置文件才能做到这一点。
  • 然后我将管道 YAML 文件编辑为如下所示:
    pool:
    vmImage: 'macOS-10.14'

    variables:
    - group: ios-pipeline
    - name: configuration
    value: 'Release'
    - name: sdk
    value: 'iphoneos'


    steps:

    - task: InstallAppleCertificate@2
    inputs:
    certSecureFile: '$(p12FileName)'
    certPwd: '$(p12Password)'
    keychain: 'temp'
    deleteCert: true


    - task: InstallAppleCertificate@2
    inputs:
    certSecureFile: '$(p12DevFileName)'
    certPwd: '$(p12Password)'
    keychain: 'temp'
    deleteCert: true


    - task: InstallAppleProvisioningProfile@1
    inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: '$(oneSignalProvProfile)'
    removeProfile: true


    - task: InstallAppleProvisioningProfile@1
    inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: '$(appProvProfile)'
    removeProfile: true


    - task: CocoaPods@0
    inputs:
    forceRepoUpdate: false


    - task: DownloadSecureFile@1
    inputs:
    secureFile: $(provsPlist)


    - task: Xcode@5
    inputs:
    actions: 'build'
    xcWorkspacePath: '**/YOUR_WORKSPACE_NAME.xcworkspace'
    scheme: 'YOUR_SCHEME_NAME'
    packageApp: true
    exportOptions: 'plist'
    exportOptionsPlist: $(provsPlist)
    signingOption: 'default'


    - task: AppStoreRelease@1
    inputs:
    authType: 'UserAndPass'
    username: 'YOUR_APPLE_ID_USERNAME'
    password: 'YOUR_APPLE_ID_PASSWORD'
    appIdentifier: 'YOUR_APP_IDENTIFIER'
    appType: 'iOS'
    ipaPath: '**/*.ipa'
    releaseTrack: 'TestFlight'
    shouldSkipSubmission: true

  • 我保存了 YAML 文件并成功运行了管道。顺便说一句,最后一个构建任务将构建提交给 TestFlight。我听从了建议 here创建具有开发人员权限的单独 Apple ID 和带有两步验证建议的复杂密码,以避免 token 问题。

    希望这将至少对一个人有所帮助 - 或者如果我将来遇到同样的问题,也许只是我!

    关于ios - 如何配置 Azure Pipelines 以构建使用 OneSignal 的 iOS 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638275/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com