2017-09-25 26 views
3

應用。無法驗證位碼​​而臨時發佈出口存檔 - 嘗試的Xcode 8.3.3及Xcode中包含我們的框架中抱怨缺少位碼而特設分配出口存檔9

我已經瀏覽了蘋果在這方面提供的文檔 Technical Note TN2432。文件列出的可能的根本原因並不像我們的情況。 (我們不使用匯編指令或有畸形Info.plist文件)

我已經通過下面張貼在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

但類似的問題了提供的解決方案似乎不起作用。

我試圖在用戶定義的構建設置添加BITCODE_GENERATION_MODE標誌。我也試過在框架目標將-fembed-bitcode -marker & -fembed-bitcode在其他C標誌。

我檢查位碼段使用suggested命令

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

它顯示了2個段

segname的__LLVM

segname的__LLVM

存在於我的產生框架但是,當出口在存檔中,Xcode仍然抱怨缺少位代碼。

我試着上傳的App Store應用來驗證,如果這個問題是由於版本的Xcode(我試過8.3.3和9.0),但我得到以下有關來自iTunes Store構建導入錯誤的電子郵件。

在處理您的iOS應用程序APP_NAME 1.0(4)時,應用程序細化過程中發生錯誤,您的應用程序無法細化。如果您的應用包含位碼,則位碼處理可能失敗。由於這些錯誤,您的應用程序的這種構建將無法提交審查或放置在App Store上。有關可能有助於解決此問題的信息,請參閱技術說明2432.

PS:由於主機應用程序需要支持位代碼,因此禁用位代碼不適用於我們。

Error while exporting the Archieve

回答

9

錯誤描述了我在錯誤的方向,以找到解決方案。

此錯誤與位碼無關。 當框架包含模擬器切片時出現(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)以及從哪裏刪除?並且當我單擊'+'btn添加Runscript時,然後編寫提供的腳本,它在歸檔時給出相同的問題。我沒有刪除i386 x86_64,但我不知道如何 –

+0

請查看此@Vipin。儘管我的enableBitcode = NO總是,我不想將它設置爲YES –

0

嘗試以下操作:

  • 確保這個框架在構建階段下複製框架腳本增加。
  • 使用BITCODE_GENERATION_MODE而不是BITCODE_GENERATION_CODE
+0

我居然在構建設置使用BITCODE_GENERATION_MODE啓用位碼爲 'NO'。編輯我的問題以糾正錯字。 我會嘗試在階段性構建中添加新的「複製文件階段」。將添加抱怨框架,並讓你知道我的發現。 – Vipin

+0

Hey Roy K,作爲複製框架腳本構建階段在xcode構建階段是不可見的,我添加了複製文件階段與其中的框架。但是沒有運氣:( – Vipin