iOS (swift, objc)개발을 하면서 알게된 질문과 답변 내용을 모아보았습니다. 개발 언어는 공부를 하면 빠르게 익힐 수 있지만, 개발 경험은 물어보고 정보를 얻기가 쉽지 않습니다. 도움이 될 수 있도록 정리를 꼼꼼히 해보겠습니다.
잘못 작성된 정보는 열심히 수정 하겠습니다. 언제든지 문제가 있으면, 편하게 수정해주세요.
지금은 작성을 시작해서 내용이 적지만, 알차게 계속 업데이트 하겠습니다.
디테일한 지식 보다는 iOS 개발을 하면서 이정도는 알고 있으면 좋은...
정도의 질문과 답변 형식으로 정리 하려고 합니다.
-
- 애플 개발자 전화 지원은 몇번인가요? 전화가 가능한가요?
- AppStore에 검수 신청하면 얼마나 걸리나요?
- 앱스토어를 등록하기 전에 UUID(디바이스) 등록 안된 분들이 테스트 해볼려면 어떻게 해야될 까요?
- 정말 급하게 앱스토어에 등록해야되는 데.. 어떻게 해야될 까요?
- 검수통과해서 "판매 준비됨"으로 바뀌었는 데, 왜? iOS 앱스토어에서 검색하면 나타나지 않을까요?
- appstore에서 앱 다운로드 할때 단말별로 앱사이즈가 다른가요?? 이미지 해상도라던지.. 차이때문에, 만약에 다르다면 영향 받는 부분이 어디일까요?
- 미성년자는 애플 개발자 등록이 가능한가요?
- 개인개발자도 앱 등록시 개인정보 취급방침 URL을 반드시 추가해야되나요?
- 스토어 스크린샷에 디바이스를 같이 보여주소 싶은데 가이드라인 같은걸 확인 할 수 있는데가 있을까요?
- 앱스토어에서 앱 이름 아래에 개발자 이름을 변경하고 싶은데 따로 변경할 수 있나요? 고객센터에 문의해봐야되나요?
- 애플로 로그인을 하는 것을 꼭 추가해야되나요? 기존에 서드파티 로그인 기능이 있는 데, 넣어야 된다는 것 같더군요. 기능을 추가한다면 언제까지 반드시 추가해야되나요?
- 앱스토어에 앱이 업로드/판매 중인 상황에서 개발자 계정 설정에 문제가 생기면, 앱스토어에서 받은 앱에 영향을 주는 부분이 있을까요?
-
- 로그인을 하기위해 정보(전호번호등..)가 필요하다고 리젝 당했습니다.😭
- 쇼셜(SNS) 로그인만 있으면 리젝 당하나요?
- 비디오에 대한 링크를 제공하라는 데? 무슨 의미일까요?
- 웹뷰로만 된 앱은 리젝인가요?
- 페이지 한개 짜리 앱이 리젝 사유인가요?
- 앱내 공지사항에 안드 출시소식 있다구 리젝 당하나요?
- 강제 종료 함수를 사용하면 리젝 당하나요?
- 아이폰X 대응 안하면 리젝인가요?
- 우리 앱은 iPhone만 지원하고 iPad를 지원안하는 데, iPad에서 실행했을 때 더이상 진행할 수 없다고 사진과 합께 리젝 내용을 받았습니다. 😭
- 자체로그인 없이 소셜로그인만 붙이려고 하는데, 애플 리젝사유인가요?
- 개인적으로 바이블과 스토리진행을 따라해보는 2가지가 있을 것 같은데요.
- 바이블 쪽이면 :
스위프트 프로그래밍: Swift4 객체지향, 함수형, 프로토콜 지향 패러다임까지 한 번에! 2판
을 검색해보시면 좋은 것 같습니다. - 스토리 진행이면 :
꼼꼼한재은씨의 스위프트 실전편
,Do it! 스위프트로 아이폰 앱 만들기 (입문) [개정 2판]
이 좋다는 말은 들었었고, 요즘에는 다양한 책들이 있는 것 같습니다. 알게 되는 책들이 있으면 업데이트 하겠습니다.
- 바이블 쪽이면 :
- 개인적으로 야곰님의 유투브, 야곰님의 동영상 강의, 인프런 스탠퍼드 강의이 좋다고 생각합니다.
- swift 한국어 동영상 강의 링크들 모음 은 개인적으로 모아둔 링크입니다.
- giftbot님의 Links For iOS Developer, iOS 개발자를 위한 링크모음 입니다.
아론 힐리가스의 오브젝티브-C 프로그래밍
책을 검색해 보세요, 국내에서는 이정도가 좋은 것 같습니다.- 오브젝티브-C 한국어 동영상강좌는 T아카데미 Objective C 강좌 정도 인 것 같습니다.
- 스위프트 관련 커뮤니티 그룹은 스위프트 한국 개발자 그룹(페이스북), 맥부기(네이버 카페) 두가지 정도를 알고 있습니다.
- 오픈된 대화방은 카카오톡 iOS 오픈채팅방(iOS Developers KR), 카카오톡 RxSwift 오픈채팅방 정도가 있는 것 같습니다.
- iOS 개발자는 소수이니 커뮤니티에서 함께 개발을 진행하며, 어려운 내용은 공유하고 도움도 주고 받고 하면 개발일을 더 즐겁게 할 수 있는 것 같습니다.
- https://github.com/ClintJang/awesome-swift-korean-lecture
- https://github.com/soapyigu/Swift-30-Projects
-
제가 알기로는 080-860-9797 입니다. 현재는 공식적으로는 온라인으로 요청하면 전화 연결을 해준다고 합니다. 아래 전화 지원 링크를 눌러서 진행해 보세요.
-
애플 전 세계 전화지원 링크 : 온라인으로 요청하세요.
전 세계 전화 지원 등록 및 멤버십, 앱 제출 및 관리, 분석 등 일부 주제에 대해서는 Apple Developer 전화 지원이 전 세계에서 제공됩니다. 지원 전화를 받으시려면 온라인에서 요청하십시오. 전문가와 연결해 드리겠습니다.
- App Store and TestFlight review times - Runway : 현재 검수 시간이 평균적으로 얼마나 걸리는 지 정보를 제공해줘서 대략적인 판단을 할 수 있게 해주는 사이트 입니다.
- (간헐적으로 사이트 접속이 안될 때도 있었습니다. 그때는 나중에 다시 시도해봐 주세요.😀)
- 보통 케바케라서 정확하지 않습니다. 평균적인 시간보다 오래 걸린다면, 검수 진행에 대해 문의를 진행해 해보시면 될 것 같습니다.
- 개인 및 법인 계정이라면 : Apple TestFlight 가 있습니다.
- 구글에서 "TestFlight 사용법" 으로 검색을 해보셔요.
- 기업(Enterprice) 계정이라면 : 디바이스 등록없이 기업내 배포가 가능합니다. 단, 자사 외의 다른 목적으로 배포시 계정이 블락 될 수 있습니다. (알고 계시는 분들이 애플에 신고도 가능할 수 있어요~)
-
긴급심사 리뷰 요청이 있습니다. 정말 긴급할 때만 사용하세요..
-
"appstore 긴급 리뷰 요청" 정도로 구글에 검색하면 방법을 알 수 있습니다.
빠른 앱 심사 참작이 가능한 상황에 직면하는 경우 빠른 앱 심사를 요청할 수 있습니다. 이러한 상황으로는 App Store에 있는 앱의 심각한 버그를 수정하거나 직접 관련된 이벤트와 동시에 앱을 출시해야 하는 경우 등이 해당됩니다.
-
그냥 요청이 아니라 어쩔수 없는 이유와 사연을 정확히 전달해야 합니다. 그냥 대충 신청하면 무조건 거절될 것 입니다.
-
예를 들어 심각한 문제점이나 프로모션 과 같은상황은 긴급심사가 가능 한 것으로 알고 있습니다.
-
Select a reason (이유) 에는 3가지 항목이 있습니다.
- Critical Bug Fix
- Time-Sensitive Event
- Other
긴급은 아무때나 사용하는 것이 아닙니다 내 입장이 급한것과 긴급 심사 사유는 완전히 다릅니다. 내 입장이 급하다고 막 신청하면, 진짜 해야 할때 묻지마 거절될 수 있습니다. 보통 심사받고 배포하는건 모두가 급하기 때문에.. 정말 심각한 사유가 있을 때 사용하시는걸 추천드립니다. 크리티컬한 이유로 앱을 사용할 수 없는 상태라서 올리는거 아니면 긴급은 피하시는 것을 추천 드립니다. 긴급이라고 해도 심사는 꼼꼼하게 확인 할 것이니 리젝을 당할 수 도 있고, 일반심사도 처리가 빨라지고 있어서 어떨때는 일반이 더 빠를 수도? 있습니다. 그리고 애플은 정직하지 않은 개발자와 같이 일하지 않습니다. ... 🙇🏻
-
개인적인 경험으로 볼 때, 케바케 인 것 같습니다. 1시간도 안되서 나타난적도 있고, 몇시간이 지났는 데, 어떤 단말에서는 나타나지 않은 경우도 있었습니다. 24시간 안에는 모두 나타나는 것 같습니다.
-
앱스토어 심사지침 의 내용 중에 "출시 날짜"로 검색해보세요. 앱이 나타나려면 최대 24시간이 걸릴 수 있다고 합니다.
출시 날짜: .. (중략) .. 또한 선택한 모든 지역의 App Store에 앱이 나타나려면 최대 24시간이 소요될 수 있습니다.
- App Thinning으로 검색해보시면 나옵니다. Bitcode, On-Demand Resources (ODRs), Slicing 차이로 있습니다.
- 참고한 링크
- 가능하지 않습니다.
- 법적인 이유로 만 18세 미만의 청소년은 개발자 프로그램을 신청할 때에 동의해야 하는 동의서에 동의를 할 수 있는 효력을 지니지 못하기 때문에 가능하지 않습니다.
-
구글에서 'AppStore용 프라이버시 정책' 으로 검색해 보세요.
-
2018년 10월 3일부터 Appstore에서 새로운 앱 및 앱 업데이트를 위한 앱 제출시 개인 정보 취급 방침을 요구하도록 바뀌었습니다.
-
앱스토어 심사지침 의 5.1.1 내용을 확인해보세요.
5.1.1 데이터 수집 및 보관 (i) 개인정보 처리방침: 모든 앱에는 App Store Connect 메타데이터 영역과 앱 내부에 쉽게 볼 수 있는 개인정보 처리방침 관련 링크가 포함되어야 합니다. 개인정보 처리방침은 분명하고 명시적으로 다음 요건을 준수해야 합니다. 앱과 서비스가 수집하는 대상 정보(있는 경우), 정보 수집 방법, 수집한 정보의 사용 목적을 정의해야 합니다.
- 앱 미리보기 및 스크린샷 이미지 업로드 하는 부분에 "?" 아이콘을 클릭하시면 가이드 링크가 나타납니다.
- 앱 미리보기 사양
- App Store 아이콘, 앱 미리보기 및 스크린샷 개요
- 과거에는 실명과 다른 이름이 허용이 되던 시기도 있었지만, 현재는 제한하고 있습니다.
- 개인 개발자는 실명, 법인은 법인명으로 제한 되는 것으로 알고 있습니다. 물론 개인이 개명을 한다던가 여권이름과 다른 오기가 있었다던 가 또는 법인 명이 변경되었다던가 하면, 그런 부분(합당한 사유)은 당연히 변경될 수 있는 것으로 알고 있습니다.
- 문의해보신 분도 위의 내용으로 답변을 들은 것으로 알고 있습니다.
- 확인이 필요하시면 고객센터에 문의해보셔도 좋을 것 같습니다.
-
추가하셔야 되지만, 현재 운영 중인 앱이니.. 2020년 4월까지는 현행대로 하셔도 괜찮을 것으로 보입니다.
-
Apple로 로그인에 대한 신규 가이드라인(2019년 09월 12일) 관련 뉴스 글을 보시면 기존 앱은 2020년 4월까지, 신규 앱은 뉴스 글이 올라온 2019년 09월 12일 부터 추가해야되는 상황이라면 추가하셔야 됩니다.
.. 중략 .. 오늘부터 App Store에 제출하는 신규 앱은 해당 가이드라인을 따라야 하며, 기존의 앱과 앱 업데이트는 2020년 4월 전까지 해당 가이드라인을 따라야 합니다. .. 중략 ..
-
애플로 로그인을 구현 안해도 되는 경우
(애플 로그인 구현 불필요)
- 자체회원 가입만 있는 경우
- 교육 또는 기업 계정
- 특정 써드파티 소셜 로그인이 필수 인 경우
-
위의 경우를 제외하고는 로그인 기능이 있다면 애플로 로그인을 함께 구현해야됩니다.
(애플 로그인 구현 필요)
- 자체회원 로그인 + 서드파티 로그인 의 경우
- 서드파티 로그인만 있는 경우
-
App Store 심사 지침 보기(영문)의
4.8 Sign in with Apple
에 정보가 있습니다.- Sign in with Apple is not required if:
- Your app exclusively uses your company’s own account setup and sign-in systems.
- Your app is an education, enterprise, or business app that requires the user to sign in with an existing education or enterprise account.
- Your app uses a government or industry-backed citizen identification system or electronic ID to authenticate users.
- Your app is a client for a specific third-party service and users are required to sign in to their mail, social media, or other third-party account directly to access their content.
- Sign in with Apple is not required if:
-
추가로 Sign in with Apple REST API 링크 입니다.
- 앱스토어 올라가 있는 앱을 다운 받은 것이라면 개발자 계정에 영향을 받지 않습니다.
- 1년에 한번 결제를 하는 부분을 연장하지 않으면 앱 스토어 에서 노출이 되지 않게 되고, 다시 결제를 하면 앱스토어에서 해당 앱이 다시 노출이 되게 되는 사항은 있습니다.
- 자세한 사항은 여기 링크를 참조해 주세요 : https://developer.apple.com/kr/support/certificates/
- Xcode clean, Xcode 재 실행
- 재부팅
- derivedData 를 제거해보기
- xcode deriveddata clean 정도로 구글 검색해보셔요.
-
이전 버전을 다운받을 수 있습니다.
-
Xcode 10은 새로운 빌드 시스템을 사용합니다. 새로운 빌드 시스템은 향상된 안정성과 빌드 성능을 제공하며 레거시 빌드 시스템에서는 볼 수 없는 프로젝트 구성 문제를 포착합니다. 만약 문제가 있다면 이전 빌드시스템을 사용할 수 있습니다.
- File > Project/Workspace Settings
Xcode 10 기본 이전 빌드시스템(1/2) 이전 빌드시스템(2/2)
- 이미지 처럼 이렇게 설정하는 방법이 있습니다.
- 곰튀김님의 유투브 동영상 링크를 참고해 주세요. 짱입니다.
-
아래 이미지 처럼 환경변수 설정해주시면, 디버그콘솔에 찍혀요.
환경변수 설정 콘솔 로그 -
이건 pre-main타임 입니다. 그이후 시간은 AppDelegate가 호출된 이후라 그건 직접 찍으시면 됩니다.
-
환경변수 :
DYLD_PRINT_STATISTICS
, value : 1
Swift는 기존 Objective-C의 단점을 보완하며, 현대 프로그래밍 언어가 갖고 있는 기능을 많이 포함하고 더불어 일정한 성능 향상을 시켰지만... Objective-C에 비해서 빌드 속도가 현저히 느려졌지요? 😭
- 성능 좋은 PC를 선택하는 것도 중요할 것 입니다. 더불어..
- 개인적으로 이 링크를 들어가서 보시길 추천드립니다. 👍
- 그외 링크
- 시뮬레이터 실행 후 왼쪽 상단 메뉴에서 중에서
Choose Hardware -> Erase All Content and Settings..
- 팝업에서 Erase 를 선택하시면됩니다.
- 시뮬레이터 실행 후 왼쪽 상단 메뉴에서 중에서
Automatically Sync Pasteboard
을 선택하시면 됩니다.
Choose Edit -> Automatically Sync Pasteboard to turn on and turn off
- simulator help topics 링크를 참고해보세요.
- 가끔 잘 안되면.. 체크를 해제했다가 체크했다가 복사 몇번 해보시면 되실 거에요.😭
- 둘 다 실제 하드웨어를 사용할 필요없이 앱(어플리케이션)을 테스트 하기 위한 목적을 가지고 있습니다.
- 안드로이드 개발할 때, 에뮬레이터 (
emulator
) 를 사용하지요. - 에뮬레이터는 아키텍쳐를 재현하여 만듭니다. 현재 시스템 안에 다른 시스템을 완벽히 재현한 것이지요. 안드로이드 에뮬레이터는 arm용과 x86용 등등을 따로 만들수 있고 비교적 무겁고 느립니다.
- 에뮬레이터는 실제 기기와 유사한 테스트가 가능합니다.
- 에뮬레이터가 완벽한 구현이라면 시뮬레이터는 부분적인 구현입니다.
- 시뮬레이터(
simulator
)는 대상 시스템을 추상화 하여 실제환경에 가깝고 유사하게 동작하도록 테스트 환경을 만들어 줍니다. 속도가 빠르지요. - 시뮬레이터는 기존의 플랫폼에서 동작만 재현합니다. 예를 들면, iOS 디바이스는 arm64에서 시뮬레이터는 x86_64에서 돌아가요.
- '시뮬레이터 애뮬레이터' 정도로만 검색해도 내용이 많이 나옵니다.
- 기본적인 검수 진행은 진행되는 사항 중 중요한 정보들은 메일로 받아져 있을 것 입니다. 메일함을 우선 확인해 봅시다 😁
- 검수자에 따라 케바케로 검수결과가 달라질 수 있습니다. 항상 통과되던 앱이 이번에 왜 리젝된거지? 하고 당황하지 말고 리젝 내용을 확인해보세요.
- App Store 심사 지침 가이드 라인은 계속 변합니다. 아래 내용도 시간이 지나면 달라질 수 있습니다.
- 데모계정(앱을 잘 볼수 있는 계정, 아이디와 패스워드등)을 제공하여 검수자가 로그인을 진행할 수 있게 하면 됩니다. 혹은 그 해당 메일에서 받은 내용을 디테일하게 대응하셔도 됩니다. 로그인 관련 부분이라면 데모계정을 제공하면 문제가 생기지 않을 것입니다.
- 소셜 기능이 전혀 없는데 소셜로그인을 강요하면 (대안이 없으면) 리젝당합니다. 예를들면 페이스북 관련 기능이 필수로 있는게 아니면 리젝 입니다.
- 저는 오래됬지만, 비회원으로 앱을 이용할 수 있는 기능을 추가했습니다. 필요한 기능의 경우에 로그인 해서 이용하도록 하니 통과 되었었던 기억이 있습니다.
- 데모비디오를 제공하라는 이야기입니다. 리뷰어에 따라 다르지만, 구동하는 부분을 앱 실행해서는 확인 할 수 없다 판단되면 연동되는 실행되는 동영상을 찍어서 리뷰어가 확인 할 수 있게 해주면 됩니다.
- 예를 들어, 시연하는 동영상을 찍고, 그것을 유투브에 업로드하고 링크제공하면 되겟죠.
- 웹만 있는 기능을 단순한게 웹뷰로 감싸서 앱으로 올린 앱은 리젝을 당할 가능성이 매우 높다고 생각됩니다. 리뷰어가 판단하기에 앱의 기능이 하나라도 있어서 앱으로 만들어 올렸다 라는 차이점을 주어야 될 것 같습니다.
- 예를 들어 화면 비중을 일부라도 네이티브로 한다던지..
- 예를 들어 푸시 기능을 추가한다던지..
- 리뷰어에게 설명할 수 있는 네이티브 기능이 있어야 할 것 입니다.
- App Store Review Guidelines 4.2
4.2 최소한의 기능
앱에는 웹 사이트를 단순히 바꾼 수준을 넘어서는 기능, 콘텐츠, UI가 있어야 합니다.
**특별히 유용하거나 고유하지 않은, '앱 같지 않은' 앱은 App Store에 등록할 수 없습니다.**
지속적인 엔터테인먼트 가치를 제공하지 못하는 앱이나 지나치게 공포스러운 앱은 거부될 수 있습니다.
단순히 노래나 동영상으로 된 앱은 iTunes Store에 제출해야 하며
책이나 게임 설명서로 된 앱은 iBooks Store에 제출해야 합니다.
- 리뷰어에 따라 다릅니다. 중요한게 수준미달이라 판단되도 리젝 당할 수 있습니다. 작동하지 않거나 수준 미달의 경험을 제공하는 앱은 언제든지 App Store에서 삭제될 수 있습니다.
- 리뷰어 판단이지만, 안드로이드 정보가 iOS앱에 표시되고있다면 리젝될 수 있다는 이야기를 많이 들은 것 같습니다. 문제가 될 소지를 줄이세요.
- 앱 스샷에 안드로이드 이미지를 넣어도 리젝될 수 있습니다.
- 이벤트때 아이패드 준다 이런것도 리젝 될 수 있습니다.
- 리젝사유를 읽어보시고 거기에 해당하는 조치를 취하시면 됩니다. 대화로 풀 수 있느건 대화로 풀면 됩니다.
- 의도하지 않는 강제 종료함수 사용은 리젝 대상이긴 합니다.
- 안정성이 확보되지 않아 에러가 나서 앱이 강종된 것인지, 사유가 명확해서 이런 상황에서 이용못하게 하기 위해, 고객에게 알려주고 exit(0) 처리를 하였다면 리젝되지 않을 것입니다. (의도된 것이라면 OK)
- 애플 공지 링크를 클릭해 보면 2018년 7월(Starting July 2018)부터 대응이 되어야 된다고 합니다. 이제부터는 당연히 대응된 앱이 아니라면 리젝사유입니다.
- 실물결제 는 리젝 사유가 아닙니다. 실물결제가 아니면 리젝입니다.
- 리뷰어는 아이패드를 쓰기 때문에 아이폰이 아닐수도 있습니다.
- 아이폰 용 앱이라도 아이패드에서 실행가능 합니다.
- 보통 iPhone은 대부분(iPhoneX를 제외) 9:16 비율의 해상도 입니다.
- 옛날 iPad에서 지금 iPhone용 앱을 실행하면 3:4 비율입니다. 그래서 하단 부분에 버튼을 만드신 것이 안나오거나 UX/UI가 이상하게 나올 수 있습니다. 최소한 iPad에서 버튼을 누를 수 있는 정도의 UI는 리뷰어와 대화가 가능하겠죠.
-
소셜로그인만 있으면 리젝사유가 아니라 소셜로그인을 이용한 이유가 있어야 합니다.
-
페이스북 로그인을 한다면 페이스북에 공유하는 기능이 있다던지 그 특정 소셜로그인을 해야하는 이유가 있어야합니다
-
- "앱의 핵심 기능이 특정 소셜 네트워크(예: Facebook, WeChat, Weibo, Twitter 등)와 관련이 없다면 로그인이나 다른 비슷한 메커니즘을 거치지 않고 바로 기능을 사용할 수 있도록 해야 합니다."
5.1 개인 정보 보호 5.1.1 데이터 수집 및 보관 (v) 계정 로그인: 계정이 반드시 필요한 주요 기능이 포함되지 않은 앱인 경우에는 로그인하지 않아도 사용할 수 있도록 해야 합니다. 앱의 핵심 기능과 직접적으로 관련이 있거나 법적으로 필요한 경우가 아니라면, 앱을 작동하는 데 사용자 개인 정보를 입력하도록 요구하지 않아야 합니다. 앱의 핵심 기능이 특정 소셜 네트워크(예: Facebook, WeChat, Weibo, Twitter 등)와 관련이 없다면 로그인이나 다른 비슷한 메커니즘을 거치지 않고 바로 기능을 사용할 수 있도록 해야 합니다. 기본 프로필 정보를 가져오거나 소셜 네트워크에 공유하거나 앱을 사용하도록 친구를 초대하는 행위는 앱의 핵심 기능에 해당하지 않습니다. 앱은 앱 내에서 소셜 네트워크 자격 증명을 철회하거나 앱과 소셜 네트워크 간 데이터 접근을 비활성화하는 메커니즘을 포함해야 합니다. 앱은 자격 증명이나 토큰을 기기 밖 소셜 네트워크에 저장해서는 안 되며, 앱을 사용하는 동안 앱에서 소셜 네트워크에 직접 연결하려는 목적으로만 자격 증명이나 토큰을 사용해야 합니다.
- 2022년 06월 30일부터 계정 생성을 지원하는 앱은 계정 삭제 기능을 제공해야합니다.
- 2022년 05월 24일에 Apple Developer에 등록된 6월 30일부터 시작되는 계정 삭제 요구 사항을 살펴보시기 바랍니다.
- 이 내용은 Apple Store 심사 지침 5.1.1(v)에 나타나 있습니다.
(v) 계정 로그인: 계정이 반드시 필요한 주요 기능이 포함되지 않은 앱인 경우에는 로그인하지 않아도 사용할 수 있도록 합니다. 앱에서 계정 생성을 지원하는 경우 앱 내에서 계정 삭제 기능도 제공해야 합니다.
- 애플의 계정 삭제 지침은 앱에서 계정 삭제 기능 제공하기를 참고하세요.
- Cocoapods를 추천드립니다.
- Cocoapods 사용 팁 링크입니다.
- 처음이라 어떻게 해야될 지 막막하시다면 하울님의 코딩채널을 추천드립니다.
- Carthage(카르타고) 라는 비슷한 방식도 있습니다. 워크스페이스를 만드는 방식이 아닌 Embbed Framework를 이용하는 방식이죠.
- awesome-ios : 저는 처음에 여기 링크를 보고 사용했었습니다.
- MotionBook 앱을 받아보셔도 좋고..
- cocoacontrols : 여기서 키워드 검색을 해보세요. 예를 들어 테이블 뷰의 헤더 커스텀이 필요하면 .. 'header'로 검색을 ~
- 전 이정도로 찾아보거나 보통은 키워드로 구글 검색을 해봅니다. 당연히 커뮤니티나 지인에게 물어보기도 하구요~.
당연히 iOS 개발과 관련된 디자인 내용입니다.
- iOS에서는 dp를 사용하지 않습니다. point라는 개념을 사용합니다.
- 제드님의 블러그 링크를 들어가 보세요. 제일 설명이 잘 되어있는 것 같습니다.
- 제플린 이라는 협업 툴로 개발을 많이 합니다. iOS용으로 제공받으면 편하게 개발 하실 수 있습니다.
- 유지보수 관점에서 디자이너 분들과 협의하면 좋은 결과를 도출 할 수 있을 것입니다. 파이팅!
- 스케치(sketch)를 많이 사용하는 것으로 알고 있습니다.
- 스케치를 이용해서 디자인하고 디자인 가이드의 공유는 제플린(zeplin) 으로 하죠.
- 요즘은 Adobe XD로 넘어가는 추세라는 말도 들어봤습니다.
- 어도비 엑스디의 장점으로 포토샵이나 일러에서 작업한 걸 스케치 같은 경우는 가져오기가 불편한 데, 엑스디는 복붙으로 가져올 수 있는 것 같습니다.
- 애플에서 제공하는 리소스들도 엑스디가 지원한다 하구요.
- 더불어 엑스디는 어도비와 같은? 단축키를 사용해서, 어도비의 단축키에 익숙하신 상태라면 러닝커브도 적을 것입니다.
- 검색해 주세요. 😁
- https://appiconmaker.co
- 맥용 앱 사용하시면 더 편할 수 있습니다.
- iPhone 류에서는 5개 입니다.
- iPad 류에서는 11개 입니다.
- statusBarHidden 인스턴스 프로퍼티는 9.0에서 Deprecated 되었습니다.
- 앱 시작시에(런치시) info.plist에서 숨길지 여부를 설정할 수 있고..
- Status bar style : UIStatusBarStyle
- Status bar is initially hidden : NO/YES
- View controller-based status bar appearance :NO
- UIViewController에서 prefersStatusBarHidden 처리를 해서 보여줄 지 여부를 설정할 수 있습니다.
- 더불어 필요시 변경시키고 싶다면 setNeedsStatusBarAppearanceUpdate 를 호출해 주면, 변경이 될 것 입니다.
-
이제 설정에서 자기 앱의 설정말고 다른 건 못 엽니다. (iOS 11 부터로 알고 있습니다.)
-
UIApplicationOpenSettingsURLString 를 이용하시면 됩니다.
-
이제 리젝 됩니다. 사유는.. : review guidelines 2.5 Software Requirements 의 2.5.1. 의 내용을 보면 애플에서 제공하는 공식적인 최신 API를 사용하라고 합니다.
2.5.1 앱은 공용 API만 사용할 수 있으며 현재 판매되는 OS에서 실행되어야 합니다. 공용 API(영문)에 대한 자세한 내용을 확인하십시오. 앱을 최신 상태로 유지하고 OS의 다음 버전에서 더 이상 지원하지 않아 사용할 수 없는 기능, 프레임워크 또는 기술을 단계적으로 삭제하십시오. 앱은 원래 목적에 맞는 프레임워크와 API를 사용해야 하고 앱 설명에 이와 관련된 내용을 기재해야 합니다. 예를 들어 HomeKit 프레임워크의 경우 홈 자동화 서비스를 제공해야 하고, HealthKit의 경우 건강 및 피트니스 목적으로 사용되어야 하며, 건강 앱과 연동되어야 합니다.
-
iOS 10 에서는 App-Prefs?, iOS 10 미만에서는 Prefs? 는 조건을 걸면 가능할 것입니다. 하지만 하위 버전은 사용자도 희소하고, 리젝 되리라 생각됩니다.
-
참고 링크 : 리젝된 경험 링크
-
다른 참고 예시 : 리젝되어 받은 내용 중 일부 글
... (중략) ... Your app uses the "prefs:root=" non-public URL scheme, which is a private entity. The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change. Continuing to use or conceal non-public APIs in future submissions of this app may result in the termination of your Apple Developer account, as well as removal of all associated apps from the App Store. ... (중략) ...
setNeedsLayout
과layoutIfNeeded
를 검색해 보세요. 추가적으로layoutSubviews
키워드도 같이 검색해보면 좋습니다.- Runloop, 실행 루프 라고 하지요. 실행 루프 안에서 터치나 여러 이벤트가 발생하면 거기에 따라 시스템 상황에 맞게 화면을 업데이트 합니다. 이런 업데이트 사이클에 맞춰서 화면을 갱신 시키는 시점에 setNeedsLayout 가 호출되어있었다면 해당 시점에 화면을 갱신 할 것입니다. setNeedsLayout 를 사용했다면, 비동기적이며, 시스템에 효율적인 갱신 방법입니다. 단, 우리가 정확히 업데이트 시점을 컨트롤 할 수는 없을 것 입니다.
- 즉각적으로 사용하고 싶다면 layoutIfNeeded 를 사용합니다. 강제적이고 즉시 업데이트가 가능하죠.
- https://www.wtfautolayout.com/
- iOS와 macOS의 자동 레이아웃에서 오류 로그를 구문 분석하여 충돌하는 제약조건에 대한 보다 직관적인 시각적 설명을 제공하는 사이트입니다.
- 오류 로그 를 복사해서 넣으면 보기 쉽게 알려줍니다. 아래는 제가 강제로 발생시킨 오류 로그 입니다.
[LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x6000019218b0 V:|-(66)-[UIScrollView:0x7fb177025200] (active, names: '|':UIView:0x7fb1765096d0 )>",
"<NSLayoutConstraint:0x600001921a40 UIScrollView:0x7fb177025200.bottom == UIView:0x7fb1765096d0.bottom - 44 (active)>",
"<NSLayoutConstraint:0x600001921a90 UIScrollView:0x7fb177025200.height == 100 (active)>",
"<NSLayoutConstraint:0x600001921ae0 'UIView-Encapsulated-Layout-Height' UIView:0x7fb1765096d0.height == 896 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001921a90 UIScrollView:0x7fb177025200.height == 100 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
오류 로그를 넣어서 Run | 보기 쉬운 결과 |
---|---|
![]() |
![]() |
- 구글에서
swift date utc format
등 아래의 키워드를 활용해서 검색해보세요. - date 객체는 기본적으로 UTC, GMT+0의 시간을 저장합니다.
- date 객체는 timezone이나 locale 같은 값을 안 갖고 있습니다.
- SwiftDate 같은 라이브러리는 그걸 같이 저장할 수 있는 객체를 제공합니다.
- 현지 시간으로 잘 변환하려면 Formatter를 쓰거나 Calendar를 써서 변환 해야 됩니다.
- 아니요. 사용할 수 없습니다.
- Codable은 Swift Standard Library 입니다.
- Swift 4 이상에서만 사용할 수 있습니다.
- Codable 샘플소스
DispatchGroup
을 이용해서notify
로 처리하는 방법이 있습니다. 강조한 키워드로 검색해 보세요.- 참고할 만한 셈플 소스 링크입니다.
- 그 외에 RxSwift의 Zip등의 오퍼레이터를 활용하는 방법
- 그 외에 라이브러리로 Bolts-Swift 등을 활용할 수 있습니다.
- 마기님의 블로그의 delegate 설명이 좋은 것 같습니다. 여기를 봐보셔요.
- 위의 블로그 설명에 개인적으로는 제일 마음에 들었습니다. 위임자의 의미를 가지고 있습니다. 필요한 상황을 정의하고 대신 해달라고 요청하면 됩니다. 필요한 상황에 사용하면 좋습니다.
- 저는 데이터를 공유하거나 기능처리 요청을 하는 여러 방법 중 가능하면 delegate 패턴부터 고민하고 이게 가용한 상황이 아니라면 다른 방법을 찾아봅니다.
- xib 가 있습니다. 구글에 'xib' 만 검색하셔도 다양한 자료를 얻을 수 있습니다. nib 파일이라고도 합니다. 같은 개념으로 이해하시면 됩니다.
- Nib : Next Interface Builder
- Xib : Xcode Interface Builder
- "ios push payload size" 정도로 구글링해보시면, 관련 정보를 얻을 수 있을 것 같습니다.
- 예전에는 256 bytes 인 시절도 있었지만, 과거 이야기 이죠..
- CreatingtheNotificationPayload 애플문서
- stackoverflow 관련글
As per the updated Apple docs the size is 4KB.
For regular remote notifications, the maximum size is 4KB (4096 bytes)
For Voice over Internet Protocol (VoIP) notifications, the maximum size is 5KB (5120 bytes) NOTE
- 구글에서
swift c++
정도로 검색을 하면 될 것 같습니다. - Objc로 Wrapping해서 Bridge를 통해서 불러와야 합니다.
- 제가 알고있는 셈플 링크입니다. 좋은 링크 알게 되는 데로 업데이트 더 할께요.
- giftbot 님의 iOS-Architecture-Sample : MVC, MVP, MVVM, VIPER 👍
- ReactorKit : RxSwift + MVVM
- 마기님의 MVP, RxTodo : MVP + RxTodo
- 마기님의 MVVM
- 저의 MVVM 샘플 : 언젠가 완성을..
MVC는 Model-View-Controller의 약자입니다.
개발할 때 3가지 형태로 구분하여 개발하는 소프트웨어 개발 방법론입니다.
그 3가지 요소를 설명하면
Model은 무엇을 할지 정의합니다. 비지니스 로직에서의 알고리즘, 데이터 등의 기능을 처합니다.
Controller는 어떻게 할지를 정의합니다. 화면의 처리기능과 Model과 View를 연결시켜주는 연활을 하지요.
View는 화면을 보여주는 역할을 하지요. 웹이라면 웹페이지, 모바일이라면 어플의 화면의 보여지는 부분입니다.
MVC는 복잡한 대규모 프로그램을 개발을 하게 되면서 문제점이 확인되었습니다.
다수의 View와 Model이 Controller를 통해 복잡하게 연결될 수 있기 때문에 Controller가 뚱뚱해지게 되는 Massive ViewController(대규모 MVC 어플리케이션)가 되어버립니다.
View와 Controller가 라이브사이클에 강하게 연결되어있고, 더불어 Controller를 통해 View와 Model간에도 관계가 복잡하게 연결되어있어서 수정시 테스트가 힘들고, 파악이 어렵기 때문에 여러 Side-Effect를 불러오게 되는 문제점이 있습니다.
그래서 MVC는 위 문제점을 해결하기 위해 여러 페러다임을 수용한 다양한 패턴을 파생시켰습니다.
- 리엑티브 (Reactive eXtension) 라고 부르지요. Reactive는 같은 말로 알엑스(Rx) 라고 부릅니다. 리엑티브 페러다임은 마이크로소프트가 창안한 개념으로 데이터의 흐름에 따른 변화를 만드는 비동기적인 프로그래밍 패러다임을 구체화 시킨 swift용 라이브러리라고 생각하시면 됩니다.
- reactivex.io에서 한국어가 지원되는 페이지가 있어서 처음에는 사이트를 이용하셔서 의미를 알아보셔도 좋습니다.
- RxSwift를 왜 하는 지 궁금하시면 곰튀김님 동영상 설명을 들으면 이해가 쏙쏙 됩니다. 정말 최고에요. 한번 보세요. 총 2편입니다. 1편부터 고고
- Rx에겐 특별한 것이 있다. 를 한번 읽어보세요.
- RxSwift 왜 사용하면 좋을까요? : RxSwift 개발을 하면서 개인적인 생각을 작성해보았습니다.
- 마기님 블로그 RxSwift 1편을 봐보셔요. 여기 설명도 좋습니다. 계속 연재해주세요.!
- 제가 정리한 RxSwift관련 한국어 동영상 링크도 참고하셔도 좋습니다.
- 곰튀김님 Youtube가 요즘은 정답인 것 같습니다. 어마어마한 보석 같은 자료를 계속 올려주십니다.
- 여기 링크에 들어가보시면 됩니다.
- System Status 링크
-
점유율 (매년 9월 중순 즈음, 신규 OS를 업데이트 합니다.)
-
2022년 5월 31일 기준으로 iOS 14+15는!! 헛!!!! 😱 99% 라니.. iPad는 97% 네요! (역시 최근 4년 내의 기기 기준)
- 사용안하고 묵혀준 핸드폰이라던지, 테스트 장비나 어느정도 오래된 장비를 고려할 필요가 있을까요??..
- 이제 iOS 15 다들 쓰시죠?.. 이제는 최소한 iOS 13 Or 14 이상으로 해도 괜찮치 않을 까요?
- 2022년! 올해는 iOS 16이 나오겠군요...
- 최대한 사용자를 받아들이는 것도 중요하겠지만, 조금 더 개발 품질을 높이고, 유지 보수 공수를 낮출 수 있는 것도 중요한 부분입니다...
- 카카오톡도 최소 지원 버전이 높습니다.!!
국민 앱 카카오톡도 iOS는 iOS13 부터 지원합니다. (iOS 12 지원 종료 일자 : 2021년 11월 23일) 상세 내용은 펴주세요.
- 종료 일자 : 2021년 11월 23일
- 종료 내용 : iOS 12.5.5, Watch OS 6.3 이하 버전에 대한 카카오톡 업데이트 지원
2020년 점유율
2020년 12월 15일 (iOS 14+13 : 98%) |
2020년 06월 17일 (iOS 13+12 : 98%) |
2020년 01월 27일 (iOS 13+12 : 94%) |
---|---|---|
![]() |
![]() |
![]() |
2019년 점유율 (10월 15일, 08월 06일, 05월 30일, 02월 24일, 01월 01일, 접힌 것을 펴주세요.)
2019년 10월 15일 (iOS 13+12 : 93%) |
2019년 08월 06일 (iOS 12+11 : 97%) |
2019년 05월 30일 (iOS 12+11 : 96%) |
2019년 02월 24일 (iOS 12+11 : 95%) |
2019년 01월 01일 (iOS 12+11 : 95%) |
|
---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2018년 점유율 (12월 3일, 10월 29일, 10월 10일, 09월 03일, 04월 22일, 접힌 것을 펴주세요.)
2018년 12월 03일 (iOS 12+11 : 93%) |
2018년 10월 29일 (iOS 12+11 : 93%) |
2018년 10월 10일 (iOS 12+11 : 93%) |
2018년 09월 03일 (iOS 11+10 : 95%) |
2018년 04월 22일 (iOS 11+10 : 95%) |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
2017년 점유율 (12월 4일, 07월 28일, 2월 20일, 접힌 것을 펴주세요.)
2017년 12월 04일 (iOS 11+10 : 92%) |
2017년 07월 28일 (iOS 10+ 9 : 97%) |
2017년 02월 20일 (iOS 10+ 9 : 95%) |
- | - |
---|---|---|---|---|
![]() |
![]() |
![]() |
- 최신 OS가 높은 점유율을 차지 하고 있고, 이전 OS까지 합하면 90%가 넘을 것 입니다. 그래서 보통 반영한다면, 현재와 이전 정보까지를 포함해서 배포하면 좋을 것 같습니다.
- iOS 사용자는 업데이트를 빠르게 수용합니다. Earlier 는 테스트 장비나 오래되서 방치된 단말이 많이 포함되어있을 것입니다. 빠르게 업데이트해서 사용하니 최신 OS에 근접한 OS를 하셔도 괜찮을 것입니다. 그래야 유지보수 이슈에 들어가는 비용도 줄어들고, 신기술을 적용하기 좋습니다. 그만큼 사용시 문제점(버그)도 줄어들죠.
- iOS 10, 11, 12, 13, 14에서 호환되는 기기.. 에 대한 메모 내용입니다. : 판단에 참고가 되실 것 같아요.
- download 링크 : 다운로드 링크 입니다. 최신 다운로드 정보를 알 수 있습니다.
- download more 링크 : 지나간 다운로드 정보를 찾을 수 있습니다.
- news 링크 : 다운로드 링크 입니다. 최신 다운로드 정보를 알 수 있습니다.
- releases 링크 : 지나간 다운로드 정보를 찾을 수 있습니다.
- 다운로드 링크는 바로 위의 질문의 답변 링크를 보시면 될 것 같습니다.
항상 환영합니다.
즐거운 하루 되세요 🙇