Keychain 은 앱 삭제 전까지 정말 사라지지 않는가?사라질 수 있다. ㅠㅠ 조건iOS 10.3.3 이상 단말,Key 생성 시 kSecAttrAccessible 설정을 하지 않았다 (default 값으로 두었다) kSecAttrAccessible 설정값 참고 : http://beankhan.tistory.com/109 언제 발생하는가?1. iTunes 를 이용한 백업 / 복원 시 2. iCloud 를 이용한 백업 / 복원 시설정 > iCloud > Keychain 옵션이 꺼져있는경우 사라지지 않게 할 수 있는가?없다. iTunes 를 이용한 백업 / 복원 시 남겨두고 싶다면kSecAttrAccessible 설정을 (ThisDevice) 가 없는 단어로 설정하면 된다. iCloud 를 이용한 백업 / ..
출처https://developer.apple.com/reference/dispatch/1452933-dispatch_group_notify dispatch_group_notifydispatch_group_async 를 통해 이미 group 안에 들어간 job 들이끝나기를 기다렸다가 모두 완료되면 호출되기를 기대할 때 사용한다. dispatch_group_notify(, , ) param1. job 이 들어가 있는 group 2. group 안에 job 이 모두 완료되었을 때 완료 block 을 실행시키고 싶은 queue3. 완료되었을 때 실행시키고 싶은 job block 예제 dispatch_group_t group = dispatch_group_create(); dispatch_queue_t glob..
Carthage 를 사용하는 이유가장 처음에는 XCode 에서 지원하는 Static Library 를 썼었다.이후 CocoaPods 이 나오면서 새로운 버전 관리 방식과 implementation source 를 함께 볼 수 있는 큰 장점으로많은 사람들이 이동했다. 하지만 시간이 지날수록 개발자들은 불편함을 느꼈다. 그 이유로는 첫째, 소스를 모두 받아서 컴파일 시 함께 빌드하는 방식을 사용한다.따라서 프로젝트에 다른 open source 들을 많이 사용한다면 (dependency 가 높다면)컴파일 속도가 현저히 느려지게 된다. 둘째, .workspace 라는 개념이 생겼다.원래 프로젝트에 더해 Pods 프로젝트가 생기게 된다.pod update 를 하게 되면 Pods 프로젝트와 내 프로젝트 모두에 영향..
우선 코드 사이닝의 가장 중요한 개념은 오직 애플만이 자신들의 하드웨어에서 어떤 소프트웨어가 동작하도록 허락할 수 있다. 실제로 매번 앱이 실행될 때마다 앱은 애플로부터 인증을 받았는지즉, 앱을 실행할 수 있는 권한을 가지고 있는지 확인한다. 1. Apple 인증서 애플만이 앱을 실행할 권한을 가진다면, 개발자들은 어떻게 디바이스에서 테스트할 수 있을까?해답은, 애플이 개발자를 신뢰하여 애플 대신 앱을 실행할 수 있는 권한을 부여받는다. 인증서의 역할은 개발자가 애플 대신 앱을 사인할 수 있는 권한을 가지게한다. 인증서는 "키체인 접근" 앱에서 만들 수 있는데, 여기서 Certificate Signing Request (CSR) 을 생성해야한다. 1. "키체인 접근" 앱은 공개키와 개인키를 자동으로 생성..
1. 기본 개념 코어 데이터의 뿌리는 NeXT 의 엔터프라이즈 객체 프레임워크 (EOF) 에서 찾을 수 있다.이 프레임워크는 객체를 관계형 데이터베이스로 매핑할 수 있다. 관계형 데이터베이스를 사용하면데이터베이스에 종속적인 로직을 구현하는 대신비지니스 로직을 객체에 구현하게 되므로 적은 양의 코드로 같은 기능을 구현할 수 있다.이를 통해 DB 요구사항보다 앱의 요구사항을 구현하는 데 더 집중할 수 있다. 코어데이터는 애초에 Mac OS X 상에서 단일 사용자를 지원하도록 만들어졌고, 내장 관계형 데이터베이스인 SQLite 에 데이터를 저장한다. 코어 데이터는 다음과 같은 기능을 포함한다.- 시각적인 모델 편집기를 통해 데이터 객체를 모델링한다.- 객체의 스키마가 변경될 경우 마이그레이션 도구를 이용해 처..
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 크기를 조절해야할 때가 있다.(한글의..
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..
- Total
- Today
- Yesterday
- Swift 3.0
- applicationWillResignActive
- HTTP
- NSManagedObject
- Arc
- workerThread
- 읽기 좋은 코드가 좋은 코드다
- 꺼내먹어요
- RunLoop
- Swift 3
- optional
- ios
- Swfit
- delegate
- coredata
- AWS
- NSManagedObjectContext
- string
- docker
- CIImage
- Block
- set
- dictionary
- CGImage
- thread
- Swift3
- UIView
- Swift
- NSManagedObjectModel
- EffectiveObjectiveC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |