# Xcode `Info.plist` 問題診斷與解決 ## 問題描述 在 Xcode 進行 Google Maps 相關開發時,自行創建 Info.plist 並設定 Google Map API 金鑰,試圖顯示地圖,遇到以下錯誤: ```bash= Multiple commands produce '.../GoogleMapTest.app/Info.plist' ``` 這表示 Xcode **多次嘗試產生相同的 `Info.plist` 檔案**,導致 Build 失敗。 ## 開發環境 - Xcode 16.2 - swift-driver version: 1.115.1 - Apple Swift version 6.0.3 --- ## 排查過程 ### 手動生成 Info.plist 1. 點擊 file > new > File from Template 2. 在 iOS 底下選擇:Recource > Property List 3. 命名為 Info.plist 並加入必要內容 ![截圖 2025-03-21 下午3.50.03](https://hackmd.io/_uploads/SJ1A35c21x.png =75%x) ### 將 Xcode 編譯的 Info.plist 重新導向正確路徑(自行生成的 Info.plist 路徑) 1. 前往 Project > Target > Build Settings 2. 在底下尋找 Info.plist File 3. 將該格的路徑填入,**不要留白**,並確認 Generate Info.plist File 開啟 ![截圖 2025-03-21 下午3.48.09](https://hackmd.io/_uploads/BkdJnc92Jl.png =75%x) ### 移除 Bundle Resource `Info.plist` **不應該** 被加入 `Copy Bundle Resources`,因為 Xcode 會自動處理,這會導致 Xcode **兩次產生 `Info.plist`**,進而發生 `Multiple commands produce` 錯誤. 1. 前往 Project > Target > Build Phases 2. 打開 Copy Bundle Resources,確認裡面沒有 Info.plist,有的話就移除 ![截圖 2025-03-21 下午3.49.12](https://hackmd.io/_uploads/HJtjhq5nJg.png =75%x) ### **清理 Derived Data** 即使修正 `Build Settings` 和 `Build Phases`,仍然可能遇到錯誤,因為 Xcode 可能 **快取了錯誤的 `Info.plist` 設定**。 1. 關閉 Xcode 2. **打開終端機,執行**: ```bash rm -rf ~/Library/Developer/Xcode/DerivedData ``` 3. 重新打開 Xcode,**⌘ + B 重新 Build** --- ## **最終解決方案總結** | 問題 | 解法 | |------|------| | `Info.plist` 被 Xcode 兩次處理 | **從 `Build Phases > Copy Bundle Resources` 刪除 `Info.plist`** | | `Info.plist` 路徑錯誤 | **確認 `Build Settings > Info.plist File` 指向正確位置** | | Xcode 快取錯誤 | **刪除 `Derived Data`,確保 Xcode 重新讀取設定** | --- - **`Info.plist` 不應該加入 `Copy Bundle Resources`** - **`Build Settings > Info.plist File` 需要指向正確路徑** - **Xcode 可能快取錯誤的設定,需要刪除 Derived Data** --- ## 結論 剛接觸 Xcode 不久,以前都是使用 .gitignore 去管理重要資訊,但不確定在 swift 開發是如何處理這一塊。其實應該直接用原生的 Info.plist 或直接修改 Info 的內容會比較好,但為了方便,暫時先用手動生成 Info.plist 的方式,希望有大神能告訴我該如何處理會更妥當