Symbolic Link

개발/Note 2020. 5. 18. 10:59
반응형

심볼릭 링크는 윈도우의 바로 가기와 비슷하고 하드 링크는 원래 파일 데이터의 또 다른 접근 경로 입니다.


심볼릭 링크 > 원본 파일 > 실제 파일 데이터 

하드 링크 > 실제 파일 데이터 < 원본 파일


심볼릭 링크, 하드 링크 만들기

1. 심볼릭 링크 생성

ln -s (원본 파일이나 폴더 경로) (심볼릭 링크가 저장될 경로)

ex) ln -s /Volumes/DATA/Users/jhrunning/Desktop/Folder /Volumes/DATA/Users/ jhrunning/Desktop/SymFolder


2. 하드 링크 생성

ln (원본 파일 경로) (하드 링크 파일이 저장될 경로)

ex) ln -s /Volumes/DATA/Users/jhrunning/Desktop/origin.txt /Volumes/DATA/Users/ jhrunning/Desktop/result.txt



< 사용 예 >

symbolic link (심볼링 링크 생성 ; 링크 폴더 생성) 

ln -s [패스1] [패스2] 패스1 폴더를 패스2폴더에 링크 (패스2는 패스1을 바라봄) 

// Dropbox sudo ln -s /Volumes/DATA/Dropbox ~/Dropbox 

// Google Drive sudo ln -s /Volumes/DATA/Google\ Drive ~/Google\ Drive 

// OneDrive sudo ln -s /Volumes/DATA/OneDrive ~/OneDrive 

// Music/iTunes sudo ln -s /Volumes/DATA/Music/iTunes /Users/netcanis/Music/iTunes

// Xcode sudo ln -s /Volumes/DATA/Xcode /Applications/Xcode

// MSOffice sudo ln -s /Volumes/DATA/MSOffice /Applications/MSOffice

// Pictures sudo ln -s /Volumes/DATA/Pictures ~/Pictures

// iTunes Backup 일부 폴더는 생성시 권한 에러로 생성이 불가능하다 

sudo ln -s /Volumes/TDRIVE/Backup ~/Library/Application\ Support/MobileSync/ Backup 

이런경우 아래와 같이 ~/ 쪽에 생성한후 해당디렉토리에 복사하도록 한다.

sudo ln -s /Volumes/TDRIVE/Backup ~/Backup


2020/05/18 - [개발툴/Xcode] - Release 모드에서 디버깅

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리


반응형

'개발 > Note' 카테고리의 다른 글

gdb 설치  (0) 2020.05.19
Mac에서 Node.js 설치  (0) 2020.05.19
UUID의 구성 요소  (0) 2020.05.19
Storyboard References (스토리보드 분리)  (0) 2020.05.18
Release 모드에서 디버깅  (0) 2020.05.18
블로그 이미지

SKY STORY

,
반응형

• Configurations에서 Release 설정 복사한 새로운 설정을 생성한다.

 

 

• 적절한 이름으로 설정해 준다. (ex. ‘Release Mode Debugging’)

 

 

• 프로비저닝 설정을 개발로 설정해 준다. 

 

 

• Edit Scheme를 클릭

 

 

• 빌드 설정을 ‘Release Mode Debugging’로 변경

 

 

• 로그는 출력되지 않지만 코드상에 브레이크 포인트로 디버깅이 가능하다.

 

 

2020/05/18 - [iOS/Jailbreak] - 탈옥후 안정화

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

 

반응형

'개발 > Note' 카테고리의 다른 글

gdb 설치  (0) 2020.05.19
Mac에서 Node.js 설치  (0) 2020.05.19
UUID의 구성 요소  (0) 2020.05.19
Storyboard References (스토리보드 분리)  (0) 2020.05.18
Symbolic Link  (0) 2020.05.18
블로그 이미지

SKY STORY

,

탈옥후 안정화

개발/iOS 2020. 5. 18. 10:31
반응형
반응형

'개발 > iOS' 카테고리의 다른 글

OpenSSL Mac 연동  (0) 2020.05.18
NSLog 출력 크기 제한 풀기  (0) 2020.05.18
다중 문자열 / 캐릭터 제거  (0) 2020.05.15
String substring  (0) 2020.05.15
Framework 경로  (0) 2020.05.15
블로그 이미지

