1주간 이것저것 공부하면서 열심히 commit을 했는데 contribution graph에 있는 수치가 전혀 변경이 되지 않고 있다는걸 이제야 깨달았다아무리 push를 해도 전혀 반영되지 않아서 구글링을 해보니 github(원격)에 있는 repo에 등록된 email과 내 로컬에 있는 git의 email이 일치하지 않아서 내가 1주일간 했던 약 50개의 커밋이 단 1개도 반영되어있지 않았다. 다음을 통해 해결 "git config --global user.email example@example.com(github repo 메일주소)"
SSD 교체후, 원격 저장소에서 프로젝트를 그대로 가져와, cocoapod을 설치하고 시뮬레이터 또는 디바이스를 통해 앱을 실행시키니 앱이 채 실행되기도 전에, 즉 AppDelegate 파일을 읽기도 전에 이런 에러를 보이면서 바로 앱이 크래시가 나는 버그를 겪었습니다. 기존 사용하던 라이브러리 들이 link가 제대로 되지 않는것 같아 이리저리 구글링을 해보고 나서 문제를 해결하긴 했습니다만 아직까지 정확한 원인이 무엇인지는 파악하지 못했습니다. 저의 추측으로는 SSD 교체후 cocoapod 을 최신버전으로 업데이트 하면서 기존의 Podfile.lock 파일과 충돌을 일으킨것으로 예상하고는 있습니다 (정확한 이유는 아직 미스테리입니다 ㅜㅜ) 일단 저같은 경우 프로젝트의 Build Setting 에서 Al..
앱 스토어에 올리고자 하는 빌드버전을 아카이빙 한 이후에 아이튠즈 커넥트(iTunes connect)에 업로드 해도 해당 빌드가 나타나지 않을 때가 있습니다. iOS 10 이상 부터는 사진이나 달력같은 사용자들의 개인 데이터에 접근하기 위해서는 접근의 목적을 명시해주어야 합니다.[애플 공식 문서 CocoaKey : https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW17] info.plist의 Property List에 privacy 속성을 가진 property를 추가해줄때는 다음과..
프로젝트에서 사용하고 있던 알림창 오픈소스 라이브러리(SweetAlert)에서 우연히 사소한 오타를 발견하여이에 대해 Pull Request한 과정을 공유하고자 합니다. 더 좋은 방법이 있거나 잘못된 내용이 있으면 댓글로 남겨주시면 감사하겠습니다. 1. 내 Repository로 fork 해오기 검색을 통해 라이브러리의 github를 찾아 들어가면, 다음과 같은 화면을 가장 먼저 보시게 됩니다. 여기서 오른쪽 상단의 Fork를 이용해 나의 Repository로 Project를 가져옵니다. 2. 나의 local로 clone 나의 repository에 fork 된것이 확인되었으면, 해당 repository에 접근합니다. 우측의 Clone or download 버튼을 클릭한뒤 URL을 복사합니다 URL을 복사하..
iPhoneX 에서만 다음 사진처럼 스크롤을 할때 해당 여백이 그대로 남아있어 floating button이 잘리는 이슈가 발생하였다. 결론부터 말하자면 원인은 constraint 제약을 아래와 같이 LayoutGuide(~iOS 10) 또는 safeArea(iOS11 ~) 와 설정해주었기 때문이었고, iPhoneX와 이전 디바이스들에 적용되는 layoutGuide와 safeArea의 차이점에 대해서 정확히 알고있지 못해서 발생한 문제였다. 아래 사진을 보면 알 수 있듯이 iPhoneX 에서 constraint을 safeArea 또는 layoutGuide와 설정해주게 될 때 safeArea를 제외한 부분 만큼(빨간색)의 여백(Home Indicator가 있는 부분)이 생기고있다. 위의 사진을 보면 같은 ..
가끔은 JSON이 아닌 XML을 파싱해야할 경우가 있다.공공데이터는 XML도 아직 많이 있다고 들은 것 같기도 하고? 일단 결과부터 보고 시작 import UIKit class ViewController: UIViewController,NSXMLParserDelegate { var strXMLData:String = "" var currentElement:String = "" var passData:Bool=false var passName:Bool=false var parser = NSXMLParser() @IBOutlet var lblNameData : UILabel! = nil override func viewDidLoad() { super.viewDidLoad() let url:String="ht..
OS 앱을 만들다 보면 베타 테스트도 더 전에 시연을 위해 다른 사람들에게도 앱을 배포해야 할 때가 있다 이때 아래와 같이 4가지 방법 정도가 있을 것 같다(앱스토어에 베타로 올리는것은 제외했다.)테스트 기기를 맥과 USB 연결 및 빌드애드혹 OTA(Over The Air) 배포 ( UDID 수집 후 배포 )TestFlight 를 통한 배포Enterprise 계정을 통한 in-house 배포 각각 장단점을 살펴보면 아래와 같다.테스트 기기를 맥과 USB 연결 및 빌드장점별다른 설정을 할 필요가 없다. 기기 받아서 개발기기 활성화 시키고 XCode 에서 자동으로 관리하는 wild provisiong 으로 바로 앱이 기기속으로 들어간다단점기기가 많을 경우 굉장히 번거롭다. 앱을 조금 수정하고 배포할 때 기기..
스위프트 ARC와 순환참조와 클로저31 Jan 2016swift, arc스위프트의 클로저의 기능중에 많은 사람들이 잘못 이해하고 있거나 잘 모르는 것이 클로저의 캡쳐리스트 (closure capture list)입니다. 주변 환경의 범위에서 가져온(참조한) 변수들을 얼마나 강하게 캡쳐해야하는지를 명시하는 것으로 캡쳐리스트를 사용하여 메모리 누수를 일으키는 강한 순환 참조(strong reference cycle)를 피할 수 있게됩니다.먼저 강한 순환 참조에 대해서 알아 봅시다.자동 레퍼런스 카운팅 (ARC: Automatic Reference Counting)iOS는 레퍼런스 카운팅을 통해 레퍼런스가 더 이상 사용되지 않는 시점을 결정하여 레퍼런스가 할당받아 사용하던 메모리를 해제할 수 있도록 만듭니다...
이번에 firebase remote config를 구현하면서 또 사용하게 되어 확실한 의미와 쓰임에 대해 다시 한번 정리 해두려고 한다 weak self의 사용weak reference(약한 참조)는 애플의 WWDC 영상에 따르면 Strong Reference Cycle(강력 순환 참조)를 벗어나기 위해 사용한다고 설명하고 있다. Closure를 사용하면서 closure 내부에 self를 사용하는 경우가 존재하는데, 이렇게 할 경우 일반적인 상황에서는 물론 문제가 없겠지만 특수한 상황에서는 문제가 될 소지가 있다. 코드를 통해 간단하게 살펴보도록 하자.class Thing { var disposable: Disposable? var total: Int = 0 deinit { disposable?.disp..
스플래쉬 단에서 앱을 강제로 업데이트 하는 기능을 추가했더니 바로 리젝을 당했다.사유는 다음과 같다. Guideline 2.1 - Performance - App Completeness We discovered one or more bugs in your app when reviewed on iPad running iOS 11.2 on Wi-Fi connected to an IPv6 network. Specifically, we were unable to review the app before updating the app. Please see attached screenshots for details. Next Steps To resolve this issue, please run your app on..