iOS之檔案拖入專案中的多個選項區別
號外!!!
文末有關於xcode9 Beta拖動檔案的更新注意點
一、選項認識
我們在做專案的時候時常會遇見需要匯入一些類檔案和資原始檔之類的,當我們往專案中拖入這些檔案的時候就會出現一些選項,這個時常會讓我魂牽夢繞,有時候就因為這個問題搞了老半天,所以現在準備好好的跟大家聊一聊這幾個選項。首先我們看看有哪幾個選項,請看以下截圖:
那這個就是我們經常遇見的了,我們在下文中按照順序把這幾個選項說成1234選項,如果說勾選124選項那麼就是下圖中第一個和第二個和第四個選項選中了,具體請看勾選了124的下圖:
各選項
- 選項1 (Destination: Copy items if needed)
- 選項2 (Added folders:create groups)
- 選項3 (Added folders:create folder references):
- 選項4 (Add to targets)
PS: 以上是用拖入的方式,如果我們採用Add Files to "......"這種方式其實也是一樣的,也能夠出現以上的這四個選項:
那怎麼把這四個選項弄出來呢,通過以下這種方式,點選options:
二、獲取路徑
要說這四個選項就要說到幾個檔案路徑了
- 專案工程路徑:
- 原檔案所處路徑:這個我都是放在桌面上,所有以下會用到的原檔案的路徑都在桌面上,並且我已經分了類,有圖片資源和其他型別的資原始檔(此處為資料庫檔案),有原始檔,有資料夾,如下圖:
- Bundle所在路徑,我通過以下程式碼獲取了Bundle路徑(這個也就是包路徑):
- (void)getTheBundlePath{
NSString *path = [[NSBundle mainBundle] bundlePath];
NSLog(@"BundlePath = %@",path);
}
列印之後結果如下:
BundlePath = /Users/kodie/Library/Developer/CoreSimulator/Devices/CCDD5424-A30E-40A4-9DE7-D6F05E2E5FDA/data/Containers/Bundle/Application/B6D499F2-9584-4CDB-8B37-54010B9EF754/KODTESTTEST.app
右鍵顯示包內容:
PS:注意這個Bundle路徑每次執行之後都會變的,先把原來生成的資料夾刪除掉然後再新建一個Bundle路徑:
PS:獲取Bundle路徑還有一種方法,如下:
- 沙盒路徑,通過以下程式碼獲取沙盒路徑:
- (void)getTheSandboxPath{
NSString *path = NSHomeDirectory();
NSLog(@"SandboxPath = %@",path);
}
列印如下:
SandboxPath = /Users/kodie/Library/Developer/CoreSimulator/Devices/CCDD5424-A30E-40A4-9DE7-D6F05E2E5FDA/data/Containers/Data/Application/535DA1FB-D454-400A-969B-98B71B7ADA07
沙箱路徑在模擬器中也是類似Bundle一樣的效果,但是沙箱最後能定位到改變之後的位置,這個很奇怪,Bundle路徑是不可以的,我感覺Bundle每次執行之後因為裡面的內容變了就是變了,但是沙箱的是程式執行的路徑,所以每次執行之後執行時產生的資料和臨時資料都是需要儲存和儲存的,所以沙箱的路徑最後能定位出來,但是Bundle就沒有這樣的設定需要了。當然這個是在模擬器中,如果在真機中應該Bundle和沙盒路徑一旦生成都是不變的應該(這個如果哪位大神有更好的見解,可以提出來幫助我改正):
三、選項1(Destination)的作用
首先由於選項1是可以可選可不選的,選項2和3是必須選一個,選項4也是可選可不選的,那麼我們先確定選項1的作用。
選項1:Destination : Copy items if needed
根據多次拖拽後發現這個選項的作用僅限於是否將原檔案拷貝到工程中你拖拽所在的位置,如果勾選那麼會將原檔案拷貝一份到工程目錄中你拖拽的相應位置,如果選擇不勾選,那麼就不會拷貝一份到工程目錄中,但是一定會在開啟的工程中看見此檔案會放在拖拽的相應位置。此處選項2、3任意勾選和4勾不勾選都不會影響1的作用,因為1只是拷貝檔案到工程目錄底下,所以以下我們選擇24都勾選來做
- 勾選1:
原文檔案(存放在桌面):
拖入工程勾選124
工程中:
工程目錄中:
- 不勾選1:
原檔案不變(存放在桌面):
拖入工程我選擇24:
工程中:
工程目錄中:
PS:雖然沒有拷貝一份檔案到真實的工程目錄中,但是會引用原檔案,但會有一個缺陷,一旦原檔案的路徑發生了改變就無法找到對應的檔案了。
四、選項2、3(Added folders)的作用
經過多次的拖拽試驗發現:選項2、3對於檔案來說都是一樣的效果,但是對於資料夾來說就有說法了。以下是針對於資料夾來說。選擇2還是選擇3針對於資料夾來說只會影響是否會在生成的app檔案中(或者Bundle中)存在真實路徑。(另:不管2還是3都會在工程中能看見拖入的原始檔或者資原始檔或者資料夾)
驗證思路:建立一個資料夾,資料夾中存放類原始檔或者資原始檔,然後將這個資料夾拖入工程中。此處1就不再驗證了,所以勾選1不1的也就不重要了,那麼我們此處預設勾選4.
資料夾(存放在桌面上):
資料夾中內容:
選項2:Create groups
不會在生成的.app檔案(Bundle檔案)中存在真實資料夾
勾選24:
工程中:
PS:工程目錄中是沒有的因為沒有勾選1,不會拷貝到工程目錄中來,但是如果選擇了1只要是資料夾拖入進來之後在工程目錄中就是真實資料夾。
.app檔案中:
PS:其中原始檔就是會編入KODTESTTEST可執行檔案中,其他的資原始檔就直接在包內。具體如上!
選項3:Create folder references
會在生成的.app檔案(Bundle檔案)中存在真實資料夾,並且內部存放資原始檔
-
勾選34:
工程中:
PS:以上中資料夾是藍色的!!!
PS:工程目錄中是沒有的因為沒有勾選1,不會拷貝到工程目錄中來,但是如果選擇了1只要是資料夾拖入進來之後在工程目錄中就是真實資料夾。
.app檔案中:
PS:其中原始檔不會編入KODTESTTEST可執行檔案中,所有的檔案都還是在此目錄下待著!!!
PS:這也表明我們選擇34在拖入整個資料夾內容的時候,xcode不會自動把資料夾下的原始檔放入以下的Compile sources中,而選擇24的時候就會把資料夾下的原始檔放入Compile sources然後讓原始檔參與編譯最終形成可執行檔案:
即便我們手動去新增的時候也發現不能直接點開此資料夾展示子檔案去選擇子檔案編譯
總結:所以這個3一般是我們在專案中作為資原始檔夾來使用的,裡面存放專案中需要使用的資源,並且我們再次往裡面新增資原始檔的時候是不會再次彈出勾選124的對話方塊,往裡面拖什麼就要什麼!
五、選項4(Add to targets)的作用
經過多次拖拽試驗,得出的結果是勾選了4之後就會在你所選擇的target最後生成的.bundle中或者.app中或者.framework中(這三者中關於選擇2\3的不同在最後給出截圖)。反之如果不勾選那麼就不會存在於生成的.app/.framework/.bundle中了。
以下測試以.app為例,並且以勾選2位前提
選項4:Add to targets加入到某個或者多個target
PS:給大家推一篇關於Target的:iOS的多Target應用
原檔案(存放在桌面上):
- 不勾選4:
工程中:
.app中:
- 勾選4:
工程中:
.app中:
PS:綜上所述,大家應該很清楚4只跟你執行之後生成的.app或者.bundle/.framework等有關
說到這裡大家可能會問,如果我第一次沒有勾選4怎麼辦呢?那我們這裡手動教大家怎麼把丟失的4給找回來:
如果是原始檔,我們這裡選擇在Compile sources下新增相應的檔案,然後會編入.app的可執行檔案中:
如果是資原始檔,我們這裡選擇在Copy Bundle Resources下新增相應的資原始檔,然後會存放在包中:
六、總結
- 選項1的作用是將原檔案拷貝到工程目錄下,如果不勾選1那麼就不會拷貝,但是依然會引用原檔案。一旦原檔案的檔案的路勁改變了,那麼工程就會找不到該檔案。
- 選項2/3的作用對於檔案來說無所謂,但是對於資料夾來說就有區別了。如果是資料夾勾選了2的話那麼不會在生成的.app或者.bundle或者.framework中有對應的資料夾,並且原資料夾下的原始檔會參與編譯(當然這個是勾選了4的情況下或者Compile sources)生成可執行檔案,原資料夾下的資原始檔包括圖片、plist檔案或者其他資原始檔會放在生成的.app或者.bundle或者.framework中對應位置(當然勾選了4,或者手動新增了Copy Bundle Resources),具體位置我會在文末結束的時候都給大家貼出。
- 選項4的作用是新增到對應的Targget,那麼就決定了這個匯入的檔案或者資料夾會不會存在.app或者.bundle或者.framework中中。
七、文末擴充套件一
擴充套件一:針對於不同的Target存放的檔案和資料夾存放的路徑,看以下檔案會存放在哪兒:
-
.app
- .bundle
PS:這裡貼一下Bundle的建立iOS之Bundle的建立和使用
執行後右鍵show in finder:
右鍵顯示包內容:
存放在Resource底下的:
- .framework
PS:這裡貼一下靜態庫Framework的建立iOS之靜態庫Framework的建立
執行後show in finder:
八、文末擴充套件二
擴充套件二:刪除檔案或者資料夾的時候,會出現一個對話方塊,如下圖,那麼我們該選擇哪一個呢?
Xcode9 Beta拖動檔案更新注意點
注意了,我們如果升級到Xcode9 Beta版本後,再將別處的檔案直接拖入到工程中後,預設引用的是原檔案路徑,所以如果我們把原檔案給刪除掉之後就會出現檔案找不到的錯誤,所以我們應該按以下方式解決
- 首先將檔案拷貝至工程目錄需要放置的位置
- 採用如下截圖的方式新增檔案或者將剛剛拷貝到工程目錄下的檔案拖入到工程中即可。
以上!
相關文章
- <input type="file"> 選中多個檔案
- 多個excel檔案合併到一個檔案中的多個sheet表中Excel
- 加速檔案傳輸:檔案和UDP之間的區別UDP
- spring配置檔案中分別使用多個properties檔案Spring
- .ora檔案、.dbf檔案和.dat檔案的區別
- 如何批量複製多個檔案到多個目錄中(批量複製檔案,多對多檔案高效操作的方法)
- KeyboardMaestro_PathFinder_依次處理多個選中檔案
- 直播軟體原始碼,選項提供多選專案,彈出多選框原始碼
- ELF檔案中的各個節區
- 專案與專案群管理:主要區別和相似之處
- iOS多級選擇框架封裝與專案中的一些坑iOS框架封裝
- Win10系統選中多個檔案後右鍵選單選項變少丟失如何解決Win10
- Linux中檔案與目錄的區別Linux
- mysql 多個引數選項檔案my.cnf優先順序研究MySql
- 關於 Xcode 9 拖入檔案未生效的問題XCode
- JN專案-查詢的下拉選項只應顯示列表中存在的選項
- 專案經理之專案經理的選拔
- Golang 專案之配置檔案Golang
- 在多個檔案中import同一個檔案,webpack會多次打包嗎ImportWeb
- internet選項 對應的檔案
- 不點之Linux命令、選項及檔案概念Linux
- 文字檔案與二進位制檔案的區別
- 多個控制檔案的建立
- 管理多個專案:專案管理真正的挑戰專案管理
- Spring - 配置檔案中的classpath: 和 classpath*: 的區別Spring
- 一個專案中:只能存在一個 WebMvcConfigurationSupport (靜態檔案失效之坑)WebMVC
- iOS 同一個workspace下建立多個專案程式設計iOS程式設計
- 多個 EXCEL 檔案如何合併成一個檔案Excel
- PMP|論傳統專案與敏捷專案管理的區別敏捷專案管理
- java 中的檔案型別Java型別
- 專案經理之專案經理注意事項
- C#專案obj和bin檔案什麼區別和聯絡C#OBJ
- 在CocosStudio中自建的檔案中沒有錨點的選項
- 匯出多個檔案到一個Excel中的不同sheetsExcel
- Android主專案和Module中R類的區別Android
- linux-中塊裝置檔案和字元裝置檔案的本質區別Linux字元
- linux中的配置檔案/etc/profile和.bashfile 的區別Linux
- XamarinSQLite教程Xamarin.iOS專案中開啟資料庫檔案SQLiteiOS資料庫