Azure DevOps构建 Xamarin.IOS,以 IOS 12 为目标

8
我有一个使用Xamarin编写的应用程序,在Azure Devops上有一个构建管道。当我针对IOS 11.x进行目标构建时,它可以成功构建。但是,自从2019年3月起苹果开始强制要求使用SDK 12或更高版本来构建应用程序:

SDK版本问题 - 此应用程序是使用iOS 11.4 SDK构建的。从2019年3月开始,提交到App Store的所有iOS应用都必须使用iOS 12.1 SDK或更高版本进行构建,其中包括Xcode 10.1或更高版本。

但是,当我在Azure Devops管道中构建时,总是会出现以下错误:

MTOUCH : error MT0074: Xamarin.iOS 11.14.0 does not support a deployment target of 12.0 for iOS (the maximum is 11.4). Please select an older deployment target in your project's Info.plist or upgrade to a newer version of Xamarin.iOS.

根据这篇文章,我尝试使用以下脚本设置SDK版本:
 /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_12_0"

很遗憾,它仍然使用的是11 SDK而不是12 SDK。 我选择了错误的Mono版本还是选择了错误的方法来选择Xamarin.IOS SDK?

我的IOS Job完整的构建YAML:

queue:
  name: Hosted macOS
  demands: 
  - xcode
  - Xamarin.iOS

steps:
- bash: |
   echo "Select Xamarin Version"
    /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_12_0"
  displayName: 'Select Xamarin Version'

- task: InstallAppleCertificate@2
  displayName: 'Install an Apple certificate'
  inputs:
    certSecureFile: '6f1c094d-c147-41e0-9bc6-c9fe9a40b2e6'

    certPwd: '$(P12password)'


- task: InstallAppleProvisioningProfile@1
  displayName: 'Install an Apple provisioning profile'
  inputs:
    provProfileSecureFile: 'a883a983-6027-4382-afd4-94b52736323c'


- task: NuGetToolInstaller@0
  displayName: 'Use NuGet'
  inputs:
    versionSpec: 4.x


- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(Parameters.solution)'


- task: XamariniOS@2
  displayName: 'Build Xamarin.iOS '
  inputs:
    solutionFile: Src/MoneyFox.Ios/MoneyFox.iOS.csproj

    configuration: '$(BuildConfiguration)'
4个回答

7

现在您应该能够根据此文档选择正确的 Mono 和 Xcode 版本。 在 Azure DevOps 中,无论是在生成管道(Xamarin.iOS build task 之前)还是在发布管道(release task 之前),我都添加了一个命令行任务来执行以下操作:

echo 'Updating fastlane...'
sudo gem install fastlane

echo 'Selecting Mono version...'
/bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_16_0"

echo 'Selecting Xcode version...'
/bin/bash -c "echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'/Applications/Xcode_10.1.app;sudo xcode-select --switch /Applications/Xcode_10.1.app/Contents/Developer"

就我而言,只有这一行代码有用:/bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 6_0_0" - Artemious

1
如果有帮助的话:构建SDK和部署目标是不同的东西。我正在使用12.1 SDK进行构建,但我的部署目标和最低操作系统版本都设置为8.0。

你是如何使用12.1 SDK构建的呢?我在iOS项目属性中没有看到任何选项(SDK版本只是“默认”),Azure DevOps Xamarin.iOS任务中也没有任何选项。info.plist有MinimumOSVersion,但我不想更改它。 - Daniel Miller

0

这似乎是一个可用性问题,即DevOps构建机器上的Xamarin.iOS库的正确版本(12.0或更高版本)。尽管根据我的观察,它已经包含在最近的VS 15.9更新中(适用于Windows),或者可能通过Xamarin扩展工具(仍然不确定如何完全到达本地机器),但Azure DevOps构建机器上的VS为15.8,并带有默认的Xamarin.iOS 11。

因此,这里的选择是使用自己的构建机器或等待15.9及时[希望]到达DevOps机器。


0

检查 info.plist 文件中的 'MinimumOSVersion' 键。 如果不存在,请添加它。

<key>MinimumOSVersion</key>
    <string>11.0</string>

感谢您的回答。据我所知,这个标志只是让我针对IOS SDK 11进行目标设置。我的目标是针对ios SDK 12.1进行目标设置,因为苹果公司将在2019年3月开始强制执行该版本。我更新了我的问题以更好地反映这一点。 - NPadrutt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接