use_frameworks!仅限一些豆荚或快餐豆荚

Dur*_*n.H 13 objective-c ios cocoapods swift wbwebviewconsole

我的项目中有两个Objective CSwiftPod.

pod 'WBWebViewConsole', '~> 1.0.1' 
use_frameworks! 
pod 'XWebView', '~>0.9.5’ 
pod 'Starscream', '~> 1.1.3'
Run Code Online (Sandbox Code Playgroud)

由于swift POD(XWebView,Starscream)只能作为框架添加,我必须使用 use_frameworks!

但这使得所有POD都成为框架,包括Objective-C POD(WBWebViewConsole).

但它会导致Objective-C POD出现问题,但我不打算将Objective-C POD作为框架.

那么无论如何我可以忽略几个POD被转换为框架?

谢谢.

更新:

如何重现这个问题?

问题出在POD WBWebViewConsole上

在任何具有互联网连接的iOS 8+设备中运行附加项目,因为它从谷歌驱动器加载html文档.

在html doc中...单击General/Info/Warning/Debug/Error Log

在此输入图像描述

只要你点击上面的任何按钮,你就会在html页面上出现一些文字....

该库是关于捕获在html页面中生成的日志...

每当你点击按钮而不是在html页面中显示一些文本时我会在背景中写一些日志.

在此输入图像描述

现在点击按钮获取日志 ...并在Xcode IDE中查看日志...您将看到在html中生成的所有控制台日志

在此输入图像描述

获取日志 - >是一个超级强加于webview的本机按钮.该库让我们从wkwebview读取控制台日志.

现在在POD你取消注释以下几行

use_frameworks!
pod 'PLCrashReporter'
pod 'XWebView', '~> 0.9.5’
Run Code Online (Sandbox Code Playgroud)

并做pod安装

然后将以下代码粘贴到ViewController之上

import WBWebViewConsole
Run Code Online (Sandbox Code Playgroud)

这是一个项目,所有这些都没有注释重现问题所需的所有更改

现在你在设备上运行项目并单击html页面中的一些按钮并单击获取日志,你看不到在html页面中生成的注释

具体来说,WBWKWebView中实现的委托方法不会被解雇.

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
- (void)wb_evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(NSString *, NSError *))completionHandler
Run Code Online (Sandbox Code Playgroud)

但是在创建WBWKWebViewURL 的实例并加载URL时,此类的所有必要委托都会被触发.

上面的代表应该在单击html页面中的按钮时写入日志时触发

Muj*_*aFR 21

use_frameworks!除了您选择作为框架的 pod 之外,您可以将所有 pod覆盖并安装为静态

Podfile 中使用use_frameworks!And 在文件末尾添加

dynamic_frameworks = ['aaa','bbb'] # <- swift libraries names

# Make all the other frameworks into static frameworks by overriding the static_framework? function to return true
pre_install do |installer|
  installer.pod_targets.each do |pod|
    if !dynamic_frameworks.include?(pod.name)
      puts "Overriding the static_framework? method for #{pod.name}"
      def pod.static_framework?;
        true
      end
      def pod.build_type;
        Pod::BuildType.static_library
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)


小智 4

初始化时JSBridge,它会向 webview 添加一些“UserScripts”,这些源是从以前版本的 [NSBundle mainBundle] 加载的。但如果它在框架中,则资源文件位于框架捆绑包中,而不是mainBundle.

\n\n

所以解决办法是WBWebViewConsoleDefines

\n\n

替换这个

\n\n
inline static NSBundle * WBWebBrowserConsoleBundle()\n{\nreturn [NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], @"WBWebBrowserConsole.bundle"]];\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
inline static NSBundle * WBWebBrowserConsoleBundle()\n{\nreturn [NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/%@", [NSBundle bundleForClass:[WBWebViewConsole class]], @"WBWebBrowserConsole.bundle"]]; \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

其实作者已经发布了新版本,也有修复

\n\n

pod \'WBWebViewConsole\', \'~> 1.0.2\xe2\x80\x99

\n\n
    \n
  1. 吊舱安装
  2. \n
  3. 重新启动 Xcode 并清理您的项目
  4. \n
  5. 再次构建并运行
  6. \n
\n\n

注意:这是不可能的。如果你使用_frameworks!一切都成为动态框架。

\n