We have built an awesome Flutter project, which has great functionality we want to export as a framework, just like native libraries do, so that the source code is hidden (convert to dynamic framework).
We have followed the instructions: https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
which allows us to include Flutter project in a Host iOS app, initializing FlutterEngine and use of FlutterViewController.
The question is, how do we create a dynamic framework, let's say SomeProductSDK.framework, which will expose a public …
iOS 是否失去了使用动态框架的大部分优势?
由于 iOS 会将所需的所有动态框架复制到应用程序包中,因此它不会在应用程序之间共享动态框架并节省内存。除了与主应用程序及其扩展程序共享内存。
使用的应用程序dlOpen无法发送到 App Store。这意味着 Apple 禁止正式使用动态框架。
旧的 Apple 文件说动态框架可以节省应用程序启动时间,但新文件说它们没有。旧文件是否过时?这是比较:
这是否意味着如果我们使用动态框架dlOpen稍后加载它们,它会比静态框架更快?因为动态框架在开始时需要一些时间来链接,但它们在加载到内存中节省了更多时间。静态框架的加载时间大于动态框架的链接时间。真的吗?
所以看起来在 iOS 上使用动态框架没有任何好处,对吧?
在 macOS 和 Linux 上呢?动态框架有什么优势吗?如果是这样,它们是如何工作的?
frameworks launch-time ios dynamic-frameworks static-framework
根据我的研究,iOS使用大多数(所有)系统框架作为动态框架。应用启动时,iOS是否会全部加载它们?还是iOS可能在以后iOS真正需要框架时加载它?
在应用启动时加载它的优点:当iOS在动态框架中调用函数时,可以节省更多时间。
延迟加载的优点:节省更多内存。
https://github.com/realm/realm-cocoa/blob/master/scripts/strip-frameworks.sh
我们一直在使用此脚本来删除动态框架的体系结构。它已与Xcode 9一起使用。
在Xcode 10中,它没有删除体系结构。Xcode 10中有什么可以打破这一点的?我们有一个理论认为它与新的构建系统有关
我得到这个
“加载失败,错误错误域=NSURLErrorDomain 代码=-999“已取消””
尝试在我的自定义框架中调用 api 时。但是当我在另一个项目中运行相同的代码时,它工作正常并给出正确的响应。下面是我的代码。在正常项目中不需要的自定义框架中有什么我必须做的吗?
func invokePostWebServiceCallLogin(request : String,param : NSDictionary,completion : @escaping (_ webResponse : WebserviceResponseClass) ->Void) -> Void {
let headers = [
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded"
]
let passingParameter : [ String : AnyObject] = param as! [String : AnyObject]
UIApplication.shared.isNetworkActivityIndicatorVisible = true
WebServiceHelperClass.Manager.request(URL(string: request)!, method: .post, parameters: passingParameter,encoding: URLEncoding.default, headers: headers).validate().responseJSON {
response in
UIApplication.shared.isNetworkActivityIndicatorVisible = false
switch response.result {
case .success:
let webResult = WebserviceResponseClass()
webResult.isSuccess = true
webResult.responseData = response.data as NSData?
webResult.error …Run Code Online (Sandbox Code Playgroud)