SKY STORY

,
반응형

다중 캐릭터 제거

func removeAll(characters: [Character]) -> String {
    return String(self.filter({ !characters.contains($0) }))
}

[사용방법]

var retString = "2020-04-12 11:22:59"

let ret = retString.removeAll(characters: [" ", "-", ":"])

print("\(ret)")

20200412112259

 

 

다중 문자열 제거

func removeAll(strings: [String]) -> String {
    var retString = self
    _ = strings.map { retString = retString.replacingOccurrences(of: $0, with: "", options: .literal, range: nil) }
    return retString
}

[사용방법]

var retString = "abcdefghijklmn"

let ret = retString.removeAll(strings: ["cde", "klm"])

print("\(ret)")

abfghijn

 

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

 

 

반응형

'개발 > iOS' 카테고리의 다른 글

NSLog 출력 크기 제한 풀기  (0) 2020.05.18
탈옥후 안정화  (0) 2020.05.18
String substring  (0) 2020.05.15
Framework 경로  (0) 2020.05.15
Frameworks 경로  (0) 2020.05.15
블로그 이미지

SKY STORY

,

String substring

개발/iOS 2020. 5. 15. 15:00
반응형

<Swift 5.2 에서 문자열 자르기>

let str = "abcdef"
str[1 ..< 3] // returns "bc"
str[5] // returns "f"
str[80] // returns ""
str.substring(fromIndex: 3) // returns "def"
str.substring(toIndex: str.length - 2) // returns "abcd"

 

<문자열 구간 자르기>

extension String {
	subscript (r: Range<Int>) -> String {
        get {
            let begin = self.index(self.startIndex, offsetBy: r.lowerBound)
            let end   = self.index(self.startIndex, offsetBy: r.upperBound)
            return String(self[begin..<end])
        }
    }
}

let str = "Hello, World"

let ret = str[0..<4]

print("\(ret)")

 

Output:

Hell

 

 

<배열 인덱스로 캐릭터문자 구하기>

extension String {
	subscript (i: Int) -> Character {
		return self[index(startIndex, offsetBy: i)]
	}
}

let str = "Hello"

let ret = str[1]

print("")

 

Output:

e

 

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

반응형

'개발 > iOS' 카테고리의 다른 글

탈옥후 안정화  (0) 2020.05.18
다중 문자열 / 캐릭터 제거  (0) 2020.05.15
Framework 경로  (0) 2020.05.15
Frameworks 경로  (0) 2020.05.15
iOS디바이스 설정창 이동  (0) 2020.05.15
블로그 이미지

SKY STORY

,

Framework 경로

개발/iOS 2020. 5. 15. 14:50
반응형

let bundle = Bundle(for: type(of: self))

// or let bundle = Bundle(identifier: "com.myframework")

let path = bundle.path(forResource: filename, ofType: type)

 

 

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

반응형

'개발 > iOS' 카테고리의 다른 글

다중 문자열 / 캐릭터 제거  (0) 2020.05.15
String substring  (0) 2020.05.15
Frameworks 경로  (0) 2020.05.15
iOS디바이스 설정창 이동  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
블로그 이미지

SKY STORY

,

Frameworks 경로

개발/iOS 2020. 5. 15. 14:45
반응형

[[NSBundle bundleForClass:[self class]] resourcePath];

 

 

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

반응형

'개발 > iOS' 카테고리의 다른 글

String substring  (0) 2020.05.15
Framework 경로  (0) 2020.05.15
iOS디바이스 설정창 이동  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
WKWebView 스크린샷  (0) 2020.05.12
블로그 이미지

SKY STORY

,
반응형
NSURL *URL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if (@available(iOS 10.0, *)) {
    [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:^(BOOL success) {}];
} else {
    [[UIApplication sharedApplication] openURL:URL];
}

 

 

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

반응형

'개발 > iOS' 카테고리의 다른 글

Framework 경로  (0) 2020.05.15
Frameworks 경로  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
WKWebView 스크린샷  (0) 2020.05.12
json 포멧 체크  (0) 2020.05.12
블로그 이미지

