web-dev-qa-db-ja.com

phonegap v2.9を使用したXcode4.6リリースのアーカイブの構築に失敗する

これは繰り返し発生する現象のようです。

解決策が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で働く立派な人がどこを見ればいいのか教えてくれましたが、その時点でこれは解決しました。

ビルド設定の奥深くに、その他のリンカーフラグと呼ばれる設定するフィールドがあります。

最初は値が表示されませんが、クリックすると、[デバッグ]と[リリース]が表示されます。

Releaseである非常に長い文字列で、-force_loadlibCordova.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がこれをデフォルトで設定しているという何らかの形のバグである可能性があります。また、彼らに連絡して、デフォルトで修復できるかどうかを確認します。

私にそれを指摘した彼のメモ:

Linkコマンドに次の両方が含まれていることに気付きました。

-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」リンカーフラグを削除する必要があると思います。 「その他のリンカーフラグ」設定でそのようなフラグを設定していますか?

24
lekash

修正が見つかりました。

  1. ターゲットのビルド設定で、_Other Linker Flags_を見つけます
  2. $(TARGET_BUILD_DIR)/libCordova.aを変更します
  3. $(BUILT_PRODUCTS_DIR)/libCordova.a
79
Shazron

「その他のリンカーフラグ」で「$(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」に変更します

これは私にとってトリックでした。

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

上記のトリックで、私は問題なくアプリを達成し、AppStoreに提出することができます。しかし、iTune Connectで、「無効なバイナリ」が表示されていることがわかりました。

4
Jirawat Akkanit