xcodebuild 构建失败 Xcode 7.1 和 iOS 9.1 对于 iOS 项目与 Cordova

xcodebuild build failed with Xcode 7.1 and iOS 9.1 for iOS project with Cordova

我正在尝试从命令行构建 iOS 项目作为 CI 系统的一部分。我打算用xcodebuild命令得到一个app文件,然后app文件会提供给xcrun命令得到签名的ipa文件分发。

我的项目使用 Cordova,它位于文件夹 <project-folder>/CordovaLib.

在项目文件夹中,我从 Ant 脚本中执行了以下命令:

xcodebuild -target "<project-name>" -configuration Release clean build

CordovaLib 目标构建成功,生成文件:

<project-folder>/CordovaLib/build/Release-iphoneos/libCordova.a

这可以通过以下日志片段看到:

[exec] CreateUniversalBinary build/Release-iphoneos/libCordova.a normal armv7\ armv7s\ arm64 [exec] cd <project-folder>/CordovaLib [exec] export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/quake/bin:Applications/tools/apache-ant-1.8.4/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin"

[exec]/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static <project-folder>/CordovaLib/build/CordovaLib.build/Release-iphoneos/CordovaLib.build/Objects-normal/armv7/libCordova.a <project-folder>/CordovaLib/build/CordovaLib.build/Release-iphoneos/CordovaLib.build/Objects-normal/armv7s/libCordova.a <project-folder>/CordovaLib/build/CordovaLib.build/Release-iphoneos/CordovaLib.build/Objects-normal/arm64/libCordova.a -o <project-folder>/CordovaLib/build/Release-iphoneos/libCordova.a

在构建目标的过程中<project-name>出现了3次以下错误:

ld: file not found: /build/Release-iphoneos/libCordova.a clang: error: linker command failed with exit code 1 (use -v to see invocation)

最后:

The following build commands failed: Ld build/HelloWorldProjectHelloWorldIpad.build/Release-iphoneos/HelloWorldProjectHelloWorldIpad.build/Objects-normal/armv7/HelloWorld normal armv7 Ld build/HelloWorldProjectHelloWorldIpad.build/Release-iphoneos/HelloWorldProjectHelloWorldIpad.build/Objects-normal/armv7s/HelloWorld normal armv7s Ld build/HelloWorldProjectHelloWorldIpad.build/Release-iphoneos/HelloWorldProjectHelloWorldIpad.build/Objects-normal/arm64/HelloWorld normal arm64 (3 failures)

所以文件libCordova.a在文件夹中生成:

<project-folder>/CordovaLib/build/Release-iphoneos

它被搜索到:

<project-folder>/build/Release-iphoneos

我正在使用 Xcode 版本 7.1 (7B91b) 和 iOS 9.1。

除了我在命令行 xcodebuild 命令中使用的参数之外,我还应该在 Xcode 上设置一些东西吗?

提前致谢,西蒙。

我的项目来自 MEAP IDE。我发现自动生成的项目文件 project.pbxproj 对链接器有这样的设置:

OTHER_LDFLAGS=-force_load "$(BUILT_PRODUCTS_DIR)/libCordova.a" -Obj-C

因此我以这种方式修改了 xcodebuild 命令调用:

xcodebuild -target "<project-name>" -configuration Release clean build 'OTHER_LDFLAGS=-force_load "$SRCROOT/CordovaLib/build/Release-iphoneos/libCordova.a" -Obj-C'

这解决了我的问题。