2017-01-24 31 views
1

我想爲使用TeamCity和FAKE的Xamarin.iOS應用程序設置CI構建,並將結果(.ipa文件)上傳到HockeyApp。我遇到了一個小問題。在TeamCity構建之後找到帶有FAKE腳本的.ipa(Xamarin.iOS Ad-Hoc)

我設法從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部分:

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 
) 

回答

4

看到,這更多的是什麼樣的實際MSBuild任務在Xamarin.iOS.Common.targets做的問題,也有很多你可以做的事情。

  1. 您可以編輯Xamarin.iOS.Common.targets文件以刪除日期時間戳。 (不太好)
  2. 您可以使用調用<Copy>任務的自定義Target(更好)
  3. 您可以自定義IpaPackageDir屬性來指定目錄應該是什麼。 (最佳)

總之時間戳的問題直接來源於此元素:

<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 <PropertyGroup> <IpaPackageDir>$(OutputPath)</IpaPackageDir> </PropertyGroup>

注:

<Copy SourceFiles="$(IpaPackagePath)" DestinationFolder="$(OutputPath)" />
  • 您可以直接通過編輯<IpaPackageDir>財產

    添加了新的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

    +0

    謝謝喬恩,這是我所缺乏的知識。大的幫助。 –

    相關問題