
iOS 기준으로 설명을 진행합니다. Step 1. GitLab Runner 설치 sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 sudo chmod +x /usr/local/bin/gitlab-runner Step 2. Runners로 이동 Settings -> CI / CD -> Runners 선택 Step 3. GitLab Runner register a) 터미널에서 해당 커맨드라인을 입력하자. gitlab-runner register b) 아래와 같이 URL을 입력하라는데 아까 위에서 얻은 URL을 ..

iOS 개발을 하다보면 자식객체에서 부모객체에게 메시지를 보내야 할때가 생긴다. 그럴땐 보통 delegate 패턴을 사용한다. class MySampleDelegateParentsClass: MySampleDelegateChildClassDelegate { var child: MySampleDelegateChildClass init() { self.child = MySampleDelegateChildClass() self.child.delegate = self } func sendMessage(foo: String) { print("recived: \(foo)") } } protocol MySampleDelegateChildClassDelegate: AnyObject { func sendMessage(f..

소유권 수식어 Objective-C 다음과 같은 수식어를 사용 할 수 있다. __strong - 강한참조, 해당 수식어를 가진 포인터로 객체를 참조하게되면 retain count가 1증가한다. __weak - 약한참조, 해당 수식어를 가진 포인터로 객체를 참조하여도 retain count가 증가하지않는다. __unsafe_unretained - 약한참조, 해당 수식으를 가진 포인터로 객체를 참조하여도 retain count가 증가하지않는다. __autoreleasing - 오토릴리즈를 할 객체의 수식어로 붙혀준다. 예제 __strong id __strong obj1 = [[NSObject alloc] init]; id __strong obj2 = obj1; NSLog(@"log1:%@",obj1); NS..
iOS 4.3미만 또는 macOS 10.6(Snow Leopard) 이하의 버전에서는 ARC를 사용 할 수 없기때문에 해당 버전을 지원해야하는 프로그램 또는 어떤 사정에 의해서 ARC를 사용하지 않는 프로그램에서는 메뉴얼로 메모리 관리를 해주어야한다.(Menual Retain Count) 이 정리는 어디까지나 프레임워크에서 객체의 라이프사이클의 동작을 보기위함이므로 MRC에 대해서 자세하게 기입해놓지는 않음.1. Cocoa Framework에서의 기본적인 메모리 관리 룰a) 생성하는 모든 객체에 대해 소유권을 갖는다.b) "reatin"을 이용하여 객체의 소유권을 획득 할 수 있다.c) 더 이상 필요하지 않으면 소유하고 있는 객체의 소유권을 내주어야 한다.d) 소유하고 있지 않은 객체의 소유권은 내주어선..

위의 그림과 같이 프로토콜을 두개 만들어준다. MyProtocol이라는 protocol은 myVar라는 변수를 property로 가지고 있어야하며 myVar는 MyVarClassProtocol이라는 프로토콜을 채택한다. MyVarClassProtocol이라는 프로토콜은 name이라는 String타입 property가 있어야한다 이제 MyVarClass라는 MyVarClassProtocol을 채택하는 class를 만들어주고 MyClass라는 MyProtocol을 채택하는 class를 만들어주자. MyVarClass에는 name을 출력해주는 printName이라는 함수가 존재한다. MyClass를 마저 작성하려했더니.. ...안된다.. 에러메시지를 보니 MyClass가 MyProtocol을 준수하지 않았다고..

테스트 절차 1.) Objective-C로 만들어진 외부라이브러리를 전혀 쓰지 않는 Framework를 만들어준다. 나는 PureObjcFramework라는 프레임워크로 만들어주고 PureObjcClass라는 클래스를 생성 후 PureObjcTestFunc라는 테스용 함수를 작성해 주었다. 해당 함수를 실행시켜주면 NSLog(@"called pureObjcTestFunc"); 라는 함수가 실행되게 만들어 놓았다. github.com/HanweeeeLee/Framework_in_Framework_Sample/tree/main/PureFramework/PureObjcFramework HanweeeeLee/Framework_in_Framework_Sample Framework 안에 Framework를 넣어보자..

Swift에서 각종 기본컨트롤러를 이용하다보면 Delegate를 확장하고싶을때가 있다. 예를들면.. UITableView의 Delegate는 UITableViewDelegate라는 Protocol이고, UITableView는 UIScrollView를 상속받는다. UITableViewDelegate는 UIScrollViewDelegate라는 프로토콜을 따르며, 거기에 자신만의 요구하는 함수 프로토콜을 가지고있다. 그렇다면 저 UITableView처럼 UITableView를 상속받는 뷰컨트롤러를 만들고 UITableViewDelegate를 따르는 프로토콜을 만든 후 delegate를 그 프로토콜로 바꿔주면 되는거 아닌가?!?! import Foundation import UIKit protocol MyTab..

Widget Extension을 만들다보면 만나게되는 getTimeline 이라는 함수이다. 위젯을 갱신해주는 주기를 관리해주는 함수이며, entry에 들어있는 entryDate의 지정된 시간에 해당 엔트리로 값이 바뀌며, 모든 엔트리가 다 사용되면 다시 getTimeline함수를 호출한다 (timeline의 policy가 .atEnd일 경우) 즉 함수이름대로 타임라인을 다시 얻음 그렇다면 나는 위의 코드에서는 0초,1초,2초,3초,4초 마다 엔트리가 갱신되고 그 후에는 getTimeline 함수가 호출될것이라 예상했다. 하지만 정상작동을 하지 않음.. 어떻게 작동하냐면.. 1초마다 entry의 갱신은 정상적으로 이루어진다. 하지만 getTimeline함수는 바로 호출되지 않는다. 그리고 1분이 지나니까..
- Total
- Today
- Yesterday
- Objective-C
- Gitlab Runner
- isSecureTextEntry
- Tuist
- Fastlane
- arc
- ios
- cd
- iOS Mnemonic
- cicd
- Delegate
- firebase distribution
- 니모닉
- Secure Enclave
- widget extension
- modulemap
- flatMap
- XCode Cloud
- CI
- Protocol
- swift
- module map
- iOS wallet
- 순환참조
- RxSwift
- SwiftUI
- XCodeGen
- associated type
- Swift 니모닉
- iOS 니모닉
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |