목록전체 글 (67)
광어네 맛집
프로젝트를 진행하다 보니 Xcode 버전 별로 확인할 코드가 생기더라구요 그래서 이번 포스팅은 많은 분들이 알고 있겠지만 Xcode 를 버전별로 설치하는 방법을 알아보고자 합니다 사용방법은 간단함! 1. Xcode 종료 2. https://developer.apple.com/download/all/ 여기에서 원하는 Xcode 설치 3. 압축 풀기 및 이름 변경 4. 이름까지 변경한 Xcode를 응용프로그램으로 드래그앤 드롭 이후 터미널 CLI를 통하여 설정할 수 있음 // 현재 Xcode 확인 $ xcode-select -p // Xcode 버전 변경하기 $ sudo xcode-select -s /Applications/[Xcode 버전 선택].app/Contents/Developer // 또는 $ su..
지금 잘못되어 있는 로직 변경이랑 회사 이슈 때문에 요즘 글 쓸 시간도 없는 ㅠㅠ 무튼 이번 포스팅은 Objective C 레거씨 코드 뿌시기! 상황 : BaseViewController를 모든 ViewController 가 상속받고 BaseViewController 안에는 화면 이동 메서드를 넣어두고 이동할 때마다 사용함 -> 리펙토링 : Transfer + Utils 를 추가하여 Class method로 리펙토링 BaseViewController 를 상속받아 사용하는 게 나쁜게 아니지만 해당 프로젝트에서는 중복코드도 많고, 쓰지 않는 BaseViewController 메서드를 굳이 받아야하나? 라고 항상 의문이 생겼었다! 대충 이전 개발자 분의 의도는 알겠으나 Static Method 로 만들면 훨씬..
최근에 알게 된 사실인데 Mac OS의 SIP를 통한 서명 검증 방식이라는 게 있다 정확히 어떤 것인지 다음 포스팅때 알아보고 지금 이슈는 새로운 라이브러리를 Xcode 상에 붙일 때 발생한 에러이다 무한 팝업이 뜨는데... 다음과 같이 해결하면 해결할 수 있다. 이전까지만 해도 우리는 Xcode 주소를 /Application~~ 등으로 직접적으로 알수 있었다 그렇치만 OS 업데이트를 하지 않고 바뀐 점인데 Xcode 경로를 알 수 없게 되었다고 한다 그래서 새로운 라이브러리를 적용하기 위해서는 다음과 같이 바이러니를 삭제 재서명해주는 게 필요하다 1. Xcode 종료 2. Xcode 툴체인 위치 이동 $ cd [XCODE_PATH].app/Contents/Developer/Toolchains/Xcod..
ObjectiveC와 Swift를 같이 사용하기 위해서는 별도의 작업이 필요한것도 있지만 조금만 바꿔주면 되는 것들도 있다 그 중에 하나가 Enum 타입이다 Objective C에서만 사용할 경우 typedef enum { CaseA, CaseB, CaseC, CaseD } ServiceCase; 만약 Swift에서도 사용하고 싶다면 다음과 같이 선언해주면 된다 typedef NS_ENUM(NSUIntegrt, ServiceCase) { CaseA = 0, CaseB, CaseC, CaseD }; 기본적으로 enum type의 경우 0 이 시작점이 대부분인데 레거시 코드를 보는 입장에서는 무작정 바꾸면 안된다 여러 사람들이 만진 코드라서 하드 코딩이 되어 있을 수 있기 때문에 기존에 짜여진 코드를 확인한..
Objective C 로 되어 있는 프로젝트는 Swift를 사용하기 위해서는 'PROJECTNAME-Bridging-Header.h' 을 통해서 상호호환 할 수 있습니다. 헤더 파일만 있다고 다 구현할 수 있는 건 아님! 예를 들어 Objective C 는 Swift 구조체를 사용할 수 없고, Enum 열거형도 사용할 수 없습니다 그렇지만 데이터를 따로 보내거나 각 언어에서 로직을 만든 다음에 보내어 사용할 수는 있습니다! 전제: 지금 다루고 있는 프로젝트 기준으로 말씀드리면 Objective C의 경우 디코딩을 하여 모델화하여 사용하고자 번거로운 작업을 해야했어요 For 반복문을 통해서 NSDictionary에 담아준 뒤 사용ㅎ... 그리고 모델처럼 사용할 수 있었음 Swift는 Codable 프로토콜..
앞에서 쓴 글과 이어서 작성하고자 합니다 이번 글은 조금이나마 깊게 들어가고자 합니다! UIView 내부에 업데이트 메서드는 SetNeedsDisplay, SetNeedLayout, displayIfNeeded, layoutIfNeed 있습니다 살펴보기 전에 UIKit이 어떻게 나온지에 대해서 살펴봐야 할 것 같습니다! 제일 상단에 보이는 UIKit 은 아래 low Level 인 그래픽 API 들을 거쳐 High Level로 만들어진 그래픽 API 입니다! 타 블로그 분들께서는 Metal로 나온 부분은 OpenGL이라고 칭하셨습니다! 무튼 앱이 부드럽게 그려지기위해서는 60FPS 를 유지해야 합니다 이를 위해 Graphics Hardware를 사용하는데 Low Level로 많은 코드, 가장 빠른 Open..
이번 글은 과제를 하면서 실수, 의문점이 드는 것들을 정리 및 회고하고자 합니다! 아마 범위가 넓어서 두번 정도 나눠서 적을 예정! 우리는 Xcode에서 Cocoa Touch Class를 통해서 ViewController를 생성할 때면 viewDidLoad()라는 메서드가 override가 자동으로 만들어지게 됩니다 UIView를 생성할 때는 어떤 문구가 주석처리되어 만들어지는데 /* // Only override draw() if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func draw(_ rect: CGRect) { // Drawing cod..
진짜 갑자기 몸살에 장염에 걸려서 죽을 뻔 ... 아프지만 글은 남기고 싶은게 있어서 포스팅 작성함! 오늘은 SPM에 대해서 살펴볼까 함 흔히 우리가 SPM을 사용하는 방법은 Xcode -> Project -> Package Dependancies -> '+'로 추가해서 사용함 근데 만약 Target이 여러개일 때나 각각 framework가 사용하고 싶을 때가 있을 거임 물론 Pods로 분기처리 해줄 수도 있지만 SPM도 가능은 하다~ 방법은 Xcode -> File -> New -> Package 를 눌러주면 이름과 어디에 저장할지가 나오는데 Git Repo에 올려서 사용하고 싶으면 아래 화면처럼 선택해주고 생성해주면 된다! 그럼 아래처럼 파일이 만들어지는데 하나씩 뜯어보면 간단하다! 먼저 맨 위에서..
이번 포스팅은 Swift로 된 라이브러를 Objective C에서는 어떻게 사용하는지 알아보도록 합니다! 기본적으로 SPM, Pods, 카르타고 등 다양한 경로로 설치할 수 있습니다 설치가 된다면 사용하는 방법은 너무 쉽게 되기 때문에 중간중간 내용은 생략하고 넘어갈게요 우선 Pods로 설치할 경우 Pods > Products > framework 파일이 자동으로 생성됩니다! Objective C로 만들어진 파일일 때는 문제없이 import를 해줘서 사용하면 되지만 Swift로 만들어진 파일을 사용하려면 조금 다른? import 방법이 필요합니다! 예시로 기존에 import를 하려고 했으면 아래처럼 header file만 설정해줬으면 #import "Library.h" Swift file의 경우 head..
요번 포스팅은 SwiftUI frame 오류에 대해서 알아보자 합니다! 간단한거라 바로 알아봅시다! 상황은 개별적인 View를 만들어 ContentView에 보여주고자 하는 상황! SwiftUI는 .infinity로 해주면 알아서 전체로 잡아주는 게 아니였낭..? 근데 보라색 경고가 뜸 ㅜ ( 너 frame 수치가 정확하지 않는데? ) 그래서 아래처럼 바꿔봄 역시 이랬더니 경고 표시는 사라짐! 근데 HardCoding 하기가 싫어서 아래처럼 Swift 형식으로 보내봄! 당연히 이것도 경고 표시는 사라진다! 그치만 이건 온전한 SwiftUI가 아닌걸... 그렇다면 어떻게 할까? 방법은 'GeometryReader' 를 같이 사용하면 됩니다! // body 내부 GeometryReader { proxy in..
모두들 맛점하셨나요 ㅎㅎㅎ 드디어 CoreData의 끝이 보입니다! (사실 Data 수정도 하고 할건 많음 ㅋ) 이건 쉬우니 바로 봅시다! 안에 Entities 나 attributes를 바꾸면 무섭게 에러다!! 이렇게 발생할거에요 그러면 당황하지 말고 디버깅 영역 체크해보면 마이그레이션 안해줬어 ㅡ3ㅡ 이런 메시지를 보게 됩니다! 그럼 저희는 마이그레이션을 해줘야겠죠? ㅎㅎㅎ 먼저 Version 을 하나 추가 해줍니다! 그럼 위 사진처럼 Version 이름이랑 Base model이 나옵니다! 보통 Version에 숫자만 붙이니 이대로 냅두고 Finish를 눌러줍니다! 그럼 상단 탭에는 생겼는데 오른쪽 네비게이터에는 없네요? 띠용 아니에요 ㅋㅋㅋ 옆에 열어서 보면 있습니다! 녹색 체크 버튼을 옮겨줍니다 (..
이번 포스팅은 간단히 알려주고 넘어갈 예정! 사실 제가 회사에 Fastlane 처음 도입해서 혼자 관리하고 있습니다! ( 내가 알아낸 정보 내가 공유해야쥐 ㅎㅎ) 테스터 추가까지 좀 더 편하게 업로드 할 수 있지 않을까 라는 생각에 찾아봤는데 있더라구요? 생각보다 간단함! latform :ios do desc "TestFlight 올라갑니당" lane :testFlight do increment_build_number(xcodeproj: "프로젝트 이름.xcodeproj") build_app(workspace: "프로젝트 이름.xcworkspace", scheme: "스키마 이름") upload_to_testflight( changelog: " 앱 테스트 환경 및 수정 사항 - 코드 수정 및 최적화 적용..
요즘 날씨가 왔다리 갔다리... 왜이렇게 더운지 무튼 ! 이번 포스팅은 예전 포스팅과 연결하여 SQLite 보는 툴 및 Relationships에 대해서 적어보자 합니다! 이전 포스팅 마지막에서 SQlite로 데이터를 저장하고 위치까지 알아봤죠? 그럼 SQLite는 어떻게 열어보냐? 바로 SQLiteBrowser를 이용해서 열어보시면 됩니다! 다운로드 사이트는 https://sqlitebrowser.org/dl/ Downloads - DB Browser for SQLite (Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.2) for Windows: Windows PortableApp Note - If for any..
CoreData를 파다 보니까 포스팅하고 싶은게 자꾸 늘어나네요 ㅎㅎㅎ 간단한 거니까 가볍게 읽고 가봐요 (제가 잘못 생각한 부분은 언제든 피드백 환영입니다!) 우선 CoreData는 CoreDataStack으로 되어 있는 Framework라고 합니다! Stack은 아래 그림처럼 구성되어 있습니다 Container 안에 Context, Coordinator, Model 이 들어가 있는 걸 볼 수 있습니다 앞 포스팅에서 CRUD만 구현하기 위해서 무작정 적었다면 이제는 이해하면서 사용할 수 있습니다! 1. Persistent Container Stack에 필요한 객체들을 모아둔 곳입니다! 여러가지들을 차례대로 알아봐요 2. Managed Object Model 모델은 저장하고 싶은 Data를 저장하는 객체..
SwiftUI도 어느정도 본 것 같고 심화로 들어가다 보니 SwiftUI 한계에 부딪히게 되는 것 같다 그래서 사용하게 된 CoreData! 물론 Realm 쓰면 간단하게 사용할 수 있는데 라이브러리를 많이 쓰면 안좋으니까! 처음에 Xcode를 만들 때 CoreData 체크 후 만들면 AppDelegate에 아래 처럼 자동으로 생기게 된다! // MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "test") container.loadPersistentStores(completionHandler: { (storeDescription, ..