iOS沙盒管理工具FHHSandBoxViewer

KeyWord:沙盒文件遞歸遍歷、Swift里的閉包多個weak修飾、iOS使用AirDrop
iOS沙盒查看器FHHSandBoxViewer了解一下?
操作演示.gif
平時真機開發(fā)調(diào)試App的時候想查看沙盒具體內(nèi)容一般做法是連接Xcode下載整個App的沙盒,不方便,于是自己寫了一個沙盒查看器。

如何導(dǎo)入使用

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混編開發(fā)配置;
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修飾防止內(nèi)存泄漏,但是之前沒試過一個閉包多個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等分享內(nèi)容:
        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導(dǎo)出,第三方軟件對分享內(nèi)容、大小、數(shù)量有限制

Tip:

1.使用AirDrop分享受系統(tǒng)保護(hù)的文件夾或文件會失敗,不同系統(tǒng)或設(shè)備可能會有差別;例如,我在iOS10.1.1-iPhone7上分享Doucnemts、Library、temp目錄失敗,在iOS11.3-iPhone8上分享Doucnemts、Library、temp則成功,詳情查看控制器打印的錯誤信息。
2.模擬器下的話可以使用軟件TySimulator查看沙盒內(nèi)容,也很方便。
3.手機空間不足也可能會導(dǎo)致AirDrop分享失敗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容