shell在xcode中涉及到的關(guān)鍵字

本人博客鏈接:http://blog.csdn.net/lvchaman/article/details/51783121

原文鏈接:

http://codecloud.net/11311.html

http://www.cocoachina.com/ios/20150127/11022.html

http://www.cnblogs.com/xiaodao/archive/2012/03/28/2422091.html

# Sets the target folders and the final framework product.

# 如果工程名稱和Framework的Target名稱不一樣的話令野,要自定義FMKNAME

# 例如: FMK_NAME = "MyFramework"

#FMK_NAME=${PROJECT_NAME}

FMK_NAME="TJJ"

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"】

shell中的一些關(guān)鍵字

一枯跑、xcode4中的環(huán)境變量

$(BUILT_PRODUCTS_DIR)

build成功后的逗旁,最終產(chǎn)品路徑--可以在Build Settings參數(shù)的Per-configuration Build Products Path項里設(shè)置

$(TARGET_NAME)

目標(biāo)工程名稱

$(SRCROOT)

工程文件(比如Nuno.xcodeproj)的路徑

$(CURRENT_PROJECT_VERSION)

當(dāng)前工程版本號

其他:

當(dāng)編譯靜態(tài)庫怜跑,設(shè)備選模擬器(iPhone 5.0 Simulator)顽冶,未設(shè)置任何Build Settings參數(shù)時彪置,默認(rèn)的基礎(chǔ)路徑:

/Users/xxx/Library/Developer/Xcode/DerivedData/xxxWorkspace-caepeadwrerdcrftijaolkkagbjf

下面用$()代替上面一長串東東

$(SYMROOT) = $()/Build/Products

$(BUILD_DIR) = $()/Build/Products

$(BUILD_ROOT) = ?$()/Build/Products

這三個變量中的$()不會隨著Build Settings參數(shù)的設(shè)置而改變

相反逞频,以下可以通過設(shè)置而改變

$(CONFIGURATION_BUILD_DIR) = $()/Build/Products/Debug-iphonesimulator

$(BUILT_PRODUCTS_DIR) = $()/Build/Products/Debug-iphonesimulator

$(CONFIGURATION_TEMP_DIR) = $()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator

$(TARGET_BUILD_DIR) = $()/Build/Products/Debug-iphonesimulator

$(SDK_NAME) = iphonesimulator5.0

$(PLATFORM_NAME) = iphonesimulator

$(CONFIGURATION) = Debug

$(TARGET_NAME) = UtilLib

$(EXECUTABLE_NAME) = libUtilLib.a 可執(zhí)行文件名

${IPHONEOS_DEPLOYMENT_TARGET} 5.0

$(ACTION) = build

$(CURRENTCONFIG_SIMULATOR_DIR) 當(dāng)前模擬器路徑

$(CURRENTCONFIG_DEVICE_DIR) 當(dāng)前設(shè)備路徑

$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME =

$()/Build/Products/Debug-iphonesimulator

$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) = $()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator

自定義變量

${CONFIGURATION}-iphoneos 表示:Debug-iphoneos

${CONFIGURATION}-iphonesimulator?表示:Debug-iphonesimulator

$(CURRENTCONFIG_DEVICE_DIR) = ${SYMROOT}/${CONFIGURATION}-iphoneos

$(CURRENTCONFIG_SIMULATOR_DIR) = ${SYMROOT}/${CONFIGURATION}-iphonesimulator

自定義一個設(shè)備無關(guān)的路徑(用來存放各種架構(gòu)arm6/arm7/i386輸出的產(chǎn)品)

$(CREATING_UNIVERSAL_DIR) = ${SYMROOT}/${CONFIGURATION}-universal

自定義變量代表的值

$(CURRENTCONFIG_DEVICE_DIR) = $()/Build/Products/Debug-iphoneos

$(CURRENTCONFIG_SIMULATOR_DIR) =?$()/Build/Products/Debug-iphonesimulator

$(CREATING_UNIVERSAL_DIR) =?$()/Build/Products/Debug-universal

iphoneos5.0下的編譯腳本:

xcodebuild -project "UtilLib.xcodeproj"?-configuration "Debug" -target "UtilLib" -sdk "iphoneos5.0" -arch "armv6 armv7" build RUN_CLANG_STATIC_ANALYZER=NO ?$(BUILD_DIR)="${BUILD_DIR}"BUILD_ROOT="${BUILD_ROOT}"

iphonesimulator5.0下的編譯腳本:

