繁体   English   中英

使用 phonegap v 2.9 为 Xcode 4.6 版本构建存档失败

[英]Building an archive for Xcode 4.6 release with phonegap v 2.9 fails

这似乎是一个反复出现的现象。

我看到了一些先前的问题,解决方案是删除 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 和 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”链接器标志。 您是否在“其他链接器标志”设置中设置了这样的标志?

找到了解决办法。

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

在“其他链接器标志”中更改为“$(BUILT_PRODUCTS_DIR)/libCordova.a”对我来说不起作用。 问题仍然存在。 (Xcode 4.6.3 phonegap 2.9.0)

所以,我尝试下面的设置,它对我有用。

  1. 在目标的构建设置中,找到“其他链接器标志”
  2. 删除“$(TARGET_BUILD_DIR)/libCordova.a”
  3. 将“-force_load”更改为“-all_load”

这对我有用。

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

通过上述技巧,我可以实现该应用程序并毫无问题地提交到 App Store。 但是我在 iTune Connect 中发现它显示“无效的二进制文件”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM