Home

Awesome

iOS(Swift, Objc) 질문과 답변 모음

소개

iOS (swift, objc)개발을 하면서 알게된 질문과 답변 내용을 모아보았습니다. 개발 언어는 공부를 하면 빠르게 익힐 수 있지만, 개발 경험은 물어보고 정보를 얻기가 쉽지 않습니다. 도움이 될 수 있도록 정리를 꼼꼼히 해보겠습니다.

잘못 작성된 정보는 열심히 수정 하겠습니다. 언제든지 문제가 있으면, 편하게 수정해주세요.

지금은 작성을 시작해서 내용이 적지만, 알차게 계속 업데이트 하겠습니다.<br /> 디테일한 지식 보다는 iOS 개발을 하면서 이정도는 알고 있으면 좋은...<br /> 정도의 질문과 답변 형식으로 정리 하려고 합니다.

목차

<br />

질문과 답변

1. 개발입문

Swift 공부할 때 보면 좋은 책은 어떤 것이 있을 까요?

Swift 개발을 처음 시작할 때 공부하기 좋은 링크 가 있을 까요?

Objective C 공부할 좋은 방법이 있나요?

처음 개발에 입문 했는 데, 좋은 커뮤니티가 있을까요?

ios 공부할만한 깃헙 프로젝트 혹시 추천해주실 수 있나요? 독학하는데 가이드가 없으니 힘드네용 알려주시면 감사하겠습니다

<br />

Top으로 가기

<br /> <br />

2. AppStore

애플 개발자 전화 지원은 몇번인가요? 전화가 가능한가요?

AppStore에 검수 신청하면 얼마나 걸리나요?

앱스토어를 등록하기 전에 UUID(디바이스) 등록 안된 분들이 테스트 해볼려면 어떻게 해야될 까요?

  1. 개인 및 법인 계정이라면 : Apple TestFlight 가 있습니다.
    • 구글에서 "TestFlight 사용법" 으로 검색을 해보셔요.
  2. 기업(Enterprice) 계정이라면 : 디바이스 등록없이 기업내 배포가 가능합니다. 단, 자사 외의 다른 목적으로 배포시 계정이 블락 될 수 있습니다. (알고 계시는 분들이 애플에 신고도 가능할 수 있어요~)

정말 급하게 앱스토어에 등록해야되는 데.. 어떻게 해야될 까요?

검수통과해서 "판매 준비됨"으로 바뀌었는 데, 왜? iOS 앱스토어에서 검색하면 나타나지 않을까요?

appstore에서 앱 다운로드 할때 단말별로 앱사이즈가 다른가요?? 이미지 해상도라던지.. 차이때문에, 만약에 다르다면 영향 받는 부분이 어디일까요?

미성년자는 애플 개발자 등록이 가능한가요?

개인개발자도 앱 등록시 개인정보 취급방침 URL을 반드시 추가해야되나요?

스토어 스크린샷에 디바이스를 같이 보여주소 싶은데 가이드라인 같은걸 확인 할 수 있는데가 있을까요?

앱스토어에서 앱 이름 아래에 개발자 이름을 변경하고 싶은데 따로 변경할 수 있나요? 고객센터에 문의해봐야되나요?

애플로 로그인을 하는 것을 꼭 추가해야되나요? 기존에 서드파티 로그인 기능이 있는 데, 넣어야 된다는 것 같더군요. 기능을 추가한다면 언제까지 반드시 추가해야되나요?

앱스토어에 앱이 업로드/판매 중인 상황에서 개발자 계정 설정에 문제가 생기면, 앱스토어에서 받은 앱에 영향을 주는 부분이 있을까요?

<br />

Top으로 가기

<br /> <br />

3. Xcode

Xcode에서 자동완성이 안될 때는?

Xcode 10으로 올리고 나서 빌드 에러가 났는 데, 어떻게 하죠? 과거로 돌아갈 수 있나요?

작업 중인 현재 프로젝트 폴더 위치로 이동된 터미널을 띄우고 싶은 데, 혹시 Xcode 에서 가능한 방법이 있나요?