xcodebuild -project "UtilLib.xcodeproj"?-configuration "Debug" -target "UtilLib" -sdk "iphonesimulator5.0" -arch "i386" build RUN_CLANG_STATIC_ANALYZER=NO?$(BUILD_DIR)="${BUILD_DIR}"BUILD_ROOT="${BUILD_ROOT}"

加上下面一句表示輸出到文件:

>"${BUILD_ROOT}.build_output"

lipo腳本工具:合并iPhone模擬器和真機(jī)的靜態(tài)類庫进泼,生成通用庫

lipo -create -output"${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}" ? ? ? ??"${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"

意思是:把"${CURRENTCONFIG_DEVICE_DIR}目錄下的.a文件惕稻,和${CURRENTCONFIG_SIMULATOR_DIR}目錄下的.a文件合并竖共,

在${CREATING_UNIVERSAL_DIR}目錄下,生成兩個設(shè)備都通用的靜態(tài)庫,

例如:lipo -create -output xy.a x.a y.a

二俺祠、xcode4中build Settings常見參數(shù)解析

1.Installation Directory:安裝路徑

靜態(tài)庫編譯時公给,在Build Settings中Installation Directory設(shè)置“$(BUILT_PRODUCTS_DIR)”

Skip Install設(shè)為YES

Installation Directory默認(rèn)為/usr/local/lib

因為Build Location默認(rèn)時,.a文件會放在很長(比如:/Users/xxx/Library/Developer/Xcode/DerivedData/xxxProgram

dalrvzehhtesxdfqhxixzafvddwe/Build/Products/Debug-iPhoneos)的路徑下蜘渣,或是我們target指定的路徑

Skip Install如果是NO,可能會被安裝到默認(rèn)路徑/usr/local/lib

2.Public Headers Folder Path:對外公開頭文件路徑

設(shè)為“include”(具體的頭文件路徑為:$(BUILT_PRODUCTS_DIR)/include/xx.h)

在最終文件.a同級目錄下生成一個include目錄

默認(rèn):/usr/local/include

Public Headers Folder Path這個路徑就是使用這lib的某工程需要依賴的外部頭文件.導(dǎo)入這路徑后淌铐,#include/import "xx.h"才能看到

3.User Header Search Paths:依賴的外部頭文件搜索路徑

設(shè)置為“$(BUILT_PRODUCTS_DIR)/include”

和2中路徑對應(yīng)

4.Per-configuration Build Products Path:最終文件路徑

比如設(shè)為“../app”,就會在工程文件.xcodeproj上一層目錄下的app目錄里蔫缸,創(chuàng)建最終文件

默認(rèn)為$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

等于$(BUILT_PRODUCTS_DIR)

5.Per-configuration Intermediate Build Files Path:臨時中間文件路徑

默認(rèn)為:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

6.Code Signing Identity:真機(jī)調(diào)試的證書選擇

選一個和Bundle identifier相對應(yīng)的證書

Library Search Paths:庫搜索路徑

Architectures:架構(gòu)腿准,設(shè)為 armv6 或 armv7

ValidArchitectures:應(yīng)用框架,可以設(shè)為?armv6捂龄、armv7 或i386

Product Name:工程文件名释涛,默認(rèn)為$(TARGET_NAME)

Info.plist File:info文件路徑

Build Variants:默認(rèn)為normal

Other Linker Flags:其他鏈接標(biāo)簽

設(shè)為“-ObjC”

當(dāng)導(dǎo)入的靜態(tài)庫使用了類別,需要設(shè)為-ObjC

iOS Deployment Target:ios部署對象

比如可以選擇設(shè)為倦沧,ios3到ios5的一種版本

Prefix Header:預(yù)編頭文件(比如:UtilLib/UtilLib-Prefix.pch)

Precompile?Prefix Header:設(shè)為“Yes”唇撬,表示允許加入預(yù)編譯頭

三、workspace(工作區(qū))

作用:管理多個工程(project)展融,多工程聯(lián)編

四窖认、workspace多工程聯(lián)編設(shè)置

一、

1.新建一個靜態(tài)庫工程,比如UtilLib扑浸,并生成UtilLib.h和UtilLib.m文件

2.選中需要公開的頭文件烧给,

把右側(cè)欄的Target Membership中設(shè)置為public

或則,選中工程目錄target的Build Phases標(biāo)簽的copy headers項喝噪,在public中添加要公開的頭文件

3.Architectures設(shè)為:armv6 armv7

4.ValidArchitectures設(shè)為:armv6 armv7 i386

