最近做到一些项目想到用 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’ 同样会产生这个默认的配置文件。
遇到问题记录下来也希望看到的同仁有不同意见的一起讨论!