본문 바로가기

삶은계란 (Diary)/Xcode

(11)
앱스토어 '서드파티 SDK의 API 권한 소명' 문제 해결하기 최근 Tower Of Babel의 베타 테스트를 위해 빌드를 올린 후 위와 같은 메일을 받게 됐다. 주어진 링크와 내용을 확인해 보면 서드파티 SDK가 API를 사용하는 경우 왜 사용하는지 소명하라는 이야긴데, 작년에 개발자 대상 키노트와 커뮤니티를 통해 올해 초 이것이 필수로 적용될 것이라는 소식을 들은 바 있어 바로 대응할 수 있었다. 딱히 코드를 뒤집어 엎어야 하는 기술적인 문제는 아니고, 단순히 사용되는 API에 대해 이유만 적어주면 끝나는 부분이라 혹시나 겁을 먹고 헤맬 누군가를 위해 짧게 남겨 본다. 일단 참 친절하게도 빌드를 앱스토어 커넥트에 올리게 되면 위와 같은 메일이 바로 날아오게 된다. 해당 메일을 참고해서 작업을 진행하면 되는데, TowerOfBabel은 별 기능 없는 게임이라 Sy..
ERROR: Failed to install the app on the device. 오류 ERROR: Failed to install the app on the device. 최근 Xcode를 사용하다가 갑자기 위와 같은 오류가 뜨기 시작했다. 불과 30초 전에 테스트할 때만 해도 잘 됐는데 폰을 재부팅해도, 맥을 재부팅해도 해결되지 않으니 미칠 것 같았는데 문제 해결은 간단하다. 해당 오류는 Xcode 15와 iOS17을 사용할 때 발생하는 문제로 해결 순서는 다음과 같다. 테스트 기기 연결 해제 테스트 기기의 설정으로 이동 Developer 메뉴로 이동 맨 위의 Clear Trusted Computers 실행 테스트 기기 연결 재인증 깔끔하게 해결된다.
Xcode archive시 'Asset validation failed' 문제 만든 앱을 앱스토어에 등록하기 위해서는 Archive를 반드시 진행해야 한다. 아직 만든 앱이 몇 개 되지 않은 상황에서 자주 만나게 되는 상황 중에 하나가 'Asset validation failed' 에러다. 해당 에러는 같은 이름으로 여러 내용으로 구성되는 경우가 있는데, 내 경우 'you need to include all of the orientations to support iPad multitasking.'인 경우가 많다. iPad OS는 iOS와 다르게 스플릿 뷰, 사이드 뷰, 스테이지 매니저등의 여러 방식의 멀티태스킹 환경을 지원하는데, 해당 기능을 온전히 지원하기 위해선 모든 기기 방향의 인터페이스를 반드시 지원하도록 설정해야 한다. 바로 프로젝트의 이 부분이다. 아직 내 프로젝트들은 ..
PHPickerViewController가 특정 이미지를 불러오지 못하는 문제 서비스 중인 JusTheme의 업데이트를 준비하던 도중 작업에 필요한 유틸리티 앱을 만들었다. 스토어 등록을 위해 마무리 준비를 하던 도중 특정 이미지를 불러오지 못하는 문제를 발견해서 이를 수정했다. 결론부터 말하자면 PHPicker는 현재 애플에서 제공하는 가이드라인 대로 작업하면 WebP를 제대로 표시할 수 없다. 애플이 권장하는 PHPicker의 구현 방식은 다음과 같다. Meet the new Photos picker - WWDC20 - Videos - Apple Developer Let people select photos and videos to use in your app without requiring full Photo Library access. Discover how the PHPi..
Github에 push가 안 되는 경우 아 세상에... 별 거 안 건드렸는데(프로젝트를 클로닝 하고 Xcode 베탈 깔긴 했다 🤣) 작업한 내용이 local에서 remote로 push가 되지 않는다. 😇 Xcode에 Github을 다시 연결해 봐도, remote를 몇 번 다시 연결해 봐도 상황은 변하지 않는다. 사실 비슷한 문제를 작년에 겪은 적이 있었다. 당시에는 지금보다 작업량이 더 많은 상황이었기 굉장히 패닉이었는데 덕분에 제대로 배웠는지 뭐가 문젠지 알 수 있었다. 위 사진을 보면 main branch의 head와 현재 local repogitory의 head가 어긋난 걸 알 수 있다. 지금 같은 상황이 펼쳐지면 remote, local, main 세 개의 head가 제멋대로인 상태라 상황을 한눈에 보기 어려운데, console로 보면..
사라진 'Info.plist' 파일 다시 만들기 프로젝트를 생성하거나 기존에 생성된 프로젝트를 사용하려는 경우 필요한 'Info.plist' 파일이 보이지 않는 경우가 있다. 문제를 해결해 보자 해결법은 간단하다. Project > Targets > Info 로 접근한 뒤 Key에 'App Transport Security Settings'를 추가하고 하위에 'Allow Arbitrary Loads'를 추가한다. Value는 'YES'로 설정한다. 짠, 간단하게 'Info.plist' 파일이 다시 나타났다.
애플의 locale identifier Localization 등으로 종종 쓰인다. BCP 47 code를 기반으로 하고 있으며, 어떤 언어가 있는지, 어떻게 표현하는지는 다음과 같다. BCP 47 ar-SA Arabic Saudi Arabia (사우디 아라비아) cs-CZ Czech Czech Republic (체코) da-DK Danish Denmark (덴마크) de-DE German Germany (독일) el-GR Modern Greek Greece (그리스) en-AU English Australia (오스트레일리아) en-GB English United Kingdom (영국) en-IE English Ireland (아일랜드) en-US English United States (미국) en-ZA English South Afric..
Xcode의 Vary for traits는 어디로 갔을까? 서론 161. Adaptive Layout Adaptive Layout Adaptive Layout은 모든 기기와 실행 환경에서 동작할 수 있는 하나의 UI를 개발하는 방법. 혹은 이에 필요한 기술이다. iOS 8의 등장과 함께 Adaptive Layout이 등장했다. 이전에는 Storyboard가.. chillog.page 최근 Adaptive Layout을 공부하며 강의와는 좀 많이 달라진 부분이 있어 기록을 남긴다. 본론 강의에서 Adaptive Layout을 사용하기 위해 Device Configuration Bar의 오른쪽에 위치하는 Vary for Traits 버튼을 누르고 Varying 모드로 진입하는 부분이 존재한다. 하지만 해당 테크닉은 편집을 마치고 Done Varying을 눌러야만 변..
Custom Unwind Segue가 호출되지 않는 경우 서론 강의를 따라 가다가 엉뚱한 곳에서 문제가 생겨 조금 해결해 봤다. 본론 문제파악 문제는 Unwind Segue에 Custom Class를 연결하는 경우 Segue를 호출하지 않는 것이었다. 강의에선 일반 Unwind Segue에 연결 되어있는 상태에서 Class를 새로 생성한 Class 파일로 변경해 주는 방법을 사용했는데, 어째서인지 Xcode 13, iOS 14.5, iOS 15.0에선 동작하지 않았다. 질문을 해도 코드에는 문제가 없다는 답변이 왔기에 내 실수는 아닌 것 같고, 뭔가 달라진 게 분명해 보인다. 사진에도 실수를 찾기 위해 죄다 로그를 찍어 놓은 것을 볼 수 있는데, 로그 자체가 출력이 되지 않으니 아예 해당 Class 파일을 호출하지 못한 것으로 보였다. 해결 뭔가 연결이 잘못된..
'app transport security has blocked a cleartext http' 오류 해결하기 서론 iOS를 공부하면서 보통은 실습 파일을 그대로 쓰는 것이 아닌 실습 파일 보고 새 프로젝트를 생성하는 식으로 진행한다. 이번엔 URL을 통해 image를 받아와 cell에 표시하는 예제가 있었는데, 좀 당황했던 터라 간단하게 정리하고자 한다. 제목과 같은 오류로 이미지를 다운로드하지 못했고, 전체 오류는 아래와 같다. app transport security has blocked a cleartext http connection since it is insecure. use https instead or add exception domains to your app's info.plist. 본론 해당 오류는 HTTP 연결을 시도할 때 발생한다. 지금은 이미 HTTPS의 시대로 보안 면에서 조금 더 강..