我的项目中同时有Objective C
和Swift
Pod。
pod 'WBWebViewConsole', '~> 1.0.1'
use_frameworks!
pod 'XWebView', '~>0.9.5’
pod 'Starscream', '~> 1.1.3'
由于swift POD(* XWebView 、 Starscream )只能作为框架添加,因此我必须使用use_frameworks!*
但这使得所有POD都成为框架,包括Objective-C POD(* WBWebViewConsole *)。
但它会导致Objective-C POD的问题,但我不打算使Objective-C POD作为框架。
那么,有没有什么方法可以忽略一些POD,使其不被转换为框架呢?
谢谢。
更新:
- 如何重现问题?*
POD WBWebViewConsole存在问题
在任何有互联网连接的iOS 8+设备上运行attached project,因为它从Google Drive加载HTML文档。
在html文档中...单击常规/信息/警告/调试/错误日志
每当你点击上面的任何一个按钮时,你会在html页面上出现一些文本。
该库是关于捕获在html页面中生成的日志...
每当你点击按钮,除了显示一些文本在html页面,我写一些日志在后台。
现在单击按钮get logs...并在Xcode IDE中查看日志...您将看到以html格式生成的所有控制台日志
获取日志-〉是webview上的一个本地按钮。该库允许我们从wkwebview读取控制台日志。
现在,在POD中取消注解以下行
use_frameworks!
pod 'PLCrashReporter'
pod 'XWebView', '~> 0.9.5’
并执行pod安装
然后将以下代码粘贴到ViewController顶部
import WBWebViewConsole
下面是project,其中所有这些都是未注解的,并且包含重现问题所需的所有更改
现在u运行项目上的设备,并点击一些按钮在html页面,并点击 * 得到日志 * 你不能看到这是在html页面生成的评论
具体如下,WBWKWebView中实现的委托方法不会被触发。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
- (void)wb_evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(NSString *, NSError *))completionHandler
但是在创建WBWKWebView
的示例并加载URL时,该类的所有必要委托都被触发。
当点击html页面中的按钮写入日志时,应该触发上述委托
7条答案
按热度按时间xqk2d5yq1#
您可以覆盖
use_frameworks!
并将所有pod安装为静态,但您选择作为框架的pod除外在Podfile中使用
use_frameworks!
并在文件末尾添加vof42yt12#
JSBridge
init时会在webview中添加一些"UserScripts",在以前版本中是从[NSBundle mainBundle]中加载的源代码,但如果是在框架中,则资源文件在框架包中,而不是mainBundle
。因此,修复位于
WBWebViewConsoleDefines
中替换此
与
其实作者已经发布了新版本,它也有修复
pod "WBWebView控制台","~〉1.0.2 "
1.重新启动Xcode并清理项目
1.重建并重新运行
注:这是不可能的.如果你使用_framages!所有的东西都变成动态框架.
wbgh16ku3#
基于CocoaPods的成员:
这在一般情况下是不可能的,因为存在可传递的依赖关系。如果Pod A是动态构建的,并且依赖于静态构建的Pod B,而应用也依赖于Pod B,则不可能构建,因为Pod A在链接时会丢失Pod B的符号,或者您最终会得到Pod B的多个副本。
但是,您应该能够创建一个插件来支持像您这样的特定情况。
4bbkushb4#
不需要在use_framework!上面指定目标c pod。
7lrncoxx5#
在我的项目中,我同时使用Objective-C和Swift,pod。如果你必须包含Swift编写的pod,你必须使用
use_frameworks!
指令。对非Swift pod使用use_frameworks!
指令不会导致问题。将该指令放在pod列表的顶部。一般来说,Objective-C pod应该只使用
import ModuleName
在你想要使用框架的swift文件中工作,但是如果没有,你应该尝试添加bridging-header.h到你的项目中,并在那里添加#import
作为objective-c框架的头文件。请尝试这个,并在这里做更新的结果.
332nm8kg6#
从@MujtabaFR的回答来看,我有错误说在我的pod全局导入头文件中找不到文件,我无法解决这些错误。所以在已经工作的静态库中,我尝试插入我的动态框架,所以我尝试了他的向后兼容的解决方案,所以反转他的解决方案对我来说很好,这里供参考
因此,这仍然是我现有的代码,并插入我的新swift pod作为动态框架。
感谢您发送编修。
btqmn9zl7#
把这个添加到你的播客文件中试试吧。