<img width="308" height="98" src="/Image/Xcode_Open_Terminal00.jpeg"></img>

아이폰 앱 로그 속도 측정하고 있는 데, 앱 런처스크린 실행하면서 시간이 많이 걸립니다. 이 부분도 설정하는 것이 있나요?

Swift 프로젝트의 컴파일 시간 최적화를 시키려면 어떻게 하면 좋을까요?

Swift는 기존 Objective-C의 단점을 보완하며, 현대 프로그래밍 언어가 갖고 있는 기능을 많이 포함하고 더불어 일정한 성능 향상을 시켰지만... Objective-C에 비해서 빌드 속도가 현저히 느려졌지요? 😭

<br />

Top으로 가기

<br /> <br />

4. 시뮬레이터

시뮬레이터 재설정 하는 방법은?

  1. 시뮬레이터 실행 후 왼쪽 상단 메뉴에서 중에서
Choose Hardware -> Erase All Content and Settings..  
  1. 팝업에서 Erase 를 선택하시면됩니다.

Mac에서 복사한 텍스트(클립보드)를 시뮬레이터에 붙여넣기가 안되는 데, 가능한 방법이 있나요?

  1. 시뮬레이터 실행 후 왼쪽 상단 메뉴에서 중에서 Automatically Sync Pasteboard을 선택하시면 됩니다.
Choose Edit -> Automatically Sync Pasteboard to turn on and turn off  

시뮬레이터라고 하는 데, 애뮬레이터와 차이가 무엇인가요?

<br />

Top으로 가기

<br /> <br />

5. Reject

  1. 기본적인 검수 진행은 진행되는 사항 중 중요한 정보들은 메일로 받아져 있을 것 입니다. 메일함을 우선 확인해 봅시다 😁<br />
  2. 검수자에 따라 케바케로 검수결과가 달라질 수 있습니다. 항상 통과되던 앱이 이번에 왜 리젝된거지? 하고 당황하지 말고 리젝 내용을 확인해보세요.<br />
  3. App Store 심사 지침 가이드 라인은 계속 변합니다. 아래 내용도 시간이 지나면 달라질 수 있습니다.<br />

로그인을 하기위해 정보(전호번호등..)가 필요하다고 리젝 당했습니다. 😭

쇼셜(SNS) 로그인만 있으면 리젝 당하나요?

비디오에 대한 링크를 제공하라는 데? 무슨 의미일까요?

웹뷰로만 된 앱은 리젝인가요?

4.2 최소한의 기능
앱에는 웹 사이트를 단순히 바꾼 수준을 넘어서는 기능, 콘텐츠, UI가 있어야 합니다. 
**특별히 유용하거나 고유하지 않은, '앱 같지 않은' 앱은 App Store에 등록할 수 없습니다.** 
지속적인 엔터테인먼트 가치를 제공하지 못하는 앱이나 지나치게 공포스러운 앱은 거부될 수 있습니다. 
단순히 노래나 동영상으로 된 앱은 iTunes Store에 제출해야 하며 
책이나 게임 설명서로 된 앱은 iBooks Store에 제출해야 합니다.

페이지 한개 짜리 앱이 리젝 사유인가요?

앱내 공지사항에 안드 출시소식 있다구 리젝 당하나요?

강제 종료 함수를 사용하면 리젝 당하나요?

아이폰X 대응 안하면 리젝인가요?

컨텐츠결제 부분을 xxx페이나 신용카드결제로 하면 리젝 사유인가요?

우리 앱은 iPhone만 지원하고 iPad를 지원안하는 데, iPad에서 실행했을 때 더이상 진행할 수 없다고 사진과 합께 리젝 내용을 받았습니다. 😭

자체로그인 없이 소셜로그인만 붙이려고 하는데, 애플 리젝사유인가요?

계정 탈퇴 (삭제) 기능이 없는 것도 리젝 사유인가요?

