Bash 从终端定义xcode phonegap项目中的方案

Bash 从终端定义xcode phonegap项目中的方案,bash,cordova,xcodebuild,Bash,Cordova,Xcodebuild,我正在编写一个脚本来归档phonegap项目的iOS部分。该脚本擦除项目所在的目录,然后使用源代码管理中的最新代码重新填充该目录。然后我运行$phonegap local build ios来构建项目。然而,为了归档该项目,我需要定义其方案。我尝试从命令行生成项目,但收到消息**BUILD FAILED**。到目前为止,我让代码打开xcode项目(这是我找到的唯一定义方案的方法),然后在等待xcode发挥神奇作用的同时休眠30秒。我的问题是如何模拟打开xcode或从命令行定义方案 提前感谢您的帮

我正在编写一个脚本来归档phonegap项目的iOS部分。该脚本擦除项目所在的目录,然后使用源代码管理中的最新代码重新填充该目录。然后我运行
$phonegap local build ios
来构建项目。然而,为了归档该项目,我需要定义其方案。我尝试从命令行生成项目,但收到消息**BUILD FAILED**。到目前为止,我让代码打开xcode项目(这是我找到的唯一定义方案的方法),然后在等待xcode发挥神奇作用的同时休眠30秒。我的问题是如何模拟打开xcode或从命令行定义方案


提前感谢您的帮助。

这是一个完全公平的问题,因为Xcode方案的文档记录不太完整,而且在您看到它们如何作为一个整体连接到构建过程之前,这些方案有一种神奇的感觉

基于您正在寻找的解决方案,听起来似乎您需要将方案升级为“共享”,这样自动化工具(或其他开发人员)就不必首先打开您的项目并等待Xcode自动生成默认方案。这是一个完全正常的“要求”,开发者试图让他们的Xcode项目与持续集成系统或其他命令行工具一起工作,这些工具作用于Xcode 4或Xcode 5项目。好消息是,有一些Xcode原生方法可以配置您的项目,而不必求助于混乱或容易出错的解决方法

TL;灾难恢复版本:

方案的默认Xcode行为是将它们视为特定于开发人员的设置,而不是与其他开发人员或工具共享。我们需要将您的项目方案提升为“共享”,并将这些更改提交到您的版本控制系统:

  • 从项目的干净结帐开始
  • 浏览Xcode的菜单:产品>方案>管理方案…菜单选项
  • 取消选中方案表左上角的“自动创建方案”
  • 选中方案旁边的“共享”复选框,该方案应可供所有开发人员用户和构建系统使用
  • 最后,将所有项目更改提交回版本控制系统
  • 这将使使用此项目的所有开发人员共享一个方案,而不考虑OS X用户名,并使通过
    xcodebuild
    或所选构建工具的无人参与构建具有一个可使用的方案

    …现在,让我们继续为好奇的人提供更长的答案

    在我们深入探讨您的直接问题之前,先了解一下背景:

    目标:应用程序、静态库、捆绑包,或者更一般地说,是从项目中包含的源代码、资产、plist、构建设置和其他文件构建的“产品”。当通过Xcode的“运行”按钮或通过命令行工具调用构建操作时,会生成此“产品”

    生成配置:一组命名的生成设置,可由人类可读的标签标识。默认情况下,所有Xcode项目都从一个“调试”配置开始,该配置生成具有最大透明度的构建目标,帮助开发人员调试其应用程序,并从一个“发布”配置开始,该配置去除生成的构建中的此诊断信息,并优化构建以减小其大小。一些开发人员根据其团队的需要选择创建其他配置:“临时”可能会被创建,以便可以更改签名标识和设置配置文件设置,以便通过临时设置配置文件对应用程序进行代码签名以进行安装。“AppStore”或“Distribution”是在其他项目中可能看到的其他常见自定义生成配置

    行动:支持产品开发、诊断和测试不同阶段的一组相关活动。到撰写本文时为止,共有六个操作:“构建”、“运行”、“测试”、“概要”、“分析”和“归档”。作为开发人员,您最常用的两种方法是“构建”和“运行”

    构建方案:一种Xcode 4发明,用于管理指定构建目标的项目构建目标依赖项、构建并行化选项。每个方案都允许开发人员为项目生命周期的每个操作(“构建”、“运行”等)选择一个构建配置(例如“调试”或“发布”),并定义与该特定操作相关的其他行为或选项。例如,方案中的“Profile”操作允许开发人员在Instruments.app中评测代码时选择默认加载的诊断工具

    记住这些定义,让我们回到您的问题:

    如何模拟打开xcode或从命令行定义方案?

    非常简单:您也不需要这样做,有一个Xcode本机机制可以使方案可用,我们只需要进行一些小的方案重新配置,让您启动并运行,然后将这些更改提交到版本控制(在本答案的其余部分,我将称之为“SCM”)

    当涉及到持久化项目设置时,您面临的行为是Xcode的默认项目行为。默认情况下,许多内容被视为特定于开发人员的设置,并驻留在一组文件中,这些文件映射到打开Xcode项目本身的帐户的特定用户名(稍后将对此进行详细介绍)。管理这些设置的策略可以归结为这样一条规则,即Xcode设置被视为“开发人员私有,直到显式升级为共享”。尽管这在Xco的版本中存在
    #!/usr/bin/env ruby
    # share_schemes.rb
    
    require 'xcodeproj'
    xcproj = Xcodeproj::Project.open("platforms/ios/MyProject.xcodeproj")
    xcproj.recreate_user_schemes
    xcproj.save
    
    <platform name="ios">
        <hook type="after_platform_add" src="scripts/share_schemes.rb" />
    </platform>