9

我通过调用进行发布构建:

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带有此警告消息以及您可以提供的任何有用信息。** 构建失败 **

构建/发布-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是在调试模式下编译的。如何在命令行上进行发布构建?

4

3 回答 3

3

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

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

希望这可以帮助。

于 2012-11-28T16:47:43.883 回答
1

我找到了解决方案 -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_name和变量sign_crt_nameprovision_path

  2. cordova build ios --release --device

  3. 使用$PWD/platforms/ios/build/device/HelloWorld.ipaideviceinstaller工具通过cmd交付或安装

于 2015-12-02T12:28:52.600 回答
1

似乎很少有资源可以指导如何自动化 ios 的 phonegap 构建过程。在尝试了很多试验和错误和研究之后,我决定采用这种方法。首先在根文件夹中创建一个文件 json 文件,如cordova docs中所述。文件名可以是任何东西。如果文件名为 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
于 2019-03-27T16:56:53.350 回答