XCode是macOS上開發(fā)app不可缺少的開發(fā)者工具,不管是開發(fā)macOS上的應(yīng)用,還是iOS上的應(yīng)用,都離不開XCode環(huán)境。盡管其易用性廣受詬病,但由于蘋果app開發(fā)的封閉性,眾多開發(fā)者也不有苦不能言。近年來微軟針對macOS平臺發(fā)布了Visual Studio Code和Visual Studio for Mac這兩款開發(fā)工具,但是其目的顯然只是作為XCode的一種補(bǔ)充,要全盤替代XCode目前還不太現(xiàn)實。平時工作中由于負(fù)責(zé)開發(fā)維護(hù)Windows和Mac兩個平臺的應(yīng)用,因此常常需要用到XCode。但由于macOS系統(tǒng)本來就比較逆反,用慣了Winodws陡然切換到macOS,根本無所適從。對于XCode的使用更是如此。在此記錄下平時開發(fā)過程中經(jīng)常用的操作,以免自己再次切換到macOS上時一臉懵逼。
1. Install name and Runpath
install name是個什么玩意兒?簡單的說,是便于加載器dyld找到程序鏈接的庫文件。一般情況下dyld在加載程序的時候,會去一些固定的路徑(如/usr/local/lib, /usr/lib)下尋找需要的庫文件。如果沒有找到庫文件,程序就會加載失敗并報錯。install name的出現(xiàn)就是為了解決這種問題,允許用戶把庫文件放到其他位置,通過install name告訴dylb到哪去尋找這個庫文件。
在XCode中用好install name需要設(shè)置兩個地方:
(1)Build Settings->Linking,設(shè)置了Dynamic Library Install Name和Dynamic Library Install Name Base兩項。這里用到了@rpath變量,其含義和用法在前面的博客中有細(xì)說過。@rpath其實是“runpath”的縮寫,其值在第二步中設(shè)置。
(2)Build Settings->Runpath Search Paths,設(shè)置了runpath的搜索路徑。在這一項里面可以設(shè)置多個路徑。這里設(shè)置的每個項都會替換@rpath,從而達(dá)到靈活設(shè)置多個位置的目的。可以在下圖中看到,我們使用了@loader_path這個變量,其值實際上是可執(zhí)行程序的所在位置。因此,假設(shè)可執(zhí)行程序所在路徑為:/Users/zhangzhongke/Library/bin/test,@loader_path/../Resources”把上面設(shè)置的@rpath替換了之后就變成了:/Users/zhangzhongke/Library/bin/test/../Resources,實際也就是:/Users/zhangzhongke/Library/Resources/。我們這里runpath只設(shè)置了一個值,實際上有需要可以設(shè)置多個值。
通過命令otool -L可查看dylib文件的install name確實已經(jīng)設(shè)置成了我們