修改pod的第三方库的代码

原理:在pod install完成后执行脚本修改代码。

例子:在podfile文件的最后面添加以下代码

post_install do |installer|
  
  find_and_replace("Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m",
      "[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : description}]];", "[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : description,SDWebImageErrorResponse:imageData?:[NSData data]}]];")

      find_and_replace("Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h","FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain;\n\n", "FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain;\nFOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorResponse;\n\n\n")
      
      find_and_replace("Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m","NSErrorDomain const _Nonnull SDWebImageErrorDomain = @\"SDWebImageErrorDomain\";\n\n", "NSErrorDomain const _Nonnull SDWebImageErrorDomain = @\"SDWebImageErrorDomain\";\nNSErrorDomain const _Nonnull SDWebImageErrorResponse = @\"SDWebImageErrorResponse\";\n\n\n")
end


def find_and_replace(dir, findstr, replacestr)
  Dir[dir].each do |name|
    FileUtils.chmod("+w",name) #add
      text = File.read(name)
      replace = text.gsub(findstr,replacestr)
      if text != replace
         puts "Fix: " + name
         File.open(name, "w") { |file| file.puts replace }
         STDOUT.flush
      end
  end
  Dir[dir + '*/'].each(&method(:find_and_replace))
end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容