我通过调用:
来发布版本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”加载依赖项输出内容。错误:错误Domain = NSCocoaErrorDomain Code = 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代码= 2 \”操作无法完成。没有相应的文件和目录\””; }。 功能: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”加载依赖项输出内容。错误:错误Domain = NSCocoaErrorDomain Code = 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代码= 2 \”操作无法完成。没有相应的文件和目录\””; }。 功能: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
是在调试模式下编译的。如何在命令行上构建发布版本?
答案 0 :(得分:3)
我有完全相同的问题。我不知道我的解决方案是否适用于您的问题。但是,这是我如何解决它:我想你正在使用Xcode项目中的cordova子项目。检查cordova项目的配置名称是否相同。
例如:当您的主项目的发布配置名为“ReleaseAdHoc”时,请确保您的cordova子项目也具有此名称的配置。此外,请确保为主项目和子项目的“归档”过程选择这些配置。
希望这有帮助。
答案 1 :(得分:1)
我找到了解决方案 - cordova
实用程序是关键。但我们需要采取一些措施来准备它:
将脚本添加到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_name
和provision_path
个变量
运行cordova build ios --release --device
使用$PWD/platforms/ios/build/device/HelloWorld.ipa
通过优秀ideviceinstaller
工具
答案 2 :(得分:1)
似乎很少有资源可以指导如何自动为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
答案 3 :(得分:-1)
我能够通过在xcodebuild命令中使用CONFIGURATION_BUILD_DIR参数并指定空的构建目录来从命令行构建。似乎由XCode构建的文件与xcodebuild命令冲突