为64位体系结构更新Phonegap iOS应用程序时出现问题

为64位体系结构更新Phonegap iOS应用程序时出现问题,ios,xcode,cordova,64-bit,phonegap-plugins,Ios,Xcode,Cordova,64 Bit,Phonegap Plugins,我有一个phonegap应用程序,有很多插件,可以在iOS设备上正常运行。然而,我目前在xcode的架构中使用$(ARCHS_STANDARD_32_位),现在我认为我需要在架构设置中将其更新为$(ARCHS_STANDARD),并根据苹果2015年2月1日的要求将arm64作为一个有效的架构 当我尝试在iPhone6上运行该项目时,我现在收到16个错误,如下所示。2个问题: 1) 我需要使用第一段中提到的archs_标准和arm64更改吗 2) 如何解决这些问题,以便提交我的应用程序?我使用的

我有一个phonegap应用程序,有很多插件,可以在iOS设备上正常运行。然而,我目前在xcode的架构中使用$(ARCHS_STANDARD_32_位),现在我认为我需要在架构设置中将其更新为$(ARCHS_STANDARD),并根据苹果2015年2月1日的要求将arm64作为一个有效的架构

当我尝试在iPhone6上运行该项目时,我现在收到16个错误,如下所示。2个问题:

1) 我需要使用第一段中提到的archs_标准和arm64更改吗

2) 如何解决这些问题,以便提交我的应用程序?我使用的每个插件都有问题吗?我是否需要找到错误中列出的每个插件的更新版本(或更新我自己),或者该问题与其他问题有关?在我看过的一些插件上,我没有看到64位的更新,所以不确定这是否是问题所在。我对Obj C不是很熟悉,所以非常感谢您的帮助

提前感谢您的帮助

错误消息:

架构arm64的未定义符号: “\u CDVPageDidLoadNotification”,引用自: -[CDVSplashScreen pluginInitialize]在CDVSplashScreen.o中 “_OBJC_CLASS_$_CDVInvokedUrlCommand”,引用自: CDVFile.o中的objc类引用 “_OBJC_元类$_CDVCommandQueue”,引用自: _MainViewController.o中的OBJC_元类$_MainCommandQueue “对象类”引用自: _在CDVLocation.o中的OBJC_类$_CDVLocation _FacebookConnectPlugin.o中的OBJC_类$_FacebookConnectPlugin _IonicKeyboard.o中的OBJC_类IonicKeyboard _CDVInAppBrowser.o中的OBJC_CLASS_$\u CDVInAppBrowser _APPEmailComposer.o中的OBJC_类$\u APPEmailComposer _CDVStatusBar.o中的OBJC_CLASS_$\u CDVStatusBar _CDVVibration.o中的OBJC_类$_CDVVibration ... “_OBJC_元类$_CDVViewController”,引用自: _MainViewController.o中的OBJC_元类$\u MainViewController “本地通知”,引用自: -AppDelegate.o中的[AppDelegate应用程序:didReceiveLocalNotification:] “_OBJC_CLASS_$_CDVViewController”,引用自: CDVStatusBar.o中的l_OBJC_$_CATEGORY_CDVViewController_$_StatusBar _MainViewController.o中的OBJC_CLASS_u$\u MainViewController CDVFile.o中的objc类引用 “_OBJC_元类$_CDVCommandDelegateImpl”,引用自: _MainViewController.o中的OBJC_元类$_MainCommandDelegate “_OBJC_CLASS_$_CDVWebViewDelegate”,引用自: CDVInAppBrowser.o中的objc类ref “_OBJC_CLASS_$_CDVCommandQueue”,引用自: _MainViewController.o中的OBJC_类$_MainCommandQueue “_OBJC_CLASS_$_CDVUserAgentUtil”,引用自: CDVInAppBrowser.o中的objc类ref “\u CDVPluginHandleOpenURLNotification”,引用自: -AppDelegate.o中的[AppDelegate应用程序:handleOpenURL:] -[CDVInAppBrowser openInSystem:]在CDVInAppBrowser.o中 “对象类”引用自: _MainViewController.o中的OBJC_类$_MainCommandDelegate “_OBJC_CLASS_$_CDVPluginResult”,引用自: CDVLocation.o中的objc类ref FacebookConnectPlugin.o中的objc类引用 CDVInAppBrowser.o中的objc类ref APPEmailComposer.o中的objc类ref CDVStatusBar.o中的objc类ref CDVLocalFilesystem.o中的objc类ref PushPlugin.o中的objc类ref ... “_OBJC_元类$_CDVPlugin”,引用自: _CDVLocation.o中的OBJC_元类$_CDVLocation _FacebookConnectPlugin.o中的OBJC_元类$\u FacebookConnectPlugin _IonicKeyboard.o中的OBJC_元类IonicKeyboard _CDVInAppBrowser.o中的OBJC_元类$\u CDVInAppBrowser _APPEmailComposer.o中的OBJC_元类$\u APPEmailComposer _CDVStatusBar.o中的OBJC_元类$\u CDVStatusBar _CDVVibration.o中的OBJC_元类$_CDVVibration ... ld:未找到架构arm64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

