有关为64位架构更新Phonegap iOS应用程序的问题

时间:2015-02-09 01:55:00

标签: ios xcode cordova 64-bit phonegap-plugins

我有一个带有许多插件的phonegap应用程序,可以在iOS设备上正常运行。但是,我目前正在使用$(ARCHS_STANDARD_32_BIT)用于xcode中的体系结构,现在我认为我需要在体系结构设置中将其更新为$(ARCHS_STANDARD)并将arm64作为每个Apple的2月1日的有效体系结构包含在内, 2015年要求。

当我尝试在iPhone 6上运行该项目时,我现在收到16个错误,复制如下。 2个问题:

1)我是否需要使用第1段中提到的archs_standard和arm64更改?

2)如何修复这些问题,以便提交我的应用程序?我使用的个别插件是否都存在问题?我是否需要找到更新版本(或更新自己)错误中列出的每个插件或与其他内容相关的问题?我在一些我看过的插件上看不到64位的更新,所以不确定这是不是问题所在。我对Obj C不是很熟悉,所以在此感谢任何帮助!

提前感谢您的帮助!

错误讯息:

架构arm64的未定义符号:   " _CDVPageDidLoadNotification",引自:        - CDVSplashScreen.o中的[CDVSplashScreen pluginInitialize]   " _OBJC_CLASS _ $ _ CDVInvokedUrlCommand",引自:       CDVFile.o中的objc-class-ref   " _OBJC_METACLASS _ $ _ CDVCommandQueue",引自:       MainViewController.o中的_OBJC_METACLASS _ $ _ MainCommandQueue   " _OBJC_CLASS _ $ _ CDVPlugin",引自:       CDVLocation.o中的_OBJC_CLASS _ $ _ CDVLocation       FacebookConnectPlugin.o中的_OBJC_CLASS _ $ _ FacebookConnectPlugin       IonicKeyboard.o中的_OBJC_CLASS _ $ _ IonicKeyboard       CDVInAppBrowser.o中的_OBJC_CLASS _ $ _ CDVInAppBrowser       APPEmailComposer.o中的_OBJC_CLASS _ $ _ AP​​PEmailComposer       CDVStatusBar.o中的_OBJC_CLASS _ $ _ CDVStatusBar       CDVVibration.o中的_OBJC_CLASS _ $ _ CDVVibration       ...   " _OBJC_METACLASS _ $ _ CDVViewController",引自:       MainViewController.o中的_OBJC_METACLASS _ $ _ MainViewController   " _CDVLocalNotification",引自:        - AppDelegate.o中的[AppDelegate应用程序:didReceiveLocalNotification:]   " _OBJC_CLASS _ $ _ CDVViewController",引自:       l_OBJC _ $ _ CATEGORY_CDVViewController _ $ _ St​​atusBar in CDVStatusBar.o       MainViewController.o中的_OBJC_CLASS _ $ _ MainViewController       CDVFile.o中的objc-class-ref   " _OBJC_METACLASS _ $ _ CDVCommandDelegateImpl",引自:       MainViewController.o中的_OBJC_METACLASS _ $ _ MainCommandDelegate   " _OBJC_CLASS _ $ _ CDVWebViewDelegate",引自:       CDVInAppBrowser.o中的objc-class-ref   " _OBJC_CLASS _ $ _ CDVCommandQueue",引自:       MainViewController.o中的_OBJC_CLASS _ $ _ MainCommandQueue   " _OBJC_CLASS _ $ _ CDVUserAgentUtil",引自:       CDVInAppBrowser.o中的objc-class-ref   " _CDVPluginHandleOpenURLNotification",引自:        - AppDelegate.o中的[AppDelegate应用程序:handleOpenURL:]        - CDVInAppBrowser.o中的[CDVInAppBrowser openInSystem:]   " _OBJC_CLASS _ $ _ CDVCommandDelegateImpl",引自:       MainViewController.o中的_OBJC_CLASS _ $ _ MainCommandDelegate   " _OBJC_CLASS _ $ _ CDVPluginResult",引自:       CDVLocation.o中的objc-class-ref       FacebookConnectPlugin.o中的objc-class-ref       CDVInAppBrowser.o中的objc-class-ref       APPEmailComposer.o中的objc-class-ref       CDVStatusBar.o中的objc-class-ref       CDVLocalFilesystem.o中的objc-class-ref       PushPlugin.o中的objc-class-ref       ...   " _OBJC_METACLASS _ $ _ CDVPlugin",引自:       CDVLocation.o中的_OBJC_METACLASS _ $ _ CDVLocation       FacebookConnectPlugin.o中的_OBJC_METACLASS _ $ _ FacebookConnectPlugin       IonicKeyboard.o中的_OBJC_METACLASS _ $ _ IonicKeyboard       CDVInAppBrowser.o中的_OBJC_METACLASS _ $ _ CDVInAppBrowser       APPEmailComposer.o中的_OBJC_METACLASS _ $ _ AP​​PEmailComposer       CDVStatusBar.o中的_OBJC_METACLASS _ $ _ CDVStatusBar       CDVVibration.o中的_OBJC_METACLASS _ $ _ CDVVibration       ... ld:找不到架构arm64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

2 个答案:

答案 0 :(得分:3)

  

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

是的,如果您想将应用提交到商店,则必须使用$(ARCHS_STANDARD)和arm64。

  

2)如何修复这些问题,以便提交我的应用程序?这都是问题   我正在使用个人插件?我需要找到更新的   版本(或更新自己)错误中列出的每个插件或是   与其他事情有关的问题?我没有看到64位的更新   我看过的插件很少,所以不确定这是不是   问题是。我对Obj C不太熟悉,所以感谢任何帮助   这里!

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

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

您需要更新项目中的Build Settings。这些步骤在本期中提及并转载如下:

//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);

到这个

((void (*)(id, SEL, id))objc_msgSend)(obj, normalSelector, command);

CordovaLib/Classes/CDVViewController.m

更改此

if ((BOOL)objc_msgSend(plugin, selector, request, navigationType) == YES)

到此:

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

所有细节都可以在https://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

找到

答案 1 :(得分:0)

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

我能够在更新(删除然后添加)两个PhoneGap插件(总共九个)之后成功构建,并且每次都删除/添加PhoneGap iOS平台。具体来说,插件是com.phonegap.plugins.barcodescannerorg.apache.cordova.geolocation。我通过在错误中搜索类名来确定这两个插件,并确定它们与哪些插件相关。

要“更新”插件:

cordova plugin rm com.phonegap.plugins.barcodescanner
cordova plugin add com.phonegap.plugins.barcodescanner

删除/添加PhoneGap / Cordova ios平台:

cordova platform remove ios
cordova platform add ios