목록분류 전체보기 (67)
광어네 맛집
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JWZcY/btrCFJmw23X/lLDBRMxaZKMAEkkd4JQUJ0/img.png)
오랜만에 포스팅이네유 ㅜㅜ 회사 일도 있고 너무 바빠서 정신이 없... 오늘은 Swift UI Preview error에 대해서 다루고자 함! 빌드는 되는데 Preview는 안나온다? 그러면 다음과 같은 확률이 큼 상황 : Grid를 사용하려고 GridItem을 만드는 과정에 발생! Preview Error Message Error: Compiling failed: consecutive statements on a line must be separated by ';' 해결법은 대충 ';' 로 구분을 해줘라! 임 ObjC 해봤으면 ' ; ' 은 알고 있을 거임! (끝맺음 표시해주는 뜻!) 근데 보기에 너무 안 예쁘고 ;(세미콜론)은 ObjC 에서만 쓰기로 해요 ㅎㅎ 그래서 다음과 같이 바꿔줌! 또는 var..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cWsP5B/btrA4SNEequ/61eibVbQNeC6TiUHro6ZZ1/img.png)
오랜만에 포스팅이네! 이번 포스팅은 계속 까먹는 거 같아서 포스팅해두려고 함 참고로 곧 Swift UI 포스팅도 해야겠다! 일단 priority를 설정하면 높이나 너비를 알맞게 해줄 수 있는 걸 알고 있을거임 그러면 중간에 vertical spacing 을 준 뒤 각 레이블 Priority를 주면 어떻게 달라지는 지 알아봅시다! Content Hugging Priority (어떻게 채울래?) Content Compresstion Resistance Priority (어떻게 줄일래?) 이거 두개만 생각하면 됨! 상단 뷰에 나온 것대로 설정을 하면 아래와 같음! ( 참고로 뒤에 Label만 건드렸음! ) Content Hugging Priority Content Compresstion Resistance P..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/df3JKN/btrQkBivnkZ/K40qg5jgs6q2ak3v3MrYQ1/img.png)
Swift UI가 ObjectiveC처럼 먼저 선언해주고 사용해서 느낌이 비슷한거 같기도 하고 아닌거 같기도 하고 아무튼 오늘은 Dictionary를 다뤄볼까 함! 바로 간단히 본론! // 방법 1 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"value", @"key", nil]; // 방법 2 NSDictionary *dictionary = @{@"key", @"value"}; 내가 실수 했던게 원래 Key Value이렇게 통일되어 있는게 아니였음 //값 저장 [dictionary setOnject: value forKey: key]; //값 가져오기 NSString *name = [dictionary objectiF..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cCnvSW/btrz5nU2ops/tKEwdrAQkYevlSHjL1dV01/img.png)
이제 날씨도 더워지고 봄은 어디갔나 ㅜㅜ 오늘은 self와 _를 비교하고자 함! 바로 알아봅시다! 'self' 는 setter & getter 속성을 통해 액세스함! '_'는 직접 액세스 함! ( 즉, setter & getter를 거치지 않음 ) 이걸 몰랐을 때는 둘 다 같은 개념인줄; 다음 예시를 봅시다 다음과 같이 헤더 파일을 설정해주고 메인 파일에서는 받은 값을 setter를 통해서 입력해줍니다! //Header file @property (nonatomic, strong) NSString *tesNaming; //Main file - (void)setTestNaming:(NSString *)testNaming { self.testNaming = testNaming; } 여기까지는 문제 없음! 근..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qVAq6/btrz0DiPDfv/IwlFTu1BU7DrMIlpzYsBP1/img.png)
요즘 날씨가 오락가락하는데 옷 입기가 애매함 아무튼 요즘은 출시 앱하나 만들까 하는데 Swift로 해야하나 SwiftUI로 해야하나 고민이긴 함 ㅜ 아무튼 이번 포스팅은 UIButton BackgroundColor에 대해서 적어볼까 함! 상황은 UIButton을 CustomButton으로 만들꺼임 참고로 Designable 써서 스토리보드에 보이게 만들거임 먼저 헤더 파일에 아래처럼 선언합니다 #import IB_DESIGNABLE @interface Button: UIButton @property (nonatomic, strong) IBInspectable UIColor *enableBackgroundColor; @property (nonatomic, strong) IBInspectable UIColo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HWICN/btrzVAFElpr/tgAzRKM5y3HT60txx9UvS0/img.png)
스토리보드와 연결하게 될 때 쓰이는 것들 @IBOutlet 과 @IBAction 1. 공통적으로 들어가는 'IB' Interface Builder 의 약자이며 스토리보드라고 생각하면 편하다 2. @IBOutlet 스토리보드를 연결할 수 있게 해주는 프로퍼티(property)! @ IBOutlet let lbl: UILabel ! 2-1. @IBAction 스토리보드에서 어떤 행위를 처리하는 메소스(method)! @IBAction func btn(_ sender: Any) { print("Jacob") } 3. Control Action type (Touch 관련) - touchDown : 컨트롤을 터치했을 때 - touchDownRepeat : 컨트롤을 연속 터치할 때 - touchDragInside ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6mrgr/btrzEAsShhx/Hl2tZxpiOKQZawT69HZVzk/img.png)
벌써 4월 중순이 흘러가고 있습니다! 6월이면 WWDC 22년 발표도 있고 시간이 너무 빠름! 이번 포스팅은 해보고 싶었던 라이브러리 배포를 해보고자 계획함! 워낙 정리가 잘된 곳이 많아 따라하기만 하면 무난하게 배포?도 가능! 근데 저는 Error가 뜸 ㅎㅎㅎ [iOS] file patterns: The 'source_files' pattern did not match any file. 자꾸 'Source_file'이 뭔지 맞는게 없다고 뜸 ㅜㅜ 그래서 검색 결과 2개로 추려짐 .podspec에서 'Source_file' 만들어지는 건 굳이 건드릴 필요없음! 지금 만든 걸 예시로 들면 'FastPWView/Classes/**/*' 이렇게가 맞고 2개 중 하나는 본인 라이브러리에서 Classes내부에 경..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LJZCZ/btrzthsUxSg/j3AC9ORkhwh9oPHkiqohzK/img.png)
올해 첫 게시글입니다! 올해에는 좀 더 성장하는 개발자가 되자! 가 목표 지금 SLProject 기간이라서 정신이 없구만요.. 대부분 오류는 Github에 명시했지만 따로 적고 싶은 글이 생겨서 포스팅하고자 함! 개발하면서 장점이자 단점은 내가 적지 않은 부분을 구현해주는 거 인거 같다 장점은 워낙 많겠지만 단점은 이번에 발견함.. 상황 바로 Date -> String String -> Date 로 변환하는 과정에서 있었다 일반적인 경우 한 가지로 변환하면 문제가 없다 근데 내가 마주한 상황은 Date -> String -> Date로 쓰고 싶은 거였다 무슨 말인가 하면 원래 Date로 주는 값을 String으로 변환한 뒤 사용했고 이 값을 저장한 뒤 다시 Date로 넘겨주려고 했다! 정확히 말하면 Da..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/drOuoy/btrzra2nkNW/oSlqLtsG3wf89KTTc4rXwK/img.png)
프로젝트+팀빌딩+앱 출시를 하다보니 블로그 업로드를 못했다 ㅜㅜ 다시 수업을 진행하면서 과제 오류가 발생하여 포스팅하고자 함 ReusableView를 상속받아서 굳이 static let identifier 를 설정안해줘도 되는 걸 만드는데 아래와 같이 오류가 떴다 '이미 선언이 되어 있는데 왜 선언해?' 이런 느낌임 그래서 선언해주는 View를 다르게 해주면 해결할 수 있음! cell마다 선언해주는 게 아니라 View에 선언해주면 해결할 수 있었다! 잘못된 정보일 경우, 댓글 언제나 환영입니다 ㅜㅜ #네이버_블로그_글_이동!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b4YJYn/btrzq7c5Jcl/QvBfojW93GUDvCqF4YTIkK/img.png)
Unable to prepare User iPhone for development 라고 떠서 읭? 당황함 Xcode가 에러가 많긴 하니까 대수롭지 않게 상세 내용을 읽어 봄 Plz check the connection to the device ~~ 이렇게 있길래 아~~ 연결 끊었다가 다시 하면 되겠구나 했는데 안되는 거 ; 아 뭐지 하다가 앱 삭제 해볼까 해서 삭제했다가 했는데도 안되길래 이때 부터 멘탈 살짝 금 ㅋㅋㅋㅋ 역시 모르면 검색을 해야됨 검색해보니까 폰 껐다가 켜니까 무슨 일이었냐며 실행 잘 됨ㅋㅋㅋㅋ 추가로 오류 하나 더 있었는데 commit하고 push 하려니까 git에 접근 권한이 없는 거임 이 날은 진짜 코딩하지 마라고 말리는 건 줄 복잡한 git 서치 좀 하다가 생각해보니까 SeSAC..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/biCAKh/btrzg42Xg0l/NX2M5QMVAn1tKwrR1gdL51/img.png)
이번 포스팅은 회사에 정해진 CI/CD가 없어서 제가 한번 도입하고자 테스트 할 겸 공부 겸 포스팅하고자 함!ㅎㅎㅎ 요즘은 코드 이슈보다 보안 이슈나 서비스 이슈가 더 많은 거 같음 일단 CI/CD가 뭐냐?하믄 자동화 프로세스라고 보면 됨! CI를 도입하려고 했는데 Github Action을 쓰고 있는 거 같아 일단 패스~ 그리고 배포까지 자동화하려고 했지만 사수 분께서 testFlight까지만 잡아달라고 해서 이번 포스팅은 TestFlight까지 올리고자 함! 사실 배포나 다른 것도 쉬우니 그럼 바로 넘어가봅시다! 1. Homebrew를 설치해줍니다! (구글링 하면 brew 설치하는 한줄 금방 뜹니다!) 2. Xcode Command line이 설치되어 있는지 확인해준 뒤 brew를 통해 fastLan..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfXXcn/btrzdgB9iJc/IjA8oyntw2gZfFHkSbAGZ0/img.png)
진짜 오랜만에 글쓰는 거 같음 요즘 새로운 걸 자꾸 배워서 정체되어 있는 않은 느낌 핵좋음 이번 에러는 Realm을 관리하는 방법은 여러가지가 있겠지만 그 중에서 fileURL을 찾아서 이동하는데 발생한 에러임! // 아래 코드를 사용해서 fileURL을 찾을 수 있음! print("located at:", localRealm.configuration.fileURL!) 1. 첫번째 가장 많이 하는 실수 ( file :/// ) - 프린트를 하게 된다면 file:/// User/Desktop/Library ~~~~/default.realm 이런 형식으로 나올 텐데 앞에 있는 ' file:///' 를 빼고 폴더이동을 해줘야 잘 이동해짐! 2. 내가 겪은 에러? 오류? Finder 에서 폴더 이동 ( cmd ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pzGf4/btrzg4tTIAo/4c5XNg5oxbIVoQwKRbuXx1/img.png)
이번 글은 문제라기보다 실수? 같은 걸 적어놓기로 한다 괜히 적어두면 기억도 잘나서 1. LinesOfNumber tableView에서 Dimension 구현하는데 Cell 에 LinesOfNumber 깜빡해서 내가 맞다고 컴퓨터랑 20분 실랑이 하다가 처음부터 코드 읽어보니까 내가 잘못했... 까먹지 말자! 2. TextView UI 과제하다가 TextView에서 수정 불가능하게 해야겠다 생각이 들어서 Attribute Inspector에서 쭉 읽어보다가 Secure!(secure text entry) 있길래 아~ 수정 못하게 막아야지 이렇게 생각했.... 디바이스에 실행시켜보니까 뭐지 했다 바본가 ㅋㅋㅋㅋ... 이거 해제 했어야지 이것도 까먹지 말자! #네이버_블로그_글_이동!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QDBLd/btry7MOZO7Z/g2PPFk80AybAibcfyZeS71/img.png)
후 어제는 또 이게 말썽이었어요 협업하면서 이런 걸 경험할 수 있어서 참 좋음 ㅎㅎㅎ 해결하고 나면 뿌듯 회사 코드는 보안이 중요하기 때문에 SSH key를 이용해서 Repo를 관리하는데 여기서 문제가 생긴듯! 그럼 바로 본론으로 넘어갑시다 Xcode 로 commit, push를 하려고 보니까 아래처럼 이런 오류가 떴습니다! Error: you're using an RSA key with SHA-1,, which is no longer allowed. Please use a newer client or a diferent key type. 이게 뭘까 해서 사이트 들어가보니까 딱히 특별한 내용은 없네요 ㅜㅜ remote -v 도 찍어봤는데 제대로 되어있었구요 검색을 하다 보니 'id_ecdsa'를 만들어줘..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zXIoU/btry1PLsnSQ/K9kibXNC4SzbKcoWglVvyK/img.png)
오늘 포스팅은 define이라는 것을 알아 볼 예정! define이 Swift에서는 typealias 인줄 알았지만? 좀 다른 개념이었음 그럼 define이 뭐죠?? 먼저 Objective C 에서도 마찬가지로 typedef이라는 키워드를 제공해주는데 사용은 다음과 같이 사용합니다! typedef [type] [name]; 예를 들어서 아래처럼 사용할 수 있음! // 선언 typedef NSString 글자; // 사용 글자 *name = @"가나다라"; 이외의 것들은 다른 포스팅에서 알아보고 #define은 매크로 상수라고 선언한 상수를 고대로 전달해주는 거라고 합니다 // 먼저 자동완성은 다음과 같이 나옵니다 #define [macro] 그럼 사용은?? 이렇게 쓸 수 있음! #define RGB(r,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HpKdU/btryTsh67U8/j6mbr6kCtEXflU59G6VLd1/img.png)
벌써 2022년 4월 중순을 달려가고 있네요 시간 너무 빠르네 ㅎㅎㅎ 오늘은 SeSac 후기에 대해서 포스팅하고자 합니다! 그럼 바로 고고 SeSac iOS 1기로 수료하게 너무 뜻깊은 시간이었습니다 먼저 교육듣기 전과 후는 어떻게 달라졌는지 봅시다! 사실 교육을 듣기 전에는 아무것도 모른다면 모르는 상태였고 내가 알고 있는 것들이 전부라고 생각했었어요 그렇기 때문에 내가 공부하는 속도대로 공부하면 취업이 되지 않을까? 착각?도 했지만 교육을 들으면서 이런 싹~ 이런 생각을 버리게 되었어요 교육을 듣고 난 뒤에는 현업에 바로 뛰어들 수 있는 주니어가 되었습니다!! 와ㅏㅏㅏ!!!!!!!!!!!!!! 단기간에 이게 되네?라고 생각했어요 진짜 눈물 날 것만 같았어요 그러고 수료와 거의 동시에 취업해서 일을 다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bEcHjw/btryJv1aFHW/nXhid3IK0KKcYNLb6UhUF0/img.png)
Xcode 사용하다보면 스토리보드에서 Assistant 가 안보여지거나 이상하게 보여질 때가 있다 그럴 때는 가장 좋은 게 껐다가 다시 켰을 때 원래대로 나온다 끄는 게 귀찮을 때는 Assistant를 열고 option키를 눌러서 열면 잘 나오기도 한다 방금 오류 났을 때 캡처를 했어야 했는데 ㅜㅜ 정신없이 수업따라가다 나만 하나 안되면 찐 당황;; 그때부터 멘붕 상황 스토리보드를 그룹으로 묶었는데 이런 상황이 발생했다... 똑바로 열었고, 껐다가 켜봤고 Assistant를 option키로 열어봤는데도 안됐다 화면을 분할하여 아웃렛을 연결 시키려고 했으나 빨간색 글씨 뜨면서 실패... 해결 일단 여기 동그라미에서 ViewController를 해주면 된다ㅋㅋㅋ... 그리고 identifier 나 story..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4N0lY/btryJCrQtMr/DLp1Sb9pfrgEb63oVqh2kK/img.png)
드디어 목요일이네요 ㅎㅎㅎ 오늘 내일만 버티면 또 주말입니다 이번 포스팅은 Objective - C 반복문에 대해서 알아보도록 하겠습니다 먼저 for 문에 대해서 알아보면 다음과 같습니다! for (int i = 0; i < 10; i++) { i = i + 10; } for (순환 parameter; 조건; 카운트) { // 구현할 내용 작성 } 참고로 Enum에 대해서도 돌 수 있습니다 for (adorable in dog) { NSLog(@"우리 강아지 이름은 %@입니다.",[adorable name]) } // 틀린 부분이 있으면 언제든지 피드백 환영입니다! 다음은 조건에 따른 반복문입니당 조건을 만족할 때 루프에서 빠져나옴! int count = 1; while (true) { // 탈출 조건 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpKbHr/btryzZAvyv1/iTMUOSX7s7xwQDB5QGQwi1/img.png)
이번 포스팅은 라이브러리를 만들면서 생긴 에러에 대해서 다루고자 함 라이브러리를 좀 더 예쁘게 만들고 싶다는 생각도 있었지만 그건 나중에 업데이트 하는 걸로! 곧 만든 라이브러리 소개 글이랑 Git Readme 업데이트도 할 예정 ㅎㅎ 에러 디버깅 화면을 캡처했는데 그게 어디간 지 없어짐 ㅜ 아무튼 생각나는 내용은 에러: ASSERTION FAILURE ~~ 무슨 thread 내용이 뜸.. 해결 Case 1. Delete Derived Data Xcode -> performance -> Locations -> Derived Data 폴더 -> Derived Data 삭제 해결 Case 2. Update Pods pods 업데이트를 해주기 (근데 내가 만든 라이브러리라서 그닥..?) 해결 Case 3. D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZjyCP/btryzo8oMNF/0lDx3b7K5eWvkNAwHYJW4k/img.png)
블로그를 두개를 운영할까 하다가 그냥 네이버 블로그 글을 모두 여기로 가져올까 합니다! 개발 관련 글 70개 언제 다 가져오지... 아니면 그냥 해결했던 거나 배운 내용만 가져올까 고민중에 있습니다! https://blog.naver.com/kwanghochoi2 Keep it up : 네이버 블로그 여행과 요리를 좋아하는 개발자 Lautner Jacob입니다 blog.naver.com 일단 Tistory를 위주로 활동할 예정!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVY8qK/btrywXjxjAu/KvSfRFSaGkyd9nU36KR681/img.png)
이번 포스팅은 AddTarget에 대해서 작성해보자고 함 오늘은 바로 본론으로 넘어가서 Swift에서는 AddTarget하면 어떻게 썼나면 let button = UIButton() button.addTarget(self, action: #selector(testMethod("내 이름")), for: .touchUpInside) @objc func testMethod(_ name: String) { print("\(name) 출력됨") } 진짜 편함! Objective C는 어렵냐? 아님! Objective C 에서는 다른게 그닥 없음 self.button = [UIButton buttonWithType:UIButtonTypeSystem]; [self.button addTarget:self action:..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/93HXM/btrywXqlXj2/oE8w4qk2lcqdbGaOpCyEv0/img.png)
요즘은 Swift로는 라이브러리 만드는 중 ㅎㅎ.. 라이브러리 만드는 것도 이래저래 안되는 것도 있어서 개발 경험치 오르는 중 ! 아무튼 이번 포스팅은 간단히 Block에 대해서 설명해볼까 함 Swift 에서는 Closure가 여기에 해당하는 듯! Objective C block 너무 복잡복잡 기본 형태는 앞에 반환타입 중간에는 파라메터 ^(캐럿)을 사용하면 된다 처음 코드 봤을 때는 이게 뭔가 했음 솔직히 이게 맞는가 싶기도 함 Block를 작성할 때 ^(캐럿)을 적는데 블록을 표시하는 심볼 같은 거라고 함 이거 찾는다고 조금 헤맸음 Void (^blockName)(void) = ^{ // 내용 작성 } 사용은 아래처럼도 쓰는 거 같았음 - (void) testNaming:(NSString)naming..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/plkXy/btryClCSpZY/iroaL35rKvgMAZo7fjvok1/img.png)
후아ㅏㅏ ObjC 에 대해서 적을 내용이 참 많네.. 이번 포스팅은 특별한 건 아니고 내가 생각하고 있던 거랑 다른 분의 의견을 종합해서 적어보고자 한다! 오래된 회사에서 코드를 뜯어보면 레거시 코드가 많이 있다 그런 코드를 보면 이건 왜 그렇게 쓰는지 이해가 안되는 것들이 많이 있을 거임 안 그렇다고? 하면 회사가 크거나 스타트업이거나 리펙토링 했겠죠?ㅋㅋㅋㅋㅋ라고 믿고 싶어요 ㅜ 이거 누가 작성했어!! - 코드를 보니 View 구성이 특정View를 전부 상속받아서 작성되어 있었음 내 생각: 상속을 하는 건 OK, 근데 쓰지도 않을 객체를 만들어 놓고 모든 ViewController에 상속 시켜놓으면 앱이 무거워지지 않을까 함 그래서 뜯어 고치고 싶은데용? 다른 분 생각: 대부분 1인 개발자가 많아서 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wMjSK/btryxrkYzE2/ww2HZDt3k1FB8mrPoYca91/img.png)
Swift만 1년 6개월을 봤기 때문에 다른 언어에 대한 궁금증 반? 살짝 부담감 반? 이 있었는데 옵씨를 하게되다니 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ Objective - C를 공부하면 좋은 점이 레거시 코드를 볼 수 있다! (보면서 이건 왜 이렇게 짰을까...라는 생각은 덤) Objective - C에 익숙해지면 조금씩 Swift로 다 바꿔버려야겠다 ㅎㅎㅎ Swift Library에는 SwiftLint가 있어서 규칙을 정할 수 있을 때 좋았음 근데 Objective - C에 규칙을 정해놓은 게 아니라서 뒤죽바죽임ㅎㅎ... 본론으로 넘어가서 초기화를 보면 아래처럼 길~~게 적은게 보기가 싫어서 어떻게 못하나 했는데 - (void)ViewDidLoad { [super viewDidLoad]; NSArray *group..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQK5mb/btryxItfn0p/FuoHrKA7CT35C0ot3n62h1/img.png)
오늘은 함수 작성 방법에 대해서 포스팅 해볼텐데 Swift가 참 간단하다고 생각이 듦.. 아무튼 본론으로 넘어가서 func testName(firstName fn: String, LastName ln: String) { print("내 이름은 \(fn)\(ln) 입니다") } Objective - C 의 경우 - (Void)testNameWithFrom:(NSString *)fn LastName:(NSString *)ln { return NSLog(@"제 이름은 %@%@ 입니다.",fn, ln); } // 사용할 때 - (Void)viewDidLoad { [self testNameWithFrom:@"홍" LastName:@"길동"]; } // 제 이름은 홍길동 입니다 - (반환값)프로퍼티 이름1:(프로퍼..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c6LRbg/btrxNYXpdPK/RUJ370ufjiu5dCTmNR3y1k/img.png)
Objective-c 특징 - Swift가 대세이긴 하지만 Objective-c 레거시 코드가 많으니까 한번 정리하면서 공부해보고자 한다! Objective - c 코드를 Swift로 다 바꿀 수 있을 때까지 화이팅 1. .h(헤더) .m(본문) 파일로 분할되어 있음 2. nil 값을 선언할 수 있어서 컴파일 에러가 뜨지 않는다 3. guard let 구문이 없어서 if로 nil값을 분기 처리해줘야 한다 4. 메시지 구문형 언어 (Swift 보다 상세하게 작성해야 함) 5. Swift와 다르게 마이그레이션이 필요없음 6. ';'을 마지막에 붙여줘야 함, 블록코딩 [, ]을 사용해야함 7. Property 선언 시 초기에 명확하게 선언해야 함 8. ARC를 스스로 관리해야 함 9. build 속도는 늦으나..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Bl0Oq/btryxrkYN9G/6ASKBNhDEV2XfrsSv8SpZ0/img.png)
이번에 풀 에러는 Git! Git이 알듯 말듯 해서 많이 어려운 듯 하다 그래서 길지도 않고 짧게 본론으로 바로 넘어가면! 살면서 올리기 싫은 파일을 커밋쳐버린 경우가 있을 거임 그래서 찾다가 캐쉬를 삭제해주면 된다?고 해서 했더니 안됨ㅋㅋㅋ 내가 잘못했을 수도 있지만 ㅋㅋ... git rm -r --cahched . git add git commit -m "Message" 왜 안되는거지 검색해본 바로 아래처럼 나왔는데 ㅜ // local과 원격 저장소 모두 삭제 git rm "지울 파일" // local은 남겨두지만 원격 저장소는 삭제 git rm --cached "지울 파일" 그러다가 누군가 알려주셨음!! 엄청 길긴 한데 이미 커밋해버린 상황에서 되게만 해주세요ㅠㅠ 하는 심정이었음 git filter..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lPCoq/btrvnftBsPT/KHdYAU1Q6ra2LQwceHDKuk/img.png)
오늘 다뤄볼 내용은 UIView에 대한 내용임 예전에 어떤 이슈가 있었냐면 Storyboard로 작업을 할 경우에 View 순서를 마음대로 바꿀 수 있었는데 Code UI를 작성할 경우, View 순서를 어떻게 바꿔줄까 생각이 들었음 뭐 추가하는 순서대로 나오기야 하겠지만 코드 살펴보기 힘들고 그럴 때 유용할 듯! 본론으로 넘어가면! class ViewController: UIViewController { let testView = UIView() let testView2 = UIView() let testView3 = UIView() override func viewDidLoad() { super.viewDidLoad() viewConstraints() testView.backgroundColor = ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DyCNk/btruol2tqOI/6SCkJ3iYpvvybm1Pikoh80/img.png)
요즘 코로나가 심해져서 어딜가기가 너무 무서운 것 같음 빨리 코로나가 해결됐으면 좋겠음 ㅜㅜ 오늘 다룰 에러는! "The default FirebaseApp instance must be configured before the default Authinstance can be initialized. One way to ensure this is to call 'FirebaseApp.configure()' in the App Delegate's' application(_:didFinishLaunching withOptions:)'(or the '@main' struct's initializer in SwiftUI)." 이번 오류가 길다 길어; 나는 인스턴스 초기화해줬는데 왜 오류가 떴지 했는데 읽어보니 A..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dY9LCQ/btrtYcX0q1c/wPKzhkYYsBzNIid4qorTk0/img.png)
이 포스팅이 발행될 때면 아마 또 하나의 프로젝트도 끝이 날 거 같다! 요번에 다룰 내용은 다른 블로그에 글이 그렇게 많이 있지 않아서 내가 써보려고 하는데 조금 틀리거나 부족한 부분도 있을 수 있으니 주의!!! 가장 먼저 Firebase FCM 문서에 보면 기본 세팅이 있으니 거기까지는 쉽게 할 수 있을 듯! 그 다음으로 문제가 위에 베너를 클릭했을 때 어떻게 해줄거냐하면 AppDelegate / SceneDelegate에서 처리해주면 됨! ( SceneDelegate가 왜 나온진 다음으로 미루고 ) 다음 함수에서 어떤 순서로 들어오는 지 먼저 확인해보자구요 func application(_ application: UIApplication, didRegisterForRemoteNotificationsW..