(v) 계정 로그인: 계정이 반드시 필요한 주요 기능이 포함되지 않은 앱인 경우에는 로그인하지 않아도 사용할 수 있도록 합니다. 앱에서 계정 생성을 지원하는 경우 앱 내에서 계정 삭제 기능도 제공해야 합니다.

Top으로 가기

<br /> <br />

6. 라이브러리 사용

라이브러리 사용을 하려면 어떻게 해야 되나요?

라이브러리들 모아놓은 좋은 블로그니 링크가 있나요?

<br />

Top으로 가기

<br /> <br />

7. 디자인

당연히 iOS 개발과 관련된 디자인 내용입니다.

안드로이드는 UI 개발 중 크기 선택은 dp로 작업하는 데 iOS에서는 dp를 지원하나요? 현업에서는 보통 디자이너에게 요구할때 어떻게 요구를 하나요?

앱 디자인 툴로는 스케치가 대세인가요?

1024 앱 아이콘 한번에 다 변환해주는 사이트 있나요?

<br />

Top으로 가기

<br /> <br />

8. Apple 개발: UIKit

멀티 터치 는 최대 갯수가 5개 인가요?

상태바를 히든 시키거나 나타내고 싶은 데, 어떻게 해야되나요?

App-Prefs:root 와 Prefs:root 는 어떻게 사용하는 것인가요? 사용 가능한가요?

화면을 수동으로 갱신시키려고 하는 데, 어떻게 해야될까요? 원하는 시점에 변경된 값이 정확하게 반영된 화면을 표현하고 싶습니다.

오토레이아웃 깨지면 상황이 발생했을 때, 문제점을 해결하기 위해 보면 좋은 사이트 어디 인지 아세요?

