我有一个带有许多插件的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 _ $ _ APPEmailComposer 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 _ $ _ StatusBar 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 _ $ _ APPEmailComposer CDVStatusBar.o中的_OBJC_METACLASS _ $ _ CDVStatusBar CDVVibration.o中的_OBJC_METACLASS _ $ _ CDVVibration ... ld:找不到架构arm64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
答案 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.barcodescanner
和org.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