iOS PhoneGap构建失败

6

我是一个新手,尝试在iOS和Xcode中使用PhoneGap。 我遇到了一个问题,我的应用程序在Android手机上运行良好,但在iOS模拟器上可以构建和运行应用程序,但在归档后测试设备时出现以下错误。 我已经搜寻了很多资料,但找不到有效的解决方案。

错误:

ld: warning: ignoring file /Users/danlehman/Library/Developer/Xcode/DerivedData/HelloWorld-ebkivbdaivqchkgycifnnpgixspn/Build/Intermediates/ArchiveIntermediates/HelloWorld/BuildProductsPath/Release-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/danlehman/Library/Developer/Xcode/DerivedData/HelloWorld-ebkivbdaivqchkgycifnnpgixspn/Build/Intermediates/ArchiveIntermediates/HelloWorld/BuildProductsPath/Release-iphoneos/libCordova.a
Undefined symbols for architecture armv7s:
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController in MainViewController.o
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
  "_OBJC_CLASS_$_CDVURLProtocol", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

不幸的是,PhoneGap的开发者们正在努力推出v.3版本,以便在2013年7月中旬的一次会议上首次亮相。他们似乎处于相当快速的发布计划中,这有点令人沮丧,因为我发现了一些错误,例如启动画面无法工作等。哦,好吧。下面的建议(关于检查最新的2.9.x分支)对我很有帮助。 - Ryan Wheale
3个回答

12

我在使用Cordova 2.7,Xcode 5和iOS7在iPhone 4S上构建时遇到了类似的错误。我更改了一个设置后,它就成功构建了。

选择您的应用程序。 进入构建设置(Build Settings)然后进入有效架构(Valid Architectures)。 更改为:

armv7

我的先前设置是:

arm64 armv7 armv7s

清理并构建。它似乎与armv7s有关。让它运行的一个副作用是状态栏透明且浮在应用程序顶部。不过这是另一个话题,与iOS7有关。


1
这是一个Phonegap错误。您需要在项目中转到构建设置,搜索“其他链接器标志”,然后更改:
将“$(TARGET_BUILD_DIR)/libCordova.a”更改为

"$(BUILT_PRODUCTS_DIR)/libCordova.a"


1

我曾为此苦苦挣扎,阅读了无数看似对他人有效的“解决方案”,但并不适用于我。因此,请注意:这可能对你无效。 :)

1)克隆cordova-ios存储库

git clone git@github.com:apache/cordova-ios.git

2)查看可用分支

git branch -a

您可能会看到类似以下内容:

  • 主分支 远程/起源/0.9.5.1 远程/起源/0.9.6.x 远程/起源/1.6.1 远程/起源/1091 远程/起源/2.6.x 远程/起源/2.7.x 远程/起源/2.8.x 远程/起源/2.9.x 远程/起源/3.0.0 远程/起源/464 远程/起源/CB-3530 远程/起源/HEAD -> origin/master 远程/起源/better_resource_copy_step 远程/起源/custom_schemes 远程/起源/device 远程/起源/master 远程/起源/multipart_plugin_result 远程/起源/next 远程/起源/phonegap-js

3)我是用Cordova 2.9构建我的应用程序,所以请检出2.9.x分支 -- 根据您的项目进行调整

git checkout -b 2.9.x origin/2.9.x

4)确认您处于所需的分支上

git branch

您应该看到类似以下内容:

  • 2.9.x master

5) 进入 bin/ 目录

cd bin/

6) 现在重新创建 cordova 应用:

./create ~/some/project/dir/project com.project project

7) 将失败构建的 www 文件夹复制到新项目中。

8) 从 Xcode 获取成功构建消息。

9) 给 Xcode 翻个白眼。

希望这可以帮到你!


+1 - 你真是个圣人,先生。感谢您为不太有经验的用户提供了所有命令的布局。虽然上述指令看起来有些吓人,但我只用了不到5分钟——克隆存储库,检出分支,创建新项目,复制www文件夹。 - Ryan Wheale
1
很高兴它对你有用!希望你按照第9步进行,因为那是最重要的。 :) - Clark Burns
是的,XCode和iAmSoCool设备开发有它自己的一套问题 - 我不会在这里详细讨论。不幸的是,这个问题出现在PhoneGap的开发者身上。 - Ryan Wheale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接