xcode 5.1:libCordova.a架构问题


81

昨天(14年3月10日),当iOS 7.1发行时,我还升级到了Xcode 5.1,发现我的PhoneGap / Cordova项目不再可以编译到iPhone 5s。我也将Cordova升级到了最新版本:v 3.4.0-0.1.3。

我已经阅读了许多关于SO的不同解决方案,这些解决方案相互关联,因此更改活动架构并仅构建活动架构,它们都不起作用。因此,这就是我尝试过的以及出现的错误。最初我得到了错误:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

因此,我尝试了以下方法。我在我的项目中选择了CordovaLib子项目,在项目和目标中,我都转到架构下的“构建设置”,并确保arm64不包含在任何“调试”或“发布”架构中。此时,Active Active Architecture设置为“是”。这导致以下错误:

file was built for archive which is not the architecture being linked (armv7): 
<long file path omitted> libCordova.a
Undefined symbols for architecture armv7

将 “Build Active Architecture ”设置为“ No”时,错误再次变为:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

我不确定还有什么尝试。该项目的体系结构设置仅包含密钥“ Base SDK”,该密钥已设置为iOS 7.1。项目的目标没有体系结构设置。无论如何,我相当确定问题出在嵌入式CordovaLib子项目上。如何使此东西成功编译到我的设备上?

更新:Apache的Jira上的同一问题:https : //issues.apache.org/jira/browse/CB-6223


2
我有完全一样的问题。iOS 7.1和Xcode 5.1已为开发人员使用了一段时间,因此令人感到失望的是Cordova团队至少没有在发布之前对此发出警告。
2014年

是的 我创建了一个全新的“ Hello World” Cordova项目,该项目安装了最新的Cordova,但编译失败。
inorganik

是否可以掌握并重新安装iOS 7.0 SDK?
2014年

我使用这些设置进行编译,但是当我转到“验证存档”时,出现错误:**此捆绑包无效。包含armv7s架构的应用程序必须包含armv7架构。这是奇怪,因为它看起来像我已经包括两者。
2014年

3
修复Apache Cordova JIRA问题中的步骤:issue.apache.org/jira/browse/CB-6223
莎朗(Shazron)2014年

Answers:


86

@Shazron在Apache JIRA上发布了该修补程序-他指出该修补程序将作为Cordova 3.5的一部分发布:

  1. 选择您的项目图标
  2. 选择构建设置。
  3. 对于“体系结构”,选择$ ARCHS_STANDARD-标准体系结构(armv7,armv7s,arm64)
  4. 对于“有效架构”,添加“ arm64”
  5. 选择您的CordovaLib.xcodeproj图标
  6. 在项目的“构建设置”(不是“目标”)中,删除条件体系结构设置(将鼠标悬停以查看减号)
  7. 对于“体系结构”,选择$ ARCHS_STANDARD-标准体系结构(armv7,armv7s,arm64)
  8. 对于“有效架构”,添加“ arm64”
  9. 转到6,但现在将其用于“目标”

这是Shazron有关此问题的完整文章的链接:http ://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

该版本现已发布,其简短版本为:

Cordova CLI 3.4.1-0.1.0已发布,其中包括Cordova iOS 3.4.1,该版本合并了此博客文章中提到的所有修复程序。更新您的Cordova CLI,如果您已有项目,请执行“ cordova平台更新ios”。


10
优秀。对于步骤6,我是否认为应该删除所有这些内容:SCREENSHOT
2014年

1
乍一看似乎没问题:该应用会存档并验证。但是当导出为临时发行版时,它将无法在iPhone 5S上运行。
2014年

7
是的,此答案可以使应用程序在5S上编译并安装,但是当它开始运行时,它将引发lldb错误并崩溃(如果在运行Xcode的同时将连接到Mac的设备运行,则暂停)。
Jough Dempsey 2014年

5
这是@Shazron帖子的链接。它涵盖了3个问题:shazronatadobe.wordpress.com/2014/03/12/...
stefbach

我确认它对我有用。不要忘记第9点,该点将删除目标“ Cordova Lib”的任何条件架构设置。您应该同时拥有Project'CordovaLib'和目标'CordovaLib'。体系结构设置应如下所示:-调试:标准体系结构(...)-发行:标准体系结构(...)
stefbach 2014年

11

另一种可行的方法:

  1. 单击项目导航器顶部的项目(而不是Cordova.lib子项目)。
  2. 在编辑器窗格中,选择项目(而非目标),选择“构建设置”编辑器选项卡,然后单击“所有”和“级别”按钮。
  3. 如有必要,展开“架构”组,然后在其下找到“架构”行。
  4. “架构”行中的第一列(已解决)和第三列(iOS默认)将显示“标准”;第二(项目)列将为空白。
  5. 单击空白的第二列以弹出一个包含一行“ $(ARCHS_STANDARD)”的框。
  6. 双击该行使其可编辑,然后将其更改为“ $(ARCHS_STANDARD_32_BIT)”。
  7. 在框外单击以确认您的更改。现在,第一盒和第二盒中将只包含一个$。
  8. 现在您应该可以构建了。

10

将Xcode 5.1降级为5.0.2可以为我工作,我迫不及待想要修复该问题的正式Cordova 3.5版本。

您可以在此处获取以前版本的副本:https : //developer.apple.com/downloads/index.action


3
这行得通-唯一的警告是您无法在运行iOS 7.1的iPhone上直接在XCode中进行测试。这是模拟器派上用场的地方。编译后的应用程序可以在iOS 7.1(在iPhone 5和5S上均得到确认)上运行,因此降级直到Cordova 3.5发布似乎是最好的选择。
2014年

这对我现在也最有效。下载了Xcode 5.02并将其复制(首先将其命名为XCode_502)到Applications中,使我能够在Xcode 5.1旁边运行它。
EeKay 2014年

埃德(Ade)我已经降级为5.0.2,并且在iPhone 5和iPad 2和iOS 7.1上测试我的应用程序,都没有问题,我也将应用程序毫无问题地提交到iTunes Connect。
AlexLopezIT 2014年

8

他们刚刚发布了解决此问题的新版本3.4.1

因此,我更新了一个文件以指向TAG 3.4.1:

/usr/local/lib/node_modules/cordova/platforms.js

第24行来自:

version: '3.4.0'

至:

version: '3.4.1'

然后,在项目中删除iOS文件夹并运行:

cordova platform add ios

这将下载基于所有补丁的基于3.4.1的新模板。


@JPRichardson谢谢,我现在要升级:)
dk123

1
npm更新cordova -g,然后cordova平台更新ios
sepulturkey


3

通过首先与XCode分开构建CordovaLib项目,然后再构建项目,我能够使我的应用程序在XCode 5.1中进行构建。


这也为我工作。完美,因为降级Xcode(并且无法在iOS7.1设备上进行测试)对我来说不是一种选择。谢谢!
亚当·塔特尔

2

您只需要在每个语句和构建设置上添加arm64体系结构,即您当前的项目以及cordova项目。

在您的项目中:

  • 建筑学
  • 有效架构

在科尔多瓦:

  • 建筑学
  • 调试
  • 释放
  • 任何ios SDK

和最重要的

-Cordova构建设置中的有效架构

此配置会产生很多警告,但只是在警告所指出的所有行中将“%d”更改为“%ld”


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.