5.Build Products Path設(shè)為:$(SRCROOT)/../build

6.Per-configuration Build Products Path設(shè)為:

$(SRCROOT)/../build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

7.Per-configuration Intermediate Build Files Path設(shè)為:

$(SRCROOT)/../build/$(TARGET_NAME).build/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

8.設(shè)置安裝路徑:Installation Directory項

9.設(shè)置對外公開的頭文件路徑:Public Headers Folder Path項

10.為靜態(tài)庫添加依賴的shell腳本

選中工程目錄target的Build Phases標(biāo)簽础嫡,點擊由下角的Add Build Phase按鈕

在彈出的菜單里選擇Add run script項,然后頁面中會多出一個Run Script項

在黑框里填寫"$SRCROOT/mergeArmSymbols.sh"

建立對此腳本的依賴(編譯靜態(tài)庫的后會運行此腳本)

如果編譯時設(shè)備選的是iphone simulator:

則此腳本會在對應(yīng)iphone device的產(chǎn)品目錄Debug-iphoneos中酝惧,生成對device有用的.a靜態(tài)庫榴鼎,

相反,如果設(shè)備選的是iphone?device:

則此腳本會在對應(yīng)iphone simulator的產(chǎn)品目錄Debug-iphoneos中晚唇,生成對simulator有用的.a靜態(tài)庫

最后巫财,此腳本調(diào)用lipo工具,把本工程生成靜態(tài)庫與此腳本生成的靜態(tài)庫合并哩陕,生成simulator和device都通用的.a文件

11.具體bash shell腳本如下:

mergeArmSymbols.sh

下載右邊的圖片

平项,然后把后綴改為.sh(其實就是上面的腳本,因為博客園只能上傳圖片)

靜態(tài)庫編譯后的目錄結(jié)構(gòu)如下:

二悍及、

1.新建主工程闽瓢,比如Nuno,添加對靜態(tài)庫的依賴

點擊工程并鸵,在Build Phases標(biāo)簽的Link Binary With Libraries項中點擊加號添加UtilLib.a庫

選中上面的紅色項鸳粉,在右邊欄的Location選Relative to Project扔涧,把值設(shè)為../libs/libUtilLib.a

2.設(shè)置主工程依賴的外部頭文件路徑:User Header Search Paths項

$(SRCROOT)/../include

3.設(shè)置Header Search Paths為:$(SRCROOT)/../include

4.設(shè)置Library Search Paths為:$(SRCROOT)/../libs

編譯運行即可實現(xiàn)聯(lián)編

(備注:選擇模擬器iphone 5.0simulator园担,編譯靜態(tài)庫的時,最終文件會在Debug-iphonesimulator枯夜,就算成功.a文件還是紅色弯汰,

這是可能是xcode的bug,不會自動切換路徑

因為$(BUILT_PRODUCTS_DIR)所指的位置湖雹,是build/Debug-iphonesos,不是包含最終.a文件的Debug-iphonesimulator咏闪;

選擇ios Device,編譯成的最終文件才在build/Debug-iphonesos下摔吏,.a文件變成非紅色

所有得用mergeArmSymbols.sh腳本來解決)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸽嫂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子征讲,更是在濱河造成了極大的恐慌据某,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗箍,死亡現(xiàn)場離奇詭異癣籽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門筷狼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓶籽,“玉大人,你說我怎么就攤上這事埂材∷芩常” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵俏险,是天一觀的道長茬暇。 經(jīng)常有香客問我,道長寡喝,這世上最難降的妖魔是什么糙俗? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮预鬓,結(jié)果婚禮上巧骚,老公的妹妹穿的比我還像新娘。我一直安慰自己格二,他們只是感情好劈彪,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顶猜,像睡著了一般沧奴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上长窄,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天滔吠,我揣著相機(jī)與錄音,去河邊找鬼挠日。 笑死疮绷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚣潜。 我是一名探鬼主播冬骚,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懂算!你這毒婦竟也來了只冻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤计技,失蹤者是張志新(化名)和其女友劉穎喜德,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酸役,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡住诸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年驾胆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贱呐。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡丧诺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奄薇,到底是詐尸還是另有隱情驳阎,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布馁蒂,位于F島的核電站呵晚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沫屡。R本人自食惡果不足惜饵隙,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沮脖。 院中可真熱鬧金矛,春花似錦、人聲如沸勺届。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽免姿。三九已至饼酿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚膊,已是汗流浹背故俐。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留澜掩,地道東北人购披。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像肩榕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惩妇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容