일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Swift
- 무선빌드
- DevTools
- IOS
- abstact
- BloC
- FLUTTER
- FocusNode
- delegate
- MVVM
- 갤럭시폴드
- reactivex
- shorebird
- struct
- TextInputFormatter
- PG결제
- reject
- Equatable
- appstore
- 성능 개선
- Android
- GetX
- fastlane
- error
- Codepush
- copy on write
- flutter web
- SHIMMER
- Xcode
- Codemagic
- Today
- Total
목록iOS 지식 (7)
뚝딱뚝딱 모바일
SwiftUI를 활용하여 만들다 보면, Git에서 변경된 파일로 UserInterfaceState.scuserstate 파일이 계속해서 잡히는 것을 보실 수 있을 겁니다. 이게 도대체 뭐길래 이렇게 자주 잡히지 짜증 나서 조금 찾아봤습니다. UserInterfaceState.scuserstate가 뭔데? UI 상태를 저장하고 있는 파일입니다. 파일을 제거해버리고 Xcode Preview에서 화면을 조금 건드리면 다시 파일이 생기는 것을 보실 수 있습니다. 그럼 어떻게 무시할까? 다행히 이 파일은 프로젝트를 구성하는 필수 요소가 아니라고 합니다. 복잡하게 생각할 것도 없이 gitignore에 추가해 줍시다. *.xcuserstate 이렇게 추가해 주시면, 계속 파일이 변경되었다고 깃에서 추적하지 않습니다.
안 그래도 바쁜 연말에 App Store 리젝을 두 번이나 당했습니다. 사유는 권한을 허용하기 위해 뜨는 Alert 코멘트에 권한을 사용하는 이유에 대한 설명과 예시가 없다고 합니다. 해결 방법 info.plist에 들어가 리젝 사유가 되는 권한 부분을 찾습니다. 저희 앱은 위치 권한이 문제였습니다. 그래서 아래 두 항목의 코멘트를 수정하여 주었습니다. 여러 사람들의 자료와 이야기를 들어보니, 왜 필요한지, 어디에 사용되는지, 허용하지 않아도 앱을 쓸 수 있는지 같이 세세하게 내용을 작성하면 좋다고 합니다. (심사해 주시는 분에 따라, 허용 관점이 조금씩 다른 것 같더라고요) 이를 다 적었는데도 리젝을 당하셨다면, 어디에 사용되는지 적는 부분에서, 앱에서 표기되는 기능 이름과 같은 지 확인해 주셔도 좋을..
안녕하세요!. 이번엔 iOS ViewController Lifecycle에 대해 알아보겠습니다. ViewController Lifecycle이란? ViewController(이하 VC) Lifecycle, 뷰컨트롤러의 생명주기라고도 합니다. 말 그대로 뷰컨트롤러가 만들어지고부터 없어지기까지의 주기를 말합니다. 모든 앱은 하나 이상의 VC로 구성되어 있고, 이 VC들은 각각의 생명주기를 가지고 있으니, 우리는 생명주기들을 고려하며 코드를 짜야 됩니다. 그 이유에 대해서 이제 알아봅시다. 간단하게 도식화해서 만들어보았는데, 하나하나 설명해 드리겠습니다. 1. loadView 뷰를 요청받았는데, 뷰가 Nil이면, 즉 존재하지 않으면 뷰컨트롤러가 호출하는 함수입니다. 뷰를 만들어 메모리에 올리는 역할을 합니다...
안녕하세요! 이번엔 Copy On Write (COW)에 대해 알아보겠습니다. Copy On Write란? Copy On Write란 무엇일까요? 직역해 보면 '쓸 때 복사한다' 정도 되겠네요. 이 직역처럼 Copy On Write는 사용할 때 복사하는 것을 말합니다. Copy On Write는 리소스를 복사할 때, 원본이나 복사본이 수정되지 않은 경우에는 복사본이 원본을 참조하여 공유하고, 수정이 일어났을 때만 새 리소스를 만드는 것을 말합니다. 줄여서 COW라고도 합니다. 음메 Swift에서는 이 Copy On Write를 CollectionType (Array, Set, Dictionary)에서 사용하고 있습니다. var arr1: [Int] = [0, 1, 2, 3, 4, 5] 이런 배열이 하나 ..
안녕하세요! 이번엔 Delegate 패턴에 대해 알아보겠습니다. Delegate 패턴이 무엇을 뜻하는지 알아봅시다. Delegate 패턴이란? Delegate 패턴은 객체가 자신의 책임, 행동을 다른 객체에게 위임하여 수행하게 하는 디자인 패턴이라 할 수 있습니다. iOS 개발을 해보신 분들이라면 자주 봤을 패턴인데, UITableVIewDelegate가 대표적 예시입니다. 그럼 이 Delegate 패턴은 어떻게 쓰는 것일까요? UITableViewDelegate를 예시로 들어보겠습니다. 일단 UITableViewDelegate는 주로 어떤 역할을 하는지 생각해 보면 tableView의 시점에 따른 해야 할 행동들을 정의해주곤 하죠. (https://developer.apple.com/documentat..
안녕하세요! 이번엔 Struct와 Class의 차이점에 대해 한번 알아보도록 하겠습니다. Struct와 Class의 공통점 값을 저장할 수 있는 변수를 선언할 수 있다. 기능을 제공할 수 있는 함수를 선언할 수 있다. 각 값들에 접근할 수 있는 subscript를 정의할 수 있다. 초기 상태를 지정할 수 있는 생성자(initializer)들을 정의할 수 있다. Extension을 통해 기능을 확장할 수 있다. Protocol에 따라 특정적인 기능을 제공할 수 있다. Class에는 있지만, Struct에는 없는 점 한 Class가 다른 Class의 특성을 상속받을 수 있다. 타입 캐스팅을 사용하여, 런타임에서 Class의 Type을 분석하고 해석할 수 있다. 소멸자(Deinitializer)를 통해 할당된..
안녕하세요! 이번엔 Xcode에서 무선으로 Build 하는 법을 알아보도록 하겠습니다. Build 최소 조건 - Xcode 9 이상, Build 기기 iOS 11 이상 먼저, Build 하고자 하는 프로젝트를 엽니다. 그리고 Build를 받을 핸드폰과 맥을 연결해줍니다. (처음 설정을 위해서 한 번은 연결해야 됩니다.) 연결했다면 Xcode 맨 위의 Window -> Device and Simulators를 선택해줍니다. 이런 화면이 뜰 텐데, 아래의 Connect via network를 체크해주시면 됩니다. 체크한 후 왼쪽의 기기 이름 옆의 지구본 닮은 원 모양을 클릭해주시면 설정은 끝납니다! 이제 연결한 선을 뺀 후에 같은 네트워크를 연결하고 Xcode에서 Run을 하면 앱이 정상적으로 Build ..