iOS Background Modes 아이폰 개발을 하다보면 백그라운드 설정이 필요할 때가 있습니다. 저전력 블루투스나 백그라운드 프로세싱등을 하려면 Backgroubnd 모드를 활성화해줘야 하는데 만약 해당 기능을 활성화하고 Plist에 특정 옵션을 추가하지 않으면 iOS 13이상에서 앱 제출시 문제가 될 수 있습니다. 만약 앱스토어에서 문제가 생기면 다음 옵션들을 만들어 수정해줘야 합니다. Missing Info.plist value. The Info.plist key 'BGTaskSchedulerPermittedldentifiers' must contain a list of identifiers used to submit and handle tasks when 'UIBackgroundModes' h..
앱 시스템 설정 이동 iOS 앱을 개발하다보면 설정으로 이동할 일이 있습니다. 페이스 아이디를 켜주세요. 카메라 사진 권한을 허용해주세요. 등등 사용자가 확인하지 못한 부분을 개발자가 설정 페이지로 이동시켜서 유도하는 방법인데 prefs 값을 사용해서 이동 시킬 때 다음과 같은 애플의 리젝 메시지를 받을 수 있습니다. 이는 프라이빗 API를 사용에서 문제가 되는 겁니다. 때문에 prefs 로 열지 말고 UIApplication.openSettingsURLString 를 통해서 열어줍니다. Guideline 2.5.1 - Performance - Software Requirements Your app uses the "prefs:root=" non-public URL scheme, which is a pr..
시뮬레이터 다크모드 아이폰 개발을 하다보면 시뮬레이터를 자주 사용합니다. 최근 iOS 13 이후부터는 다크 모드를 지원하게 되는데요. 개발 초기에는 앱 개발 시 다크 모드를 포함하지 않는 경향이 있었지만 최근에는 다크모드를 지원하는 앱이 많아졌습니다. 일일이 시뮬레이터에 연결해서 다크모드를 테스트하는 것보다는 시뮬레이터에서 테스트하는 편이 훨씬 빠릅니다. 아이폰에서는 제어센터에서 손쉽게 변경할 수 있는데요. 시뮬레이터는 조금 귀찮긴 합니다. 그림 지금부터 시뮬레이터에서 다크 모드로 변경하는 법을 알아보겠습니다. ▼ 다음과 같이 앱 홈화면에 설정 메뉴를 선택합니다. ▼ 설정화면에서 아래쪽으로 스크롤해줍니다. ▼ 시스템 설정 마지막 부분에 개발자 메뉴를 선택합니다. ▼ Developer (개발자) 메뉴에서 ..
아이폰 앱을 만들면 무한 스크롤을 구현해야 하는 경우가 있습니다. 주로 서버에서 보내온 데이터가 페이징 처리가 되있는 경우에 무한 스크롤을 구현합니다. 더보기 버튼을 만들어서 구현할 수 도 있지만 더 보기 버튼 보다는 무한 스크롤로 테이블 뷰를 구현하는 것이 더 자연스럽습니다. 지금 부터 무한 스크롤을 위해서 필요한 것들과 방법에 대해서 알아보겠습니다. ViewModel 코드 (데이터 정의) ▼ 우선 통신하는 부분을 보겠습니다. 코드가 길어서 복잡해보이겠지만 단순합니다. totalPage, currentPage, isLoading 변수를 선언해줍니다. 데이터 통신이 끝나면 테이블 뷰 데이터에 기존 데이터를 포함해서 appendData를 해줍니다. 또한 통신이 시작하기 전에 isLoading 값을 true..
스위프트의 동적 멀티플라이어 오토레이아웃을 사용하다보면 동적으로 멀티플라이어 값을 동적으로 바꿔야 할 경우가 있습니다. 특히나 iPad iPhone을 동시에 개발 할 때 필요합니다. 해당 비율을 동적으로 주기 위해서는 NSLayoutConstraint에 multiplier를 적용해주면 되지만 몇 가지 생각해야 하는 것이 있습니다. 다음과 같이 Constraint를 removeConstraint로 삭제한 뒤에 다시 addConstraint를 이용해 추가해줘야 합니다. 또한 새로 화면을 업데이트 하기 위해서 layoutIfNeeded 함수를 호출해줘야 합니다. ▼ 우선 다음과 같이 extension을 사용해 constraintWithMultiplier라는 함수를 만들어줍니다. 내부적으로 하는 일은 그냥 새로..
코드 스니핏(Code Snippet) Snippet은 작은 조각이란 뜻으로 보통 프로그래밍 개발 시 미리 작성해 놓은 다양한 단축 구문을 모아놓은 템플릿이라고 할 수 있습니다. 이미 맥에도 유료나 무료의 다양한 Code Snippet 툴들이 존재합니다. 하지만 오늘 알아볼 Xcode의 Snippet은 기본 제공되며 체계적으로 코드를 저장한다면 강력한 개발 도구가 될 수 있을 것 같습니다. ▼ 단축키는 Command + Shift + L 입니다. 보통 스토리보드나 XIB에서 해당 단축키를 누르면 이미지 라이브러리가 노출됩니다. 일반 코드를 보고 있다가 단축키를 누르면 Snippet 라이브러리가 노출됩니다. ▼ 만약 다음과 같이 av라고 검색하면 API 버전을 체크하는 구문을 검색할 수 있습니다. 오른쪽 하..
오늘은 아이폰의 기본 중에 기본인 컬렉션 뷰를 사용하는 방법을 알아보겠습니다. 사실 예전에는 테이블 뷰를 많이 사용했습니다만, 현재는 테이블 뷰 보다는 컬렉션 뷰를 더 많이 사용하죠. 하지만 그냥 일반적인 리스트 화면을 만들때는 컬렉션 뷰 보다는 테이블 뷰가 간편할 때가 많습니다. 그 이유는 테이블 뷰를 사용하면 ColleciontView와 달리 FlowLayout 델리게이터 없이 편리하게 리스트를 구현할 수 있기 때문이죠. 오늘은 처음 컬렉션 뷰를 사용해서 아주 기본적인 레이아웃 설정을 하는 방법을 알아보겠습니다. 디자인 설정 ▼ 스토리보드에 UICollectionView를 드래그해서 올리고 오토레이아웃을 좌우상하단에 걸어줍니다. 그리고 delegate, dataSource를 뷰 컨트롤러에 연결해주면 ..
Objective-C로 아이폰 앱을 만들 때는 #pragma mark - 주석 내용을 포함해서 주석을 나타내던 것이 Swift로 넘어오면서 MARK로 변경되었습니다. 기존의 #pragma라는 부분을 더 이상 쓰지 않아도 됩니다. 또한 TODO, FIXME와 같은 구문도 추가할 수 있습니다. 다른 언어 C++, C에서는 보통 전처리 구문으로 인식하는 #pragma는 define이나 include와 같이 사용됩니다. 하지만 Xcode에서는 이를 전처리 구문으로 쓰기보다는 메서드의 구역을 나눌 때 보통 사용합니다. 스위프트 같은 경우에는 extension이라는 문법이 추가돼서 메서드의 구분을 줄 때 extension을 사용하기도 합니다. 영역 구분관련 주석의 종류 // MARK : 설명 // TODO : 할 ..