1. 程式人生 > >一個不小心引發的問題,installation failed invalid argument

一個不小心引發的問題,installation failed invalid argument

昨天在一個偶然的不小心中,出現了一個問題,如圖
這裡寫圖片描述
翻譯過來就是“安裝失敗,引數非法”,我也就是換了個圖片資料夾,為什麼會出現這種錯誤呢?

一.錯誤原因猜想

之前都是好的,沒有問題的,我只是從svn上更新了個圖片資料夾,然後本地少了圖片,懶得找,就把原來的 Remove Reference,再重新拉取,怎麼就不行了了?那麼問題肯定出現在這個圖片上,於是我就再看了下資料夾,發現
這裡寫圖片描述
看到沒,之前的資料夾都是黃色的,這個資料夾怎麼變成藍色的了?不過應該沒有問題吧,裡面有圖片啊,如圖
這裡寫圖片描述
查了這個錯誤都是清快取,重置模擬器等,試了試,都不行,於是搜了下這個藍色資料夾和黃色資料夾的區別。

二.跟蹤問題

原來是這樣子,黃色的資料夾是group,藍色的是folder

group :一般只在你的工程中是資料夾的形式,但是在本地的目錄中還是以散亂的形式放在一起的,除非你是從外部以group的形式引用進來的。
folder: 只能作為資源,整個引用進專案,不能編譯程式碼,也就是說,以folder形式引用進來的檔案,不能被放在complie> sources列表裡面。

我們比如拉圖片或者第三方進工程的時候,會出現如下:
這裡寫圖片描述
我們會發現在第二個選項Added folders這兒有兩個選擇

  1. Create groups
  2. Create folder references

這裡我們一般選擇的都是第一項Create groups

,沒有發現任何問題。而這次我選擇的是第二項Create folder references,點選完成,如下圖所示,資料夾是藍色的,並且編譯檔案列表裡面沒有 MBProgressHUD.m這個檔案,證明資料夾引用,只會引用資料夾,資料夾裡面的東西都會直接拷貝到 bundle 包,不參與編譯。
這裡寫圖片描述

而如果我選擇group,會發現

這裡寫圖片描述
Co'mpile Sources 裡面是有MBProgressHUD.m的。
這裡就是groupfolder的區別了,原來folder是這個樣子的,不知道蘋果搞出來哥folder有什麼意義,這裡我們平時用的大多都是group的,所以估計平時都沒注意這兒,現在可以有一定了解了。

三.解決問題

OK,問題找到了,那麼解決吧,把這個藍色的也就是folder資料夾刪除重新拉一個,選擇group,然後執行編譯,竟然還是這個問題

installation failed invalid argument

oh,my god !這什麼情況,於是重置模擬器,clean工程,都沒用,後來在這裡發現一個帖子
裡面講了

這裡寫圖片描述
這才恍然大悟,既然folder參與了編譯,只是裡面的檔案沒有被引用,重置模擬器肯定是沒有用的,把本地檔案裡面的快取清了然後重新執行肯定就是新的group的路徑了,要不執行的還是folder的快取路徑,果然,清完快取後Build Succeeded,到此,這個問題就解決了。

四.最後

最後總結一下,遇到問題首先找到問題的根結,然後分析解決,對於平時沒有在意的地方這種錯誤也需要注意,因為慣性思維可能使你沒有往這方面的原因上面想,總之,寫程式還是要小心啊!