투케이2K

221. (ios/swift) UIDocumentInteractionController presentOptionsMenu 사용해 애플리케이션에 저장된 파일 공유하기 (shared) 본문

IOS

221. (ios/swift) UIDocumentInteractionController presentOptionsMenu 사용해 애플리케이션에 저장된 파일 공유하기 (shared)

투케이2K 2022. 10. 7. 11:56
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

import UIKit
import Foundation

class A_Intro: UIViewController {
    
    
    
    // MARK: - [전역 변수 선언 실시]
    let ACTIVITY_NAME = "A_Intro"
    
    @IBOutlet weak var labelText: UILabel!
    
    var documentInteraction : UIDocumentInteractionController? = nil
    
    
    
    
    // MARK: - [뷰 로드 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidLoad() :: 뷰 로드 실시]")
        print("====================================")
        print("")
        
        // [테스트 함수 실행 실시]
        self.testMain()
    }
    
    
    
    
    
    // MARK: - [뷰 로드 완료]
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewWillAppear() :: 뷰 로드 완료]")
        print("====================================")
        print("")
    }
        
    
    
    
    
    // MARK: - [뷰 화면 표시]
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidAppear() :: 뷰 화면 표시]")
        print("====================================")
        print("")
        
    }
        
    
    
    
    
    // MARK: - [뷰 정지 상태]
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewWillDisappear() :: 뷰 정지 상태]")
        print("====================================")
        print("")
    }
        
    
    
    
    
    // MARK: - [뷰 종료 상태]
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidDisappear() :: 뷰 종료 상태]")
        print("====================================")
        print("")
    }
    
    
    
    
    
    // MARK: - [테스트 메인 함수 정의 실시]
    func testMain() {
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> testMain() :: 테스트 함수 시작 실시]")
        print("====================================")
        print("")
        
        /*
         ------------------------------------
         [요약 설명]
         ------------------------------------
         1. 디바이스 >> 내파일 >> 나의 iPhone >> 애플리케이션 >> 저장된 파일을 미리보기 및 공유할 수 있습니다
         ------------------------------------
         2. 필요 info plist 설정 :
         
         아이폰 파일 접근 설정 : Supports opening documents in place : YES
         아이튠즈 공유 설정 : Application supports iTunes file sharing : YES
         ------------------------------------
         */
        
        
        // [초기 변수 선언 실시]
        let searchFileName = "TWOK.txt"
        
        
        // [파일이 저장되어 있는 경로 확인]
        let fileManager = FileManager.default // 파일 매니저 선언
        let fileDirectory =  fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
        
        
        // [미리 보기 및 공유를 수행할 파일 경로 설정]
        let filePath = fileDirectory.absoluteString + searchFileName
        
        
        
        // [애플리케이션 폴더에 저장되어 있는 파일 리스트 확인]
        var fileList : Array<String>? = nil
        do {
            fileList = try FileManager.default.contentsOfDirectory(atPath: fileDirectory.path)
        }
        catch {
            print("")
            print("====================================")
            print("[fileList] : [Error] : \(error.localizedDescription)")
            print("====================================")
            print("")
        }
        
        
        // [찾으려는 파일이 정상적으로 포함되어있는지 확인]
        var fileContains = false
        if (fileList != nil){
            for i in stride(from: 0, through: fileList!.count-1, by: 1) {
                
                if ("\(fileList![i])" == searchFileName){ // [찾으려는 파일 명인 경우]
                    print("")
                    print("====================================")
                    print("[\(self.ACTIVITY_NAME) >> testMain() :: 파일 명 찾기 성공]")
                    print("====================================")
                    print("")
                    
                    // [변수 값 변경]
                    fileContains = true
                }
            }
        }
        else {
            print("")
            print("====================================")
            print("[\(self.ACTIVITY_NAME) >> testMain() :: 파일 찾기 실패]")
            print("-------------------------------")
            print("error :: fileList is nil")
            print("====================================")
            print("")
        }
        
        
        // [찾으려는 파일이 정상적으로 포함된 경우 미리보기 실시]
        if fileContains == true {
            
            DispatchQueue.main.async {
                self.documentInteraction = UIDocumentInteractionController(url: URL(string: filePath)!)
                self.documentInteraction?.delegate = self
                self.documentInteraction?.presentOptionsMenu(from: self.view.frame, in:self.view, animated: true)
            }
            
        }
        else {
            print("")
            print("====================================")
            print("[\(self.ACTIVITY_NAME) >> testMain() :: 파일 찾기 실패]")
            print("-------------------------------")
            print("error :: file name is not contains")
            print("====================================")
            print("")
        }

        

        // [로그 출력 실시]
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> testMain() :: 로그 결과 출력 실시]")
        print("-------------------------------")
        print("filePath :: \(filePath)")
        print("-------------------------------")
        print("fileContains :: \(fileContains)")
        print("====================================")
        print("")
    }
    
    
    
} // [클래스 종료]





// [extention 정의]
extension A_Intro: UIDocumentInteractionControllerDelegate {
    public func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
        return self
    }
    
    public func documentInteractionControllerDidEndPreview(_ controller: UIDocumentInteractionController) {
        self.documentInteraction = nil
    }
}
 

[결과 출력]

 

 

반응형
Comments