有時(shí)第三方提供的framework即支持真機(jī)調(diào)試沐旨,也支持模擬器調(diào)試森逮,然而打包提交appStore時(shí),蘋果不允許包含有模擬器架構(gòu)ipa過(guò)審磁携。validate ipa時(shí)褒侧,會(huì)出現(xiàn)如下提示:
image.png
- Unsupported Architectures. The executable for xxx/Frameworks/xxx.framework contains unsupported architectures '[x86_64, i386]'.
An unknown error occurred.
Invalid Segment Alignment. The app binary at 'xxx.app/Frameworks/xxx.framework/GizWifiSDK' does not have proper segment alignment. Try rebuilding the app with the latest Xcode version.
An unknown error occurred.
The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. This binary does not seem to have been built with Apple's linker.
An unknown error occurred.
解決辦法有兩種:
- 方案一、向提供framework的第三方反饋颜武,要求剔除掉模擬器架構(gòu)[[x86_64, i386]
- 方案二璃搜、向自己想辦法剔除拖吼。
如果方案一可以行的通鳞上,那就很省事。但萬(wàn)一行不通吊档,那就需要用方法2篙议,親自處理了。
方案二 也有兩種方式
???????方式一:直接對(duì)framework處理怠硼,使用lipo命令剔除掉模擬器架構(gòu)鬼贱,然后重新link一個(gè)新的framework替換項(xiàng)目中的framework;
???????方式二:使用腳本在項(xiàng)目打包過(guò)程中自動(dòng)剔除模擬器架構(gòu)香璃,生成不含有模擬器架構(gòu)的ipa这难。
???????方式一的使用是有一個(gè)前提:這個(gè)framework必須是靜態(tài)庫(kù),具體的方法葡秒,請(qǐng)參考 這篇博文姻乓。
???????方式二顯然是最好的,即方便在開(kāi)發(fā)過(guò)程中使用模擬器調(diào)試眯牧,也可以控制打包時(shí)剔除模擬器架構(gòu)蹋岩。建議使用此方法。
???????如何在工程中添加腳本文件学少,請(qǐng)參考這篇博文剪个。
腳本內(nèi)容如下:
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