Masonry是iOS平台处理Auto Layout的一个替代方案,我们可以通过官方的例子学习它的使用方法。但是官方demo使用cocoapods命令pod install之后会出现一些问题。
1、
[!] An error occurred while processing the post-install hook of the Podfile.
undefined method `project' for #<Pod::Installer:0x007fe69b0bf458>
这是因为在cocoapods0.38版本做出了一个改变,需要在Xcode打开Masonry目录中的Podfile文件搜索project改成pods_project。
为了让Podfile文件适配其他同事低版本的cocoapods,因为pod是基于ruby实现的,所以可以将Podfile文件中的
classy_pods_target = installer.project.targets.find{ |target| target.name == COV_TARGET_NAME }
unless classy_pods_target
raise ::Pod::Informative, "Failed to find '" << COV_TARGET_NAME << "' target"
end
改为
if defined? installer.project
classy_pods_target = installer.project.targets.find{ |target| target.name == COV_TARGET_NAME }
unless classy_pods_target
raise ::Pod::Informative, "Failed to find '" << COV_TARGET_NAME << "' target"
end
end
if defined? installer.pods_project
classy_pods_target = installer.pods_project.targets.find{ |target| target.name == COV_TARGET_NAME }
unless classy_pods_target
raise ::Pod::Informative, "Failed to find '" << COV_TARGET_NAME << "' target"
end
end
这样,无论在哪个版本的pods上都可以得到正确的配置。
2、接下来会遇到另外一个问题。
[!] An error occurred while processing the post-install hook of the Podfile.
[!] Failed to find 'Pods-MasonryTestsLoader-Masonry' target
解决方法为,在上面的Podfile文件中将
COV_TARGET_NAME = "Pods-MasonryTestsLoader-Masonry"
改为
COV_TARGET_NAME = "Pods-MasonryTestsLoader"
即删掉name尾部的 -Masonry。
好了,到这里应该就可以正常进行了。
当然,还有一种更为简单直接的解决方法,就是将Podfile文件中
post_install do |installer|
后面的代码删除掉就行了。
参考链接:https://github.com/CocoaPods/CocoaPods/issues/3747
http://huang.sh/2015/09/cocoapods-0-38导致的undefined-method-project-for/
https://github.com/SnapKit/Masonry/blob/master/Podfile
https://github.com/SnapKit/Masonry/issues/294