【问题标题】:PhoneGap how to make a release build from the command-linePhoneGap 如何从命令行进行发布构建
【发布时间】:2012-09-30 09:23:12
【问题描述】:

我通过调用:

xcodebuild -project HelloWorld -sdk iphoneos5.1 -configuration Release install

但对于 PhoneGap 应用程序,我收到此错误:

** 构建失败 **

以下构建命令失败: CompileC build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/AppDelegate.o Phonefinch/Classes/AppDelegate.m normal armv6 Objective-c com.apple.compilers.llvm.clang.1_0.compiler (1 次失败)

当我尝试时:

xcodebuild -project HelloWorld -sdk iphoneos5.1 -configuration Release clean build

我明白了:

2012-10-04 22:51:52.776 xcodebuild[20016:4107] DVTAssertions:/SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-1559/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/SpecificationTypes/XCGccMakefileDependencies.m:87 中的警告 详细信息:无法从“/Users/camobap-mac/Projects/Phonefinch/build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/AppDelegate.d”加载依赖项输出内容。错误:错误域=NSCocoaErrorDomain 代码=260“无法打开文件“AppDelegate.d”,因为没有这样的文件。” UserInfo=0x400eabf40 {NSFilePath=/Users/camobap-mac/Projects/Phonefinch/build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/AppDelegate.d, NSUnderlyingError=0x40079c140 "操作无法完成。没有这样的文件或目录"}。用户信息: { NSFilePath = "/Users/camobap-mac/Projects/Phonefinch/build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/AppDelegate.d"; NSUnderlyingError = "错误域=NSPOSIXErrorDomain Code=2 \"操作无法\U2019t 完成。没有相应的文件和目录\””; }。 函数: void XCGccMakefileDependenciesParsePathsFromRuleFile(NSString *, void (^)(NSString *)) 线程:{name = (null), num = 7} 请在http://bugreport.apple.com 提交错误,并附上此警告消息以及您可以提供的任何有用信息。 ** 构建失败 **

以下构建命令失败: CompileC build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv7/AppDelegate.o Phonefinch/Classes/AppDelegate.m normal armv7 Objective-c com.apple.compilers.llvm.clang.1_0.compiler CompileC build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/AppDelegate.o Phonefinch/Classes/AppDelegate.m normal armv6 Objective-c com.apple.compilers.llvm.clang.1_0.compiler (2 次失败) 2012-10-04 22:52:04.887 xcodebuild[20016:4f0f] DVTAssertions:/SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-1559/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/SpecificationTypes/XCGccMakefileDependencies.m:87 中的警告 详细信息:无法从“/Users/camobap-mac/Projects/Phonefinch/build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/MainViewController.d”加载依赖项输出内容。错误:错误域=NSCocoaErrorDomain 代码=260“无法打开文件“MainViewController.d”,因为没有这样的文件。” UserInfo=0x400ef6e40 {NSFilePath=/Users/camobap-mac/Projects/Phonefinch/build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/MainViewController.d, NSUnderlyingError=0x400ef24a0 "操作失败完成。没有这样的文件或目录"}。用户信息: { NSFilePath = "/Users/camobap-mac/Projects/Phonefinch/build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/MainViewController.d"; NSUnderlyingError = "错误域=NSPOSIXErrorDomain Code=2 \"操作无法\U2019t 完成。没有相应的文件和目录\””; }。 函数: void XCGccMakefileDependenciesParsePathsFromRuleFile(NSString *, void (^)(NSString *)) 线程:{name = (null), num = 10} 请在http://bugreport.apple.com 提交错误,并附上此警告消息以及您可以提供的任何有用信息。 ** 构建失败 **

以下构建命令失败: CompileC build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/AppDelegate.o Phonefinch/Classes/AppDelegate.m normal armv6 Objective-c com.apple.compilers.llvm.clang.1_0.compiler CompileC build/Phonefinch.build/Release-iphoneos/Phonefinch.build/Objects-normal/armv6/MainViewController.o Phonefinch/Classes/MainViewController.m normal armv6 Objective-c com.apple.compilers.llvm.clang.1_0.compiler (2 次失败)

如果我调用cordova/debug -> ** BUILD SUCCESS **,但我的.app 是在调试模式下编译的。如何在命令行上进行发布构建?

【问题讨论】:

  • 你能详细说明你的问题吗?您是在谈论生成 iPA 吗?
  • 不,只是.app。但我可以用它生成.ipa 我也会感兴趣。
  • 好的。如果您的应用程序设置为使用cordova,那么上述命令应该可以工作。您面临的实际问题是什么?
  • 当我调用cordova/debug 时,我得到了在Debug 模式下构建的应用程序,但我没有一些cordova/release 工具。实际问题是:我们如何在Release 模式下构建PhoneGap 应用程序,因为xcodebuild -project HelloWorld -sdk iphoneos5.1 -configuration Release install 不起作用
  • 当你说它不起作用时。错误信息是什么?

标签: objective-c xcode cordova xcodebuild


【解决方案1】:

我遇到了完全相同的问题。我不知道我的解决方案是否适用于您的问题。但是,这是我解决它的方法:我想您正在使用 Xcode 项目中的 cordova 子项目。检查您是否有与 cordova 项目相同的配置名称。

例如:当您的主项目的发布配置称为“ReleaseAdHoc”时,请确保您的 cordova 子项目也有一个使用此名称的配置。此外,请确保为主项目和子项目的“存档”过程选择这些配置。

希望这会有所帮助。

【讨论】:

  • 谢谢!我在我的主项目中添加了“Adhoc”配置,想知道为什么它抱怨缺少AppDelegate.d 文件。
  • 我没有指定配置集,并且仍然出现完全相同的错误。有什么想法吗?
【解决方案2】:

我找到了解决方案 - cordova 实用程序是关键。但是我们需要做一些准备工作:

  1. 将脚本添加到hooks/after_build/010_sign_ios.js

    #!/usr/bin/env node
    
    var app_name = "HelloWorld";
    var sign_crt_name = "iPhone Distribution: My company Group BV";
    var provision_path = "$PWD/Ad_Hock_Distribution_Helloworld.mobileprovision";
    
    var output_ipa_path = "$PWD/platforms/ios/build/device/" + app_name + ".ipa";
    var sys = require('sys');
    var exec = require('child_process').exec;
    
    var cliCommand = process.env.CORDOVA_CMDLINE;
    var isRelease = (cliCommand.indexOf('--release') > -1);
    var isDevice = (cliCommand.indexOf('--device') > -1);
    var platform = process.env.CORDOVA_PLATFORMS;
    
    if (platform === 'ios' && isDevice && isRelease) {
        function puts(error, stdout, stderr) {
            sys.puts(stdout)
        }
    
        exec("xcrun -sdk iphoneos PackageApplication " + 
             "-v \"$PWD/platforms/ios/build/device/" + app_name + ".app\" " +
             "-o \"" + output_ipa_path + "\" " + 
             "--sign \"" + sign_crt_name + "\" " + 
             "--embed \"" + provision_path + "\"", puts);
    }
    

    但请根据需要修复 app_namesign_crt_nameprovision_path 变量

  2. 运行cordova build ios --release --device

  3. 使用$PWD/platforms/ios/build/device/HelloWorld.ipa 通过强大的ideviceinstaller 工具通过cmd 交付或安装

【讨论】:

    【解决方案3】:

    似乎指导如何为 ios 自动化 phonegap 构建过程的资源非常少。在尝试了很多试验和错误和研究之后,我决定采用这种方法。首先在cordova docs中提到的根文件夹中创建一个文件json文件。文件名可以是任何东西。如果文件名为 build.json,则在构建应用程序时无需传递任何参数。为方便起见,推荐的用于自动签名的 build.json 如下所示:

    {
        "ios": {
            "debug": {
                "codeSignIdentity": "iPhone Developer",
                "developmentTeam": "FG35JLLMXX4A",
                "packageType": "development",
                "automaticProvisioning": true,
                "buildFlag": [
                    "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                    "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                    "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
                ]
            },
            "release": {
                "codeSignIdentity": "iPhone Developer",
                "developmentTeam": "FG35JLLMXX4A",
                "packageType": "app-store",
                "automaticProvisioning": true,
                "buildFlag": [
                    "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                    "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                    "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
                ]
            }
        }
    }
    

    您可以在上面提到的链接中阅读更多内容。

    您现在可以使用以下方式构建您的应用:

    phonegap build ios (if filename is build.json)
    phonegap build ios --buildConfig path/xyz.json (if filename is other than build.json)
    
    cd platforms/ios
    xcodebuild archive -workspace app.xcworkspace -scheme scheme-name -configuration Release -archivePath IPA-name.xcarchive
    xcodebuild -exportArchive -archivePath IPA-name.xcarchive -exportPath IPA-name.ipa -exportOptionsPlist exportOptions.plist
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多