전체 글
-
identifierForVendor를 이용한 기기 식별하기iOS 2023. 5. 30. 08:48
안녕하세요. 그린입니다🍏 이번 포스팅에서는 identifierForVendor 값을 이용하여 기기를 식별하는것에 대해 알아보려 합니다🙋🏻 만약 해당 앱에서 특별히 회원가입이나 소셜 로그인 등의 기능이 없지만 기기마다 식별을 해주어 서버와 통신을 하고 싶을때가 있을겁니다. 그럴때는 몇가지 방법들이 있지만 오늘 소개할 identifierForVendor의 값을 이용하여 해당 앱에서의 기기별 식별할 값으로 이용할 수 있을겁니다. 그럼 우선 identifierForVendor가 뭔지부터 알아야겠죠? identifierForVendor? identifierForVendor는 UIKit의 UIDevice에서 제공하는 인스턴스 프로퍼티입니다. 앱 공급업체에 대해 기기를 고유하게 식별하는 영문과 숫자로 이루어진 문자열..
-
SwiftUI로 캘린더 직접 구현하기SwiftUI 2023. 5. 25. 12:04
안녕하세요. 그린입니다🍏 이번 포스팅에서는 오랜만에 SwiftUI로 뚝닥뚝닥 해보는 시간입니다🙋🏻 뭘 뚝닥뚝닥 해볼지 고민하다가 그냥 밑도 끝도 없이 캘린더를 간단하게 직접 만들어보고 싶어졌습니다! 그래서 캘린더를 커스텀하게 SwiftUI로 구현하는 포스팅이 될것 같네요🕺🏻 기본적으로 제공되는 DatePicker 우선 SwiftUI에서 기본적으로 DatePicker라는 API를 제공해주고 아래와 같이 우리가 익숙한 캘린더의 형태를 나타낼 수 있게 아주 쉽게 도와줍니다. https://developer.apple.com/documentation/swiftui/datepicker DatePicker | Apple Developer Documentation A control for selecting an ab..
-
Gemfile.lock의 PLATFORMS 환경 통일하기 (feat. Gem)Infra 2023. 5. 22. 08:38
안녕하세요. 그린입니다🍏 이번 포스팅에서는 Gemfile.lock에서 플랫폼 부분을 팀원과 동일한 환경으로 통일하는 학습을 해보려해요🙋🏻 우선 주제에 대해 학습하기전 먼저 왜 Gemfile이 필요한건지 Gem이나 RubyGems는 그럼 무엇인지 왜 통일해야 하는지 알아보겠습니다! 우선 Gem은 무엇일까요? Gem? 우리가 인프라를 구축하다보면 Swift외 다른 언어를 쓸 경우가 많이 주어집니다. 특히 CI/CD를 Fastlane으로 해준다면 Fastlane은 Ruby 언어를 사용하기에 더욱더 그렇죠. 이때 Gem이라는 개념은 타 언어인 Ruby에서의 라이브러리를 나타냅니다. 즉 우리도 Pod들이 있고 Podfile.lock이 생성되며 외부 라이브러리를 관리하고 하는것처럼 Gem도 동일한 Pod의 개념으로..
-
Tuist의 Configuration 설정하기Tuist 2023. 5. 18. 14:06
안녕하세요. 그린입니다🍏 이번 포스팅에서는 Tuist의 Configuration을 알아보고 각 개발 환경을 분리하여 설정해보도록 하겠습니다🙌 들어가기 전 필요 개발 환경 체크 기본적으로 프로젝트는 DEBUG와 RELEASE의 flag 즉, build configuration을 가지게 되는데요. 각자 만들고 있는 프로젝트의 성향에 따라 다르겠지만 여기서 QA configuration도 추가하여 사용될 수 있습니다. 실제 저는 총 3개의 configuration을 설정하는데요. 하나는 내부 개발의 배포를 위한 DEV, 또 하나는 실제 프로덕트 출시 전 QA를 위한 QA, 마지막으로 실제 상용 배포를 위한 RELEASE로 나눌 수 있습니다. 자, 그럼 이 3개의 configuration을 Tuist를 통해 어..
-
MirrorSwift 2023. 5. 16. 02:54
안녕하세요. 그린입니다🍏 이번 포스팅에서는 Swift의 Mirror라는 타입에 대해 알아보겠습니다🙌 이전 debugPrint와 print를 포스팅하다 dump에 대해서 알아보게 되었는데요. 여기서 dump는 reflecting으로 오늘 알아볼 Mirror라는 개념을 사용해 해당 정보를 가공해서 보여준다는걸 알아봤습니다. 그래서 여기서 Mirror라는것이 Swift에서는 뭔지 알아보겠습니다🕺🏻 (혹시 이전 포스팅을 못보셨어도 무방하지만 dump가 무엇인지 궁금하시면 사전에 보셔도 좋습니다!) https://green1229.tistory.com/355 debugPrint와 print 알고쓰기 (feat. dump) 안녕하세요. 그린입니다🍏 이번 포스팅에서는 debugPrint와 print에 대해 알아보려 ..
-
fastlane - IPA & dSYM 파일 경로 변경하기Fastlane 2023. 5. 11. 12:47
안녕하세요. 그린입니다🍏 이번 포스팅에서는 fastlane을 사용하여 앱을 빌드하고 업로드할때 생기는 IPA & dSYM 파일의 다운로드 경로를 변경해보려 합니다🙋🏻 별도 파일 경로를 지정하지 않는다면? 먼저 왜 이걸 하게되었냐면 Tuist를 통해 최상단 경로인 workspace가 생성되는 경로에 fastlane을 붙여주었습니다. 그러다보니 실제 Fastfile을 구축해 테스트플라이트에 앱을 업로드 배포하기까지 과정인 아래 주요 3단계를 거치게 됩니다. (물론 그 전에도 빌드 넘버를 올려주고 각종 앱에 맞는 설정을 하겠지만요..!) - update_app_identifier - build_app - upload_to_testflight build_app 단계를 거치며 앱이 빌드되고 iOS 앱 파일인 IP..
-
debugPrint와 print 알고쓰기 (feat. dump)Swift 2023. 5. 8. 09:21
안녕하세요. 그린입니다🍏 이번 포스팅에서는 debugPrint와 print에 대해 알아보려 합니다 (조금 더 나아가서 간단히 dump까지!)🙋🏻 사실 많은 iOS 개발자라면 이미 익숙하고 차이도 잘 아실텐데 한번 확실히 좀 더 명확하게 왜 로깅용으로 debugPrint를 써야하는지 그리고 모든 로깅 상황에서 debugPrint를 가져가는게 좋은건지 정리해보려고 이번 포스팅의 주제로 가져와봤습니다🕺🏻 그럼 우선 개념적으로 간단하게 짚고 넘어가야하니 debugPrint와 print의 개념부터 훑어보시죠! debugPrint 우선 공식문서에서는 디버깅에 가장 적합한 텍스트 표현을 출력에 사용한다고 아주 로깅용으로 써라!라고 대놓고 강조하고 있는 느낌입니다😲 선언을 보시면 아래와 같습니다. func debugP..
-
Multiple commands 에러 바로잡기 (feat. GoogleService-Info.plist)Tuist 2023. 5. 4. 13:41
안녕하세요. 그린입니다🍏 이번에는 간혹 한번쯤 보셨을 Multiple commands 에러에 대해 파악해보고 바로잡는 실무에 가까운 포스팅이 될 것 같아요🙋🏻 우선, 저는 Tuist를 통해 프로젝트를 구성하고 생성해주는데 이때 Prod / Dev / QA 총 3개로 타겟 및 스킴을 나누고 워크스페이스를 구성해줍니다. 요 경우에 entitlement 파일이라던지 아니면 흔히 사용되는 Firebase의 config 설정을 위해 GoogleServiceInfo.plist 파일을 구성해주고 리소스에 심어주게 되는데요. 이때 리소스 폴더 내 각 총 3개의 GoogleServiceInfo.plist 파일이 생기고 이를 리소스로 동일하게 가져가려하니 에러가 납니다. 그래서 이번 포스팅에서는 GoogleServiceI..