나의 발자취

TIL 본문

앱 개발/iOS

TIL

달모드 2021. 9. 29. 01:07

최소 버전을 iOS 12.0 이상으로 설정하면 정상적으로 빌드가 되지않고 오류가 발생한다. 왜 그럴까?

 

아......이거 전에도 애플 앱 빌드하면 안되고 자꾸 오류나서 해결을 겨우 겨우 했었다. delegate어쩌고 설정을 바꿔서 겨우 해결했었는데, 이것을 해결하기 전까지는 진짜 하루종일 삽질했다. Podfile의 오류인것같다고 plist 지우고 podfile 해결하고 등등..ㅠㅠㅠ 역시나 스택오버플로우에도 podfile 관련한 내용이 적혀있는것으로 보아(https://stackoverflow.com/questions/53117077/swift-unable-to-open-file-in-target-xcode-10) 이와 연관이 있는것같은데, 정확히 pod이 무엇이고 왜 나는지 잘 모르겠다.

 

구글에 'minimum iOS 12.0 build error' 라고 검색해보니 제일 먼저 뜨는 애플 디벨로퍼 사이트에서 'XCode 11 with IOS 12 issue'와 같은 제목이 있었고,  답을 알 수 있었다.

https://developer.apple.com/forums/thread/118484

 

New iOS projects in Xcode 11 have their deployment target set to iOS 13. The deployment target is the earliest version of iOS that can run the app. A new Xcode 11 iOS project will not run on earlier iOS versions unless you change the deployment target to an earlier version of iOS.

 

Select your project from the project navigator to change the deployment target. If you need additional information on how to change the deployment target, read the article at the following URL:

 

swiftdevjournal.com/supporting-older-versions-of-ios-and-macos/

 

이를 대충 요약해보면, XCode 11부터는 배포 타겟을 iOS 13 이상으로 설정해놨다. 그렇기때문에 더이상 지원하지 않는 배포 타겟이므로 빌드가 안되는것같다. 맞는지 내일 멘토님께 여쭤보고 확인해보겠다.

-> 12.0에서 13.0에서 바뀔때 대폭 바뀌었다. 왜 에러가 나는지 App Delegate에서 설명.

아래의 코드는 iOS 13.0에서만 써진 기능이다. 

그래서 아래와 같이 annotation기능ㅇ을 써줘야한다.

스니펫을 만든다.

라이브러리에서 쓸 수 있다.

아래와 같이 어노테이션을 두 개의 펑션 위에 똑같이 선언해준다.

SceneDelegate에서는 파일 전체가 iOS 13.0이상에서 인식되어야하기때문에 위쪽 헤더에 버전 데응 어노테이션을 선언해준다.

iOS 12.0까지는 var window: UIWIndow? 가 AppDelegate에 있었으므로, 해당 줄을 AppDelegate에 구현을 해주어야한다.

 

아이폰 자체에 하나의 윈도우가 있고 이 윈도우 자체가 여러개의 뷰들을 컨트롤해주면서 보여준다. 윈도우라는 객체가 있어야 빌드가 되고 화면이 나타나는건데, SceneDelegate에 있으면 AppDelegate에 없는것이라서 iOS 12.0에 대응을 해줄 때 AppDelegate에 선언을 해주어야한다.!!!

 

이 떄 어떤 컴파일 에러가 뜨는지 확인하고, 어떻게 해결할 수 있을지 고민해보자!

아래와 같이 뜨는데, 대충 요약하면... 이제 UIScene이 13.0이나 그 위 버전부터 가능하기 때문이다. 해결법은 그냥 배포 타겟을 13.0 이상으로 올리면 된다.

 

이런 에러들이 뜰 때,,,,,, 해결사항.

이것을 했는데도 잘 작동하지 않는다면, 

File > Project settings

우측 아래 작은 화살표 확인 -> XCode 관련 파일들 중 Derived Data 내 폴더 삭제-> 최대 100기가 정도의 용량까지도 확보가능!! 주기적으로 하면 좋음.

Version

다양한 버전과 기기의 Simulator를 설치해 버전의 차이를 경험해본다.

동일한 프로젝트더라도, iOS 버전에 따라 다른 UI가 나타날 수 있다. 왜 이런 차이가 생길까? 

https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/

에 따르면 기기마다 해상도 비율이 다르기때문이다.

 

iOS 14.0 의 버튼과 15.0의 버튼이 어떤 차이가 있는가?

iOS 14.5 버전 버튼.

하......... 15.0 버전 왜없지 했는데.. 엑스코드 업데이트 안되어있었다. 거의 80퍼센트까지 완료된거 확인했는데. 하..이틀동안 켜놨는데...결국 새벽 세시 18분인 지금.. 2차 시도만에 업데이트가 완료되었고 드디어 15.0 버전의 시뮬을 돌려볼 수 있게 되었다. 그래서 위에 첨부하려고 했는데 시뮬레이션 상으로는 아무 변화가 없다. 아마 UI kit의 변화일것이다. 아래는.. 업데이트 하기 전 찾아본 내용이다.

내일까지 못기다리겠어서 찾아봤다. 

https://betterprogramming.pub/whats-new-in-uibutton-for-ios-15-eba1ce9ad899

일단 버튼 스케일이 라지 사이즈도 지원되는것같고, 밑에 서브타이틀도 되고 모양 변경도 되며 배경색도 채울 수 있다.

위의 기사에 따르면 요약은 아래와 같다.

UIButton is the oldest control type in the UIKit system. It’s nice to see an overhaul in its API this year.

CoreLocationUI, a new framework introduced with iOS 15, also exposes a standardized button, CLLocationButton, to handle location authorization.

Besides UIKit, SwiftUI’s button system has also got similar changes. To know more, do check out 

Mohammad Azam

’s piece that takes an in-depth look at customizing buttons in SwiftUI for iOS 15.

배경

 

모양
크기
서브타이틀

 

탐구해보면 좋은 WWDC 자료

https://developer.apple.com/videos/play/wwdc2021/10064/

 

 

 

Meet the UIKit button system - WWDC21 - Videos - Apple Developer

Every app uses Buttons. With iOS 15, you can adopt updated styles to create gorgeous buttons that fit effortlessly into your interface...

developer.apple.com

 

 

Explore the SF Symbols 3 app - WWDC21 - Videos - Apple Developer

Tour the latest updates to the SF Symbols app — our interactive library for iconography. Learn how you can use the library to design...

developer.apple.com

 

 

 

 

또한, 애플 개발자 앱스토어 사이트에 들어가면 아이폰과 아이패드 사용 현황 통계를 볼 수 있다! 나름 최신이다. 진짜 열일..!!

https://developer.apple.com/kr/support/app-store/

 

Privacy 사이트를 읽는데, 진짜 궁금한점!! (재밌어서 시간 흐름 주의..ㅠㅠ)

https://www.apple.com/privacy/

하...아이메세지는 어떤 방식으로 암호화되는거지???????????ㅠㅠㅠㅠㅠㅠㅠ알고싶다......

하... 기기 내에서의 머신러닝을 통해 사진이 분류되는거라니 대체 포토 앱이 어떻게 구성되어있길래....진짜 미친듯이 알고싶다

 사실 시리의 이러한 기능때문에... 배터리 닳을까봐 켜놓진 않았고 자주쓰는 키워드만 수집하도록 써놓았다. 근데..서버에서 데이터 받고 생성할때 하는 랜덤값이... 대체 어떤 방식으로 해싱을 하는걸까..

프로젝트 기본 구성

AppDelegate.swift & SceneDelegate.swift

 -> 디바이스에 설치된 수많은 앱이 조화롭게 작동하기 위해, 앱 리사이클을 관리하는 부분이자 앱의 실행과 종료를 담당.

iOS13 미만의 버전에서는 AppDelegate를 사용하고, iOS13 이상의 버전에서는 iPadOS가 새롭게 등장함에 따라 나타난 SceneDelegate를 주로 사용한다.

 

ViewController.swift

Scene에 대한 로직을 담당하는 파일로, 코드가 작성될 영역.

주로 Scene이 많아질수록  ***.swift 파일이 많아짐.

 

Asset.xcassets

앱 내 아이콘, 이미지 소스를 관리.

같은 앱이더라도 아이폰 기종에 따라 앱의 용량이 달라짐.

아이폰 기종 별 적합한 해상도가 달라서 앱에 제대로 적용되려면 3개의 파일명을 가진 이미지 리소스가 필요하다.

 

단, pdf 확장자의 경우 벡터 형태로 전환해 하나의 리소스로 모든 기종에 대한 해상도 대응이 가능하다.

인스펙터 영역의 Image Set에서 Resizing Preserve Vector Data 옵션을 체크하고, Scale옵션을 Single Scale로 변경에 설정할 수 있다.

Main.storyboard

 

Comments