iOS開發(fā) 刪除framework里支持模擬器的架構(gòu)

app上架時如果SDK里是支持模擬器架構(gòu)的位仁,蘋果是不讓上架的晒杈。甚至于嫂伞,打包成功后,導(dǎo)出為測試包都會報錯桐智。為了正常上架和測試末早,我們需要將SDK里的模擬器架構(gòu)給刪除。

方法一: xcode里添加腳本说庭,打包自動刪除模擬器架構(gòu)

這種方法不會刪除SDK源文件的架構(gòu)然磷,只有打的包被刪除,不會影響我們平時在模擬器上調(diào)試刊驴,所以推薦這種方式姿搜。

圖片.png

選擇添加 New Run Script Phase


圖片.png

然后添加一段腳本,這樣我們打包的時候就會自動將SDK里的支持模擬器架構(gòu)刪除掉了寡润。

圖片.png
#!/bin/sh

# Strip invalid architectures

strip_invalid_archs() {
binary="$1"
echo "current binary ${binary}"
# Get architectures for current file
archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
stripped=""
for arch in $archs; do
if ! [[ "${ARCHS}" == *"$arch"* ]]; then
if [ -f "$binary" ]; then
# Strip non-valid architectures in-place
lipo -remove "$arch" -output "$binary" "$binary" || exit 1
stripped="$stripped $arch"
fi
fi
done
if [[ "$stripped" ]]; then
echo "Stripped $binary of architectures:$stripped"
fi
}

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"

strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
done

方法二:終端運(yùn)行腳本,刪除指定文件夾內(nèi)的SDK模擬器架構(gòu)

這種方式會刪除原SDK的架構(gòu)舅柜,所以適合用在對此SDK做二次封裝梭纹,提供給如跨平臺的前端使用。

我下載了一個網(wǎng)易云信的SDK

圖片.png

打開終端

cd /Users/apple/Downloads/NIMSDK/NIMSDK.framework

切換到該SDK目錄下

lipo -info NIMSDK

查詢這個framework支持的CPU架構(gòu)

可以看到支持i386 x86_64 armv7 arm64這四種架構(gòu)

模擬器32位處理器測試需要i386架構(gòu)致份,

模擬器64位處理器測試需要x86_64架構(gòu)变抽,

真機(jī)32位處理器需要armv7,或者armv7s架構(gòu),

真機(jī)64位處理器需要arm64架構(gòu)氮块。

圖片.png

在終端里 cd 到這個framework的上一層文件夾路徑下绍载,回車。


圖片.png

粘貼下面這段腳本到終端里執(zhí)行滔蝉。

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find . -name '*.framework' -type d | while read -r FRAMEWORK
do
#FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleExecutable" "$FRAMEWORK/Info.plist")
echo $FRAMEWORK_EXECUTABLE_NAME

FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"

# remove simulator's archs if location is not simulator's directory
case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
    echo "No need to remove archs"
    ;;
*)
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "i386 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "x86_64 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    ;;
esac

echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

done

執(zhí)行后終端顯示如下則表示刪除成功


圖片.png

此時再查詢framework支持的架構(gòu)击儡,只剩下armv7和arm64了。

圖片.png

可能出現(xiàn)的問題:

在實(shí)際操作中蝠引,有可能出現(xiàn)有些framework不能執(zhí)行成功阳谍。
就拿AlipaySDK舉例,在對AlipaySDK執(zhí)行這段腳本時發(fā)生了錯誤螃概。

圖片.png

瀏覽一下錯誤輸出矫夯,大致意思為找不到Info.plist文件,也找不到可執(zhí)行文件路徑谅年。我們來看一下它的文件茧痒,發(fā)現(xiàn)問題出在了plist文件名上,腳本里是查找名為Info.plist的文件融蹂,但是AlipaySDK的plist名稱為AlipaySDK-inside-Info.plist
我們先將AlipaySDK-inside-Info.plist文件拷貝出來旺订,完成操作后再拿回來。

圖片.png

下面先將AlipaySDK-inside-Info.plist改名為Info.plist

打開這個Info.plist文件

圖片.png

此時文件里的 Executable file 對應(yīng)的值為 ${EXECUTABLE_NAME} 超燃,我們需要把它改為真正的可執(zhí)行文件名稱区拳,也就是下圖中的AlipaySDK

圖片.png

修改完畢如下圖:

圖片.png

再次執(zhí)行腳本成功!

圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末意乓,一起剝皮案震驚了整個濱河市樱调,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌届良,老刑警劉巖笆凌,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異士葫,居然都是意外死亡乞而,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門慢显,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爪模,“玉大人欠啤,你說我怎么就攤上這事∥莨啵” “怎么了洁段?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長共郭。 經(jīng)常有香客問我祠丝,道長,這世上最難降的妖魔是什么落塑? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任纽疟,我火速辦了婚禮,結(jié)果婚禮上憾赁,老公的妹妹穿的比我還像新娘。我一直安慰自己散吵,他們只是感情好龙考,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矾睦,像睡著了一般晦款。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枚冗,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天缓溅,我揣著相機(jī)與錄音,去河邊找鬼赁温。 笑死坛怪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的股囊。 我是一名探鬼主播袜匿,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稚疹!你這毒婦竟也來了居灯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤内狗,失蹤者是張志新(化名)和其女友劉穎怪嫌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柳沙,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岩灭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了偎行。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片川背。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贰拿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熄云,到底是詐尸還是另有隱情膨更,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布缴允,位于F島的核電站荚守,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏练般。R本人自食惡果不足惜矗漾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薄料。 院中可真熱鬧敞贡,春花似錦、人聲如沸摄职。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谷市。三九已至蛔垢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迫悠,已是汗流浹背鹏漆。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留创泄,地道東北人艺玲。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像验烧,于是被迫代替她去往敵國和親板驳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353