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

时间:2017-01-24 21:30:11

标签: xamarin.ios teamcity hockeyapp f#-fake

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

我设法从TeamCity触发了FAKE构建脚本,并成功构建了我的应用程序。下一步是打电话给" HockeyApp"来自" HockeyAppHelper"的方法来自FakeLib的模块,但是为此我需要.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
)

1 个答案:

答案 0 :(得分:4)

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

  1. 您可以编辑Xamarin.iOS.Common.targets文件以删除日期时间戳。 (不太好)
  2. 您可以使用调用Target任务的自定义<Copy>。的(优于)
  3. 您可以自定义IpaPackageDir属性以指定目录应该是什么。的(最佳)
  4. 简而言之,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">
    3. 中添加一个带有简单复制任务的<Copy SourceFiles="$(IpaPackagePath)" DestinationFolder="$(OutputPath)" />定义
    4. 您可以直接通过以下方式修改<IpaPackageDir>的媒体资源: <PropertyGroup> <IpaPackageDir>$(OutputPath)</IpaPackageDir> </PropertyGroup>
    5. 注意#3:

        

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

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