iOS技术收藏IOS 超级无敌快速入门iOS

iOS沙盒管理工具FHHSandBoxViewer

2018-04-28  本文已影响11人  002and001
KeyWord:沙盒文件递归遍历、Swift里的闭包多个weak修饰、iOS使用AirDrop
iOS沙盒查看器FHHSandBoxViewer了解一下?
操作演示.gif
平时真机开发调试App的时候想查看沙盒具体内容一般做法是连接Xcode下载整个App的沙盒,不方便,于是自己写了一个沙盒查看器。

如何导入使用

Swift下

1.拖入文件夹FHHSandBoxViewer到你的工程;
2.找个入口然后添加如下代码:

    let title = FHHSandboxViewController.defaultNavTitle
    let path = FHHSandboxViewController.defaultPath
    let sandBoxViewerVC = FHHSandboxViewController.init(navTitle: title, path: path)
    let nav = UINavigationController.init(rootViewController: sandBoxViewerVC)
    nav.navigationBar.isHidden = true
    nav.navigationBar.isTranslucent = true
    self.present(nav, animated: true, completion: {
        sandBoxViewerVC.fhh_enterType = .present
    })
OC下

1.拖入文件夹FHHSandBoxViewer到你的工程;
2.如果你的项目之前没有使用Swift,需要配置你Xcode的ProductName-Bridging-Header.h文件,可以参考OC和Swift混编开发配置;
3.找个入口添加如下代码:

NSString *defaultTitle = [FHHSandboxViewController defaultNavTitle];
NSString *defaultPath = [FHHSandboxViewController defaultPath];
FHHSandboxViewController *sandBoxViewerVC = [[FHHSandboxViewController alloc]
                                                initWithNavTitle:defaultTitle
                                                            path:defaultPath];
UINavigationController *nav = [[UINavigationController alloc]
                                  initWithRootViewController:sandBoxViewerVC];
[nav.navigationBar setHidden:YES];
[nav.navigationBar setTranslucent:YES];
[self presentViewController:nav animated:YES completion:^{
    sandBoxViewerVC.fhh_enterType = FHHEnterTypePresent;
}];

MARK:

Swift闭包中用weak修饰多个对象
FHHSandboxViewController.swift中

在viewMoel的闭包中需要用weak修饰self并且对viewMoel本身也要weak修饰防止内存泄漏,但是之前没试过一个闭包多个weak修饰的写法,翻了翻官方文档,写法如下:

    private func configSandboxViewModelDidSelectBlock(viewModel: FHHSandboxViewModel, subPath: String) {
        viewModel.didSelectBlock = { [weak self, weak viewModel] in
            if (self?.isSelected)! {
                viewModel?.isSelected = !(viewModel?.isSelected)!
                self?.tableView.reloadData()
                self?.refreshAccessoryView()
            } else {
                if (viewModel?.isDir)! {
                    let vc = FHHSandboxViewController.init(navTitle: (viewModel?.pathLastName!)!, path: subPath)
                    self?.navigationController?.pushViewController(vc, animated: true)
                }
            }
        }
    }
使用AirDrop等分享内容:
        let shareURLArray = self.getSelectedURL()
        let vc = UIActivityViewController.init(activityItems: shareURLArray, applicationActivities: nil)
        let completionWithItemsHandler = { (type: UIActivityType?, isSucceed: Bool?,array: Array<Any>?, error: Error?)  in
            FHHLog("error:\(String(describing: error?.localizedDescription))")
            self.resetToUnSelectState()
            self.tableView.refresh(viewModelArray: self.viewModelArray)
        }
        vc.completionWithItemsHandler = completionWithItemsHandler
        self.present(vc, animated: true, completion:nil)

建议使用AirDrop导出,第三方软件对分享内容、大小、数量有限制

Tip:

1.使用AirDrop分享受系统保护的文件夹或文件会失败,不同系统或设备可能会有差别;例如,我在iOS10.1.1-iPhone7上分享Doucnemts、Library、temp目录失败,在iOS11.3-iPhone8上分享Doucnemts、Library、temp则成功,详情查看控制器打印的错误信息。
2.模拟器下的话可以使用软件TySimulator查看沙盒内容,也很方便。
3.手机空间不足也可能会导致AirDrop分享失败。

上一篇 下一篇

猜你喜欢

热点阅读