[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.
<table> <tr> <th>오류 로그를 넣어서 Run</th> <th>보기 쉬운 결과</th> </tr> <tr> <td><img width="300" src="/Image/wtfautolayout_before_run.png"></img></td> <td><img width="300" src="/Image/wtfautolayout_after_run.png"></img></td> </tr> </table> <br />

Top으로 가기

<br /> <br />

9. Apple 개발: Foundation

date는 string으로 변경안하면 무조건 9시간 차이가 나나요?

Codable 클래스는 Objective-C에서 사용할 수 있나요?

UrlRequest를 여러개 날리는데 모두 끝날때까지 대기하는 방법은 어떤걸 봐야하나요?

<br />

Top으로 가기

<br /> <br />

10. Apple 개발: 그외

delegate 는 어떻게 사용하는 것인가요?

여러 컨트롤러에서 보여줘야하는 뷰가 있는데 재사용성을 높일수있는 방안이 있나요?

<br />

푸시로 기본적으로 보내는 것 메시지 외에 다른 정보들을 보내고 싶은 데, 전송 시에 많은 정보를 담아 보낼 수 있나요?

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++ 라이브러리 사용할 수 있나요?

<br />

Top으로 가기

<br /> <br />

11. design pattern

아키텍쳐 패턴으로 공부할만한 좋은 셈플 링크가 있을까요?

MVC 패턴이 무엇인가요?

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는 위 문제점을 해결하기 위해 여러 페러다임을 수용한 다양한 패턴을 파생시켰습니다.
<br />

Top으로 가기

<br /> <br />

12. RxSwift

RxSwift가 무엇인가요?

<br />

Top으로 가기

<br /> <br />

13. 기타

애플 사이트나 시스템 운영 상태의 에러 유무는 어떻게 알 수가 있나요?

iOS 배포 최소 버전에 대해 고민중입니다. iOS OS버전을 사용하는 통계 정보를 알 수 있는 정보나 링크가 있을까요?

<details open><summary><b>2023년 점유율</b></summary> <table> <tr> <th>2023년 5월 30일<br />(iOS 16 : 90%, iOS 15 : 8%)</th> </tr> <tr> <td align="center"><img width="160" src="/Image/AppStoreOSMeasured_20230530.png"></img></td> </tr> </table> </details> <details open><summary><b>2022년 점유율</b></summary> <table> <tr> <th>2022년 1월 11일<br />(iOS 15 : 72%, iOS 14 : 26%)</th> <th>2022년 5월 31일<br />(iOS 15 : 89%, iOS 14 : 10%)</th> </tr> <tr> <td align="center"><img width="160" src="/Image/AppStoreOSMeasured_20220111.png"></img></td> <td align="center"><img width="160" src="/Image/AppStoreOSMeasured_20220531.png"></img></td> </tr> </table> </details> <details open><summary><b>2021년 점유율</b></summary> <table> <tr> <th>2021년 6월 3일<br />(iOS 14 : 90%)</th> </tr> <tr> <td><img width="160" src="/Image/AppStoreOSMeasured_20210603.png"></img></td> </tr> </table> </details> <details><summary><b>2020년 점유율</b> (12월 15일, 06월 17일, 01월 27일 접힌 것을 펴주세요.)</summary> <table> <tr> <th>2020년 12월 15일<br />(iOS 14+13 : 98%)</th> <th>2020년 06월 17일<br />(iOS 13+12 : 98%)</th> <th>2020년 01월 27일<br />(iOS 13+12 : 94%)</th> </tr> <tr> <td><img width="160" src="/Image/AppStoreOSMeasured_20201215.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20200617.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20200127.png"></img></td> </tr> </table> </details> <details><summary><b>2019년 점유율</b> (10월 15일, 08월 06일, 05월 30일, 02월 24일, 01월 01일, 접힌 것을 펴주세요.)</summary> <table> <tr> <th colspan="2">2019년 10월 15일<br />(iOS 13+12 : 93%)</th> <th>2019년 08월 06일<br />(iOS 12+11 : 97%)</th> <th>2019년 05월 30일<br />(iOS 12+11 : 96%)</th> <th>2019년 02월 24일<br />(iOS 12+11 : 95%)</th> <th>2019년 01월 01일<br />(iOS 12+11 : 95%)</th> </tr> <tr> <td><img width="160" src="/Image/AppStoreOSMeasured_20191015.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20191015_ipad.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20190806.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20190530_2.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20190224_1.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20190101_1.png"></td> </tr> </table> </details> <details><summary><b>2018년 점유율</b> (12월 3일, 10월 29일, 10월 10일, 09월 03일, 04월 22일, 접힌 것을 펴주세요.)</summary> <table> <tr> <th>2018년 12월 03일<br />(iOS 12+11 : 93%)</th> <th>2018년 10월 29일<br />(iOS 12+11 : 93%)</th> <th>2018년 10월 10일<br />(iOS 12+11 : 93%)</th> <th>2018년 09월 03일<br />(iOS 11+10 : 95%)</th> <th>2018년 04월 22일<br />(iOS 11+10 : 95%)</th> </tr> <tr> <td><img width="160" src="/Image/AppStoreOSMeasured_20181203_1.jpg"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20181029_2.jpeg"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20181010_01.jpeg"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20180903.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20180422.png"></img></td> </tr> </table> </details> <details><summary><b>2017년 점유율</b> (12월 4일, 07월 28일, 2월 20일, 접힌 것을 펴주세요.)</summary> <table> <tr> <th>2017년 12월 04일<br />(iOS 11+10 : 92%)</th> <th>2017년 07월 28일<br />(iOS 10+ 9 : 97%)</th> <th>2017년 02월 20일<br />(iOS 10+ 9 : 95%)</th> <th>-</th> <th>-</th> </tr> <tr> <td><img width="160" src="/Image/AppStoreOSMeasured_20171204.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20170728.png"></img></td> <td><img width="160" src="/Image/AppStoreOSMeasured_20170220.png"></img></td> <td width="160" ></td> <td width="160" ></td> </tr> </table> </details> <br />

이전 OS,Xcode 나 최신 OS, Xcode를 받으려면 어디서 받을 수 있을까요?

새로운 iOS에 대한 beta일정 같은걸 확인할수 있는 곳이 있나요?

<br /><br />

Top으로 가기

<br />

Contributors

항상 환영합니다.

<br /><br />즐거운 하루 되세요 🙇‍ <br />