使用phonegap v2.9构建Xcode 4.6版本的存档失败。

24

这似乎是一个经常出现的现象。

我看到了许多之前的问题,解决方法是删除 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

软件已经构建完成,只是没有放在链接器想要找到的位置。

因此,毫无疑问,某些构建设置要么告诉链接器在那里查找,要么告诉构建将其放在链接器想要找到的位置。

除非是其他原因。

我的问题是如何正确构建应用程序存档,以便它可以进入商店。


一位在苹果公司工作的优秀人员告诉我该去哪里查找,从而解决了这个问题。

在“构建设置”中深入查找,有一个需要设置的字段,称为“其他链接器标志”。

它开始时不显示任何值,但如果单击它,它会弹出“调试”和“发布”选项。

在很长的“发布”字符串中,可以找到“-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
To:
-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”链接器标志。在“其他链接器标志”设置中是否设置了这样的标志?


我曾经遇到过同样的问题,并解决了它,至少对于我的项目是这样。请查看我的答案:https://dev59.com/R3PYa4cB1Zd3GeqPjHen#17455264 - Clark Burns
请注意,我们在使用XCode 5.1.1和PhoneGap 3.1时也遇到了同样的问题。最下面带有我的评论的修复方法对我们有效。 - ganders
2个回答

79

找到了解决方法。

  1. 在目标的构建设置中,找到 Other Linker Flags
  2. $(TARGET_BUILD_DIR)/libCordova.a 更改为:
  3. $(BUILT_PRODUCTS_DIR)/libCordova.a

4
谢谢!为什么Cordova总是有这些问题...每次Xcode和PhoneGap发布都让人头疼!!谢谢! - Francesco
这让我避免了严重的头痛。谢谢你!! - Ian
1
我不知道是应该责怪苹果还是 Cordova。但在我看来,虽然它能让最终用户感到满意,但苹果总是会把开发人员搞得很惨。 - Jay Mayu
我也想说一声谢谢。这可真是个苦差事,将这个烂摊子整理成一个可用的IPA文件...再次感谢! - Eric
是啊,升级PhoneGap库时由于所有的构建错误而变得非常困难。 - user235273
显示剩余2条评论

4

将"Other Linker Flags"中的内容改为"$(BUILT_PRODUCTS_DIR)/libCordova.a"对我无效,问题仍然存在。(Xcode 4.6.3 phonegap 2.9.0)

所以,我尝试了下面的设置,它对我起作用了。

  1. 在您的目标的构建设置中,找到“Other Linker Flags”
  2. 删除“$(TARGET_BUILD_DIR)/libCordova.a”
  3. 将“-force_load”更改为“-all_load”

这对我有帮助。

======== 更新 ============

通过上述技巧,我可以成功完成应用程序并提交到App Store,没有任何问题。 但是我发现在iTune Connect中它显示为“无效的二进制文件”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接