在TeamCity构建(Xamarin.iOS Ad-Hoc)之后使用FAX脚本找到.ipa



我正在尝试使用TeamCity和FAKE为我的Xamarin.iOS应用程序设置CI构建,并将结果(.ipa文件)上传到HockeyApp。我遇到了一个小问题。

我设法从TeamCity触发了FAKE构建脚本,并成功构建了我的应用程序。下一步是从FakeLib的"HockeyAppHelper"模块调用"HockeyApp"方法,但要做到这一点,我需要.ipa文件的路径。我找到的所有示例都只是对路径进行硬编码(类似于bin/iPhone/Release/*.ipa),但是在我的情况下,.ipa 将放在包含时间戳的文件夹中(如bin/iPhone/Release/MyApp 2017-01-24 17-16-56/MyApp.ipa)。

问题是如何在构建脚本中获取 .ipa 文件(因为时间戳我无法对路径进行硬编码)?

以下是负责构建和上传 .ipa 的 FAKE 脚本部分:

Target "ios-adhoc" (fun () ->
RestorePackages "RidderCRM.iOS.sln"
UpdatePlist version versionNumber "RidderCRM.iOS"
iOSBuild (fun defaults ->
{defaults with
ProjectPath = "RidderCRM.iOS.sln"
Configuration = "Release"
Platform = "iPhone"
Target = "Build"
BuildIpa = true
Properties = [ "CodesignKey", "iPhone Distribution"; "CodesignProvision", "Automatic:AdHoc" ]          
})
let appPath = Directory.EnumerateFiles(Path.Combine("RidderCRM.iOS", "bin", "iPhone", "Release"), "*.ipa").First()
TeamCityHelper.PublishArtifact appPath
HockeyApp (fun p ->  
{p with 
ApiToken = Environment.GetEnvironmentVariable("HockeyAppApiToken")
File = appPath
}) |> ignore
)

看到这更像是实际的 MSBuild 任务在Xamarin.iOS.Common.targets中执行的操作的问题,您可以做很多事情。

  1. 您可以编辑Xamarin.iOS.Common.targets文件以删除日期时间戳。(不是很好)
  2. 您可以使用调用<Copy>任务的自定义Target(更好)
  3. 您可以自定义IpaPackageDir属性以指定目录应是什么。(最佳)

简而言之,TimeStamp的问题直接来自这个元素:

<IpaPackageDir Condition="'$(IpaPackageDir)' == ''">$(DeviceSpecificOutputPath)$(_AppBundleName) $([System.DateTime]::Now.ToString('yyyy-MM-dd HH-mm-ss'))</IpaPackageDir>

我们将如何做到这些

  1. 您可以在Xamarin.iOS.Common.targets文件中编辑上面的代码片段并删除时间戳。如果您不熟悉编辑.targets,通常最好注意它们。此外,更新 Xamarin 可以覆盖这些内容。
  2. 您可以在其中添加包含简单复制任务的<Target Name="AfterBuild">定义:<Copy SourceFiles="$(IpaPackagePath)" DestinationFolder="$(OutputPath)" />
  3. 您可以通过以下方式直接编辑<IpaPackageDir>的属性: <PropertyGroup> <IpaPackageDir>$(OutputPath)</IpaPackageDir> </PropertyGroup>

关于#3的说明:

添加了新的 MSBuild 属性 IpaPackageDir,以便轻松自定义 .ipa 文件输出位置。如果将 IpaPackageDir 设置为自定义位置,则 .ipa 文件将放置在该位置,而不是默认的带时间戳的子目录。

https://developer.xamarin.com/releases/ios/xamarin.ios_9/xamarin.ios_9.8/#New_MSBuild_property_IpaPackageDir_to_customize_.ipa_output_location

最新更新