为啥我需要在使用健身房构建项目时添加 use_legacy_build_api: true ?

Posted

技术标签:

【中文标题】为啥我需要在使用健身房构建项目时添加 use_legacy_build_api: true ?【英文标题】:Why I need add use_legacy_build_api: true when use gym build project?为什么我需要在使用健身房构建项目时添加 use_legacy_build_api: true ? 【发布时间】:2016-04-22 10:47:52 【问题描述】:

为什么在使用gym构建项目时需要添加use_legacy_build_api: true?

我使用 Xcode 7.3 和 gym 1.6.2,

我建立了一个新项目(OC 或 swift 相同),

以下是错误输出:

2016-04-22 18:45:46.071 xcodebuild[135:10371572] [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/BBUFullIssueNavigator.xcplugin' not present in DVTPlugInCompatibilityUUIDs
2016-04-22 18:45:46.246 xcodebuild[135:10371572] ### Failed to load Addressbook class CNContactNameFormatter
2016-04-22 18:45:46.300 xcodebuild[135:10371572] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/4w/fpkx9n7s3gnbcxfym8mqr18m0000gn/T/GymDemo_2016-04-22_18-45-46.299.xcdistributionlogs'.
2016-04-22 18:45:46.585 xcodebuild[135:10371572] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff847a3e450>: Error Domain=IDEDistributionErrorDomain Code=1 "(null)"
error: exportArchive: The operation couldn’t be completed. (IDEDistributionErrorDomain error 1.)

Error Domain=IDEDistributionErrorDomain Code=1 "(null)"

** EXPORT FAILED **
[18:45:46]: Exit status: 70

[!] Error packaging up the application

【问题讨论】:

【参考方案1】:

我不知道为什么会报错,但是我只是使用fastlane init 并更改了fastlane,一切正常。这是我的快速文件:

desc "Deploy a new version to the App Store"
  lane :appstore do
    # match(type: "appstore")
    # snapshot
    #sigh
    gym(
      scheme: "myscheme_ios",
      export_method:"app-store",
      output_directory:"./fastlane",
      output_name:"myipa_20160607030055",
      codesigning_identity:"iPhone Distribution: Jack Zhou (9R46C82WH7)"
    ) # Build your app - more options available
    #deliver(force: true)
    # frameit
  end

【讨论】:

【参考方案2】:

标志 use_legacy_build_api 应该仅在您使用 Xcode 6 或更早版本运行时使用。

正如Felix Krause 本身在Github 上所解释的那样:

什么是 use_legacy_build_api? 它使用的是 Xcode 6 构建 API,官方不再支持该 API。

发生的事情是在 Xcode 6 和 7 之间对构建/打包过程进行了一些更改,因此为了适应新的过程并且仍然能够与旧的一起工作,fastlane 引入了这个新标志,基本上通知使用哪个命令。

Xcode 7

由于您使用的是 Xcode 7,因此您需要指定导出应用程序的方式,这与您在使用 Xcode 本身时需要做出的选择相同:

您还可以在 Apple 文档 Exporting Your App 上阅读有关导出方法的更多信息

健身房

因此,正如上面使用 Fastlane 所解释的,您应该相应地指定 export_method 字段:

gym(export_method:"app-store|ad-hoc|package|enterprise|development|developer-id")

您可以在fastlane actions documentation 上阅读有关 Gym 及其参数的更多信息

use_legacy_build_api:[已弃用!] 不要再使用此选项,因为它已被 Apple 弃用 - 不要再使用此选项,因为它已被 Apple 弃用 export_method:用于导出存档的方法。有效值为:app-store、ad-hoc、package、enterprise、development、developer-id

【讨论】:

以上是关于为啥我需要在使用健身房构建项目时添加 use_legacy_build_api: true ?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们需要整合不同版本的包?

为啥 Visual Studio 认为我需要构建项目?

为啥每当我尝试将图像添加到我的 django 项目时都会出错?

为啥我在构建项目时无法访问我的 IntelliJ 包?

在构建时添加框架 - XCode

为啥heroku无法在项目上编译构建?