본문 바로가기
반응형

기술적인 이야기/애플 플랫폼 개발48

앱스토어 업로드 시 ITMS-90034 문제 어느 날 앱 업데이트를 정리하고 업로드를 했다. 그런데 곧이어 아래와 같은 내용의 메일을 받게 되었다. 중요한 내용은 아래 한 줄이다. ITMS-90034: Missing or Invalid Signature - The bundle foo.bar at bundle path Foobar is not signed using an Apple submission certificate. Apple Submission Certificate라는 처음 듣는 인증서를 요구하는 듯한 오류다. 도대체 이 녀석은 뭘까? 해결 해결법은 아주 쉽다. 다시 빌드해서 올리면 된다. 다만 앞서 업로드된 바이너리와 동일한 빌드 번호를 쓰면 중복된 바이너리라며 업로드에 실패하니 빌드 번호를 증가시키거나 바꿔서 다시 시도해보자. 참 어이없.. 2021. 4. 9.
2021년 2월 1일자 앱스토어 리뷰 가이드라인 업데이트 애플 앱스토어 심사 가이드라인이 업데이트되었다. 대충 살펴보자. 정말 대충 살펴봤고 주관적으로 이해했기 때문에 틀린 해석이 있을 수 있다. 원문은 하단 관련 글에 링크를 붙여 놓았으니 참고하자.1.4.3: 홍보가 불가능한 것들, 예를 들어 담배나 마약 혹은 과도한 양의 주류 등의 홍보는 허용되지 않는다. 이미 애플은 이런 지침을 가지고 있었기에 가이드라인에 좀 더 명확하게 정리된 수준인 것 같다.2.3: 앱을 다운로드하거나 구입할 때 무엇을 얻는지 명확하게 설명해야 한다. 그냥 당연한 설명만 하라는 이야기 같다. 즉 이미 있던 지침이라 좀 더 명확하게 정리된 수준 같다.2.3.7: 고유한 앱 이름을 제출해야 하고 메타데이터나 스크린샷 등에 앱과는 관계가 없는 상표나 타사의 유명한 앱, 가격 정보 등을 적.. 2021. 2. 2.
iOS 시뮬레이터의 이상한 노란색(?) 문제 Xcode 12.3을 설치한 이후 무슨 일이 있었는지는 모르겠는데 Title Bar나 Alert Popup 등의 배경색이 노랗게 보이는 문제가 발생하기 시작했다. 아래 스샷이 그 증거(?)다.전부 문제가 있는 것도 아니고 유독 저런 제목이나 팝업 배경 같은 - 아마도 이게 Tint Color였던가? - 것들만 노랗게 이상하게 표시되고 있었다. 무슨 오줌 액정 문제도 아니고 참 거슬린다. Accessibility에서 뭔가 설정되었나 찾아봐도 다 꺼져 있었다.이 문제는 시뮬레이터의 버그로 의심된다. 그리고 다행히도 수정이 가능했다.고치는 방법은 메뉴에서 File - GPU Selection - Prefer Integrated GPU를 선택한 후 시뮬레이터를 재시동한다. 참고로 원래 설정되어 있던 값은 Aut.. 2021. 1. 8.
SwiftUI에서 경고 팝업(Alert) 표시하기 SwiftUI에서는 경고 팝업(Alert Dialog)을 띄우는 방법이 좀 생소하다. 솔직히 말해서 좀 귀찮다. 어쨌든 방법을 찾았기에 글로 살짝 풀어서 정리해본다. 참고로 순수 SwiftUI 코드만 쓰기 때문에 모양은 좀 다르지만 macOS와 iOS 모두에서 동작한다.경고 팝업을 띄우기 위해서는 Alert 구조체를 이용한다. 아래는 Alert 인스턴스를 생성하는 예제다.Alert(title: Text("Alert"), message: Text("Alert Dialog"), dismissButton: .default(Text("Close")))상상대로라면 이 코드를 특정 View의 body에 넣으면 될 것 같다. 그런데 그게 잘 안 된다. 아래와 같은 오류가 나면서 말이다.Retur.. 2021. 1. 7.
Xcode 12.3에서 발생하는 Fat Framework 링크 오류 문제 Xcode를 12.3 버전으로 올린 이후부터 회사 프로젝트를 빌드할 때 아래와 같은 오류가 발생하기 시작했다. Building for iOS, but the linked and embedded framework 'Foobar.framework' was built for iOS + iOS Simulator. 이 프로젝트는 비공개 iOS용 라이브러리와 iOS 시뮬레이터용 라이브러리를 lipo를 이용해 합쳐서 만든 Fat Framework(혹은 Universal Framework)다. 이 프레임워크로 이전 버전의 Xcode에서는 빌드가 잘 되었는데 유독 12.3부터 이런 식의 오류가 발생하기 시작했다. 해결하기 이 문제의 해결은 의외로 쉽다. Target의 Build Settings에서 Validate Wor.. 2020. 12. 17.
SwiftUI의 PreviewProvider와 Binding SwiftUI는 개발 단계에서 라이브 프리뷰를 통해 코드의 모습을 즉석에서 확인할 수 있습니다. 그런데 @Binding 처럼 외부의 값을 대여해 주어야 하는 경우 샘플 프리뷰를 작성할 때 약간의 곤란함이 있습니다.예를 들어 아래의 예제가 있습니다.import SwiftUIstruct SomeView: View { @Binding var name: String var body: some View { Text("Hello \(name)") }}struct SomeView_Previews: PreviewProvider { static var previews: some View { SomeView(name: "John") }}위에서 SomeView_Previe.. 2020. 12. 14.
SwiftUI에서 SF Symbols 사용하기 SF Symbols가 뭔지 어떻게 사용하는지 간단하게 알아봅시다. 워낙 간단하기 때문에 굳이 글로 적는 게 의미가 있나 싶을 정도로 쉬운 내용입니다. 다만 이 글 작성의 기준은 iOS 13 이상, Xcode 12 이상, macOS 앱이나 멀티플랫폼 앱의 경우 Big Sur 이상이 요구될 수도 있습니다.SF Symbols는 애플에서 제공하는 이미지 아이콘 모음입니다. 어려울 것 없이 'SF Symbols.app' 앱을 찾아서 실행시켜 보면 바로 알 수 있지요.SF Symbols 앱의 모습을 보면 이 아이콘들은 폰트 기반 제공되는 것으로 유추됩니다.만약 시스템에서 SF Symbols.app을 찾을 수 없다면 별도로 다운로드해서 설치할 수 있습니다. SF Symbols - Apple DeveloperWith .. 2020. 11. 18.
Xcode의 부산물(?) 청소 쉽게 하기 Xcode가 가끔 꼬여서 이상 동작을 하는 경우 아래 터미널 커맨드로 Xcode의 똥[...]들을 치우는 경우가 종종 있었습니다.$ rm -rf ~/Library/Developer/Xcode/DerivedData그런데 Big Sur부터인지 아닌지 확실치는 않지만, 이제는 저장 공간 관리 앱에서 손쉽게 필요 없는 개발자용 파일을 삭제할 수 있게 지원되고 있습니다.위처럼 프로젝트 아카이브나 Xcode 캐시, 프로젝트 빌드 데이터 및 인덱스를 선택해서 삭제 버튼만 누르면 깔끔하게 청소가 됩니다. (그런데 지금은 무슨 버그가 있는지 프로젝트 빌드 데이터 및 인덱스는 깔끔하게 지워지지는 않기는 합니다)장점으로는 애플에서 직접 지원하는 앱이기 때문에 터미널 커맨드에 비해 안전하다는 점이겠지만, 단점으로 삭제 시간이.. 2020. 11. 16.
SwiftUI macOS 앱에서 타이틀 바와 툴바가 통합된 윈도우 구현하기 이 글의 목표는 SwiftUI를 사용하는 macOS 앱 프로젝트에서 아래와 같은 윈도우를 구현하는 것입니다.나눠서 설명했더니 글이 좀 길어졌습니다. 결론만 보시려면 글 하단에 정리한 전체 코드를 참고하시면 될 것 같습니다.기본 프로젝트사용하는 프로젝트는 macOS App으로 SwiftUI를 사용하도록 설정했습니다. 당연히 이게 조건이니깐요.기본 프로젝트는 위와 같은 모양으로 실행됩니다.Unified Title and Toolbar프로젝트 생성 시 보일러플레이트 코드가 생성된 AppDelegate.swift 파일을 열어보면 NSWindow 인스턴스를 생성하는 코드가 있습니다. 여기에서 styleMask를 설정할 수 있습니다. 여기에 아래와 같이 .unifiedTitleAndToolbar 플래그를 추가합니다.. 2020. 11. 12.
Swift 5.3에서는 뭐가 바뀌었을까? Xcode 12.0이 정식 릴리즈 되면서 이제 Swift 5.3도 현역이 되었습니다. 이미 많은 업데이트 내역을 정리한 글들이 있지만, 개인적으로 공부 삼아서 이번에도 늦었지만 정리해 보고자 합니다. 다만 개인적으로 내부 구현이 바뀌는 것은 딱히 관심이 없고 공부라는 의미도 있는 만큼 이 글은 문법적으로 변경되는 사항만을 정리합니다. 제안의 내용만으론 이해가 안 되는 내용도 있어서 여기저기 찾아보면서 정리했기 때문에 일부 틀린 내용이 있을 수도 있습니다. 여러 예외를 처리할 수 있는 catch 절 SE-0276 Multi-Pattern Catch Clauses 제안으로 구현된 기능입니다. 기존에는 예외 처리를 위한 do - catch 구문에서 catch는 하나의 예외만 잡을 수 있었습니다. 5.3부터는 .. 2020. 9. 28.
Swift System 오픈소스화 소식 애플에서 저수준 시스템 콜 라이브러리인 Swift System을 오픈소스화 했다는 소식이 공식 블로그를 통해서 전해졌습니다. Swift System is Now Open Source In June, Apple introduced Swift System, a new library for Apple platforms that provides idiomatic interfaces to system calls and low-level currency types. Today, I’m excited to announce that we’re open-sourcing System and adding Linux support! Our visi swift.org Swift System은 멀티 플랫폼 라이브러리로 시스템 콜.. 2020. 9. 27.
iOS 시뮬레이터에서 애플 인증이 실패하는 문제 언제부터였는지 모르겠지만 Xcode 12가 등장하기 약간 이전부터 iOS 시뮬레이터에서 애플 인증이 실패하는 문제를 겪었습니다. 물론 이전에는 잘 되던 프로젝트였습니다. 에러도 특별히 알려주는 에러 없이 그냥 실패했습니다.이 문제는 시뮬레이터 보안이 강화되면서 나타난 현상으로 쉽게 말해 시뮬레이터에서 이중 인증을 진행하면 해결됩니다.시뮬레이터에서 AppleID로 로그인된 상태에서 설정(Preferences)으로 들어가서 제일 상단의 이름이 표시되는 곳을 누른 뒤 암호 및 보안(Password & Security)을 들어갑니다.그러면 여기에 Apple ID를 사용하는 앱(Apps Using Apple ID) 항목이 보입니다. 여길 누르면 이중 인증을 요청하게 됩니다. 이후에는 사용자가 설정한 기기로 오는 .. 2020. 9. 20.
애플 앱 심사 지침 업데이트 애플이 공식 블로그를 통해서 앱스토어 앱 심사 지침 업데이트를 알려왔습니다. 간단히 정리하자면 아래와 같은 내용입니다.이미 심사를 통과하여 등록된 앱의 경우 법적인 문제를 제외하고 앱의 업데이트를 지연시키지 않습니다.개발사에서 심사 가이드라인에 대한 컴플레인 및 의견 제시가 가능해집니다.개인적으로 여기서 첫 번째 변동사항은 저도 불평불만이 많았던 부분입니다. 예를 들어 처음 앱이 심사를 통과하여 앱을 다운로드할 수 있는 시점에서 겉보기에는 아무것도 바뀌지 않은 버그 수정 업데이트를 올렸는데 갑자기 앱의 스크린샷을 문제 삼았던 경우나, 혹은 애플 로그인 버튼이 가이드라인에서 추천하는 내용과 다르다는 등등 다양한 명목으로 심사가 리젝되는 사유를 몇 번 겪었기 때문입니다.결과적으로, 이제부터 첫 등록을 제외하.. 2020. 9. 1.
Swift 5.2 업데이트 내역 살펴보기 이 글은 스위프트 공식 블로그의 Swift 5.2 Released! 글에서 언급한 두 가지 업데이트된 기능을 살펴보는 글입니다. 이 외에도 사실 여러 업데이트가 있겠지만 아무래도 이게 핵심이니까 언급한 것이겠죠? 키 경로 표현식을 함수처럼 사용하기 SE-0249 Key Path Expressions as Functions 제안을 통해 Swift 5.2에 구현된 기능입니다. 이 기능은 함수나 클로져를 넘겨서 처리하는 다양한 기능에서 함수나 클로져 대신 키 경로(Key Path)를 넘기는 것으로 구현을 간단하게 할 수 있도록 해줍니다. 간단하게 위의 제안 내용의 예제를 인용해 보겠습니다. 우선 아래의 구조체 User를 선언했습니다. struct User { let email: String let isAdmi.. 2020. 3. 25.
Swift와 ObjC에서 Deprecated 처리하기 Swift와 Objective-C에서 클래스나 메서드, 프로퍼티 등을 Deprecated로 만드는 방법을 정리하는 글입니다.Deprecated는 단순히 말해서 '곧 사라질 기능'을 표기할 때 사용합니다. 오래된 프레임워크를 버전업 하거나 했을 때 노란 딱지로 빌드 경고가 뜰 때 이런 Deprecated 경고를 종종 볼 수 있습니다. 기능이 이름의 변경 혹은 리팩터링 등으로 바뀌게 될 부분을 미리 알려주는 용도로도 자주 사용되지요.Swift의 경우Swift에서는 @available을 통해 deprecated 표기를 할 수 있습니다.@available(*, deprecated)class SomeClass { ... }함수나 메서드도 동일하게 사용합니다.@available(*, deprecated)func s.. 2020. 3. 3.
2020년 4월부터 소셜 로그인 지원 시 애플 인증 강제 애플은 'Sign in with Apple'로 알려진 'Apple로 로그인' 기능 지원에 대해 아래와 같은 가이드라인을 발표했습니다.오늘부터 App Store에 제출하는 신규 앱은 해당 가이드라인을 따라야 하며, 기존의 앱과 앱 업데이트는 2020년 4월 전까지 해당 가이드라인을 따라야 합니다. - Apple로 로그인에 대한 신규 가이드라인이미 이 인증 기능이 발표될 때부터 상황에 따라 강제될 것이라는 소식이 전해져 왔고 많은 앱들이 이미 지원하기 시작한 기능이라 그다지 새로운 것은 아닙니다만, 기존 앱들에 대한 제약이 이번에 확정되었기 때문에 업데이를 하지 않았다면 준비를 급하게 해야 할 시점인 것 같습니다.애플 자체 인증 기능을 반드시 구현해야 할 필요는 없습니다. 하지만 App Store 심사 지침.. 2020. 2. 18.
Combine과 SwiftUI 컴바인을 활용해서 실무에 좀 더 유용한 내용을 알아봅시다. Combine을 활용하는 가장 직접적인 예는 아마도 이 글에서 살펴볼 Swift 5.1부터 제공되는 Property Wrapper와 이를 이용해 만들어진 SwiftUI의 몇 가지 기능이 이에 해당할지도 모르겠습니다.이 글에서 살펴볼 것은 네 가지 키워드입니다. 바로 State, Binding, Observed Object, 그리고 Environment Object입니다. 이 키워드들은 Combine을 이용해 구현한 Property Wrapper를 응용해서 만들어진 것들이지요.이 글은 Swift 5.1, Xcode 11.3을 기준으로 작성하였습니다.StateState는 이름처럼 상태 그 자체를 나타냅니다. 영어로는 Source of Truth라고도.. 2020. 1. 28.
약간은 더 현실적인 Combine 예제들 컴바인에 대한 여러 개념적인 이야기들을 써오긴 했는데 역시 개념 설명 글은 와 닿는 것이 없는 것 같습니다. 아무래도 현실적으로 현업에서 쓸 만한 예제는 아니니깐요. 그래서 이번에는 조금은 더 실용성이 있어 보이는 컴바인 예제 투성이라는 주제로 글을 써봅니다.기본 자료구조의 퍼블리셔스위프트(Swift)는 다채로운 자료구조를 제공합니다. 예를 들어 기본 타입도 있겠지만 배열(array)이나 사전형(dictionary) 같은 복잡한 자료구조도 있지요.대표적으로 Sequence.publisher를 살펴보겠습니다. 이 타입은 보통 배열(array) 혹은 리스트(list)라고도 불리며 굉장히 자주 쓰이는 타입이지요?let publisher = [1, 2, 3, 4, 5].publisherpublisher ... 2020. 1. 27.
728x90
반응형