전체 글

글 쓰는 재주가 없어 전부터 계속 회고 포스팅 쓰는 것을 미뤄왔다. 그러나 개발자 글쓰기의 중요성도 갈수록 높아지는 추세이니 연습 삼아 계속 써버릇해야겠다는 생각이 들었다. 본 포스팅의 주된 내용은 근 3년간 iOS 개발자로 일한 경력을 뒤로하고 8개월 동안 준비하여 4년제 컴공과 대학에 편입한 이야기와 그동안의 비하인드 스토리 등이 될 것이다. 5월 ~ 9월 3월에 퇴사 의향을 말씀드리고 업무 인수인계 문서 등을 준비하던 시기였다. 퇴사 후 설렘 반 걱정 반의 마음으로 주말 학원을 다니면서 2주간은 쉬기로 했다. 쉬는 동안 운전 연수를 받았는데 운전하는 폼이 살짝 불안해서 추가로 연수를 더 받았다. 추가 연수를 끝내고 용기를 내어 혼자 차를 끌어보았다. 그 이후부터는 차량 대여 서비스를 이용하여 홀로 ..
Swift에서는 다른 언어에서처럼 String형에서 Index에 Int로 접근할 수 없다. String 인덱스 값에 Int가 아닌 인덱스 자료형이 위치해 있어(Swift에서 String은 Reference Typed이 아닌 Value Type이기 때문이라고 한다.) Substring 사용이 꽤 번거롭고 귀찮기는 하다. 문제 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나..
· iOS
Fastlane 초기화 Fastlane 주 사용 목적 선택 및 앱스토어 디스트리뷰션 스킴 선택 (스킴이 2개 이상일 경우) 앱 자동 배포화를 목적으로 하기 때문에 3번 Automate App Store distribution 선택 (처음 진행 할 경우 아래와 같이 Apple ID와 이중 인증 6자리 입력 필요) 릴리즈 버전인 prod 선택 애플 디밸로퍼 계정 로그인 배포할 애플 계정을 입력합니다. .Would you like fastlane to manage your app's metadata? 이미 앱스토어에 작성된 metadata가 존재하므로 y를 선택하여 metadata를 다운로드 합니다. Fastlane 기본 설정 완료 모든 설치과 기본 설정을 마치면 해당 폴더 내에 Gemfile과 fastlan..
· iOS
현재 잇차 앱에서 쓰이고 있는 MVC 구조는 모델의 뷰 적용, 라이프 사이클 이벤트 관리, 콜백 처리 등을 View Controller에서 전부 전담하고 있기 때문에 추가 기능 등이 늘어남에 따라 각 컨트롤러 별 변수, 함수들이 점점 많아지고 있는 상태이다. 이러한 상황이 계속된다면 하나의 View Controller에서 비대한 코드들을 관리해야 될 것이다. 이러한 문제를 해결하기 위해 로직부분을 ViewModel로 옮겨 View Controller의 크기를 줄이고, 테스트에도 용이한 MVVM 구조로의 변환이 필요할 것으로 보인다. MVVM의 특징 View Controller가 모델에 직접 접근하지 못한다. (View Model은 Model을 가지고 있고, Model은 View Layer와 소통하지 않는..
· iOS
카메라 촬영을 통한 결과를 FileManager의 document directory에 저장하고, 그 경로를 URL 형식으로 변환하여 S3를 업로드하는 내용입니다. 코코아팟 설치를 해줍니다. # AWS pod 'AWSS3', '~> 2.27.1' poolId를 발급받아 AWSCognitoCredentialsProvider과 AWSServiceConfiguration을 생성 후, Default Service Configuration을 이니셜라이징 해줍니다. func configure() { let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .APNortheast2, identityPoolId: "INSERT-POOL-ID-HERE") g..
· Swift
클로저의 정의 클로저는 코드에서 전달 및 사용할 수 있는 독립된 기능의 중괄호 "{}"로 구분된 코드 블록이다. python의 람다(lambda)와 유사한 개념이라고 보면 된다. 클로저는 정의된 컨텍스트 내에서 모든 상수 및 변수에 대한 값을 캡쳐하고 레퍼런스를 저장할 수 있다. 클로저의 형태 클로저에는 크게 3가지 형태가 있다. 전역함수(Global functions)의 형태 : 이름이 있고 값을 캡쳐하지 않음. 중첩된 함수(Nested functions)의 형태 : 이름이 있고 둘러싸는 함수에서 값을 캡쳐할 수 있다. 클로저 표현식(Closure expressions) : 이름이 없고 경량 구문(lightweight syntax)으로 쓰이며 주변 컨텍스트에서 값을 캡쳐할 수 있다. 클로저와 함수의 차..
· iOS
애플 엔터프라이즈 프로그램에 대해 조사하던 중 알게된 정보들을 정리해보았습니다. Apple Enterprise 앱스토어에 공식 출시를 할 수 없는 특정 앱으로 회사 및 조직 내부 사용을 위한 앱 배포를 의미. 대규모 조직은 Apple Developer Enterprise Program을 통해 조직 내부에서만 사용하는 전용 앱을 개발하여 직원에게 배포할 수 있음. 내부 시스템을 이용하여 회사 내 직원들에게 비공개로 배포하여 이용할 수 있다. 앱스토어에 배포 불가능! 자격 요건 직원 100명 이상 법인 자격이어야 함. 사내에서만 사용하는 전용 앱을 생성하여 조직 내의 직원에게 비공개로 안전하게 배포하기 위한 용도로만 사용해야 함. Apple의 확인 인터뷰 및 지속적인 평가 절차에 참여하고 통과해야 함. (참..
· iOS
How to create iOS Framework 애플은 코드 공유를 쉽게하기 위해 프레임워크라는 도구를 제공합니다. 뿐만 아니라 코드를 그룹화(모듈화)하고, 코드 접근을 제어하는(캡슐화) 매커니즘을 제공해줍니다. 앞서 제작해본 CocoaPod, SPM 제작 방식을 활용하여 iOS Framework를 만들어볼게요! 프레임워크 예제 본 포스팅은 raywenderlich 사이트의 'Creating a Framework for iOS' 튜토리얼을 바탕으로 작성되었습니다. 예제 파일은 아래 링크에서 확인해보실 수 있습니다. https://www.raywenderlich.com/17753301-creating-a-framework-for-ios Creating a Framework for iOS Learn how..
빵판 AKA 브레드보드
BreadBoard's devlog