1) 我是否需要使用中提到的archs_标准和arm64更改 第一段

是的,如果要将应用程序提交到商店,您必须使用
$(ARCHS_标准)
和arm64

2) 如何解决这些问题,以便提交我的应用程序?都是问题吗 我使用的单个插件?我需要找到一个更新的 版本(或更新我自己)错误中列出的每个插件或是 与其他问题相关的问题?我看不到服务器上64位的更新 我看过的插件很少,所以不确定这是否是 问题是。我对Obj C不是很熟悉,所以非常感谢您的帮助 这里

插件很好,问题是cordovaLib项目。您还必须将cordovaLib项目更改为
$(ARCHS_STANDARD)
,并重建libCordova.a,或者更好地使用包含64位支持的大于3.4的cordova版本

编辑: manihiki提供的链接提供了更多详细信息:

您需要更新项目中的生成设置。本期中提到了这些步骤,并转载如下:

//Update build settings for your project  
Select your Project icon Choose Build Settings.  
For “Architectures”, select $ARCHS_STANDARD – Standard architectures (armv7, armv7s, arm64) 
For “Valid Architectures”, add “arm64″ 

//Update build settings for cordovaLib project 
Select your CordovaLib.xcodeproj icon  
In the Build Settings for the Project (not Target), delete *all* the conditional architecture settings (hover to see the minus sign). This is what is recommended by Apple in their Xcode 5.1 Release Notes.  
For “Architectures”, select $ARCHS_STANDARD – Standard architectures(armv7, armv7s, arm64)  
For “Valid Architectures”, add “arm64″  

//Update build settings for the Target  
In the Build Settings for the Target, delete *all* the conditional architecture settings (hover to see the minus sign).  
For “Architectures”, select $ARCHS_STANDARD – Standard architectures (armv7, armv7s, arm64)  
For “Valid Architectures”, add “arm64″
某些插件可能无法工作,您必须进行此更改 在
CordovaLib/Classes/CDVCommandQueue.m
改变这个

objc_msgSend(obj, normalSelector, command);
if ((BOOL)objc_msgSend(plugin, selector, request, navigationType) == YES)
对此

((void (*)(id, SEL, id))objc_msgSend)(obj, normalSelector, command);
CordovaLib/Classes/CDVViewController.m

改变这个

objc_msgSend(obj, normalSelector, command);
if ((BOOL)objc_msgSend(plugin, selector, request, navigationType) == YES)
为此:

if (((BOOL (*)(id, SEL, id, int))objc_msgSend)(plugin, selector, request, navigationType) == YES)

所有详细信息都可以在这里找到

我继承了一个旧的PhoneGap/Cordova应用程序,并在将架构构建设置更改为
$(ARCHS_STANDARD)
时收到许多类似的错误

我能够在更新(删除然后添加)两个PhoneGap插件(总共九个)并每次删除/添加PhoneGap iOS平台后成功构建。具体来说,插件是
com.phonegap.plugins.barcodescanner
org.apache.cordova.geolocation
。我通过谷歌搜索errors和dete中的类名来定位这两个插件