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

Issues updating Phonegap iOS app for 64-bit architecture

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

当我尝试 运行 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”,引用自: _OBJC_METACLASS_MainViewController.o 中的 $_MainCommandQueue “_OBJC_CLASS_$_CDVPlugin”,引用自: _OBJC_CLASS_$_CDVLocation in CDVLocation.o _OBJC_CLASS_$_FacebookConnectPlugin FacebookConnectPlugin.o _OBJC_CLASS_IonicKeyboard.o 中的 $_IonicKeyboard _OBJC_CLASS_$_CDVInAppBrowser CDVInAppBrowser.o _OBJC_CLASS_APPEmailComposer.o 中的 $_APPEmailComposer _OBJC_CLASS_CDVStatusBar.o 中的 $_CDVStatusBar _OBJC_CLASS_CDVVibration.o中的$_CDV振动 ... “_OBJC_METACLASS_$_CDVViewController”,引用自: _OBJC_METACLASS_MainViewController.o 中的 $_MainViewController “_CDVLocalNotification”,引用自: -[AppDelegate application:didReceiveLocalNotification:] AppDelegate.o “_OBJC_CLASS_$_CDVViewController”,引用自: l_OBJC_$_CATEGORY_CDVViewController_$_StatusBar 在 CDVStatusBar.o _OBJC_CLASS_MainViewController.o 中的 $_MainViewController CDVFile.o 中的 objc-class-ref “_OBJC_METACLASS_$_CDVCommandDelegateImpl”,引用自: _OBJC_METACLASS_MainViewController.o 中的 $_MainCommandDelegate “_OBJC_CLASS_$_CDVWebViewDelegate”,引用自: CDVInAppBrowser.o 中的 objc-class-ref “_OBJC_CLASS_$_CDVCommandQueue”,引用自: _OBJC_CLASS_MainViewController.o 中的 $_MainCommandQueue “_OBJC_CLASS_$_CDVUserAgentUtil”,引用自: CDVInAppBrowser.o 中的 objc-class-ref “_CDVPluginHandleOpenURLNotification”,引用自: -[AppDelegate application:handleOpenURL:] 在 AppDelegate.o -[CDVInAppBrowser openInSystem:] CDVInAppBrowser.o “_OBJC_CLASS_$_CDVCommandDelegateImpl”,引用自: _OBJC_CLASS_MainViewController.o 中的 $_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”,引用自: _OBJC_METACLASS_$_CDV位置在CDVLocation.o _OBJC_METACLASS_$_FacebookConnectPlugin FacebookConnectPlugin.o _OBJC_METACLASS_IonicKeyboard.o 中的 $_IonicKeyboard _OBJC_METACLASS_$_CDVInAppBrowser CDVInAppBrowser.o _OBJC_METACLASS_APPEmailComposer.o 中的 $_APPEmailComposer _OBJC_METACLASS_CDVStatusBar.o 中的 $_CDVStatusBar _OBJC_METACLASS_CDVVibration.o中的$_CDV振动 ... ld:未找到体系结构 arm64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

1) Do I need to use the archs_standard and arm64 changes mentioned in the 1st paragraph?

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

2) How do I fix these issues so I can submit my app? Is it all issues with individual plugins I'm using? Do I need to find an updated version (or update myself) every plugin listed in the errors or is the issue related to something else? I don't see updates for 64-bit on a few of the plugins I've looked at, so not sure if this is what the issue is. I'm not very familiar with Obj C so appreciate any help here!

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

编辑: link 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);

至此

((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/

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

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

到"update"一个插件:

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

到remove/addPhoneGap/Cordovaios平台:

cordova platform remove ios
cordova platform add ios