SKY STORY

,
반응형

NSLog로 문자열 출력시 아래와 같이 한글이 깨져서 출력되는 경우가 있다.

\\Uc815\\Ubcf4 \\Uc870\\Ud68c \\Uc131\\Uacf5

 

이런 경우 다음과 같이 해결할 수 있다.

-(NSString*)utf8toNSString:(NSString*)str{
    NSString* strT= [str stringByReplacingOccurrencesOfString:@"\\U" withString:@"\\u"];
    CFStringRef transform = CFSTR("Any-Hex/Java");
    CFStringTransform((__bridge CFMutableStringRef)strT, NULL, transform, YES);
    return strT;
}

<사용예>

NSLog(@"%@", [self utf8toNSString:@"\\Uc815\\Ubcf4 \\Uc870\\Ud68c \\Uc131\\Uacf5"]);

 

 

<결과>

정보 조회 성공

 

 

2020/05/15 - [iOS/Swift] - 다중 문자열 / 캐릭터 제거

2020/05/15 - [iOS/Swift] - String substring

2020/05/15 - [iOS/Swift] - Framework 경로

2020/05/15 - [iOS/Objective-C] - Frameworks 경로

2020/05/15 - [iOS/Objective-C] - iOS디바이스 설정창 이동

2020/05/15 - [iOS/Objective-C] - Xcode 한글 깨짐 복구

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

반응형

'개발 > iOS' 카테고리의 다른 글

Frameworks 경로  (0) 2020.05.15
iOS디바이스 설정창 이동  (0) 2020.05.15
WKWebView 스크린샷  (0) 2020.05.12
json 포멧 체크  (0) 2020.05.12
Access Control (접근 제한자)  (0) 2020.05.12
블로그 이미지

SKY STORY

,

WKWebView 스크린샷

개발/iOS 2020. 5. 12. 15:34
반응형

WKWebView에서 화면 스크롤영역 전체 스크린샷을 구하는 방법을 알아보겠습니다.

iOS 11버전 부터 takeSnapshot이라는 함수를 제공하지만 실제로 정상적인 결과를 얻을 수 없습니다.

아래 클래스를 이용하면 보여지지 않는 스크롤 영역 전체의 스크린 샷을 구해 고화질로 저장할 수 있습니다.

주의 : 해당 함수는 웹페이지 로딩이 완료된 뒤 호출하셔야 합니다.

extension WKWebView{
    // 화면에 보여지는 부분만 스크린샷
    func screenshot(_ completionBlock: ((UIImage) -> Void)?) {
        if #available(iOS 11.0, *) {
            let config = WKSnapshotConfiguration()
            if #available(iOS 13.0, *) {
                config.afterScreenUpdates = false
            }
            config.rect = self.frame
            // iOS 11.0부터 takeSnapshot 함수를 사용할 수 있으나 스크롤영역 전체 스크린샷은 지원하지 않음(시뮬레이터는 가능)
            self.takeSnapshot(with: config, completionHandler: { image, error in
                if error != nil {
                    print("\(String(describing: error))")
                    return
                }
                guard let image = image else { return }
                completionBlock?(image)
            })
        } else {
            UIGraphicsBeginImageContextWithOptions(self.bounds.size, true, UIScreen.main.scale);
            self.drawHierarchy(in: self.bounds, afterScreenUpdates: true)
            guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return }
            UIGraphicsEndImageContext();
            completionBlock?(image)
        }
    }
    
    // 현재 페이지의 모든 컨텐츠 스크린샷
    func screenshot2(_ completionBlock: ((UIImage) -> Void)?) {
        let sv = self.scrollView
        let offset = sv.contentOffset
        let pageSize = sv.contentSize;
        let maxWidth = CGFloat(ceil(pageSize.width/sv.frame.size.width))
        let maxHeight = CGFloat(ceil(pageSize.height/sv.frame.size.height))
        for x in stride(from: 0, to: maxHeight, by: 1.0) {
            for y in stride(from: 0, to: maxWidth, by: 1.0) {
                sv.scrollRectToVisible(CGRect(x: sv.frame.size.width  * x,
                                              y: sv.frame.size.height * y,
                                              width:  sv.frame.size.width,
                                              height: sv.frame.size.height), animated: true)
                RunLoop.main.run(until: Date.init(timeIntervalSinceNow: 1.0))
            }
        }
        sv.setContentOffset(offset, animated: false)
        
        let prevOffset = sv.contentOffset
        let prevBounds = self.bounds
        let prevFrame = self.frame
        
        UIGraphicsBeginImageContext(pageSize)
        self.bounds = CGRect(x: self.bounds.origin.x, y: self.bounds.origin.y, width: pageSize.width, height: pageSize.height)
        self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: pageSize.width, height: pageSize.height)
        RunLoop.main.run(until: Date.init(timeIntervalSinceNow: 0.5))
        self.layer.render(in: UIGraphicsGetCurrentContext()!)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        self.bounds = prevBounds
        self.frame = prevFrame
        sv.setContentOffset(prevOffset, animated: false)
        completionBlock?(image)
    }
}

 

