xcode 5.1:libCordova.a架构问题

ino*_*nik 80 xcode ios cordova xcode5.1

昨天(2014年3月3日)当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
Run Code Online (Sandbox Code Playgroud)

所以我尝试了以下内容.我在我的项目中选择了CordovaLib子项目,在项目和目标中,我进入了Architectures下的Build Settings,并确保它没有包含在任何Debug或Release体系结构中.此时Build Active Architecture Only设置为"Yes".这导致以下错误:arm64

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

Build Active Architecture设置 为"No",错误再次变为:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64
Run Code Online (Sandbox Code Playgroud)

我不知道还有什么可以尝试的.该项目的体系结构设置仅包括设置为iOS 7.1的密钥"Base SDK".项目的目标没有架构设置.无论如何,我很确定问题在于嵌入式CordovaLib子项目.我能做些什么来使这个东西成功编译到我的设备?

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

ino*_*nik 85

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

  1. 选择您的项目图标
  2. 选择构建设置.
  3. 对于"架构",选择$ ARCHS_STANDARD - 标准架构(armv7,armv7s,arm64)
  4. 对于"Valid Architectures",添加"arm64"
  5. 选择您的CordovaLib.xcodeproj图标
  6. 在项目的构建设置(而不是目标)中,删除条件架构设置(悬停以查看减号)
  7. 对于"架构",选择$ ARCHS_STANDARD - 标准架构(armv7,armv7s,arm64)
  8. 对于"Valid Architectures",添加"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 platform update ios".

  • 优秀.对于第6步,我认为我应该删除所有这些:[SCREENSHOT](https://dl.dropboxusercontent.com/u/618674/_perma/2014-03/contitional-architectures.png)? (10认同)
  • 是的,这个答案让应用程序在5S上编译和安装,但是当它开始运行时会抛出lldb错误并崩溃(或者如果你在运行Xcode时将你的设备连接到你的Mac上,则会暂停). (7认同)
  • 这是@Shazron帖子的链接.它包括3个问题:http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/ (5认同)

Nei*_*man 11

另一种有效的方法:

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


Ale*_*zIT 10

将Xcode 5.1降级为5.0.2对我有用,我等不及官方的Cordova 3.5版本.

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

  • 这是有效的 - 唯一需要注意的是,你无法在运行iOS 7.1的iPhone上直接在XCode上进行测试.这是模拟器派上用场的地方.已编译的应用程序_can_在iOS 7.1上运行(在iPhone 5和5S上都已确认),因此降级直到Cordova 3.5发布似乎是最佳选择. (3认同)

Fab*_*ano 8

他们刚刚发布了一个解决这个问题的新版本3.4.1.

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

/usr/local/lib/node_modules/cordova/platforms.js
Run Code Online (Sandbox Code Playgroud)

第24行来自:

version: '3.4.0'
Run Code Online (Sandbox Code Playgroud)

至:

version: '3.4.1'
Run Code Online (Sandbox Code Playgroud)

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

cordova platform add ios
Run Code Online (Sandbox Code Playgroud)

这将根据3.4.1下载包含所有补丁的新模板.


小智 5

按照此视频中的说明操作:https: //www.youtube.com/watch?v = ikJAKcz8DE

只需在项目有效架构中添加arm64,并删除Cordova项目的所有条件架构.