使用 phonegap v 2.9 为 Xcode 4.6 版本构建存档失败
Posted
技术标签:
【中文标题】使用 phonegap v 2.9 为 Xcode 4.6 版本构建存档失败【英文标题】:Building an archive for Xcode 4.6 release with phonegap v 2.9 fails 【发布时间】:2013-06-25 10:39:42 【问题描述】:这似乎是一种反复出现的现象。
我看到了一些之前的问题,解决方法是删除armv6, 然后存档就可以了。当然,armv6 没了。
所以,现在,使用当前的 Xcode 4.6.3 phonegap 2.9 构建。 是的,该应用在 iphone、ipad 和模拟器上运行良好。
我在创建存档步骤结束时收到此消息:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -L/Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/BuildProductsPath/Release-iphoneos -F/Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/BuildProductsPath/Release-iphoneos -filelist /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/IntermediateBuildFilesPath/peeq.build/Release-iphoneos/peeq.build/Objects-normal/armv7s/peeq.LinkFileList -dead_strip -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -force_load /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/InstallationBuildProductsLocation/Applications/libCordova.a -ObjC -fobjc-link-runtime -miphoneos-version-min=5.0 -framework CoreLocation -framework ImageIO -framework OpenAL -framework AssetsLibrary /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/BuildProductsPath/Release-iphoneos/libCordova.a -framework Foundation -weak_framework UIKit -framework CoreGraphics -framework AddressBook -framework AddressBookUI -framework AudioToolbox -weak_framework AVFoundation -framework CFNetwork -framework MediaPlayer -framework QuartzCore -framework SystemConfiguration -framework MobileCoreServices -weak_framework CoreMedia -framework CoreLocation -o /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/IntermediateBuildFilesPath/peeq.build/Release-iphoneos/peeq.build/Objects-normal/armv7s/peeq
ld: file not found: /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/InstallationBuildProductsLocation/Applications/libCordova.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
然后走过去看看那里的文件系统:
cd /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build
./Intermediates/ArchiveIntermediates/peeq/BuildProductsPath/Release-iphoneos/libCordova.a
./Intermediates/ArchiveIntermediates/peeq/IntermediateBuildFilesPath/CordovaLib.build/Release-iphoneos/CordovaLib.build/Objects-normal/armv7/libCordova.a
./Intermediates/ArchiveIntermediates/peeq/IntermediateBuildFilesPath/CordovaLib.build/Release-iphoneos/CordovaLib.build/Objects-normal/armv7s/libCordova.a
./Intermediates/ArchiveIntermediates/peeq/IntermediateBuildFilesPath/UninstalledProducts/libCordova.a
而且它已经构建好了,只是没有放在链接器想要找到的地方。
因此,毫无疑问,某些构建设置要么告诉链接器查看那里,要么 告诉构建将它放在链接器想要找到它的位置。
除非是别的。
我的问题是如何构建应用存档 正确,所以它可以去商店。
一位在 Apple 工作的好人告诉我去哪里看,到那时,问题就解决了。
在 Build Settings 深处,有一个字段需要设置,称为 Other Linker Flags
一开始它没有显示任何值,但如果你点击它,它会弹出 Debug and Release。
在很长的字符串 Release 中,可以找到 -force_load libCordova.a 并删除字符串的那部分。
发件人:
-weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -force_load $TARGET_BUILD_DIR/libCordova.a -ObjC
收件人:
-weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC
它可能以某种方式的错误,phonegap默认这个,我会 也联系他们看看能不能默认修复。
他指出我的笔记:
我注意到你的链接命令包含这两个:
-force_load /Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/InstallationBuildProductsLocation/Applications/libCordova.a
还有这个:
/Users/peeq/Library/Developer/Xcode/DerivedData/peeq-gylybvwifdxjmtajtbvdsdpjcvkl/Build/Intermediates/ArchiveIntermediates/peeq/BuildProductsPath/Release-iphoneos/libCordova.a
传递给 -force_load 的路径是链接器抱怨的虚假路径。我认为您需要删除“-force_load”链接器标志。你在“Other Linker Flags”设置中有这样的标志吗?
【问题讨论】:
我遇到了同样的问题并解决了,至少在我的项目中是这样。在这里查看我的答案:***.com/a/17455264/2183674 仅供参考,我们在 XCode 5.1.1 和 PhoneGap 3.1 中得到了同样的结果。我的评论底部的修复对我们有用。 【参考方案1】:找到了解决办法。
-
在目标的构建设置中,找到
Other Linker Flags
更改$(TARGET_BUILD_DIR)/libCordova.a
致$(BUILT_PRODUCTS_DIR)/libCordova.a
【讨论】:
谢谢,问题解决了! (不断遇到对 libCordova.a 问题的旧描述......) 谢谢!!!为什么科尔多瓦总是有这些问题..每个 xcode 版本和evey phonegap 版本都让人头疼!谢谢!! 这让我免于撞到桌子上。谢谢!!Other Linker Flags
位于“链接”下并包含多个值,但您可以单击“多个值”,您需要编辑的部分在它自己的行上:imgur.com/1n4VSUa
我不知道该怪苹果还是科尔多瓦。但是恕我直言,虽然它取悦了最终用户,但 Apple 总是击败开发人员的 cra*【参考方案2】:
在“其他链接器标志”中更改为“$(BUILT_PRODUCTS_DIR)/libCordova.a”对我不起作用。问题依然存在。 (Xcode 4.6.3 phonegap 2.9.0)
所以,我尝试了下面的设置,它对我有用。
-
在目标的构建设置中,找到“其他链接器标志”
删除“$(TARGET_BUILD_DIR)/libCordova.a”
将“-force_load”更改为“-all_load”
这对我有用。
======== 更新============
通过上述技巧,我可以毫无问题地实现应用并提交到 App Store。 但我在 iTune Connect 中发现它显示“无效的二进制文件”。
【讨论】:
以上是关于使用 phonegap v 2.9 为 Xcode 4.6 版本构建存档失败的主要内容,如果未能解决你的问题,请参考以下文章
包含 Google Admob 插件时,Phonegap/Cordova 2.9 iOS 应用内浏览器未打开
使用 XCode 9/iOS 11 的 Phonegap 错误
在不使用 XCode 的情况下将 PhoneGap 添加到 Xcode 项目中