☞ 웹뷰 화면 보여지는 부분만 스크린샷

webView.screenshot({(image) in
    print("complete")
})

 

☞ 웹뷰 화면 전체 스크린샷 (스크롤영역 전체)

webView.screenshot2({(image) in
    print("complete")
})

 

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

 

반응형

'개발 > iOS' 카테고리의 다른 글

iOS디바이스 설정창 이동  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
json 포멧 체크  (0) 2020.05.12
Access Control (접근 제한자)  (0) 2020.05.12
WKWebview에서 tel, email, mailto, sms, facetime 처리  (0) 2020.05.12
블로그 이미지

SKY STORY

,

json 포멧 체크

개발/iOS 2020. 5. 12. 15:24
반응형
// MARK: - String Extension
extension String {
    func isValidJson() -> Bool {
        do {
            guard let jsonData = self.data(using: String.Encoding.utf8) else { return false }
            if let _ = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) as? NSDictionary {
                return true
            } else if let _ = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) as? NSArray {
                return true
            } else {
                return false
            }
        } catch let error as NSError {
            print(error)
            return false
        }
    }
}

 

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

 

 

 

반응형

'개발 > iOS' 카테고리의 다른 글

iOS디바이스 설정창 이동  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
WKWebView 스크린샷  (0) 2020.05.12
Access Control (접근 제한자)  (0) 2020.05.12
WKWebview에서 tel, email, mailto, sms, facetime 처리  (0) 2020.05.12
블로그 이미지

SKY STORY

,
반응형
명칭 허용 범위 접근 & 수정 비고
private 클래스 접근
fileprivate 클래스 + 파일 접근 Swift 3.0 이상
internal 같은 모듈(프로젝트) 접근 기본값
public 모듈 외부 접근
open 모듈 외부 접근 & 수정 Swift 3.0 이상

 

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

반응형

'개발 > iOS' 카테고리의 다른 글

iOS디바이스 설정창 이동  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
WKWebView 스크린샷  (0) 2020.05.12
json 포멧 체크  (0) 2020.05.12
WKWebview에서 tel, email, mailto, sms, facetime 처리  (0) 2020.05.12
블로그 이미지

SKY STORY

,
반응형
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    guard let url = navigationAction.request.url else {
        decisionHandler(.allow)
        return
    }
    
    if ["tel", "mailto", "sms", "facetime"].contains(url.scheme) && UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
        decisionHandler(.cancel)
        return
    }
    
    decisionHandler(.allow)
}

 

2020/05/12 - [iOS/Swift] - WKWebView 스크린샷

2020/05/12 - [iOS/Swift] - json 포멧 체크

2020/05/12 - [iOS/Swift] - Access Control (접근 제한자)

2020/05/12 - [iOS/Swift] - WKWebview에서 tel, email, mailto, sms, facetime 처리

 

반응형

'개발 > iOS' 카테고리의 다른 글

iOS디바이스 설정창 이동  (0) 2020.05.15
Xcode 한글 깨짐 복구  (0) 2020.05.15
WKWebView 스크린샷  (0) 2020.05.12
json 포멧 체크  (0) 2020.05.12
Access Control (접근 제한자)  (0) 2020.05.12
블로그 이미지

SKY STORY

,