2017-09-25 8 views
3

Ad-hoc配布用のアーカイブをエクスポートしているときに、アドホック配布用のアーカイブをエクスポート中にビットコードを検証できませんでした - Xcode 8.3.3とXcode 9を試しました。

私はこの点に関してアップルが提供したドキュメントを参照しました。 Technical Note TN2432文書化された可能性のある根本原因は、私たちのシナリオに似ていません。

私はSO

Error while exporting with Bitcode enabled (symbol not found for architecture armv7)

Is it possible to create a universal iOS framework using bitcode?

New warnings in iOS 9

しかし、上に掲載、以下同様の質問を経てい

を(私たちは、アセンブリ命令または不正な形式のInfo.plistファイルを持っているを使用していません)提供されたソリューションは機能していないようです。

ユーザー定義のビルド設定でBITCODE_GENERATION_MODEフラグを追加しようとしました。私はフレームワークターゲット内のその他のCフラグに-fembed-bitcode -marker & -fembed-bitcodeを追加しようとしました。ビットコードセグメントはsuggestedコマンド

otool -l -arch arm64 <framework_name> | grep __LLVM 

それは2つのセグメント

segnameの__LLVM

segnameの__LLVM

を示す図を用いて、私の生成フレームワーク中に存在する場合

私がチェックしかし、輸出アーカイブの中に、Xcodeはまだ不在のビットコードについて不平を言っています。

私は、この問題がXcodeバージョン(8.3.3と9.0を試したもの)に起因するかどうかを確認するためにApp Storeにアプリケーションをアップロードしようとしましたが、iTunes Storeからビルドインポートエラーに関する電子メールを受け取ります。

iOSアプリAPP_NAME 1.0(4)の処理中にアプリの間引き処理でエラーが発生し、アプリを間引くことができませんでした。アプリにビットコードが含まれていると、ビットコード処理が失敗する可能性があります。これらのエラーのため、このアプリケーションのビルドはレビューのために提出することも、App Storeに置くこともできません。この問題の解決に役立つ情報については、テクニカルノート2432を参照してください。

PS:ビットコードを無効にすることは、ビットコードをサポートする必要があるホストアプリケーションとしてのオプションではありません。

Error while exporting the Archieve

答えて

9

  • 使用BITCODE_GENERATION_MODEは、エラーの説明には、解決策を見つけるために間違った方向に連れて行ってくれました。

    このエラーはビットコードとは関係ありません。 フレームワークにシミュレータスライスが含まれていると表示されます(i386 x86_64

    アーカイブ前に削除すると問題が解決しました。

    実行スクリプトフェーズを追加して、次のコードでターゲットのフェーズを構築し、エラーを取り除くのを助けました。

    APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" 
    
    # This script loops through the frameworks embedded in the application and 
    # removes unused architectures. 
    find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK 
    do 
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) 
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" 
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH" 
    
    EXTRACTED_ARCHS=() 
    
    for ARCH in $ARCHS 
    do 
    echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" 
    lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" 
    EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") 
    done 
    
    echo "Merging extracted architectures: ${ARCHS}" 
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" 
    rm "${EXTRACTED_ARCHS[@]}" 
    
    echo "Replacing original executable with thinned version" 
    rm "$FRAMEWORK_EXECUTABLE_PATH" 
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" 
    
    done 
    

    クレジット:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

  • +0

    あなたはどのように(i386 x86_64)をどこから削除していますか?Runscriptを追加するために '+' btnをクリックして、与えられたスクリプトを書きます。私はi386 x86_64をまだ削除していませんでした。なぜなら、わからないからです。 –

    +0

    この@Vipinを見てください。私のenableBitcode = NOはいつも、私はそれをYESに設定したくありません –

    0

    次のことを試してみてください。

    • このフレームワークは、ビルドフェーズにコピーフレームワークスクリプトの下に追加されていることを確認します。代わりにBITCODE_GENERATION_CODE
    +0

    ビルド設定で 'NO' にビットコードを有効に設定する必要がありました。入力ミスを修正するために私の質問を編集しました。 ビルド段階で新しい「ファイルフェーズをコピー」を追加しようとします。それに不平等なフレームワークを追加し、私の発見についてあなたに知らせます。 – Vipin

    +0

    Hey Roy K、コピーフレームワークスクリプトビルドフェーズはxcodeビルドフェーズでは表示されません。ファイルフェーズをフレームワークに追加しました。しかし、運がない:( – Vipin

    0

    私は私が実際にビルド設定でBITCODE_GENERATION_MODEを使用

    関連する問題