1. iOS 10 Widget 에서의 Height iOS 8, 9 와는 다르게 10 에서는 위젯의 height 가 고정이 되어버렸다.즉, self.preferredContentSize = CGSizeMake(0, 200); 와 같은 코드가 실제로 동작하지 않게되며 위젯의 height 를 임의로 수정할 수 없게 되었다. 대신 Expand 모드를 만들어 NCWidgetProviding Delegate 에서 Content Size 를 수정할 수 있도록 열어놓았다.사용법은 아래와 같다. self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded; - (void)widgetActiveDisplayModeDidChange..
보호되어 있는 글입니다.
1. reloadData 에서의 Crash 가 발생하는 현상 (UITableViewDataSource 에는 아무 이상 없다는 가정하에) UITableView 내부 Cell 안에 UITextField 가 존재하는 상태에서, UITextField 에 포커스가 가 있는 채로[tableView reloadData]; 를 호출하게 되면 Crash 가 발생할 수 있다.이때 Focus 를 뺏어주고 reloadData 를 호출하면 정상적으로 작동한다. 2. TableView 에서 cellForRow: 시 Cell 재사용을 하지 못하고 갑자기 사라지는 현상 UITableView 내부 Cell 안에 UITextView 가 존재하는 상태에서, UITextView 의 크기에 따라 Cell 크기를 조절해야할 때가 있다.(한글의..
블락의 실체 블락을 선언할 경우 실제로 컴파일러에의해 생성되는 코드에서는 __block_literal 이라는 구조체(struct) 형태로 선언이 된다.이 구조체 안에는 isa 정보가 포함되어있어서 결국 Objective-C의 객체의 특성을 가지게 된다. 일반적으로 객체들은 힙(heap)에 잡히게 되지만 블락은 특이하게도 스택(stack)에 할당되는 객체이다. 이는 일반적으로 블락이 사용되는 범위가 블락이 선언되어있는 동일 범위에서 벗어나지 않기 때문이다. 즉, 스택에 할당하게 되면 실행 속도 측면에서 힙에 비해 유리하기 때문에 실행속도 최적화를 위해 기본적으로 스택에 할당을 하게된다. 디버거로 할당된 블락 변수를 조사해보면 위 그림과 같이 구조체로 되어있다.구조체 내부 변수들에서 볼 수 있듯이 해당 구조..
App Test (Enterprise Archive) 도중 App 을 업데이트 했을 때 TodayExtension 에서 아래와 같은 현상이 발생했다. 1. Widget 의 App 이름만 나오고 Body 가 안나오는 현상 2. 이전 Widget 화면이 나와있는 상태에서 아무 Touch Event 를 받지 못하는 현상 이와 같은 현상은 App Store 나 iTunes 를 이용하지 않고 iTool 과 같은 다른 Tool 들을 이용하여 직접 업데이트를 했을 때 발생하는 것으로 보인다. 이 때 주의할 점은, 앱이 멈췄다고 해서 무조건 Update 방식문제다라고 판단하기 전에Today Extension 에서 발생하는 Crash 가 있었나 반드시 확인해야한다. 결론은, App Update Test 시에는 iTune..
기본적으로 Facebook, Kakao 로그인 시 앱이 설치되어 있는 경우 앱에 로그인되어 있는 정보를 이용해 로그인을 한다.즉, 우리 앱에서 Facebook 혹은 Kakao 로 앱이 이동했다가 다시 우리 앱으로 돌아온다.(이를 Facebook 에서는 FAS, Fast App Switching 이라 표현한다.) 예외가 있다면, iOS 9 부터 iOS 가 앱 간 이동을 지양한다는 정책을 발표함에 따라Facebook 로그인 시 무조건 Safari WebView 가 노출된다. 참고 사이트 : https://developers.facebook.com/blog/post/2015/10/29/Facebook-Login-iOS9 1. Facebook WebView 노출의 경우 (iOS 9 이상 or 앱 미설치) Web..
preferredMaxLayoutWidth preferredMaxLayoutWidth 는 multiline label 일 때 영향을 주는 property 로 Label 의 Width 가 42 이상 늘어나지 못함을 명시적으로 Set 할 수 있다. 이상 이므로 글자가 더 들어갈 공간이 없으면 width 가 42 보다 적게 들어갈 수 있다. (Ex. width = 40.5) multiline label 이 아닌경우 아무런 영향을 미치지 못한다. preferredMaxLayoutWidth 를 설정한 채로 Label 에 Text 를 set 하면 intrinsic content size 가 실제 사이즈처럼 나온다.sizeThatFits 와 비교했을 때 intrinsicContentSize 가 월등히 좋다. (다만,..
UIViewContentMode Type typedef enum { UIViewContentModeScaleToFill, UIViewContentModeScaleAspectFit, UIViewContentModeScaleAspectFill, UIViewContentModeRedraw, UIViewContentModeCenter, UIViewContentModeTop, UIViewContentModeBottom, UIViewContentModeLeft, UIViewContentModeRight, UIViewContentModeTopLeft, UIViewContentModeTopRight, UIViewContentModeBottomLeft, UIViewContentModeBottomRight,} UIView..
레이아웃 변경이 발생하는 시점 UIView 의 크기가 변경되면, 크기가 변경된 UIView 의 서브뷰들은 위치와 크기가 조정되어야 한다. UIView 는 이를 위해 자동과 수동으로 UIView 의 layout을 조정하는 방법을 제공한다. 다음의 이벤트에 레이아웃 변경이 발생한다. UIView의 bounds 사이즈 변경Root view의 변화를 유발하는 Interface orientation (세로모드, 가로모드 등) 변화.UIView의 view layer 변화 유발 또는 layout을 요청하는 Core Animation sublayers 의 설정UIView의 setNeedsLayout 또는 layoutIfNeeded 메소드가 호출될 경우UIView의 layer에서 setNeedsLayout 이 호출되는 ..
개념기획위젯의 존재 목적위젯은 지금 중요한 정보에 대해 빨리 접근할 수 있도록 제공한다.예를 들어, 사용자는 현재 주가를 확인하거나, 날씨를 확인하거나, 오늘의 일정을 보거나, 할 일을 완료했다고 체크하기위해 Today view를 연다.(개발을 시작하기전에) Today extension이 당신이 제공하려는 기능에 적절한지 확실히 해야한다.최고의 위젯은 사용자에게 빠른 업데이트를 제공하거나 매우 간단한 작업을 하는 것이다.만약 개발하고싶은 App extension이 복잡한 단계의 일을 해야하거나 컨텐츠 업로드/다운로드 같은 오래걸리는 작업을 하게된다면, Today extension은 옳은 선택이 아니다. 제약 사항 (리젝 사유)습관적으로 보고 닫을 수 있을 수준의 정보만 제공할 것.간단히 확인하거나 체크할..
- Total
- Today
- Yesterday
- workerThread
- set
- 꺼내먹어요
- Swift 3
- Swift3
- NSManagedObjectModel
- NSManagedObject
- Arc
- RunLoop
- string
- optional
- HTTP
- Swift 3.0
- applicationWillResignActive
- Swift
- 읽기 좋은 코드가 좋은 코드다
- CIImage
- dictionary
- UIView
- CGImage
- coredata
- Swfit
- thread
- Block
- AWS
- NSManagedObjectContext
- delegate
- EffectiveObjectiveC
- docker
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |