precondition을 얼마전에 처음 봤는데, 그 때 쓰기 시작한 글을 마무리를 못했네여 설날 기념으로 마무리해서 발행쓰 # assert Debug configuration에서 오류가 생기면 치명적일 것인 곳에 심어 놓는 에러 검출용 코드이다. 즉 Release configuration에서는 아무 영향을 주지 않는다. func assert( _ condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = String(), file: StaticString = #file, line: UInt = #line ) ------ [사용법] assert(false) assert(1 + 1 != 2, "assert message") 이 con..
# isAccessibilityElement element가 접근성 요소인지 여부를 나타내는 Bool값 UIKit control이 아닌경우 기본값은 false - UIControl을 상속받고 있는 UIButton같은것들 ➡️ 기본값 true - UIView나 UIImageView같은것들 ➡️ 기본값 false 이런경우 기본적으로 UIButton에만 접근성 요소로 잡힐것이다. 이때, 바깥의 주황색 View에도 접근성 요소에 포함하려면, self.myView.isAccessibilityElement = true self.myView.accessibilityLabel = "적절한 accessibilityLabel" isAccessibilityElement 프로퍼티를 true로 만들어주면 된다. UIView에 ..
옛날에 PHPicker관련해서 쓴 것들 왜이렇게 헷갈리지.. # 권한 필요없음 기본적으로 사진을 단순 Read하기 위해서는 사진 접근 권한이 필요없음 (= PHPicker를 띄우기 위해서는 권한이 따로 필요없음) PHPicker를 띄우면 왼쪽 그림처럼 안내 텍스트가 보일거고, 설정에 가면 오른족 그림처럼 비공개로 접근으로 뜰 것이다. 이 앱은 사용자의 사진 보관함을 표시할 수 있지만, 오직 사용자가 선택한 항목에만 접근할 수 있습니다. 그러니까.. PHPicker를 띄웠으면 모든 사진/비디오 같은것들이 나올텐데, 이런것들에 앱(코드로)이 접근 못하고 내가 선택하고 추가한 것들에만 접근 할 수 있다는 뜻 암튼 이 PHPicker를 띄우고, PHPicker가 모든 Asset들을 보여주는것에 대해서는 따로 권..
위치 관련해서 잠깐 봐야할 게 있어서 봤는데.. 왜이렇게 많은거지..한번 정리해두면 좋을 것 같아서! # NSLocationUsageDescription - iOS 8에서 Deprecate 응 안봐 # NSLocationAlwaysUsageDescription - iOS 11에서 Deprecate - 앱의 Deploy Target이 iOS 11+ 이라면 NSLocationAlwaysAndWhenInUseUsageDescription 을 사용해야합니다. ~ 11 이전 버전을 지원한다면 ~ - 11 이전 OS에서는 무조건 NSLocationAlwaysUsageDescription을 사용 - 11 이후 OS에서는 무조건 NSLocationAlwaysAndWhenInUseUsageDescription을 사용 그..
남은 기기 용량을 알아야 할 일이 생겨서 찾아봤더니.. func deviceRemainingFreeSpaceInBytes() -> Int64? { let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! guard let systemAttributes = try? FileManager.default.attributesOfFileSystem(forPath: documentDirectory), let freeSize = systemAttributes[FileAttributeKey.systemFreeSize] as? NSNumber else { // something fai..
이번에 Push Notification Console 나와서 써보려고 합니다. 과연 어떨지.. # 푸시 보내기 1. 프로젝트 생성 2. Capabilities > Push Notification 추가 3. AppDelegate.swift 수정 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.reduce("") { $0 + String(format: "%02X", $1) } print(token) } func application(_ application: UIApplication, didFailToReg..
그냥 삽질 기록.. 내가 해결한 방법이 정답이 아닐 수 있음. 삽질은 엄청 했지만 그냥 짧게(???) 좋은 경험 한 것 같아서 남겨보려고 한다. 위와같은 뷰를 만들었어야 했는데, 딱 봤을 때 응 그냥 그라데이션이야~하고 CAGradientLayer이용하면 되지 않을까?? 싶었다. 대충 예전에 쓴 iOS ) CAGradientLayer 글을 보면서 작업을 시작했음. 나는 View는 UIKit으로 만드는게 편해서 UIKit으로 만들기 시작했다! 딴 이야기지만 중간에 코드 그냥 이미지로 넣은거 보고 진짜 또라인가?? 싶었다. 아니 이걸 왜 이미지로 넣으세요. 하~~~~ 이미지로 넣어서 미안합니다. [첫번째 시도] CAGradientLayer만들고 이것저것 해보는데, 나는 첫번째 그림처럼 경계선이 진짜 다 풀어..
WWDC23 What's new in UIKit보다가.. viewIsAppearing 이라는게 새로 나왔더라구요? 아직 뭔지는 모르지만 살짝 맛있을지도 # viewIsAppearing 다들 잘 알고계시다시피 ViewController의 View의 가시성이 변경될때마다 ViewController는 자체 인스턴스 메소드를 호출합니다. 익숙한 3개의 메소드와 이 메소드가 언제 불리는지를 살펴보겠습니다. 1. viewDidLoad - ViewController의 view가 메모리에 올라가면 불림 2. viewWillAppear - View가 View hierarchy에 추가될 예정임을 ViewController에게 알림 3. viewDidAppear - View가 View hierarchy에 추가되었음을 Vie..
- fastlane
- swift delegate
- swift sort
- 스위프트 문법
- 스위프트
- np-hard
- Swift
- ios 13
- WKWebView
- 제이슨 파싱
- actor
- SwiftUI
- FLUTTER
- 회고
- 피아노
- swift 공부
- np-complete
- github
- iOS delegate
- swift tutorial
- Git
- swift3
- WWDC
- UIBezierPath
- Xcode
- Accessibility
- swift array
- Combine
- IOS
- WidgetKit
- Total
- Today
- Yesterday