最近做到一些項目想到用 OC/Swift混編的問題、為了搞懂 bridge header 這個文件是咋個情況、卻一致報錯。最后不知不覺發現問題問題居然出在 Podfile 上。
開始我是從 IT 江湖的客戶端開始了解Swift 的。git 下載下來發現build 不成功局讓Clear 都是fail。不明白就把提示的問題放到網上去搜索發現還是不能解決問題。后來干脆自己建一個新項目發現還是存在問題。
error: unable to read module map contents from 'Target Support Files/Pods-SwiftyJSON/Pods-SwiftyJSON.modulemap': Error Domain=NSCocoaErrorDomain Code=260 "The file “Pods-SwiftyJSON.modulemap” couldn’t be opened because there is no such file." UserInfo=0x7faa00b59880 {NSFilePath=/Users/kyjun/Downloads/itjh-new15.01/Pods/Target Support Files/Pods-SwiftyJSON/Pods-SwiftyJSON.modulemap, NSUnderlyingError=0x7fa9fde95400 "The operation couldn’t be completed. No such file or directory"} error: unable to read module map contents from 'Target Support Files/Pods-SwiftyJSON/Pods-SwiftyJSON.modulemap': Error Domain=NSCocoaErrorDomain Code=260 "The file “Pods-SwiftyJSON.modulemap” couldn’t be opened because there is no such file." UserInfo=0x7faa00ad0e50 {NSFilePath=/Users/kyjun/Downloads/itjh-new15.01/Pods/Target Support Files/Pods-SwiftyJSON/Pods-SwiftyJSON.modulemap, NSUnderlyingError=0x7fa9feadd930 "The operation couldn’t be completed. No such file or directory"}
后來發現“/Users/kyjun/Downloads/itjh-new15.01/Pods/Target Support Files/Pods-SwiftyJSON/Pods-SwiftyJSON.modulemap” 這個路徑根本就不是我的項目路徑啊!真心搞不懂。
最后將問題鎖定在Podfile 上。下面介紹一下我之前的Podfile的寫法:
platform :ios, '7.0' pod 'MBProgressHUD', '~> 0.8' pod 'FMDB', '~> 2.2' pod 'SDWebImage', '~> 3.5.2' pod 'Reachability', '~> 3.1.1' pod 'ASIHTTPRequest', '~> 1.8.1' pod 'DTCoreText', '~> 1.6.11' pod 'MJRefresh', '~> 1.4.6' pod 'UMengFeedback', '~> 2.2' pod 'ZBarSDK', '~> 1.3.1' pod 'CHTCollectionViewWaterfallLayout', '~> 0.9.1' pod 'DZNEmptyDataSet', '~> 1.5.2' pod 'MWPhotoBrowser'
其實這樣寫是沒有問題的、但是有可能會照成上面提到的錯誤信息。原因猜想可能是因為沒有指定對應的 porject 或者 podfile 沒有指定當前文件應該用於那個項目。導致在其他項目中用到同樣的類庫是會提示路徑不匹配。
給大家一個建議以后創建項目是先創建一個空項目。
接下來看看我現在的Podfile 的寫法:
=begin 這里寫注釋 =end source 'https://github.com/CocoaPods/Specs.git' platform :ios, '7.0' inhibit_all_warnings! xcodeproj 'Demo.xcodeproj' target :Demo1 do pod 'MBProgressHUD', '~> 0.9.1' pod 'AFNetworking', '~> 2.5.4' pod 'MJRefresh', '~> 2.3.2' end target :Demo2 do pod 'MBProgressHUD', '~> 0.9.1' pod 'AFNetworking', '~> 2.5.4' pod 'MJRefresh', '~> 2.3.2' end
說說重點:xcodeproj ‘demo.xcodeporj’ 這個指明用於那個項目.
target :Demo1 指明對應那個Target
這里說一說 為什么最好先建一個空項目。 大家都知道一個項目可以有多個Target 如果我們的項目名稱和Target 的名稱一致就會產生一個 Pod.debug 的配置文件,也就不會產生一個和Target 一致的Pod-target.debug 的配置文件。pod.debug 也是一個默認的配置文件。
如果我們在 xcodeporj 和 Target 之間 添加 pod ‘AFNetworking’ 同樣會產生這個默認的配置文件。
遇到問題記錄下來也希望看到的同仁有不同意見的一起討論!